n2n内网穿透

扯扯淡

最近一周多的时间真是忙死掉了,为了机器人项目是加班加点的干,几乎每天都要到一两点,接着到市区找宾馆安稳下来都三点多了,坑死人,搞的我的老毛病(咽炎鼻炎)都来了,如果项目能够很好的安排何必要拖到最后才去做呢,而且即使是拖到最后还是一堆的BUG,很多东西都听天由命,嗨,不说了,这里项目管理不是主题,主要是说项目当中解决两个局域网通过公网互联的问题。

这个问题应该会经常遇到,比如我想在家访问我公司局域网内部的电脑啦,或者额额额额额?暂时只想到这一个,本来想说建网站的,发现通过n2n还不行,这应该是一个缺陷,n2n不会向公网提供一个公用ip地址,相互访问的各个终端必须要执行edge指令才行,建站显然是不合适的。

算了不说了,步入正题。

说明

n2n是内网穿透神器,功能强大,基本人手必备,小巧、开源、迅速、免费、无限穿透。

所需要的条件:

  1. 公网主机作为超级结点(具有公网ip的主机,或者购买阿里云的主机等等,主要用来连接或者中转边缘结点)
  2. 两个局域网(可以指同一局域网)的两台主机

n2n源码获取

源1:

git clone https://github.com/meyerd/n2n.git

源2:

svn co https://svn.ntop.org/svn/ntop/trunk/n2n

编译安装

这里推荐源2,采用源1我没有走通。

sudo apt-get install cmake libssl-dev
cd n2n/n2n_v2/
make
sudo make [PREFIX=/usr/local] install

make命令执行时,见招拆招,编译很快,很简单。

这里需要注意的是:每个和n2n相关的终端都需要安装此软件, 使用时n2n_v的版本要对应,最好所采用的源码也一样

windows下有n2n gui
android下有n2n客户端
这里是我们所采用的。

启动

启动中心结点

启动中心结点比较简单,一条命令:

supernode -l supernode_port

supernode_port为开发给边缘节点的端口号,默认不显示任何信息,如果需要显示log,加上-v -f参数。

Welcome to n2n v.2.1.0 for x86_64
Built on Dec 20 2016 22:13:36
Copyright 2007-09 - http://www.ntop.org

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.

启动边缘结点

这个配置稍微复杂点。

linux下

sudo edge -d edge0 -a virtual_ip -c test -M 1200 -k password -l supernode_ip:port -m virtual_mac

-d 虚拟网卡名称 -a 本地设置的ip地址(相互通信的终端ip需要在同一个网段里) -c 组名称 -M MTU值 -k 密码 -l 超级结点ip:port -m 虚拟网卡mac地址

Welcome to n2n v.2.1.0 for x86_64
Built on Dec 20 2016 22:13:36
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.

windows和android端

windows和android端按照文本提示很容易填写;


注意Advanced中的通信协议版本的选择

QA

Q1: 出现如下错误:

/root/download/n2n/n2n_v2/transform_aes.c:12:25: fatal error: openssl/aes.h: No such file or directory
 #include "openssl/aes.h"
                          ^
compilation terminated.
make[2]: *** [CMakeFiles/n2n.dir/transform_aes.c.o] Error 1
make[1]: *** [CMakeFiles/n2n.dir/all] Error 2
make: *** [all] Error 2

A1: 缺少ssl-dev库:

sudo apt-get install libssl-dev