背景
上一篇,我把nps服务器搭建起来了,在云vpc上开放了连接端口,这一篇,我把客户机连接的方法分享出来。
准备
在上一篇中的几个信息要先准备好:
- vpc(即有公网IP的那台虚拟机)的IP地址
- 上一篇中配置的bridge_port
- 上一篇最后生成的“唯一验证密钥” 也就是 vkey
安装
我这里因为有docker,所以我就选择了npc的docker版本,运行起来比较简单,命令如下:
sudo docker run -d --name npc --network myhome ffdfgdfg/npc -e -server=<ip:port> -e -vkey=<vkey> -e -type=TCP
这里有一个要点:docker命令要带上–network来指定网络,只要在该网络下的其他docker容器才能被npc客户端访问到,并且将服务传递给外网的nps
现在去看看服务端是否已经显示了连接状态,现在已经是在线了,记下第一列“ID”的数值,这个称为“客户端ID”
添加应用
这里演示一下最常见的端口穿透的方法。假设在内网的docker里面运行了一个web服务,例如下图的vaultwarden,我在家里访问时,从docker外部用192.168.2.10:6666,或者从docker内部172.18.0.2:80,两种方式都可以访问到该服务。
现在我想从外网:9666端口来访问这个服务实现内网穿透,那么就需要在nps上做一个设定:
首先,登录到:8080进入nps服务端配置,点击左侧“TCP隧道”,点击“新增”
“客户端ID”是上一步的ID, 指定一个服务器端口,这个是外网会访问的端口(或者外网机器上反向代理Nginx会访问的端口),目标地址和端口是从客户端的角度来说的,所以目标地址可以写192.168.2.10:6666也可以写172.18.0.2:80,对于docker容器(由于docker提供默认的dns服务)还可以用vaultwarden:80,保存之后,会看到该服务已经在线了
最后还需要确认一下服务的连接方式,如果9666端口是直接开放给外网的,注意要把防火墙的9666端口开放。如果9666是给Nginx反向代理用的,那么无需这一步, 我是设置了Ngxin+SSL的,所以直接在Nginx里面把外网443端口转发到9666端口了,可以参考我的另一篇文章《真的香啊!搭建一个私有部署的密码保险箱》