前面介紹過通過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查看效果:
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客戶端
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客戶端
可以網上找一下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通
組建虛擬局域網-Android客戶端
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必須是配套使用,不存在高版本兼容低版本的情況。