A virtual network tool (or VPN),简便高效的异地组网、内网穿透工具
A virtual network tool (VPN)
将不同网络下的多个设备虚拟到一个局域网下
指定一个token,在多台设备上运行该程序,例如:
# linux上
root@DESKTOP-0BCHNIO:/opt# ./vnt-cli -k 123456
# 在另一台linux上使用nohup后台运行
root@izj6cemne76ykdzkataftfz vnt# nohup ./vnt-cli -k 123456 &
# windows上
D:\vnt\bin_v1>vnt-cli.exe -k 123456
可以执行info命令查看当前设备的虚拟ip
root@DESKTOP-0BCHNIO:/opt# ./vnt-cli --info
Name: Ubuntu 18.04 (bionic) [64-bit]
Virtual ip: 10.26.0.2
Virtual gateway: 10.26.0.1
Virtual netmask: 255.255.255.0
Connection status: Connected
NAT type: Cone
Relay server: 43.139.56.10:29871
Public ips: 120.228.76.75
Local ip: 172.25.165.58
也可以执行list命令查看其他设备的虚拟ip
root@DESKTOP-0BCHNIO:/opt# ./vnt-cli --list
Name Virtual Ip P2P/Relay Rt Status
Windows 10.0.22621 (Windows 11 Professional) [64-bit] 10.26.0.3 p2p 2 Online
CentOS 7.9.2009 (Core) [64-bit] 10.26.0.4 p2p 35 Online
最后可以用虚拟ip实现设备间相互访问
帮助,使用-h命令查看
前提条件:安装rust编译环境(install rust)
到项目根目录下执行 cargo build -p vnt-cli
也可按需编译,将得到更小的二进制文件,使用--no-default-features排除默认features
cargo build -p vnt-cli --no-default-features
features说明
feature | 说明 | 是否默认 |
---|---|---|
openssl | 使用openssl中的aes_ecb算法 | 否 |
openssl-vendored | 从源码编译openssl | 否 |
ring-cipher | 使用ring中的aes_gcm算法 | 否 |
aes_cbc | 支持aes_cbc加密 | 是 |
aes_ecb | 支持aes_ecb加密 | 是 |
aes_gcm | 支持aes_gcm加密 | 是 |
sm4_cbc | 支持sm4_cbc加密 | 是 |
server_encrypt | 支持服务端加密 | 是 |
ip_proxy | 内置ip代理 | 是 |
如果编译时去除了内置的ip代理(或使用--no-proxy关闭了代理),则可以使用网卡NAT转发来实现点对网, 一般来说使用网卡NAT转发会比内置的ip代理性能更好
注意原有的-i(入口)和-o(出口)的参数不能少
参考 https://learn.microsoft.com/zh-cn/virtualization/hyper-v-on-windows/user-guide/setup-nat-network
#设置nat,名字可以自己取,网段是vnt的网段
New-NetNat -Name vntnat -InternalIPInterfaceAddressPrefix 10.26.0.0/24
#查看设置
Get-NetNat
# 开启ip转发
sudo sysctl -w net.ipv4.ip_forward=1
# 开启nat转发 表示来源10.26.0.0/24的数据通过nat映射后再从vnt-tun以外的其他网卡发出去
sudo iptables -t nat -A POSTROUTING ! -o vnt-tun -s 10.26.0.0/24 -j MASQUERADE
# 或者这样 表示来源10.26.0.0/24的数据通过nat映射后再从eth0网卡发出去
sudo iptables -t nat -A POSTROUTING -o eth0 -s 10.26.0.0/24 -j MASQUERADE
# 查看设置
iptables -vnL -t nat
yay -Syu vnt
systemd
设置开机自启及配置sudo systemctl enable --now vnt-cli@
sudo systemctl status vnt-cli@
IPv4
转发规则sudo sysctl --system
sudo cat /etc/vnt/iptables-vnt.rules >> /etc/iptables/iptables.rules
sudo iptables-restore iptables.rules
# 开启ip转发
sudo sysctl -w net.ipv4.ip_forward=1
# 配置NAT转发规则
# 在/etc/pf.conf文件中添加以下规则,en0是出口网卡,10.26.0.0/24是来源网段
nat on en0 from 10.26.0.0/24 to any -> (en0)
# 加载规则
sudo pfctl -f /etc/pf.conf -e
yay -Syu vnt
0 15 31 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |e |s |unused| 版本(4) | 协议(8) | 上层协议(8) |初始ttl(4)|生存时间(4) | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | 源ip地址(32) | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | 目的ip地址(32) | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | 数据体(n) | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | | | 指纹(96) | | | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 注: 1. e为是否加密标志,s为服务端通信包标志,unused占两位未使用; 2. 开启加密时,数据体为加密后的密文(加密方式取决于密码长度和加密模式), 且会存在指纹,指纹使用sha256生成,用于对数据包完整性和真实性的校验
vnt默认使用10.26.0.0/24网段,和本地网络适配器的ip冲突
没有下载wintun.dll 或者使用的wintun.dll有问题
某些宽带下(比如广电宽带)UDP丢包严重
设备重启后程序自动获取的id值改变,导致注册时重新分配了新的IP,或是IP冲突
QQ: 1034868233
可使用社区小伙伴搭建的中继服务器