推荐阅读:
上一篇文章比较详细地说明了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 -w 你的TOKEN -g vnt的DHCP网关地址 -m 255.255.255.0 -l vntslog -U 用户名 -W 密码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-proxyShellScript这里每一条命令都可以通过./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流量流入,当前文章的配置默认都添加了。
七、增强openwrt打洞能力和抗QoS能力
默认vnt是监听2个随机端口来进行p2p直连的,但如果想加快p2p打洞速度的话可以试着使用固定端口号并且开放对应的防火墙
1、openwrt
在vnt的高级设置页面,里面可以手动设定本地监听端口,默认为0,0,即监听2个随机的端口,其中第一个端口同时接受tcp和udp流量,后续的接口值只接受udp流量,我们可以手动设定2个固定的端口号,并且开放对应的防火墙,如果不是本机拨号的话,还可以搭配端口转发,可以实现很更高效率的p2p直连打洞效率,特别是本地拨号的NAT1环境,即使对方是NAT4也能比较快速地直连openwrt
这里我选择三个不被占用的端口号:29870,29871,29873来进行端口监听,并且放行对应端口号的防火墙



2、其他设备
当然其他设备也需要开放多个端口的监听,否则一个设备只能监听一个端口2个端口
#监听随机端口,tcp监听第一个端口,udp监听全部
ports:
- 0
- 0
- 0YAML

监听多个端口的好处就是数据在传输的时候是使用轮询端口发送数据,这样可以抵御QoS带来的限速问题,提高传输速度,但是也不建议开启过多的监听端口,来增加双方的性能开销
总结
使用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
好的!感谢回复!ヾ(≧∇≦*)ゝ
博主你好,我设置成功组网了,目前是家里nas和安卓手机组网。手机用虚拟ip可以访问到nas的服务。但是我在组网的状态下,手机用反向代理的域名,就不能正常访问nas的服务。只有关闭了组网后才能正常访问。请问反向代理和组网不能同时使用吗?还是有什么需要设置的地方。对了,我的反向代理就是用的lucky,装在小米路由器上。vnt和vnts用的是nas的docker部署,host网络
是不是VNT配置规则问题,正常情况下一般VNT只开放内网网段的访问,其他域名请求不会走vnt的;既然关闭可以访问,说明就是vnt配置的问题
我的物理内网是192.168.31.0/24,nas的物理内网地址192.168.31.220,虚拟ip 10.168.31.2,手机的虚拟ip 10.168.31.3。那个in/out-ip配置确实有点不好理解,能不能麻烦博主指点一二
我按照我的理解简单说一下吧,也别管为什么作者具体这样的命名的原因了
in-ip:将指定网段的请求发往指定虚拟ip来访问,即点对网的内网访问模式,
示例:本地in-ip设置为192.168.1.0/24,192.168.11.1,这样设置的话会将全部访问192.168.1.0/24的请求都发往192.168.11.1来解析,并且注意对端192.168.11.1的内网网段为192.168.1.0/24,这样我们就可以通过内网地址192.168.1.0/24就可以远程访问到内网的服务了,跟你与192.168.11.1的设备在同一局域网差不多。
out-ip:允许从虚拟ip出来的数据的网段。通常如果只是自己使用的话建议将全部设备的out-ip设置为0.0.0.0/0,即允许全部从虚拟ip发出来的数据。关于官方提到的out-ip设置为内网网段192.168.1.0/24我觉得根本没有必要,毕竟仅仅是自己使用,不需要考虑这么多安全问题
综上所述:
我们可以把vnt的隧道想象成一节水管,一侧是内网,另一侧是手机,手机设置in-ip可以决定有多少数据会流入这条水管,而内网的out-ip就决定了水管内的数据有多少是可以流出来的,这两头遵循木桶效应;假如说内网的水管口out-ip设置成无限大0.0.0.0/0,但是手机的水管口只能流入192.168.1.0/24的数据,那这样的话真正实际有效到达内网的只有192.168.1.0/24,尽管内网的水管口out-ip设置成无限大,进来的数据也只有这么多;如果我将内网的水管out-ip设置成192.168.1.0/24,而手机的水管口in-ip设置成无限大0.0.0.0/0,192.168.11.1,即全部数据都发往192.168.11.1,但是因为内网侧的水管口只能通过192.168.1.0/24的数据,对于其他数据就会直接抛弃,因此这样设置就会导致手机只能访问内网了,而其他公网服务却全部都被丢弃了。因此,鉴于这种情况,博主强烈建议将全部设备的out-ip设置为0.0.0.0/0,这样就不需要考虑数据放行的问题了,哪个设备想访问指定虚拟ip的内网网段只需添加上对端内网网段和虚拟ip就可以了,即in-ip:192.168.1.0/24,192.168.11.1
群里有人说,vnt启用后,ipv6就会失效。我的反代域名是ipv6的。
现阶段整个网络对于ipv6的适配问题还依旧存在,因此如果想稳定使用建议还是用回ipv4网络吧,并且vnt作者有解释说ipv6的测试场景有限,一些问题BUG可能还会有很多
我这也是移动大内网,也想用txt文本格式连接VNT,但是我这是光猫拔号,改成桥接后可以拔号上去,但是网速特别慢,不到百兆,用路由器和电脑拔号都一样。就目前我这个情况,只要在光猫上配置DMZ,指向op路由器的wan还是lan?然后的防火墙还要配置什么吗?
如果使用光猫拨号的建议去看看openwrt的旁路由模式,只有lan接口
但是我就一个路由器啊。猫—路由器 没有其它的路由器了。同时还是单线利用,还有IPTV.
你不是光猫拨号吗?那你的openwrt就相当于旁路由了呀。还是说你现在光猫只有一条线网络出来是吗?单线复用到openwrt,然后再分流出来上网和IPTV。
光猫—一根网线- –路由器(路由器是AP8220刷的OP系统,只有WAN和LAN).除了宽带还有IPTV。现在在猫的1口上配置的VLAN 绑定,现在都能上网和组播转单播,所有终端都能看电视。
上网方式,猫拔号上网-现在已经在猫上配置了dmz指向路由路由器。
路由器上有个wan6的接口,能拿到2409的V6地址,但是LAN口和内网所有终端有没开V6,都是V4地址。。
还有个dynv6的域名。
看lucky的教程还有stun穿透的,不知道哪种方便。。
现在就是要求就是随时能连到家里路由器就行,以后想把村里老家的路由器(也是Op系统)连上,老家放一个电视盒子、能看到我这边的IPTV就行。
如果你所使用的网络通常都是有ipv6优先考虑ipv6直连,如果没有的话在考虑stun的方法
关于ipv6的话内网设备可以不需要ipv6地址,只要路由器具备ipv6地址就够了,做好ddns和ipv6 NAT ipv4的端口转发,也相当于内网设备也具备了ipv6地址
你好,我按按照配置完成VNT后一切功能正常,但是出现一个bug,在openwrt log页面会看到LAN口一直在down和UP,
Tue Nov 25 17:14:56 2025 daemon.notice netifd: Network device ‘eth1’ link is down
Tue Nov 25 17:14:56 2025 kern.info kernel: [ 3086.083755] r8169 0000:01:00.0 eth1: Link is Down
Tue Nov 25 17:14:56 2025 kern.info kernel: [ 3086.084059] br-lan: port 1(eth1) entered disabled state
Tue Nov 25 17:14:59 2025 kern.info kernel: [ 3088.349016] r8169 0000:01:00.0 eth1: Link is Up – 1Gbps/Full – flow control off
Tue Nov 25 17:14:59 2025 kern.info kernel: [ 3088.349084] br-lan: port 1(eth1) entered blocking state
Tue Nov 25 17:14:59 2025 kern.info kernel: [ 3088.349102] br-lan: port 1(eth1) entered forwarding state
Tue Nov 25 17:14:59 2025 daemon.notice netifd: Network device ‘eth1’ link is up
Tue Nov 25 17:15:01 2025 daemon.info dnsmasq-dhcp[1]: DHCPDISCOVER(br-lan) f4:2d:06:55:14:1b
Tue Nov 25 17:15:01 2025 daemon.info dnsmasq-dhcp[1]: DHCPOFFER(br-lan) 192.168.100.231 f4:2d:06:55:14:1b
Tue Nov 25 17:15:01 2025 daemon.info dnsmasq-dhcp[1]: DHCPDISCOVER(br-lan) f4:2d:06:55:14:1b
Tue Nov 25 17:15:01 2025 daemon.info dnsmasq-dhcp[1]: DHCPOFFER(br-lan) 192.168.100.231 f4:2d:06:55:14:1b
Tue Nov 25 17:15:01 2025 daemon.info dnsmasq-dhcp[1]: DHCPREQUEST(br-lan) 192.168.100.231 f4:2d:06:55:14:1b
Tue Nov 25 17:15:01 2025 daemon.info dnsmasq-dhcp[1]: DHCPACK(br-lan) 192.168.100.231 f4:2d:06:55:14:1b
如上一直重复,我试图关闭VNT客户端后这个问题消失了,后又确认服务端并不影响,就是客户端的问题,我怀疑是可能是防火墙的问题但是无法准确定位。
你有没有改“绑定出口网卡”和“虚拟网卡名称”?
出口网卡不绑定,虚拟网卡名字叫VNT忘记改没改了
你没有修改自定义防火墙是吗?
或者你显示是在命令行执行一下vnt-cli客户端看看是否还有报错
客户端一切正常的,我卸载重装VNT目前没有发现网口重启现象了,感谢