使用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

然后运行

supervisor status

查看supervisor的运行状态。

但是现在问题来了,ngrok不显示了,我们如何找到ngrok映射出去的地址呢?

我们回到ngrok的dashboard中,可以看出,我们设备的22端口被映射的地址,之后按照这个地址去访问就可以了。

(Client IP是个IPv6地址是因为我接入了HE的IPv6 Tunnel Broker)

发表评论

电子邮件地址不会被公开。 必填项已用*标注