树莓派通过 n2n 实现内网穿透

栏目: 软件资讯 · 发布时间: 6年前

内容简介:树莓派通过 n2n 实现内网穿透

背景

由于我将要把一台树莓派放在学校内网挂校内的 PT ,并且这台树莓派又是通过路由器接入校园网的,那这样问题就来了。

假如我不在宿舍,但是我又想连上我的树莓派看看电影下载完了没有,那么我是没有办法连接上我的树莓派的。

如果用路由器进行端口映射的话,那么我必须在校园网的网络环境之中,并且我得知道我路由器的 IP ,由于校园网使用 DHCP 动态获取IP地址,因此我很难知道我路由器的IP。

如果我在校外的话,那么就基本上没有什么方法可以访问到我的树莓派了。

经过一轮折腾,我发现了 n2n 这个工具。

简介

以下摘自维基百科并由本人进行人工翻译。我还没有过4级翻译不好你不要打我

n2n 是一个开放源代码的2层跨越3层的VPN程序,该程序利用了点对点的架构来处理网络间的成员关系和路由。

不像大多数 VPN 程序那样, n2n 可以连接位于 NAT 路由器后面的计算机。这些连接在双方计算机都能连接的第三方计算机的帮助下建立起来。这台第三方的计算机,我们称之为supernode,他可以为 NAT 的计算机之间传输信息。

这是一个免费的开源软件,以 GNU General Public License v3 协议开源。

树莓派通过 n2n 实现内网穿透

树莓派通过 n2n 实现内网穿透

准备

由于我们需要自己自建整个 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 客户端

树莓派通过 n2n 实现内网穿透

使用 JuiceSSH 进行本地的ping测试

树莓派通过 n2n 实现内网穿透

10.0.0.10 是我的树莓派的地址, 10.0.0.11 是我手机设置的 IP 地址

最后

如果你们想要开机自动启动的话,设置 /etc/rc.local 就可以。

n2n 是个很好玩的东西,假如你在家里面也有几台类似 nas 之类的东西,你在学校也有路由器之类的东西,那么你就可以将他们组成一个内网了,无论在哪里都可以访问到这几台设备了。只需要你在每一天设备上都设置好 edge ,部署在同一个 Supernode 上,并且设置相同的密钥和community就好了。


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Where Wizards Stay Up Late

Where Wizards Stay Up Late

Katie Hafner / Simon & Schuster / 1998-1-21 / USD 16.00

Twenty five years ago, it didn't exist. Today, twenty million people worldwide are surfing the Net. "Where Wizards Stay Up Late" is the exciting story of the pioneers responsible for creating the most......一起来看看 《Where Wizards Stay Up Late》 这本书的介绍吧!

HTML 压缩/解压工具
HTML 压缩/解压工具

在线压缩/解压 HTML 代码

图片转BASE64编码
图片转BASE64编码

在线图片转Base64编码工具

RGB CMYK 转换工具
RGB CMYK 转换工具

RGB CMYK 互转工具