点对点与C/S方案
上回说到异地组网的方案,虽然免费,高速,但是随着长时间的使用,也出现了一些问题。
- 设备要支持开启客户端
这其实不是一个大问题,电脑和手机可以开启客户端是理所当然的,这部分设备带出门也可以使用,而其他无法开启客户端的设备也可以通过路由器进行组网,这部分设备一般不会带出门,影响不大。我其实就是不想每次都要点开客户端 - 对网络环境的要求较高
虽然有一端是IPV6公网的设备,但如果你正处于较差的网络环境中(例如商场、咖啡店和酒店的公共WiFi),此时开启点对点穿透,可能会出现无法连接上服务提供商的节点,或者打洞失败的情况。以ZeroTier和Tailscale举例,如果打洞失败,则会使用自身的节点直接转发,但此时的速度就无法保证了。因此,点对点的穿透方案较为适合在多个固定的地点部署,实现多个地点之间的异地组网。 - 对客户端的审查风险
如果你在公司或者安全要求较高的地点打开点对点内网穿透,虽然管理人员无法获取你与另一边的传输内容,但是可以探测到你正在使用此类服务,从而对你发出警告。我真的被警告过所以,一个公网IPV4服务器还是很有必要的,可以弥补点对点内网穿透没有覆盖的情境,我将这种需求总结为两点: - 高通用性——哪里都能用
- 低流量——在无法点对点穿透的场景使用,频率较低,降低公网服务器的使用成本
通过两种方法共同覆盖自己的访问需求,从我的实际应用来说,大流量交换的需求在家进行,离开路由器则使用公网服务。
内网穿透
接下来就是内网穿透的方案,由于有公网服务器的参与,这部分的原理较为简单,现存的软件都比较轻量化,试用过后,我觉得Frp和NPS是其中较为好用的两种。两者略有不同,可以按需选择。
首先是NPS,NPS的端口配置部分在服务器上,客户端只作为一个终端连接上服务器。这种架构比较适合个人用户控制名下的所有客户端,可以先将客户端连接到服务器,再决定要穿透哪些服务,或者随时关闭服务。
Frp的配置方法和NPS相反,所有的配置文件存储在客户端,服务器则负责提供内网穿透服务供客户端使用。这种架构比较适合将内网穿透服务公开给非特定的人群使用,有需要的用户都可以通过鉴权或非鉴权的方式登录到服务器,自行配置内网穿透服务,在配置的层面做到互不干扰。
NPS
接下来详细介绍如何在服务端和客户端配置NPS
服务端
通过wget或其他方式将安装包传输至服务器并解压
1
2
3wget https://github.com/ehang-io/nps/releases/download/v0.26.10/linux_amd64_server.tar.gz
mkdir nps
tar -zxvf ./linux_amd64_server.tar.gz -C nps进入nps文件夹中,安装nps
1
2chmod 755 ./nps # 如果需要权限
./nps install # 安装修改配置文件,以下提供一些建议修改的部分
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15# /etc/nps/conf/nps.conf
#修改web的默认账号密码端口
web_username=admin
web_password=123
web_port = 8080
#http代理 建议删除
#HTTP(S) proxy port, no startup if empty
http_proxy_ip=0.0.0.0
http_proxy_port=80
https_proxy_port=443
https_just_proxy=true
#default https certificate setting
https_default_cert_file=conf/server.pem
https_default_key_file=conf/server.key启动!
1
2
3
4./nps start
其他命令
./nps stop|restart
./nps update|uninstall服务器ip:8080进入web设置界面,通过配置文件设置的密码登录nps,点击左边菜单的客户端-新增,进入客户端设置,可以使用默认配置新增一个客户端,也可以自定义。完成后刷新,点击红框处的+号可以查看客户端命令,接下来会用到。
客户端
- 下载对应的客户端,参照服务端的第1步,客户端为client后缀的压缩包
- 进入文件夹,执行上文提到的客户端命令,根据情况不同,建议在server和veky上增加双引号,如下所示
1 | ./npc -server="xxx" -vkey="xxx" -type=tcp |
通过这种方法启动,只要关闭终端,程序就关闭了。
当然,npc也是支持安装的,其实就是上面nps的命令。
1 | ./npc install -server="xxx" -vkey="xxx" # 或者-config=xxx |
也支持通过配置文件连接
1 | [common] |
- 连接成功之后,在服务端的web页面客户端菜单中,此条目的[连接]状态会变为[在线]。
docker
如果你由于某种原因不能使用完整的linux环境,nps也有第三方的docker方案,需要将配置文件映射到容器。
https://github.com/iAsuma/nps-docker
1 | # 服务端 |