利用阿里云和frp实现无域名内网穿透

 

在学校做了一个deep learning项目通过web提供服务,验收阶段需要给甲方测试,但是学校是内网甲方无法访问,于是搜索内网穿透,解决方案非常多,身边同学推荐花生壳,经实测花生壳体验版速度慢,流量受限(每月1G)且不够稳定,正式版只能按年购买费用较贵,考虑到甲方测试至多只需一个月,花生壳正式版成本太高,本着给导师省钱的原则,选择了外网ip+frp的方案。

利用阿里云和frp实现无域名内网穿透_第1张图片

frp全称fast reverse proxy,是一个开源反向代理,只需一个公网ip即可实现内网穿透。网上方案多采用阿里云提供公网ip(稳定还不耗自己电啊),搜了一下阿里云学生购买一个月只需9.5,不够可以接着续。按照多数技术博客还需购买一个域名,查了一下域名也不贵,阿里云提供的最便宜每年8,但是大学学的网络原理告诉我只通过ip理论上也能访问网站,于是搜索无域名frp内网穿透,果不其然,又给导师省了一根鸡腿

利用阿里云和frp实现无域名内网穿透_第2张图片

判断方案可行后便开始行动,阿里云的学生优惠配置较低,用来做内网穿透也绰绰有余了。系统版本选择的Ubuntu系统,其实CentOS和windows也都可以。有轻量应用服务器和云服务器ECS两种可供选择,配置大同小异,没仔细比较,直接选择了轻量应用服务器。

有了公网ip之后就需要在阿里云和内网主机上分别下载frp并进行配置了,frp通过github下载系统对应版本,目前最新的版本是v0.28.1,我的两台电脑都是Ubuntu,都用的 frp_0.28.1_linux_amd64.tar.gz ,下载后解压

wget https://github.com/fatedier/frp/releases/download/v0.28.1/frp_0.28.1_linux_amd64.tar.gz
tar -xzvf frp_0.28.1_linux_amd64.tar.gz

解压出下列文件:

其中 c 表示客户端文件,s 表示服务端文件

服务端(阿里云)配置

删掉无关客户端文件:

rm -f frpc
rm -f frpc.ini
rm -f frpc_full.ini

vim修改frps.ini(配置比较简单直接修改frps.ini即可,无需修改frps_full.ini)

[common]
bind_port = 7000
vhost_http_port = 80

说明:

bind_port :frp客户端和服务端连接的端口,默认即可,也可自己设置

vhost_http_port :反向代理http主机端口,80为默认,直接通过ip即可访问,若使用其他,例如8080,则需通过 xx.xx.xx.xx:8080访问(阿里云ip)

若使用https:vhost_https_port = 10443

其他配置可以通过frp的文档查看

保存后,启动运行(进入frp路径执行)

前端开启,关闭ssh连接就会失效
./frps -c ./frps.ini

后台开启,关闭ssh连接仍然运行
nohup ./frps -c ./frps.ini &

 若通过前者开启,显示下列信息即开启成功:

 [service.go:146] frps tcp listen on 0.0.0.0:7000
 [service.go:188] http service listen on 0.0.0.0:80
 [root.go:204] Start frps success

若通过后者开启,信息会自动保存到frp路径下的 nohup.out 文件中,内容与上面一致

开启之后,还需在阿里云后台防火墙设置中开启相应端口

否则,客户端在连接时会出错

[W] [control.go:113] login to server failed: dial tcp xxx.xxx.xxx.xxx:7000: connect: connection timed out dial tcp xxx.xxx.xxx.xxx:7000: connect: connection timed out

轻量应用服务器设置如下:

利用阿里云和frp实现无域名内网穿透_第3张图片

添加使用到的新端口

利用阿里云和frp实现无域名内网穿透_第4张图片

云服务器ECS需添加安全组规则,详细可参考:

https://blog.csdn.net/a568713197/article/details/87897342

客户端(内网主机)配置

删除无关服务端文件

rm -f frps
rm -f frps.ini
rm -f frps_full.ini

vim修改frpc.ini

[common]
server_addr = 阿里云ip
server_port = 7000

[web]
type = http
local_ip = 127.0.0.1
local_port = 80
custom_domains = 阿里云ip

说明:

server_port 应与服务端配置中的 bind_port 一致

[web]为模块名可自定义

local_port 应与内网主机web监听端口一致

custom_domains填映射到阿里云ip的域名,没有域名直接填阿里云ip即可

类似方式启动客户端后显示:

[service.go:224] login to server success, get run id [xxxx], server udp port [0]
[proxy_manager.go:137] [xxxx] proxy added: [web]
[control.go:144] [web] start proxy success

 服务端也会有连接成功提示

[service.go:356] client login info: ip [内网主机ip:端口号] version [0.28.1] hostname [] os [linux] arch [amd64]
[http.go:92] [xxxx] [web] http proxy listen for host [阿里云ip] location [] group []
[control.go:398] [xxxx] new proxy [web] success
[proxy.go:84] [xxxx] [web] get a new work connection: [内网主机ip:端口号]

之后便可直接在浏览器中通过阿里云ip访问内网web服务

你可能感兴趣的:(利用阿里云和frp实现无域名内网穿透)