简介
- 内网穿透,即NAT穿透,让外网用户可通过公网ip访问到内网服务。有时想要让其他人通过域名访问或者测试我们在本地搭建的 web 服务,但是由于本地机器没有公网 IP,无法将域名解析到本地的机器,通过内网穿透就可以实现这一功能
- 常见的内网穿透工具如ngrok(国外)、花生壳(需要支付8元)、NATAPP(和ngrok类似,2-3天会更新二级域名)
- 仅需下载其客户端即可
- 自建内网穿透frp
- 缺点:仍然需要一台公网IP的服务器,如阿里云服务器
ngrok
- 官网
- 说明: 免费支持一个HTTPS固定随机域名(可以注册多个账号解决), 其他均为HTTPS动态随机域名
- 使用
- 安装ngrok客户端
- 修改配置文件
/Users/xxx/Library/Application Support/ngrok/ngrok.yml
1 | # 启动全部`ngrok start --all` 或启动某个服务 `ngrok start api` |
- 启动ngrok
- `ngrok http 80` 直接启动随机URL域名映射到本地80端口
- `ngrok start --all`基于配置文件启动
- `ngrok --config /Users/xxx/ngrok2.yml start --all` 使用多个账号指定配置文件启动多个服务
- 配合mac脚本编辑器一次启动多个Tab命令窗口(start.sh)
1 |
|
花生壳
- 说明
- windows安装或下文linux安装花生壳,都是把设备(对应一个SN码)报告给花生壳官方
- linux安装成功后可在后台-花生壳-设备列表中添加设备,输入SN码即可(需求提前启动客户端),然后给设备绑定登录账户(一个设备只能对应一个登录账户)
- 由于一个设备只能对应一个登录账户,因此可以创建子账号来进行上述绑定(即达到一个子账号对应一台设备)
- 绑定后需要重启客户端
phddns restart
- 但是,新创建的子账号如果做HTTP内网穿透,则必须重新支付6元认证费
- 绑定后需要重启客户端
- 购买的顶级壳域名可将其子域名共享给某一个子账号,从而达到一个子域名或多个子域名对应一台设备
- 限制
- 免费账号仅支持2个域名解析,且只支持HTTP固定端口
- HTTPS必须购买99/年的证书费
1 | # 安装花生壳(对应后台管理的设备),安装成功后会显示其SN: oray9bb205bbcxx,默认密码为admin |
frp实现内网穿透
frp介绍
frp使用
- 本文配合nginx使用(本文公网服务器不是主要用于内网穿透,且解析了多个域名,所以有些端口,如80被占用)
- 本文以微信公众号H5开发为例(微信H5开发需要绑定回调地址,此回调地址必须是备案的域名,因此本地开发比较麻烦故使用内网穿透解决)
- 下载最新frp版本,本文使用
v0.13.0
- 需要下载公网IP服务器(以下简称”服务器”)适用版(如
frp_0.13.0_linux_amd64.tar.gz
)和本地适用版(如frp_0.13.0_windows_amd64.zip
)
- 需要下载公网IP服务器(以下简称”服务器”)适用版(如
服务端
- 解压后含有
frps.ini
(配置文件)、frps
(可执行文件) 对
frps.ini
进行配置1
2
3
4
5
6
7
8
9
10
11[common]
bind_port = 7000
# 使用泛域名*.frp.aezo.cn(需要将*.frp解析到此服务器)(不使用泛域名可忽略)
subdomain_host = frp.aezo.cn
# 访问本地服务需要映射公网ip的端口(所有的都走此端口)
vhost_http_port = 7070
# dashboard(后台可视化管理)访问地址和用户名密码
dashboard_port = 7500
dashboard_user = smalle
dashboard_pwd = smalle后台运行frp服务端:
nohup sudo -b ./frps > my.log 2>&1 &
- 服务器将开放相应端口:7000、7070、7050(入);7000(出)
服务器nginx配置如下
1
2
3
4
5
6
7
8
9
10
11
12
13
14server {
listen 80;
server_name test.aezo.cn;
location / {
proxy_set_header X-Forward-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_redirect off;
if (!-f $request_filename) {
proxy_pass http://test.aezo.cn:7070;
break;
}
}
}需要将域名
test.aezo.cn
解析到此服务器(101.1.1.1)
- 解压后含有
客户端
- 解压后含有
frpc.ini
(配置文件)、frpc
(可执行文件) 对
frpc.ini
进行配置1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17[common]
# 服务器公网ip
server_addr = 101.1.1.1
server_port = 7000
[web]
type = http
# 访问本地服务的端口
local_port = 80
custom_domains = test.aezo.cn
# 不使用泛域名可忽略
[web01]
type = http
local_port = 80
# 使用泛域名进行解析(映射到http://test.frp.aezo.cn)
subdomain = testcmd运行
frpc -c ./frpc.ini
(可写成start.bat文件方便快速运行)- 客户端也可配合使用nginx
- 解压后含有
- 请求流程
- 访问:http://test.aezo.cn,被nginx监听
- 服务端nginx转向:http://test.aezo.cn:7070,被frp监听
- frp通过7000端口和frp客户端进行通信:http://127.0.0.1:80
- 微信h5开发:将
test.aezo.cn
绑定到对应的回调地址上即可
其他
- https://www.cnblogs.com/liyangit-bky/articles/13993007.html
- 飞鸽
- WeNAT
- 无需付费 无需注册 不限流量 开箱即用
- 官网:https://www.wezoz.com (目前暂时关闭,但不影响内网穿透。)
- 客户端下载:wenat-client.jar