前面介绍过通过ZeroTier组建虚拟局域网,但是会存在安全风险,因为流量会流经别人的服务器。

这里就来介绍在服务器上搭建一个N2N服务,然后通过这个N2N服务组建一个虚拟局域网。

什么是N2N

N2N是开源的,是P2P VPN这类内网穿透方案的其中一种实现方式。N2N分为SuperNode和edgeNode,前者被称为超级节点,能够在EdgeNode之间建立握手并为无法直连的EdgeNode中转数据,是网络的核心部分。

准备工作

准备一个服务器,这里以Ubuntu系统为例。

安装N2N

在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查看效果:

通过N2N组建虚拟局域网(通过N2N组建虚拟局域网)(1)

supernode -h

supernode的参数比较少,稍微对帮助文档做一下解释:

-l <lport>:用于指定监听的端口 -f:前台运行,不带这个参数会在后台运行 -u <UID>:指定UID,在没有特权时使用 -g <GID>:指定GID,在没有特权时使用 -v:输出比较详细的日志 -h:输出帮助文档

也需要看一下edge是否可以正常使用:

通过N2N组建虚拟局域网(通过N2N组建虚拟局域网)(2)

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:

通过N2N组建虚拟局域网(通过N2N组建虚拟局域网)(3)

supernode -l 9876 -v -f

如果确认服务能正常启动,可以不传-f,直接在后台运行就行。

组建虚拟局域网-kali客户端

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的返回:

通过N2N组建虚拟局域网(通过N2N组建虚拟局域网)(4)

组网成功

添加成功后,通过ifconfig命令可以看到出现了一个新的网卡:

通过N2N组建虚拟局域网(通过N2N组建虚拟局域网)(5)

新增虚拟网卡

这个时候可以在虚拟局域网中的主机之间互相ping通。

组建虚拟局域网-Windows客户端

可以网上找一下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 的入站规则。

通过N2N组建虚拟局域网(通过N2N组建虚拟局域网)(6)

开启入站规则

在安装目录打开cmd,并在其中进行操作,需要管理员权限:

通过N2N组建虚拟局域网(通过N2N组建虚拟局域网)(7)

cmd中组网

使用的命令:

edge -a 192.168.222.165 -c yang_group -k 123456 -l 43.142.98.152:9876

这个时候,可以尝试在Kali中ping这台Windows,使用组网时设定的ip:

通过N2N组建虚拟局域网(通过N2N组建虚拟局域网)(8)

虚拟局域网内主机能够ping通

组建虚拟局域网-Android客户端

n2n官方有个github地址可以下载apk客户端:https://github.com/switch-iot/hin2n/releases

安装完成后,需要自己输入以下配置:

通过N2N组建虚拟局域网(通过N2N组建虚拟局域网)(9)

虚拟局域网配置信息

然后使用这个配置信息进行连接:

通过N2N组建虚拟局域网(通过N2N组建虚拟局域网)(10)

开启连接

用虚拟局域网中其他主机,ping一下新加入的手机:

通过N2N组建虚拟局域网(通过N2N组建虚拟局域网)(11)

ping通

在Kali尝试用adb连接Android机:

通过N2N组建虚拟局域网(通过N2N组建虚拟局域网)(12)

kali连上Android机

在Windows尝试adb连接Android机器:

通过N2N组建虚拟局域网(通过N2N组建虚拟局域网)(13)

Windows连上Android机器

总结

n2n总体来说是个非常好用的工具,但是n2n有很多版本,v1、v2、v2s、v3,使用的时候supernode和edge必须是配套使用,不存在高版本兼容低版本的情况。

,