一.介绍
前面介绍的其实内网穿透方案更大意义上是端口转发或者反向代理,而这次要提的,则是P2P组网方案,要知道P2P在打洞穿透方面优势是挺大的,而且成功打洞之后不通过第三方服务器直接连接,能够不受第三方服务器的带宽限制,而如果没有成功打洞,则可以通过第三方服务器中转,进退皆有路,一定意义上来说是最好的解决方案。
在这一类P2P VPN中比较出名的几种有N2N、Tinc、PeerVPN以及ZeroTier,本次介绍的是N2N。
N2N是开源的,其作者是Ntop作者Luca Deri,也是个牛人,可惜的是他现在已经不再维护N2N,也不知道是啥原因,不过还好开源社区有其他人加入了维护,并且已经成熟了,Bug也没啥太严重的,所以没啥问题,还是挺好用的,N2N分为SuperNode和EdgeNode,前者被称为超级节点,能够在EdgeNode之间建立握手并为无法直连的EdgeNode中转数据,是网络的核心部分。当然由于SuperNode的重要性,N2N支持为EdgeNode指定多个SuperNode,以便组成更复杂的网络,并且防止单个SuperNode出问题导致的整个网络瘫痪。
二.安装配置
N2N的安装其实挺简单的,因为没太多依赖
yum groupinstall "Development tools" -y git clone https://github.com/meyerd/n2n cd n2n/n2n_v2 mkdir build cd build cmake .. make make install
然后就装好了,会生成supernode和edge两个可执行程序,看看名字就知道一个是SuperNode一个是EdgeNode
需要了解一点,EdgeNode和SuperNode是不冲突的,所以在SuperNode的机器上是可以同时运行EdgeNode的,所以这个网络可以搞得很复杂的说,就看你需求了。
对了,在相同平台下编译的supernode和edge文件直接拷贝过去就能跑,不用再次编译,所以……你懂的
服务端的运行很简单,最少情况下只需要指定一个参数就行
supernode -l UDP监听端口 #参数说明 -f 前台运行 -u 指定运行所用的UID -g 指定运行所用的GID -v 输出比较详细的log
那么接下来就是EdgeNode了,这个的参数就比较多了
edge -d 虚拟网卡名 -a 10.0.0.1 -c testnet -k senrame -l 1.2.3.4:1234 #参数说明 -d 虚拟网卡名 -a [static:|dhcp:]虚拟网段(IP),static模式其实可以不用加那个static: 直接写IP就行 -c 用于区分节点的社区(组)名 -k 用于加密的字符串 -K 用于加密的Key文件,和-k不能共存 -s 子网掩码 -l supernode的IP:端口,可以指定多个supernode的 -i NAT打洞间隔 -b 当使用DHCP时定期刷新IP -p 指定本地端口 -u 指定运行所用的UID -g 指定运行所用的GID -f 前台运行 -m 为虚拟网卡指定MAC地址 -r 启用包转发,当-a指定DHCP时需要启用 -E 接收组播MAC地址 -v 输出比较详细的log -t 指定用于管理的UDP端口
如果创建虚拟网卡出问题了,可以尝试手动创建
yum install tunctl -y tunctl -t 虚拟网卡名
然后使用-d指定虚拟网卡名,-m指定MAC来连接,至于uid和gid这个你不是root的情况下可以研究下
另外如果运行在后台的情况下要看问题,可以在/var/log/message文件中查看日志
正常情况下在配置完supernode和edge后就能正常连接了
文章评论
报告博主,自己创建的 tun,使用 -d + tunname 会报错
[tuntap_linux.c:91] ERROR: ioctl() [Invalid argument][-1]
如果是 tap 设备则正常
tinc 没有打洞功能吧