内网穿透工具ngrok和inlets,轻松将本地服务暴露到公网

介绍一下内网穿透工具ngrok 和 inlets,将本地服务暴露到公网

介绍

通过使用内网穿透,将内部、或是开发中的服务通过「出口节点」暴露到公网,方便本地WEB外网访问、本地开发微信、TCP端口转发等。

本地启动web服务

先在本地启动一个web服务,我用Flask在本地5000端口启动了一个web服务,本地访问如下,Flask启动web服务可参考Flask使用教程

下面分别介绍一下如何使用ngrok和inlets在公网暴露本地web服务

ngrok

ngrok国外服务

Sunny-Ngrok国内服务

使用国外的ngrok服务

1、下载ngrok安装包

解压

1
unzip /path/to/ngrok.zip

2、在国外的ngrok官网注册账户

ngrok启动时设置账户的token,运行命令如下

1
./ngrok authtoken token

token为ngrok官网账户的token,在个人页面获取,如下

3、开启本地端口转发

1
./ngrok http 5000

转发本地5000端口,运行成功如下图所示

访问https://626888298b58.ngrok.io ,即可访问到本地服务,访问如下

ngrok提供了http和https两种访问方式,不过每次重启,ngrok提供的域名前缀都会变的,想固定域名前缀的话就要收费了。

浏览器访问 http://127.0.0.1:4040/ ,可进入管理页面,查看本地服务访问情况。

ngrok我记得之前官网还提供了服务端配置教程,现在官网好像没了这个教程,而且客户端升级后也不支持了,可能官方不想让我们自己搭建ngrok服务了。

更多教程参考官网

使用国内的ngrok服务

1、首先在Sunny-Ngrok注册账户

登录,进入管理界面,开通隧道,不想付费的话有免费的服务器可用

2、开通隧道后获取隧道id

获取隧道id,本地映射的是5000端口,可获得一个免费域名进行访问,该域名是固定的,不像国外的ngrok服务,每次启动都会变。

3、下载Ngrok客户端

运行ngrok服务

下载地址,使用下面的命令启动ngrok,使用上一步获取隧道id

1
./sunny clientid 隧道id

启动成功如下图所示

访问 http://dxysun.free.idcfengye.com/ ,即可访问到本地服务,访问如下

Sunny-Ngrok 不提供https的访问,想要https的访问就要付费了,免费的服务器访问速度比较慢,想要提高访问速度也需要付费。

浏览器访问 http://127.0.0.1:4040/ ,可进入管理页面,查看本地服务访问情况。

更多教程参考官网

inlets

inlets 利用反向代理和 Websocket 隧道,将内部、或是开发中的服务通过「出口节点」暴露到公网。出口节点可以是几块钱一个月的 VPS,也可以是任何带有公网 IPv4 的电脑。

github地址

inlets服务是需要自己搭建的,不想自己搭建使用官方服务是要付费的。

安装使用

1、安装inlets

服务端自动安装

首先要有一台服务器,最好可以域名访问。

服务端自动安装

可使用 curl 和辅助脚本:

1
2
3
4
5
# 安装到当前目录
curl -sLS https://get.inlets.dev | sh

# 安装到 /usr/local/bin/
curl -sLS https://get.inlets.dev | sudo sh

使用以上命令安装时可能会报如下错误

1
2
[root@dxy conf.d]# curl -sLS https://get.inlets.dev | sudo sh
curl: (7) Failed connect to raw.githubusercontent.com:443; 拒绝连接

由于某些你懂的原因,导致GitHub的raw.githubusercontent.com域名解析被污染了。

查询真实IP
https://www.ipaddress.com/ 查询raw.githubusercontent.com的真实IP。

通过修改/etc/hosts解决此问题

1
199.232.28.133 raw.githubusercontent.com

修改完成后再执行一次自动安装命令

使用以上办法如果安装还有问题的,则可以自己手动安装

服务端手动安装

使用如下命令下载inlets

1
curl -sSLf https://github.com.cnpmjs.org/inlets/inlets/releases/download/2.7.12/inlets  --output ./inlets

https://github.com.cnpmjs.org ,是github的加速地址,国内访问速度还是可以的,比raw.githubusercontent.com要快

然后加执行权限,移到bin目录下,方便其他用户直接使用

1
2
chmod +x inlets 
mv inlets /usr/local/bin

以上均在root用户下执行,如不是root用户,需要用sudo命令执行

客户端安装

如果是Mac,则可以使用 brew

1
brew install inlets

其他客户端可直接下载安装,下载地址

2、运行inlets

首先在服务端运行inlets,运行端口为8090

1
inlets server --port=8090 --token=dxysun

token可以自定义,客户端运行需要设置这个token

上面的命令只能在前台运行,若想在后台运行,可使用如下命令

nohup inlets server --port=8090 --token=dxysun > nohup.log 2>&1 &

运行结果

然后在客户端运行

1
inlets client  --remote=vps.dxysun.com:8090  --upstream=http://127.0.0.1:5000  --token=dxysun

remote 参数是远程服务器的地址,我的服务器的域名是 vps.dxysun.com

upstream 参数是本地服务的地址

token是服务端设置的token

上面的命令只能在前台运行,若想在后台运行,可使用如下命令

nohup inlets client --remote=vps.dxysun.com:8090 --upstream=http://127.0.0.1:5000 --token=dxysun > nohup.log 2>&1 &

运行结果

3、访问服务

服务访问地址为 http://vps.dxysun.com:8090/ ,访问情况如下

https访问设置

由于inlets并不直接提供https服务,inlets pro 提供https服务,不过需要付费。

但是如果自己拥有域名和服务器,想要使用https,可配合nginx配置https访问。

配置教程如下

首先要对要使用的域名申请ssl证书,阿里云、腾讯云、网易云都可申请免费的ssl证书,我这边之前配置过https的域名是love.dxysun.com ,就拿这个域名来示例一下。

https的nginx配置可自行百度,下面只介绍inlets相关的nginx配置。

先启动服务端的inlets服务,这里服务端运行端口为 8090

1
inlets server --port=8090 --token=dxysun

然后配置nginx

服务端nginx的配置文件如下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#http访问配置
location / {
proxy_pass http://127.0.0.1:8090;
}

# ws通道访问配置
location /tunnel {
proxy_pass http://127.0.0.1:8090;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_read_timeout 86400;
proxy_set_header X-real-ip $remote_addr;
proxy_set_header X-Forwarded-For $remote_addr;
}

nginx配置完成后使用nginx -s reload 重新加载配置

客户端启动

1
inlets client  --remote=love.dxysun.com  --upstream=http://127.0.0.1:5000  --token=dxysun

配置成功,运行结果如下

访问情况

至此,inlets的https配置访问成功。

总结

对这三种内网穿透工具做下对比

工具 配置 https 访问速度 管理页面 固定域名
ngrok 简单 支持 国外的,慢,提速需付费 支持 不支持,固定域名需付费
Sunny-Ngrok 简单 支持,需付费 国内的,速度一般,提速需付费 支持 支持,免费的
inlets 稍微复杂点 支持,需自行配置,也可使用官方的,需付费 自己的服务器,视服务器带宽而定 不支持 支持,使用自己的域名,也可使用官方的,需付费

总的来说,三个工具各有优缺点,若只是简单使用下,推荐使用Sunny-Ngrok,配置简单,还有免费自定义域名;如果有自己的服务器和域名,并且不嫌配置麻烦的话(其实也不麻烦),推荐使用inlets,灵活度高;至于ngrok,由于是国外的服务,速度你懂的,而且不支持固定域名,就不推荐了。

参考

inlets

inlets.dev

ngrok国外服务

Sunny-Ngrok国内服务

打赏

请我喝杯咖啡吧~

支付宝
微信