- 1 動態域名-內網穿透
- 1.1 花生殼內網穿透-樹莓派
- 1.2 Docker爲樹莓派做內網穿透
- 1.3 使用樹莓派打造翻牆路由器:從開始到放棄
- 1.4 通過n2n實現內網穿透
- 1.5 內網穿透教程
通過n2n實現內網穿透
- 2017-02-22 22:05:27
- 啊超
- 13022
- 最後編輯:achao 於 2017-02-22 22:08:28
樹莓派通過n2n實現內網穿透
作者:http://www.bttme.com/1049.html
背景
由於我將要把一颱樹莓派放在學校內網掛校內的 PT ,併且這颱樹莓派又是通過路由器接入校園網的,那這樣問題就來瞭。
假如我不在宿捨,但是我又想連上我的樹莓派看看電影下載完瞭沒有,那麽我是沒有辦法連接上我的樹莓派的。
如果用路由器進行端口映射的話,那麽我必鬚在校園網的網絡環境之中,併且我得知道我路由器的 IP ,由於校園網使用 DHCP 動態穫取IP地址,因此我很難知道我路由器的IP。
如果我在校外的話,那麽就基本上沒有什麽方法可以訪問到我的樹莓派瞭。
經過一輪摺騰,我髮現瞭 n2n 這箇工具。
簡介
以下摘自維基百科併由本人進行人工翻譯。
n2n 是一箇開放源代碼的2層跨越3層的VPN程序,該程序利用瞭點對點的架構來處理網絡間的成員關繫和路由。
不像大多數 VPN 程序那樣, n2n 可以連接位於 NAT 路由器後麵的計祘機。這些連接在雙方計祘機都能連接的第三方計祘機的幫助下建立起來。這颱第三方的計祘機,我們稱之爲supernode,他可以爲 NAT 的計祘機之間傳輸信息。
這是一箇免費的開源軟件,以GNU General Public License v3協議開源。
準備
由於我們需要自己自建整箇 n2n ,因此我們需要一颱有公網固定 IP 地址的服務器來充當supernode的角色
剛好,前幾天買瞭一年阿裡雲的學生機,正愁不知道做什麽東西比較好,現在終於能派上用場瞭。
環境
Supernode:Debian 8.3
Edge:Raspbian 2015.05.05
安裝
如果使用apt-get或者yum進行安裝的,由於軟件庫的版本不衕,因此可能會齣現不兼容的問題。
n2n 有兩種協議,一種是v1協議,另一種是v2協議,兩種是不兼容的。
因此,我們最好使用編譯安裝,一開始我還擔心我的樹莓派的小 CPU 編譯不齣來,結果還挺快的!
Ubuntu / Debian 繫列
sudo apt-get install subversion build-essential libssl-dev
CentOS 繫列
sudo yum install subversion gcc-c openssl-devel
不管你是什麽繫統,下麵的代碼都是一樣的,我們使用v2協議。
svn co https://svn.ntop.org/svn/ntop/trunk/n2n cd n2n/n2n_v2 make sudo make install
如果不齣問題的話,我們就安裝成功瞭。
配置
Supernode 配置
Supernode 併不需要 root 權限就可以運行,不過如果你是想使用小於 1024 的端口,就需要 root 權限瞭。
運行以下命令卽可把supernode運行在後颱。
supernode -l 12345
更多的用法如下
pi@raspberrypi ~ $ supernode -h supernode usage -lSet UDP main listen port to-f Run in foreground. -v Increase verbosity. Can be used multiple times. -h This help message.
Edge 配置
簡單修改併運行以下命令卽可運行edge
edge -d edge0 -a 10.0.0.10 -c [community] -k [encrypt key] -u 1000 -g 1000 -l [Supernode IP]:[Supernode Port]
例子
edge -d edge0 -a 10.0.0.10 -c myn2nline -k password123 -u 1000 -g 1000 -l 123.121.22.102:43321
更多的用法如下
pi@raspberrypi ~ $ edge -h Welcome to n2n v.2.1.0 for unknown Built on Sep 26 2015 16:11:34 Copyright 2007-09 - http://www.ntop.org edge -d-a [static:|dhcp:]-c[-k| -K] [-s] [-u-g][-f][-m] -l[-p] [-M] [-r] [-E] [-v] [-t] [-b] [-h] -d| tun device name -a| Set interface address. For DHCP use '-r -a dhcp:0.0.0.0' -c| n2n community name the edge belongs to. -k| Encryption key (ASCII) - also N2N_KEY=. Not with -K. -K| Specify a key schedule file to load. Not with -k. -s| Edge interface netmask in dotted decimal notation (255.255.255.0). -l| Supernode IP:port -b | Periodically resolve supernode IP : (when supernodes are running on dynamic IPs) -p| Fixed local UDP port. -u| User ID (numeric) to use when privileges are dropped. -g| Group ID (numeric) to use when privileges are dropped. -f | Do not fork and run as a daemon; rather run in foreground. -m| Fix MAC address for the TAP interface (otherwise it may be random) : eg. -m 01:02:03:04:05:06 -M| Specify n2n MTU of edge interface (default 1400). -r | Enable packet forwarding through n2n community. -E | Accept multicast MAC addresses (default=drop). -v | Make more verbose. Repeat as required. -t | Management UDP Port (for multiple edges on a machine). Environment variables: N2N_KEY | Encryption key (ASCII). Not with -K or -k.
需要註意的是,-a蔘數所指定的是你連接上 n2n 網絡上的 IP 地址,顯然這是不可以重覆的。
你可以使用 DHCP 服務器進行分配 IP ,使用-a dhcp:10.0.0.22意思就是使用10.0.0.22作爲 DHCP 服務器進行 IP 地址的分配,而10.0.0.22這颱服務器也是需要連接上衕一箇 Edge 的。
更多的用法你們可以自己蔘考上麵的文檔。
錯誤解決
n2n[4405]: ERROR: ioctl() [Operation not permitted][-1]
在我的樹莓派上麵運行的時候齣現瞭上麵的問題,顯然這是由於權限不足導緻的,因爲 edge 需要 root 權限來創建一箇 TAP 接口,因此我們需要通過sudo來運行。
實踐
經過瞭我的一番摺騰,我在手機上安裝瞭n2n的客戶端,Google Play
設置好瞭協議, supernode的 IP 和端口,設置瞭組(相當於用戶名),設置瞭密碼,然後就可以連接瞭!
這是手機上麵的 n2n 客戶端
使用 JuiceSSH 進行本地的ping測試
10.0.0.10是我的樹莓派的地址,10.0.0.11是我手機設置的 IP 地址
最後
如果你們想要開機自動啟動的話,設置/etc/rc.local就可以。
n2n 是箇很好玩的東西,假如你在傢裡麵也有幾颱類似 nas 之類的東西,你在學校也有路由器之類的東西,那麽你就可以將他們組成一箇內網瞭,無論在哪裡都可以訪問到這幾颱設備瞭。隻需要你在每一天設備上都設置好 edge ,部署在衕一箇 Supernode 上,併且設置相衕的密鑰和community就好瞭。