推荐阅读:
上一篇文章比较详细地说明了vnt的常见应用,在最后简略提了使用dns的txt解析来实现完美的自建服务器访问。本篇文章就是针对这个进阶操作的详细操作步骤,并且改进为跟简易的方案。
一、准备工作
1、需要一个域名
2、已经安装好lucky
3、需要一个可以运行vnt客户端和服务端的内网机器(openwrt或者其他linux系统都可以)
二、搭建VNT和VNTS
这里有两种方案,一个是使用openwrt的,另一个是使用通用linux系统的
1、Openwrt
openwrt是有ipk包可以使用的,非常方便。在这里感谢lmq8267!在Release页面下载相应系统版本的安装包,解压后会有3个.ipk,其中有一个是vnts,用来自建服务器用的,没特别需求全部安装上即可
安装好刷新后在VPN->VNT来配置vnt
(1)、配置VNT客户端
在vnt-cli 客户端设置块依次填入下列信息:(参数详细可以看文章顶部的推荐阅读文章)
- 令牌:唯一Token,以后的连入vnt的设备都使用这个Token
- 手动设定VNT客户端的内部地址,不能和自己网段相同
- 设备ID用来区分设备
- 本地网段填写为
0.0.0.0/0
,这样可以允许VNT的全部流量都能转发进来 - 开启IP转发
- (可选)允许wireguard接入,这样可以让ios利用wireguard进行组网
设定好后接着点击高级设置,填写vnts的服务器地址为127.0.0.1:29872,等会我们会在本地创建vnts的服务端
选填,设备名称,可以同名, 区别于设备ID
填写加密密钥来保证加密,记住这个加密密钥和上面的令牌Token,待会会用到。启用服务端客户端加密并且启用优化
这样就完成了vnt客户端的配置,此时先保存一下,可以先不启动,我们接着配置vnts服务端
(2)、配置VNTS服务端
- 本地端口默认是29872,不需要更改
- Token白名单与vnt客户端保持一致,这样可以限制vnts只允许自己使用
- 指定DHCP网关这里建议不要设定成VNT网段占用192.168.11.1的宝贵地址,因为我们在上面的vnt客户端就可以使用了192.168.11.1这个地址了,因此这里要改成192.168.11.2,这样做的好处就是内网网段和vntn网段的IP地址都对应上了,即192.168.11.1->192.168.1.1,方便又好记
- 手动设定一个vnts的web面板的管理页面账户和密码
设置完成点击保持并应用即可完成vnt客户端和服务端的配置,不出意外就可以正常使用了。
在顶部还有vnt客户端和服务端的启动日志,可用来排查错误,如果有问题八成都是防火墙的问题
2、其他Linux版本
其他linux系统的话可以使用官方的vnt-cli客户端和服务端命令行工具
(1)、配置vnts服务端
在vnts的的Github页面下载vnts服务端点我打开
使用下列命令来启动vnts服务端
./vnts --port 29872 --white-token 你的Token --gateway 192.168.11.2 --username 用户名 --password 密码
ShellScript(2)、配置vnt客户端
也是在vnt的Github页面下载相应的vnt客户端点我打开
使用下列命令来启动客户端
./vnt-cli -k 你的Token -ip 192.168.11.1 -d iStoreOS -i 192.168.1.0/24,10.26.0.11 -n iStoreOS -w 你的密码 -W -no-proxy
ShellScript这里每一条命令都可以通过./vnt-cli --help
来查看到具体参数内容,这里不过多追述了,官方的文档也有相应的解释,顶部推荐阅读文章也有说明,官网参数详解
推荐使用-f
参数来导入配置文件,这里给大家发一个博主自己使用的配置文件:
#组网token
token: 你的Token
#当前设备id
device_id: iStoreOS
#当前设备名称
name: iStoreOS
#指定虚拟ip
ip: 192.168.11.1
#密码
password: 你的密码
#服务端加密
server_encrypt: true
#是否关闭内置代理,true为关闭
no_proxy: true
#代理ip出站
#in_ips:
# - 192.168.101.0/24,192.168.11.101
#代理ip进站
out_ips:
#- 192.168.1.0/24
- 0.0.0.0/0
#注册和中继服务器
server_address: 127.0.0.1:29872
ShellScript使用./vnt-cli -f config.yaml
即可完成配置导入
完成好局域网的配置接下来就是进行其他手机、电脑客户端的配置了,通过stun穿透的公网端口来连入vnts
二、lucky获取公网ip+端口号并放行
1、创建stun隧道
在lucky->STUN内网穿透->添加穿透规则来创建一条规则
这里我不使用TCP的内置的转发,以提高tcp的转发效率
如果你不是使用openwrt的话可以使用lucky的内置转发,会自动会开放防火墙和进行端口转发,upnp按需开启
接下来的步骤是openwrt不使用lucky内置转发需要做的工作,如果使用了内置转发可以直接跳过2、添加防火墙放行规则和3、添加端口转发规则
2、添加防火墙放行规则
在openwrt->网络->防火墙->通信规则来添加一条防火墙放行规则
3、添加端口转发规则
在openwrt->网络->防火墙->来添加一条端口转发规则
三、配置lucky的DNS-TXT解析
打开lucky->动态域名->添加任务来添加一个dns-txt解析。任务名称随意,托管服务商选择你的域名提供商,这里以腾讯云为例,填入相应的dns解析Token,勾选{ipv4Addr}来获取ipv4地址
接下来添加一个TXT解析记录,备注随意,记录名为vnt.你的域名.com,记录类型为TXT,记录内容为{STUN_vnt_ADDR}
,注意,这里的{STUN_vnt_ADDR}
是lucky的全局变量,其格式为{STUN_规则名_ADDR},因为刚才我们刚才创建的stun服务的名称就叫做vnt,因此这里的规则名就填写vnt
这样设定好后我们的ddns就会自动同步stun穿透端口的TXT记录了
四、配置手机客户端
在官网下载好vnt的客户端后进行相应的配置,详细配置可以参考顶部的推荐阅读的二、配置客户端部分,在这里给我的配置
需要注意的是,我这里设定了服务器地址为tcp://txt:vnt.a.com
,其中tcp://代表和vnts服务器连接使用tcp协议,对应我们刚才创建的stun隧道是tcp4协议的;txt:代表解析ip地址+端口号的时候使用txt解析服务器ip+端口号,对应之前做的TXT的ddns。这样就可以完美实现内网穿透的访问,尽管你的nat环境再差,p2p死活打不通,一直使用中转和p2p直连差别也不大
五、配置PC客户端
Windows版本的客户端和安卓App的一致,这里不过多追述,主要是讲讲客户端的配置导入
#组网token
token: 你的Token
#当前设备id
device_id: laptop
#当前设备名称
name: laptop
#指定虚拟ip
ip: 192.168.11.20
#密码
password: 你的密码
#服务端加密
server_encrypt: true
#是否关闭内置代理,true为关闭
no_proxy: true
#代理ip进站
out_ips:
- 0.0.0.0/0
#代理ip出站
in_ips:
- 192.168.1.0/24,192.168.11.1
#注册和中继服务器
server_address: tcp://txt:vnt.a.com
#relay:仅中继模式.p2p:仅直连模式
#use_channel: relay
ShellScript如果理解了vnt app的配置的话这个应该也不难理解,主要还是out_ips和in_ips需要注意一下
六、VPN全流量代理模式
我们可以通过in_ips的规则, 将本地的全部流量进行劫持,转发到其他vnt设备只需要将in_ips:设定为0.0.0.0/0,192.168.11.1,就会将本地全部流量都发往192.168.11.1了,可以实现完全代理的功能。不过这个的前提是我们将全部设备的out_ips都设置成了0.0.0.0/0,即允许全部vnt流量流入,当前文章的配置默认都添加了。
总结
使用vnt搭配lucky的stun端口,可以实现完美的内网穿透访问,并且这个方案不依赖需要考虑连入的客户端的网络NAT环境;因为家庭内网的vnt客户端和vnts服务器在同一个局域网内,即使一直使用服务器中转来访问家庭内网也是和p2p直连没有什么差别的。相较于比zerotier、tailscale、EasyTier等方案更加实用,并且完全实现本地化部署,不依赖任何公网vps来搭建中转节点。
📌 本文由 FishBoss_Tca 原创,转载请注明作者和原文链接。
原文链接:https://www.ytca.top/stun/2064/
博主你好,本人小白一枚,想问一下
两地都没有公网ipv4或v6 这个方案还能用吗?
可以的,博主的网络也是移动大内网,这个方案本来就是绕过这种限制的,但是使用这个方法得有一个前提,就是需要你家的NAT环境要比较好。
一般来说只要是路由器拨号的话(不是光猫拨号!)NAT类型都是NAT1(Full Cone),这样可以很轻松地通过p2p打洞获取到一个公网ip的端口。
只要服务端这边可以通过STUN穿透获取到一个公网端口的话就要可以了,其他的设备不需要公网IP
好的!感谢回复!ヾ(≧∇≦*)ゝ