OpenWRT(小米路由器使用系統)組建N2N VPN網路實現內網裝置之間的相互訪問
概述
如果要實現裝置的遠端訪問,比如在公司訪問家裡的電腦、路由器、智慧開關等,我們一般會需要一個公網地址,然後將相應埠對映到指定裝置上。隨著IPV4地址的枯竭,有些ISP已經不提供公網IP了,而且即使有公網IP,我們不一定有許可權操作NAT路由的埠對映(比如公司的網路),而且每次重啟路由器這個IP會變化,我們還得等一段時間讓DDNS生效,非常不便。
要是每個裝置固定一個IP地址就好了,讓我們在世界任何地方輸入10.2.5.1
這個IP就可以登入家裡的路由、輸入10.2.5.2
10.2.5.3
就登陸自己的Android手機,即使它使用的是行動網路...注: 上述的10.2.5.X只是一個內網地址的例子,和常見的192.168.1.X是一樣的,使用這個地址段是為了避免N2N地址和常見的內網地址混淆。
N2N就是為此而生的,它是在資料鏈路層實現的一套P2P協議,目的是儘量簡化裝置直接的連線。引用論文中作者的話來說N2N的目的就是:
N2N的實現具有兩個部分:supernode
中心節點和edge
邊界節點,
邊界節點通過中心節點找到對方,邊界節點之間建立通訊後,可以直接斷開中心節點,實現點對點的加密通訊。N2N網路的架構圖如下:
中心節點可以自己建立,也可以使用公開的supernode
。由於supernode
supernode
,所以即使使用公開的supernode
是安全的。
配置一個N2N網路
這裡建立一個私有的N2N網路,目的是將家裡的電腦、家裡的OpenWrt路由器、Android手機連線到同一個N2N網路上。
準備工作
N2N協議目前有兩個版本,v1和v2版本,這兩個版本是不相容的!也就是說如果一臺裝置使用v1版本,另一臺裝置使用v2版本,那麼這兩臺裝置是不能連線的,請務必注意這一點!
我使用的是v1版本,保守一點總是沒錯的...
公開一個我的N2N中心節點資訊:
- IP: 104.128.82.194
- Port: 82
- Version: N2N v1
僅供測試,我不能保證該節點長期有效
配置OpenWrt路由器的N2N客戶端
OpenWrt官方軟體源的N2N是v1版本,使用opkg update && opkg install n2n
命令安裝 ,安裝完成之後先配置一下自己的N2N網路,編輯/etc/config/n2n
這個檔案即可,內容如下:
config edge
# 給裝置分配一個內網地址
option ipaddr '10.2.5.1'
option supernode '104.128.82.194'
option port '82'
# 為自己的N2N網路組織機構取個名字,不要和我的一樣
option community 'shuyz'
# 其他裝置要使用相同的組織機構名和密碼才能加入
option key '123456789'
option route '1'
最後加入開機自啟後立即啟動就配置完成了。
/etc/init.d/n2n enable
/etc/init.d/n2n start
配置Windows的N2N客戶端
vpnhosting.cz
為Windows寫了一個N2N的GUI客戶端,下載地址在這裡。
安裝N2N GUI的時候會自動安裝虛擬網絡卡供edge使用,N2N的設定介面如下,除了IP地址,其他的資訊保持和OpenWrt上配置檔案一樣,然後開啟Advanced
配置,選擇Use
n2n v1
協議,重啟一下軟體生效。
這時候路由器和電腦就加入同一個N2N網路了,我們在路由器端ping Windows:
[email protected]:~# ping 10.2.5.3
PING 10.2.5.3 (10.2.5.3): 56 data bytes
64 bytes from 10.2.5.3: seq=0 ttl=64 time=1052.175 ms
64 bytes from 10.2.5.3: seq=1 ttl=64 time=525.018 ms
64 bytes from 10.2.5.3: seq=5 ttl=64 time=522.537 ms
64 bytes from 10.2.5.3: seq=6 ttl=64 time=320.722 ms
64 bytes from 10.2.5.3: seq=7 ttl=64 time=422.895 ms
^C
--- 10.2.5.3 ping statistics ---
9 packets transmitted, 5 packets received, 44% packet loss
round-trip min/avg/max = 320.722/568.669/1052.175 ms
上面的測試可以看到網路延時非常嚴重,因為電腦和路由器在同一個區域網。我把路由器拿到公司之後再ping一下家裡的電腦:
[email protected]:~# ping 10.2.5.3
PING 10.2.5.3 (10.2.5.3): 56 data bytes
64 bytes from 10.2.5.3: seq=0 ttl=64 time=7.197 ms
64 bytes from 10.2.5.3: seq=1 ttl=64 time=8.212 ms
64 bytes from 10.2.5.3: seq=2 ttl=64 time=6.667 ms
64 bytes from 10.2.5.3: seq=3 ttl=64 time=8.371 ms
64 bytes from 10.2.5.3: seq=4 ttl=64 time=5.217 ms
64 bytes from 10.2.5.3: seq=5 ttl=64 time=8.936 ms
^C
--- 10.2.5.3 ping statistics ---
6 packets transmitted, 6 packets received, 0% packet loss
round-trip min/avg/max = 5.217/7.433/8.936 ms
由此可見N2N網路在不同公網之間的裝置連線上表現優秀,但在用一個區域網的裝置間很糟糕。
配置Android的N2N客戶端
在Google Play上可以下載到Android的N2N客戶端,點此進入,似乎是國人寫的,功能非常強大。
配置介面:
配置完成後啟動,可以看到和超級節點的註冊資訊,這時候手機也可以訪問N2N網路的其他裝置了,比如使用行動網路訪問家裡的路由器:
N2N中心節點的編譯和部署
編譯
svn co https://svn.ntop.org/svn/ntop/trunk/n2n
cd n2n && cd n2n_v1
make
編譯完成之後會生成edge
和supernode
兩個可執行檔案,可以使用make
install
命令安裝,或者拷貝到任意目錄執行。
除錯
這裡我們討論伺服器上的supernode
,使用方法很簡單:
supernode -l <listening port> [-v] [-h]
測試的時候,建議開啟除錯日誌,比如:
supernode -l 8080 -v
總結
目前網上介紹N2N的文章非常少,但我覺得N2N的應用前景是非常廣泛的,最典型比如物聯網。將N2N協議可以在各種物聯網裝置上實現後,將這些裝置組建成一個N2N網路,這些裝置之間的通訊和互動將變得更加方便,從而實現各種可能。