n2n搭建内网穿透
技术博客汇总:
官方文档:
https://github.com/ntop/n2n/tree/dev/doc
原理和历史:
http://www.lucktu.com/archives/750-2.html
udp,可以直连
组网文档:
https://blog.csdn.net/KnownAll/article/details/124037161
https://zhuanlan.zhihu.com/p/392664278
下载已经编译好的版本(客户端和服务器端):
官方actions任务下载:
二进制文件下载:
We do not explicitly release Windows binaries, but the automated test workflow creates them. You can find the the most current binaries at the Actions tab, at the Testing workflow, select the newest run, scroll down to the Artifacts sections where the binaries file contains the Windows binaries in its /x86_64-pc-mingw64/usr/sbin/ folder.
注意要登陆账号,才能在Artifacts上点击下载
监听端口:
https://github.com/ntop/n2n/issues/281
netcat -u localhost 5644 (edge) or netcat -u localhost 5645(supernode) |
组网:
一、服务端:
1)服务端配置文件:
/etc/n2n/supernode.conf:
- -p 5557 #监听端口,需要防火墙打开
- -c /etc/n2n/community.list #建立可连接的community名,安全,如果名字不对supernode会拒绝连接,可以搞秘钥验证,懒得搞
- -M #关闭mac和IP欺骗
- -a 10.10.100.0-10.10.100.0/24 #奇怪的写法,不能分段,而且对端冲突怎么办
/etc/n2n/community.list :
community.list (a text file)
os2260
- vpnserver Ew4BY0BVroivieEDs7ZqGvcoJBDgDqP-HLkFMsuiKJy
上面的key用下面的方法生成

2)systemd服务编制:
https://www.vultr.com/docs/connecting-multiple-vultr-zones-with-n2n/
放在/usr/lib/systemd/system或/etc/systemd/system下,配置文件如下:
[Unit] |
注意加RemainAfterExit=yes,否则无法启动
二、客户端(ubuntu):
1)作为IP中转开启路由转发:
ech"1">/proc/sys/net/ipv4/ip_forward |
加入/etc/sysctl.conf
sysctl -p |
2)配置
root@ubsvr:/etc/n2n# cat edge.conf
- -l 81.69.193.51:5557 #supernode服务器IP和端口
- -c os2260-LAB-20220515 #设定community名字,两个edge需相同,如果supenode上有community list,三者需相同
- -k admin888* #community密码
- -a 10.10.100.100 #本端分配的IP
- -i 10 #10秒后edge之间尝试打洞
- -r #edge开启包转发,如果不加这个参数,无法转发IP
- -E #edge转发多播mac地址,没有这个,无法用动态路由
- -d edge0 #指定tup端口
- -z1 #使用lzo压缩算法
- -i vpnserver
- -J admin888*
- -A4
3)配置dhcp,可以不配置,在supernode上用-a指定分配的端,windows客户端留空
apt install -y isc-dhcp-server |
编辑/etc/default/isc-dhcp-server:

编辑/etc/dhcp/dhcpd.conf:
option domain-name "os2600.org"; |
4)systemd配置
root@ubsvr:/usr/lib/systemd/system# cat edge.service
放在 /usr/lib/systemd/system或/etc/systemd/system下,配置文件如下:
[Unit] |
二、客户端(windows):
1)edge.conf配置
- -i 81.69.193.51:5557
- -c os2260-LAB-20220515
- -k admin888*
- a dhcp:0.0.0.0
#-a 10.10.100.101
- -r
#-E
- -z1
3)注意,3.1.1取消了-n 10.10.10.0/24:10.10.100.100的配置
注意:3.1.1.16的dhcp是client分配,新版的是supernode分配
参数参考:
supernode参数:
- p 端口 | Supernode监听端口,默认 7654
- F federation名称 | supernode federation名称,默认为 *Federation
- l 主机:端口 | 和 -F 配合,已知的一台Supernode地址和端口
- M | 关闭非用户名密码认证的群组的MAC和IP地址欺骗保护功能
- V 文本 | 自定义字符串(最长19位),用于在管理输出日志中展示
- c 组名称配置文件路径 | 该配置文件中包含允许使用的组名称
- a IP段 | 用于自动分配IP,格式如 -a 192.168.0.0-192.168.255.0/24
- t 端口 | 用于管理supernode
- -management_password 文本 | 管理端的密码
- v | 输出更多日志
edge参数:
- c 组名称 | 用于区分虚拟局域网
- l 服务端(supernode):端口 | N2N的服务端(中心节点)
- p 本机UDP端口 | 绑定本机指定的UDP端口,防止部分环境下对UDP限制影响N2N组网
- D | 启用PMTU发现。PMTU发现可以减少碎片,但在不正确支持时会导致连接暂停
- e IP地址 | 作为首选播发 提供的本地IP地址,如果多播对等检测不可用,则很有用,“-e auto”参数则尝试IP地址自动检测
- S1 | 不使用P2P连接,总是使用UDP模式通过supernode中转(不推荐)
- S2 | 不使用P2P连接,总是使用TCP模式通过supernode中转(Windows不支持该参数)
- i 秒 | 设置NAT打孔间隔,默认:20
- L TTL值 | 当UDP NAT打孔通过服务端(中心节点)时注册包的TTL(默认为0,表示不设置)
- v | 输出更加详细的日志
- t 端口 | 管理UDP端口(用于本机同时运行多个edge时)
- n 路由表(格式:目标IP段:网关) | 附加路由表,可以多次调用(例如:-n 192.168.2.0/24:192.168.6.5)
- -no-port-forwarding | 关闭 UPnP/PMP 功能
虚拟网卡相关:
- a 获取IP的模式 | 如需自定义虚拟IP,使用 -a IP地址 来自定义虚拟IP,如需自动获取(需服务端支持),留空即可
- m MAC地址 | 设置N2N虚拟网卡的MAC地址,防止和虚拟网下的其他机器重复
- d tun网卡名称 | 指定本机的N2N网卡,如果本机存在多个Tap网卡,可以使用此参数自定义,或留空使程序自动搜寻
- M MTU值 | N2N虚拟网卡设置MTU值,默认:1390
- r | 通过n2n社区启用数据包转发
- E | 接受多播MAC地址,默认:丢弃
- I 一些文字 | 客户端的文字描述,在管理端日志输出中更容易识别
- J 密码 | 客户端的密码,用于需要用户名密码认证的supernode
- P 密钥 | 多个supernode组成联盟时,需要填入该参数以便认证
- x 数字 | 设置虚拟网卡的跃点数,以便于更好的联机游戏(默认为0,自动)
加密相关:
若不指定 -k 参数或仅有 -k 参数,则默认为 AES 加密算法;如需不加密,需单独指定 -A1 参数
- k 组密码 | 用于虚拟局域网内传输的数据加密,留空则不加密
- A1 | 关闭局域网内传输的数据加密
- A2 | 使用 twofish 加密算法加密传输的数据
- A3 | 使用 AES 加密算法加密传输的数据
- A4 | 使用 chacha20 加密算法加密传输的数据
- A5 | 使用 Speck-CTR 加密算法加密传输的数据
- H | 数据包报头完整加密
压缩相关:
若不指定,则不压缩数据
- Z1 | 使用 LZO(1x) 压缩算法压缩传输的数据
- Z2 | 使用 ZSTD 压缩算法压缩传输的数据
其它:
n2n-benchmark:测量性能,加密和非加密
n2n-keygen:生成加密钥匙