使用ngrok架设你在NAT背后的服务器
如今,越来越多的家庭宽带取消了公网IPv4地址的分配,给许多人在外面连接自家网络服务带来了诸多不便,比如连接自己家电脑的RDP远程桌面或者获取自家NAS上的文件,为此,一个简单的解决方法就是使用ngrok作为外网端口映射。
本教程使用Debian 9为例。
首先,我们先去https://ngrok.com/注册一个账号。
之后便进入了ngrok的Dashboard页面,我们先点击Download把ngrok下载到自己的服务器(路由器/树莓派/….)上。
在这个下载页面上,我们用本机的浏览器访问,然后在相应的链接上获取链接地址。
对于树莓派/路由器等设备,选择Linux ARM,对于自己用PC组建的NAS等设备选择Linux 64-Bit。
然后我们ssh到自己的设备上,用wget命令下载相应版本的ngrok,并解压,安装到相应的目录,推荐/usr/bin
(解压的时候需要unzip软件包,如果没有请使用apt install unzip来安装)
这里使用的shell命令包括:
wget https://bin.equinox.io/c/4VmDzA7iaHb/ngrok-stable-linux-amd64.zip unzip ngrok-stable-linux-amd64.zip mv ngrok /usr/bin/
之后,我们根据ngrok官网的教程来做,这里以将ssh端口映射到外网为例(个人认为ssh比较实用,因为还有ssh tunnel可以用来连接内网的设备)
当然,我们这里使用配置文件的形式,因为这种方式比较适合服务器使用。
我们先选个地方放ngrok的配置文件,比如我们放在/etc/ngrok.yml
我们输入
nano /etc/ngrok.yml
之后,我们按照这个格式编辑配置文件,参考https://ngrok.com/docs#config-examples
authtoken: 51k8KmLfad1bLQ8ktDQ3n_2xzoU6w5vDXzuoeHH37c7 tunnels: ssh-access: addr: 22 proto: tcp
其中authtoken来源于我们注册的ngrok账号的Dashboard中。
然后按下Ctrl+X进入保存,按Y回车退出
现在,我们来测试一下ngrok
在终端中输入
ngrok start --config /etc/ngrok.yml --all
可以看出,我们已经成功将内网这台设备的22端口通过ngrok服务器映射到了外网。
然后我们使用Ctrl+C退出ngrok。
那么,如何让ngrok开机启动呢?
这时候我就要介绍一个工具,supervisor了。
在Debian/Ubuntu中,我们可以使用apt安装supervisor
apt install supervisor
(由于这个太简单我就不演示了)
之后我们让supervisor开机启动,运行以下命令
systemctl enable supervisor
然后切换到supervisor的配置目录
cd /etc/supervisor/conf.d
输入
nano ngrok.conf
按照以下方式配置
[program:ngrok] command = /usr/bin/ngrok start --config /etc/ngrok.yml --all user = root autostart = true autorestart = true
之后保存并退出nano,执行
supervisorctl reload
然后运行
supervisorctl status
查看supervisor的运行状态。
但是现在问题来了,ngrok不显示了,我们如何找到ngrok映射出去的地址呢?
我们回到ngrok的dashboard中,可以看出,我们设备的22端口被映射的地址,之后按照这个地址去访问就可以了。
(Client IP是个IPv6地址是因为我接入了HE的IPv6 Tunnel Broker)
感谢博主介绍supervisor,不过命令有个小错,应该是supervisorctl status
可以重定向到日志
redirect_stderr=true
loglevel=info
stdout_logfile = ngrok.log
除了Ngrok,Frp也是不错的
感谢指正
顺便问问,厦门电信没IPv4公网地址了么,IPv6也许坚挺…
厦门电信大部分区域都没有公网IP地址了,但是可以打10000申请。
我家里在改内网IP后就获取不到IPv6了,再打10000号改回公网依然获取不到,不过电信的v6还不如用He的6in4 Tunnel,即便是到教育网也是没速度。