RSS订阅专注X86/ARM架构技术
博客交流QQ群693563350 赞助本站
你现在的位置:网站首页 / Linux / 正文内容

树莓派和linux系统通过n2n实现内网穿透

39730 Linux | 2017年05月13日

1.jpg简介

以下摘自维基百科并由本人进行人工翻译。

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协议。由于git clone https://github.com/meyerd/n2n.git源在国内同步不成功所以使用ntop的源。

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就好了。


原文转自 BTTME

原文链接:http://www.bttme.com/1049.html


上一篇:NanoPi M2编译Debian步骤详解

下一篇:盛天网盘免费200G网盘申请

猜你喜欢