如何通过 docker 部署 n2n
在以往,部署 n2n 往往需要通过 make 进行源码编译,或是通过包管理器下载安装。安装过程繁琐且难以迁移,配置也容易造成混乱
我在 docker hub 上找到了一个制作水平很高的 n2n v2.9 docker,仅仅只有 7 MB 且运行良好。下面介绍如何通过这个镜像实现 n2n 的 docker 部署。
镜像获取与测试
首先需要下载镜像,通过以下代码将镜像从 docker hub 下载到本地:
运行以下指令就能在不运行容器的情况下测试镜像是否可用及其 n2n 版本:
1 2 3
| docker run --rm --network host yingftf/n2n supernode -h
docker run --rm --cap-add=NET_ADMIN --cap-add=NET_RAW --device=/dev/net/tun --network host yingftf/n2n edge -h
|
n2n 的容器化部署
在 docker hub 页面上,作者介绍了通过映射卷操作配置文件部署的方法。但经过我的测试这个方法很不稳定,容器很可能无法启动。因此这里只介绍通过 docker 指令部署 n2n 的方法。
各位也可以参考 n2n 官方仓库文档。
配置 supernode
直接输入以下指令即可:
1 2 3 4 5
| docker run -d --restart=always --network host --name supernode yingftf/n2n supernode -p 8990 -f -v
supernode -l 8990 -f -v
|
检查 docker ps,发现名为 supernode 的容器处于运行状态则说明部署完成
配置 edge
即使是部署了 supernode 的主机,也必须部署一个 edge 。也就是说,这个主机会同时运行两个容器
在每一个将要部署 edge 的主机上输入以下指令即可:
1 2 3 4 5 6 7 8 9
| docker run -d --restart=always --cap-add=NET_ADMIN --cap-add=NET_RAW --device=/dev/net/tun --network host --name edge0 yingftf/n2n edge -a 10.10.2.1 -c mynetwork -k nic1234 -l {supernode 的公网 IP}:8990 -r -f
edge -a 10.10.2.1 -c mynetwork -k nic1234 -l {supernode 的公网 IP}:8990 -r -f
|
检查 docker ps,发现名为 edge0 的容器处于运行状态则说明部署完成。
检查 n2n 连接是否建立
在 supernode 主机(10.10.2.1)上检查:
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| (base) [root@iz2zeid7airzi8dw94q5l4z ~] PING 10.10.2.3 (10.10.2.3) 56(84) bytes of data. 64 bytes from 10.10.2.3: icmp_seq=1 ttl=64 time=10.0 ms 64 bytes from 10.10.2.3: icmp_seq=2 ttl=64 time=9.25 ms 64 bytes from 10.10.2.3: icmp_seq=3 ttl=64 time=9.02 ms 64 bytes from 10.10.2.3: icmp_seq=4 ttl=64 time=9.63 ms ^C --- 10.10.2.3 ping statistics --- 4 packets transmitted, 4 received, 0% packet loss, time 3003ms rtt min/avg/max/mdev = 9.028/9.492/10.051/0.400 ms (base) [root@iz2zeid7airzi8dw94q5l4z ~] root@10.10.2.3's password: Last login: Tue Jan 17 05:45:36 2023 from 10.38.26.180 (env-3.7) (base) [root@localhost ~]#
|
Ping 和 SSH 均能连接,说明 n2n 连接成功建立
然后在 edge 主机(10.10.2.3)执行同样操作:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| (env-3.7) (base) [root@localhost home] PING 10.10.2.1 (10.10.2.1) 56(84) bytes of data. 64 bytes from 10.10.2.1: icmp_seq=1 ttl=64 time=11.3 ms 64 bytes from 10.10.2.1: icmp_seq=2 ttl=64 time=10.0 ms 64 bytes from 10.10.2.1: icmp_seq=3 ttl=64 time=9.66 ms 64 bytes from 10.10.2.1: icmp_seq=4 ttl=64 time=9.69 ms ^C --- 10.10.2.1 ping statistics --- 4 packets transmitted, 4 received, 0% packet loss, time 3004ms rtt min/avg/max/mdev = 9.667/10.194/11.333/0.682 ms (env-3.7) (base) [root@localhost home] root@10.10.2.1's password: Last login: Tue Jan 17 20:20:28 2023 from 120.36.171.227
Welcome to Alibaba Cloud Elastic Compute Service !
(base) [root@iz2zeid7airzi8dw94q5l4z ~]#
|
至此, n2n 的容器化部署和连接建立全部完成。