n2n算是通过P2P内网穿透实现虚拟局域网最早的开源项目了。

2020年作者重拾了代码,并开始更新,不仅提高了稳定性也新增了许多功能,并即将推出新的3.0版本。
以下文章是为了centos安装n2n v2.9版写的。包括部署其超级节点以及边缘节点。

基础解释

为了开始使用n2n,需要两个元素:

  • 一个超级节点:它允许边缘节点宣布和发现其他节点。它必须具有可在Internet上公开访问的端口。
  • 边缘节点:将成为虚拟网络一部分的节点
    在n2n中的多个边缘节点之间共享的虚拟网络称为社区。单个超级节点可以中继多个社区,并且一台计算机可以同时成为多个社区的一部分。边缘节点可以使用加密密钥对社区中的数据包进行加密。

n2n尝试在可能的情况下通过udp(未来3.0版本支持TCP)在边缘节点之间建立直接的对等连接。如果不可能(通常是由于特殊的NAT设备),则超级节点也用于中继数据包。
和zerotier类似,但整个过程理论上来说在局域网内都可以完成,无需互联网。

安装

我原准备使用编译安装的,但在编译过程中遇到了各种环境问题,在参考了issue上其他人的反馈后,决定先还是不用编译安装了。毕竟我最后还是得生成RPM,免得编译环境把服务器的运行环境弄坏。
以下是centos7安装方法:
1.添加ntop存储库
用root账号,执行:

cd /etc/yum.repos.d/
wget https://packages.ntop.org/centos/ntop.repo -O ntop.repo

2.安装epel源

rpm -ivh https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm

3.安装n2n
现在已经添加了ntop软件包存储库,可以通过以下命令安装:

yum erase zeromq3 
(执行一次以确保zeromq3没有被安装)
yum clean all
yum update
yum install n2n

完事。
使用edge -v查看安装的版本,最起码是2.9版。使用edge -h查看帮助信息

超级节点

您可以通过在公共服务器(例如VPS)上设置超级节点来创建自己的基础架构。您只需要在防火墙(通常为iptables)上打开一个端口(以下示例中为1234 )。
1.安装n2n软件包
2.编辑/etc/n2n/supernode.conf并添加以下内容:

-p=1234

使用启动超节点服务 sudo systemctl start supernode
(可选)在引导时启用超级节点启动: sudo systemctl enable supernode
现在,超级节点服务应该已启动并在端口1234上运行。现在,在边缘节点上,您可以指定-l your_supernode_ip:1234使用它。所有边缘节点必须使用相同的超级节点。

边缘节点

安装完成n2n后
在终端-1上运行:

$ sudo edge -c mynetwork -k mysecretpass -a 192.168.100.1 -f -l supernode.ntop.org:7777

在终端-2上运行:

$ sudo edge -c mynetwork -k mysecretpass -a 192.168.100.2 -f -l supernode.ntop.org:7777

现在,两个主机可以相互ping通。
这里是手动分配了内网IP。

开机启动

vi /etc/systemd/system/n2n.service

输入:

[Unit]
Description=n2n
After=network.target

[Service]
Type=simple
User=root
ExecStart=/usr/sbin/edge -c mynetwork -k mysecretpass -a 10.0.0.0-10.255.0.0/16 -f -l supernode.ntop.org:7777

[Install]
WantedBy=multi-user.target

其他

以下内容是比较有用的一些附属功能,我做个备忘录。

IP分配

n2n支持通过DHCP分配网络,无论是n2n提供的DHCP服务器还是边缘节点上有一台机器作为DHCP服务器均可,详情可以参考:TapConfiguration.md
在上文中的代码可以写成

$ sudo edge -c mynetwork -k mysecretpass -a 10.0.0.0-10.255.0.0/16 -f -l supernode.ntop.org:7777

路由

n2n也支持通过命令给设备传递路由,详情参考IPv4 Routing (Linux)

白名单

目前n2n支持通过白名单的方式来私有化超级节点,上文中通过-c来传递“社区”名称,而超级节点可以指定哪些“社区”可以使用这个节点。详情可以看Communities

加密

使用参数-k后即可加密节点间的通信,详细编码规则可以看Cryptography in n2n

其他

n2n目前还在完善开发当中,但无论是已经完成的还是即将完成的都超级牛,大家可以前往这个项目详细查看。

https://github.com/ntop/n2n/tree/dev/doc

参考:
ntop/n2n
CentOS/RedHat Development Builds
N2N组网 实现家里访与公司网络互访(精编版)

最后修改:2021 年 02 月 13 日 04 : 11 AM