今天我们来搞一搞这个内网穿透,内网穿透其实就是将局域网内的IP的某个端口映射到公网的某个IP的某个端口,以此来实现通过公网IP访问到自己的局域网内的服务。如果你想要将你的旧电脑当作服务器来使用,恰巧你还有一个公网的IP,那么你就可以使用本文的方式来做一个内网穿透来打通你的本地服务与公网直接的关节。

准备工作

实现内网穿透的技术有很多种,比如frpnps 等等。今天我用到的是利用nps技术去实现内网的穿透。

首先我们需要准备内网穿透的必要东西:

  • 一个公网的IP(可以考虑购买一台云服务器)
  • nps服务端
  • npc客户端

nps项目地址:https://github.com/ehang-io/nps

注:不要直接下载release的包,可能存在病毒,建议自己编译源码。具体可以查看项目里的一些issue。

安装服务端

首先将下载的服务端压缩包上传至服务器上,解压到一个地方。然后修改它的conf/nps.conf文件,我们只需要修改下面这些信息即可。

appname = nps
#Boot mode(dev|pro)
runmode = dev
#
###bridge
## 底层通信协议,默认tcp,可选用kcp
bridge_type=tcp
## 底层通信端口,默认8024,如已被占用请指定其他端口
bridge_port=8024
bridge_ip=0.0.0.0
#
## 当客户端以配置文件模式启动时会用到的验证密钥,可自行设置,本教程不会使用到
public_vkey=<你的通信密钥>

##web
web_host=<你的服务器公网IP>
web_username=<登录之后管理后台的用户名>
web_password=<登录管理后台的密码>
web_port = <访问管理后台的端口>
web_ip=0.0.0.0

修改完成后可以使用./nps start启动服务,然后使用web_host:web_port访问管理后台网站,如果访问不成功可以去云服务平台查看安全组是否开放了这个端口的访问,如果没有请加一条放行规则,具体添加方式请按自己选择的云平台的方式添加。

这种方式启动服务,使用ctrl + c或者ssh窗口关闭就会停止,我们可以将这个服务注册到系统的守护进程中,从而不需要经常手动开启服务。

sudo ./nps install
sudo nps start
# nps 服务的参数有如下
nps install | start | stop | restart | reload
# 其中reload参数目前支持的重载的属性不多,还是建议重启服务

注:安装后服务的配置文件在/etc/nps/conf/下(windows的在C:\Program Files\nps),修改原有的配置文件将不会生效

访问成功后就可以看到这样的一个页面,使用配置文件里的用户名、密码登录管理后台。

nps管理后台

  1. 在客户端分类中添加一台客户端,点击新增,然后可以留空的字段都留空,保存后点击+号会有一行客户端命令,将这行命令复制下来,之后启动客户端就使用该命令。

客户端管理

  1. 在TCP隧道分类新增一个连接隧道,其中客户端ID为刚才创建的客户端的ID,服务端端口为访问内网服务时服务端使用的端口号(只要不和自己服务端其他服务的端口重复即可),目标IP:port则是内网服务的IP:port,比如本地tomcat服务的8080端口,则填写127.0.0.1:8080,填写完成后保存。

安装客户端

将下载的客户端压缩包解压,执行之前管理后台中新增客户端后提供命令即可连接上服务端(ctrl + c结束进程)。

./npc.exe -server=ip:port -vkey=web界面中显示的密钥

然后就可以通过公网IP:port(服务端端口号)直接访问到自己内网提供的服务了。

也可以将客户端注册到程序的守护进程中(开机启动),之后就不需要每次手动连接服务了。

对于Linux/Mac:

# 注册
sudo ./npc install -server=ip:port -vkey=web界面中显示的密钥
# 启动
sudo npc start
# 停止
sudo npc stop
# 卸载
./npc uninstall

对于Windows(管理员运行cmd或者powershell):

# 注册
npc.exe install -server=ip:port -vkey=web界面中显示的密钥
# 启动
npc.exe start
# 停止
npc.exe stop
# 卸载
npc.exe uninstall

如果需要更换连接的属性,那么需要先卸载,再重新注册。

关于内网穿透就说到这里了,这些只是关于nps最简单的运用,至于其他的如果有需求的话可以去看他的官方文档来实现自己的需求。

参考文档:

官方文档

内网穿透工具nps使用教程(一)