N2N的搭建和参数详解到DHCP设置

这段时间关于N2N……之前说了要写的。这段时间因为觉得RPI鸡肋所以开始开发它的性能。烧了一个OSMC(deb?),做了一个基于DLNA的无线音箱,装了一些插件改改成了闹钟。然后在上面搭了LNMP,脑子不好装了Owncloud,出了一大堆问题以外,ngrok一个映射,然后蛋疼了。owncloud已经蛋疼到光登陆页面就1.5M这个可是不能接受的(试想数据从我家先到美国vps然后再回中国,数据绕地球跑了一圈,首页1.5M,开一个首页等一分钟。这样的情况我能忍?更别说上传下载了。)

其实更中二的是我想能不能弄出一个小暗网一样的东西……

客户端&千篇一律的简介

edgewindows和android下载(不稳定)

windows:比较好的一个客户端的链接(来自SF)

Git:https://github.com/meyerd/n2nedge

好吧,不多扯了。关于N2N——一个链路层的VPN,可以穿透NAT。好吧,其实人家官方停止维护了很久了。关于特点,别人网站说的够多了。我这里就发个示意图,从树叶的BLOG挪过来吧。(原图git上有但是这个速度还是偷图算了。。)

[安装和运行真心不想具体说,因为很多别人都说过,下面一段和DHCP无关的各位老司机跳着看吧=_=]

DHCP依旧有一些问题没能解决,不知道算不算是BUG,还是要静态。而且最要命的是安卓端还没弄成功……

其实问题也很多……首先,配置不如别人人性化。文档少(千篇一律)。官方停止维护http://www.ntop.org/n2n/。虚拟网卡仅仅10M。

(更正:后面发现传输速率貌似超过理论的10M)

我们的目标是创建一个网络。注意每一个supernode可以创建多个链路VPN。如果两边都是NAT那么之间的数据要加密走过代理。我在外面(比如学校)如果要调试家里的东西,那么就要穿双NAT。edge设置supernode也可以冗余。没有深究可不可以均衡负载。

安装&使用

至于安装,真的很简单。如果你编译环境好了,直接:

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

cd n2n && cd n2n_v1

make && make install

好了,整个过程没有遇到过任何问题。非常顺利。

然后出来两个命令,supernode和edge。应该有所了解了。在一个外网机器执行:

supernode -l <listening port> [-v] [-h]

创建超级节点只需要supernode -l [端口],-v开启调试显示。相当简单。已经准备好了supernode了。

edge需要sudo一下。参数有点多。下面我也在网上找了一些详解。不过为了方便,提供命令如下。

sudo edge d edge0 a 10.0.0.10 c [networkname] u 1000 g 1000 k [pwd] l [supernode]:[port] m 01:02:03:04:05:06

关于edge参数详解(转http://os.51cto.com/art/201501/463248.htm并自己添加了一点便于各位理解。其实man edge就能看到这些。)

  • “-d <接口名>”选项指定了由 edge 命令创建的 TAP 接口的名字。
  • “-a <IP地址>”选项(静态地)指定了分配给 TAP 接口的 VPN 的 IP 地址。如果你想要使用 DHCP,你需要在其中一台边缘节点上配置一台 DHCP 服务器,然后使用“-a dhcp:0.0.0.0”选项来代替。(要使用-r的转发)
  • “-c <组名>”选项指定了 VPN 组的名字(最大长度为 16 个字节)。这个选项可以被用来在同样一组节点中创建多个 VPN。
  • “-u”和“-g”选项被用来在创建一个 TAP 接口后降权放弃 root 权限。edge 守护进程将会作为指定的用户/组 ID 运行。
  • “-k <密钥>”选项指定了一个由 twofish 加密的密钥来使用。如果你想要将密钥从命令行中隐藏,你可以使用 N2N_KEY 环境变量。
  • “-l <IP地址:端口>”选项指定了超级节点的监听 IP 地址和端口号。为了冗余,你可以指定最多两个不同的超级节点(比如 -l <超级节点 A> -l <超级节点 B>)。
  • “-m ”给 TAP 接口分配了一个静态的 MAC 地址。不使用这个参数的话,edge 命令将会随机生成一个 MAC 地址。事实上,为一个 VPN 接口强制指定一个静态的 MAC 地址是被强烈推荐的做法。否则,比如当你在一个节点上重启了 edge 守护程序的时候,其它节点的 ARP 缓存将会由于新生成的 MAC 地址而遭到污染,它们将不能向这个节点发送数据,直到被污染的 ARP 记录被消除。
  • -r 允许包通过n2n网络转发,如果用了DHCP那么是必要的了

按照上面的处理,现在两个edge应该可以ping通了。我这里同一个局域网延迟400ms……NAS下载速度稳定在300到400kb之间。

想停下来? killall edge

DHCP的坑

dhcp服务器一定要是一个edge节点。N2N的dhcp资料少的可怜啊。

我的dhcp还是那个树莓派。一个debian的系统,并不具有普遍性但还是简单的说一下吧。我之前从来没配置过DHCP,以下的内容是我在半个小时内自学的,肯定有一些不妥,但是为了分享还是放出来了,所以有问题各位请不要吝啬的批评!

安装:

sudo apt-get install isc-dhcp-server

然后注意配置那个监听网卡应是之前 -d 命令中的设置的网卡。即/etc/default/isc-dhcp-server文件中的INTERFACE=”你设置的”

配置/etc/dhcp/dhcpd.conf

这算是个重头。我直接echo > /etc/dhcp/dhcpd.conf清空了,然后写入如下内容

 

配置好了,service isc-dhcp-server start

DHCP服务启动完成。

坑来了:回到另一个机器的终端,参数改改, -r -a dhcp:0.0.0.0,ifconfig后并没有看到获取IP,傻了。-f -v 看看输出发现就没获取到。dhcp服务器也没有收到任何一个请求。

但是……

dhclient edge0 命令获取DHCP后,居然获取到了。

SF的那个Windows终端也能获取到,但是在那个软件里并没有显示出来。用ipconfig看了看,的确是获取到了的。

但是安卓是坑了。N2N客户端没法获取到IP,也不好用命令获取。所以留下了一个坑。不知道什么时候能解决。

发表评论

*

Protected with IP Blacklist CloudIP Blacklist Cloud