不见春山
骑马倚斜桥,满楼红袖招。
Home
Categories
Archives
Tags
About
Home
N2N 搭建教程
N2N 搭建教程
取消
N2N 搭建教程
由
ctaoist
发布于 2022-04-12
·
最后更新:2023-10-09
1
之前从 Zerotier 切换到 Tinc,但是在 ArchLinux 和创建的 Alpine 镜像中,连接成功一段时间后老是提示 `Metadata socket read error for xxxxx: Connection reset by peer`,搜了一圈也没有找到解决办法,干脆切换到 [N2N](https://github.com/ntop/n2n) 算了。 N2N是一款十分简单且强大的p2p组网软件。它可以实现组网和p2p直连。只需要拥有一台服务端,任何主机都可以接入进来做为客户端,功能更贴近 Zerotier。 ![](https://blog.qiniu.ctaoist.cn/n2n_网络拓扑.jpg) ## 安装 ### supernode 服务端 由于 VPS 的 Debian 软件仓库里的版本非常低,做了一个Docker镜像:`ctaoist/tools:n2n_alpine3.15`,安装的是 n2n_3.0。 ```yaml n2n: container_name: "n2n" image: ctaoist/tools:n2n_alpine3.15 volumes: - /etc/localtime:/etc/localtime:ro cap_add: - NET_ADMIN command: [supernode, -f, -c vpn_name,-p 1234] restart: unless-stopped hostname: "n2n" network_mode: "host" ``` ### 客户端 #### OpenWRT **OpenWRT** 可以使用对应的SDK编译[lean版本的n2n](https://github.com/coolsnowwolf/lede/tree/master/package/lean/n2n_v2),已经升级到了v3,附上已经编译好的 **x86_64 版本**:[edge_x86_64](/downloads/openwrt/n2n-edge_3.0_git-66f557af97b9c2ad42537516101fd04df2639ef0-1_x86_64.ipk) 和 [supernode_x86_64](/downloads/openwrt/n2n-supernode_3.0_git-66f557af97b9c2ad42537516101fd04df2639ef0-1_x86_64.ipk),按需编辑配置文件 `/etc/config/n2n_v2`,客户端对应的 `edge` 段,编辑完后启动并设为开机自启: ```sh /etc/init.d/n2n_v2 start /etc/init.d/n2n_v2 enable ``` #### Linux 客户端 **Linux 客户端**仍然可以使用上述镜像: ```yaml edge: container_name: "edge" image: ctaoist/tools:n2n_alpine3.15 volumes: - /etc/localtime:/etc/localtime:ro - /dev/net/tun:/dev/net/tun - path/edge.conf:/edge.conf cap_add: - NET_ADMIN #command: [/bin/sh, -c, "edge -f -a static:vpn_local_ip -c vpn_name -l 服务端ip:1234 -k keypass, -d n2n, -r"] command: [edge, /edge.conf] restart: unless-stopped hostname: "edge" network_mode: "host" ``` >不通过配置文件虽然可以运行,但ping不通,如果不加 `/bin/sh -c`,则提示:`supernode2sock fails to resolve supernode host 127.0.0.1`,这就非常奇怪了,连 `127.0.0.1` 都无法解析了。通过**配置文件**就可以正常运行:`edge path/edge.conf`,我估计问题还是出在**命令行中的冒号**上。 >有些精简的 Linux 发行版需要手动导入模块: `modprobe tun`,`echo "tun" >> /etc/modules` #### Windows 客户端 **Windows 客户端**需要先安装[TAP驱动](http://build.openvpn.net/downloads/releases/),如果未安装或者安装过但想添加一个新的TAP设备,管理员权限执行: ```sh tapinstall.exe install OemVista.inf tap0901 ``` >1. [tap-windows-9.24.6](http://build.openvpn.net/downloads/releases/tap-windows-9.24.6.zip) 支持千兆,但不支持win7,win7还是推荐安装 [9.21.2](http://build.openvpn.net/downloads/releases/tap-windows-9.21.1.zip) 版本。 >2. 如果安装过TAP驱动,也可以在设备管理器中**添加过时设备**来添加一个新的TAP设备。 >3. 删除设备可以在设备管理器中进行删除 **windows n2n 下载地址**:https://github.com/lucktu/n2n,如果需要后台运行,创建一个新的 **vbs 脚本**: ```vbs CreateObject("WScript.Shell").Run "path\edge.exe -a static:vpn_local_ip -c vpn_name -l 服务端ip:1234 -k keypass -d tuntap_name -r", 0 ``` #### MacOsX 客户端 ```sh brew install --cask tuntap ``` 从 [n2n_mac 下载地址](https://github.com/lucktu/n2n/tree/master/Mac) 下载需要的版本。 以后端服务运行请参考[Tinc 搭建教程-MacOSX 客户端](https://blog.ctaoist.cn/blog/post/ctaoist/Tinc%E6%90%AD%E5%BB%BA%E6%95%99%E7%A8%8B#mac-osx-%E5%AE%A2%E6%88%B7%E7%AB%AF),方法是一样的。 ## 添加静态路由 **Windows 客户端**想访问 OpenWRT NAT 内部资源,需要手动添加路由,假设 OpenWRT 内部网段为 `192.168.1.0/32`,OpenWRT 在 VPN 网络中的 ip 为 `10.0.0.1`,则在 Windows cmd 中执行: ```sh route add -p 192.168.1.0 mask 255.255.255.0 10.0.0.1 ``` **Linux 客户端**需要执行的则是: ```sh ip route add 192.168.1.0/24 via 10.0.0.1 ``` >**注**:edge 启动参数中 `-r` 不能缺失,表示允许数据包在同虚拟小组间转发,对应的 OpenWRT 的配置为 `/etc/config/n2n_v2` 中 `edge` 段的 `option route '1'` >Linux 添加的路由重启会失效,可以在 `/etc/rc.local` 中添加命令,这里不赘述。
VPN
VPN
虚拟组网
该博客文章由作者通过
CC BY 4.0
进行授权。
分享
最近更新
群晖升级 ARPL 笔记
本地部署大语言模型
WireGuard 搭建组网教程
LVM 管理
HK1 RBOX X4 电视盒子折腾笔记
热门标签
机器学习
Tensorflow
Linux
VPN
虚拟组网
Router
ROS
嵌入式
C++
C
文章目录
迁移学习入门
WireGuard 搭建组网教程