前面介绍过通过ZeroTier组建虚拟局域网,但是会存在安全风险,因为流量会流经别人的服务器。
这里就来介绍在服务器上搭建一个N2N服务,然后通过这个N2N服务组建一个虚拟局域网。
N2N是开源的,是P2P VPN这类内网穿透方案的其中一种实现方式。N2N分为SuperNode和EdgeNode,前者被称为超级节点,能够在EdgeNode之间建立握手并为无法直连的EdgeNode中转数据,是网络的核心部分。
准备一个服务器,这里以Ubuntu系统为例。
在Ubuntu中安装N2N其实比较简单,直接执行以下命令就可以:
apt install -y n2n
如果是其他版本的linux系统,可能就需要之心那个以下命令:
sudo git clone https://github.com/meyerd/n2n.git
sudo apt install cmake
cd n2n
sudo mkdir -p build_n2n_v2 # 用于存放编译生成的文件
cd build_n2n_v2
sudo cmake ../n2n_v2
sudo make && sudo make install
安装完成后的可以通过supernode -h查看效果:
supernode -h
supernode的参数比较少,稍微对帮助文档做一下解释:
-l <lport>:用于指定监听的端口
-f:前台运行,不带这个参数会在后台运行
-u <UID>:指定UID,在没有特权时使用
-g <GID>:指定GID,在没有特权时使用
-v:输出比较详细的日志
-h:输出帮助文档
也需要看一下edge是否可以正常使用:
edge -h
edge的可用参数就比较多了,大概解释一下:
-d <tun device>:指定虚拟网卡名
-a <mode:address>:虚拟网段IP,static模式其实可以不用加那个static: 直接写IP就行。dhcp模式需要写完整,比如“-r -a dhcp:0.0.0.0”
-c <community>:用于区分节点的社区(组)名
-k <encrypt key>:用于加密的字符串
-K <key file>:用于加密的Key文件,和-k不能共存
-s <.NETmask>:子网掩码
-l <supernode host:port>:supernode的IP:端口,可以指定多个supernode的
-L <local_ip>:添加本地ip以绕过同一nat问题
-i <interval>:NAT打洞间隔
-b:当使用DHCP时定期刷新IP
-p <local port>:指定本地端口
-u <UID>:指定运行所用的UID
-g <GID>:指定运行所用的GID
-f :前台运行
-m <mac address>:为虚拟网卡指定MAC地址,例如:-m 01:02:03:04:05:06
-M <mtu>:指定edge的MTU接口,默认是1400
-r:启用包转发,当-a指定DHCP时需要启用
-E:接收组播MAC地址
-v:输出比较详细的log
-t:指定用于管理的UDP端口
先在服务端开启一个supernode:
supernode -l 9876 -v -f
如果确认服务能正常启动,可以不传-f,直接在后台运行就行。
Kali,或者说Linux中开启客户端其实很简单,还是安装n2n,然后直接通过命令添加:
edge -d dege0 -a 192.168.222.162 -c yang_group -k 123456 -l 43.142.98.152:9876
组网成功会收到REGISTER_SUPER_ACK的返回:
组网成功
添加成功后,通过ifconfig命令可以看到出现了一个新的网卡:
新增虚拟网卡
这个时候可以在虚拟局域网中的主机之间互相ping通。
可以网上找一下Windows的n2n客户端(n2nguien.exe),有免费下载的资源。本地安装后,在连接之前先在Windows的powershell(管理员)中执行以下命令:
netsh advfirewall firewall add rule name= "All ICMP V4" protocol=icmpv4:any,any dir=in action=allow
netsh advfirewall firewall add rule name= "All ICMP V6" protocol=icmpv6:any,any dir=in action=allow
作用是开启v4 和v6 的入站规则。
开启入站规则
在安装目录打开cmd,并在其中进行操作,需要管理员权限:
cmd中组网
使用的命令:
edge -a 192.168.222.165 -c yang_group -k 123456 -l 43.142.98.152:9876
这个时候,可以尝试在Kali中ping这台Windows,使用组网时设定的ip:
虚拟局域网内主机能够ping通
n2n官方有个github地址可以下载apk客户端:
https://github.com/switch-iot/hin2n/releases
安装完成后,需要自己输入以下配置:
虚拟局域网配置信息
然后使用这个配置信息进行连接:
开启连接
用虚拟局域网中其他主机,ping一下新加入的手机:
ping通
在Kali尝试用adb连接Android机:
kali连上Android机
在Windows尝试adb连接Android机器:
Windows连上Android机器
n2n总体来说是个非常好用的工具,但是n2n有很多版本,v1、v2、v2s、v3,使用的时候supernode和edge必须是配套使用,不存在高版本兼容低版本的情况。