内容简介:树莓派通过 n2n 实现内网穿透
背景
由于我将要把一台树莓派放在学校内网挂校内的 PT ,并且这台树莓派又是通过路由器接入校园网的,那这样问题就来了。
假如我不在宿舍,但是我又想连上我的树莓派看看电影下载完了没有,那么我是没有办法连接上我的树莓派的。
如果用路由器进行端口映射的话,那么我必须在校园网的网络环境之中,并且我得知道我路由器的 IP ,由于校园网使用 DHCP 动态获取IP地址,因此我很难知道我路由器的IP。
如果我在校外的话,那么就基本上没有什么方法可以访问到我的树莓派了。
经过一轮折腾,我发现了 n2n 这个工具。
简介
以下摘自维基百科并由本人进行人工翻译。我还没有过4级翻译不好你不要打我
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 -l <lport> Set UDP main listen port to <lport> -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 <tun device> -a [static:|dhcp:]<tun IP address> -c <community> [-k <encrypt key> | -K <key file>] [-s <netmask>] [-u <uid> -g <gid>][-f][-m <MAC address>] -l <supernode host:port> [-p <local port>] [-M <mtu>] [-r] [-E] [-v] [-t <mgmt port>] [-b] [-h] -d <tun device> | tun device name -a <mode:address> | Set interface address. For DHCP use '-r -a dhcp:0.0.0.0' -c <community> | n2n community name the edge belongs to. -k <encrypt key> | Encryption key (ASCII) - also N2N_KEY=<encrypt key>. Not with -K. -K <key file> | Specify a key schedule file to load. Not with -k. -s <netmask> | Edge interface netmask in dotted decimal notation (255.255.255.0). -l <supernode host:port> | Supernode IP:port -b | Periodically resolve supernode IP : (when supernodes are running on dynamic IPs) -p <local port> | Fixed local UDP port. -u <UID> | User ID (numeric) to use when privileges are dropped. -g <GID> | Group ID (numeric) to use when privileges are dropped. -f | Do not fork and run as a daemon; rather run in foreground. -m <MAC address> | Fix MAC address for the TAP interface (otherwise it may be random) : eg. -m 01:02:03:04:05:06 -M <mtu> | 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就好了。
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
猜你喜欢:本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
旷世之战――IBM深蓝夺冠之路
纽伯 / 邵谦谦 / 清华大学出版社 / 2004-5 / 35.0
本书作者Monty Neworn是国际计算机象棋协公的主席,作者是用生动活泼的笔触描写了深蓝与卡斯帕罗夫之战这一引起全世界关注的历史事件的前前后后。由于作者的特殊身份和多年来对计算机象棋的关心,使他掌握了许多局外人不能得到的资料,记叙了很多鲜为人知的故事。全书行文流畅、文笔优美,对于棋局的描述更是跌宕起伏、险象环生,让读者好像又一次亲身经历了那场流动人心的战争。 本书作为一本科普读物......一起来看看 《旷世之战――IBM深蓝夺冠之路》 这本书的介绍吧!