前言

本人家里搞了个黑群晖,除了存储一些照片外,还搭建了一些小服务,远程唤醒家里的电脑等等。无奈使用的是移动宽带,无法获取IPv4 的公网IP地址,所以开启了IPv6 用于外部访问,但现在IPv6 网络环境相对较少,比如在公司要访问家里网络还得使用手机开数据热点。着实不方便(流量用不起~~)。

刚好前段时间阿里云搞活动,两百多买了3年的基础版ECS,想办法利用起来

  • 搞FRP等内网穿透,一个局限性通过服务器转发,服务器带宽过小,这也是当初选择ipv6的主要原因。

  • 使用p2p vpn,这种方式服务器只起到牵线搭桥作用,建立连接以后,让连接的两端直接通讯(当然实际点对点建立跟NAT类型有关,如果建立失败还是使用服务器进行数据转发)。常用的N2N、Tinc、PeerVPN以及ZeroTier,此使用N2N搭建。

    说明 内网穿透之n2n-介绍及使用说明

    经测试很遗憾,自己网络的NAT类型为Symmetric NAT,没有打通点对点的连接方式,还是用服务器的龟速转发。可以使用NatTypeTester测试下网络类型,有兴趣的可以尝试下。

部署

直接使用docker进行部署,安装docker网上一堆,这里就忽略了。。

阿里云ECS安装n2n supernode 及 edge 节点

# 启用supernode
docker run -dit --name n2n_supernode -e SUPERNODE_PORT=10000 --network=host --restart=always forgaoqiang/n2n_supernode:latest

# 也可以在服务器上启用edge node,根据实际修改
docker run -dit --network=host --privileged --name=n2n_edge  --restart=always \
-e EDGE_PORT=10001 \
-e EDGE_SUPERNODE=XXX.XXX.XXX.XXX:10000 \
-e EDGE_TUN_NAME=edge0 \
-e EDGE_IP=10.10.10.10 \
-e EDGE_NETMASK=255.255.255.0 \
-e EDGE_COMMUNITY=ali2home \
-e EDGE_KEY=ali2home \
forgaoqiang/n2n_edge

ps:阿里云服务还需在控制面版安全策略组,开放10000 端口。

在黑群晖上安装 edge节点

# edge node,根据实际修改
docker run -dit --network=host --privileged --name=n2n_edge  --restart=always \
-e EDGE_PORT=10001 \
-e EDGE_SUPERNODE=XXX.XXX.XXX.XXX:10000 \
-e EDGE_TUN_NAME=edge0 \
-e EDGE_IP=10.10.10.20 \
-e EDGE_NETMASK=255.255.255.0 \
-e EDGE_COMMUNITY=ali2home \
-e EDGE_KEY=ali2home \
forgaoqiang/n2n_edge

windows 安装edge节点

windows 使用 exe软件安装,也不展示了。

测试

正常启动后
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

遇到的问题

在黑群晖中启动docker 报错

# docker logs -f n2n_edge
07/Sep/2021 05:55:38 [edge.c:594] Starting n2n edge 2.5.0 May 16 2019 14:54:42
07/Sep/2021 05:55:38 [edge_utils.c:1694] Adding supernode[0] = XXX.XXX.XXX.XXX:10000
07/Sep/2021 05:55:38 [edge.c:613] ip_mode='static'
07/Sep/2021 05:55:38 [tuntap_linux.c:81] ERROR: tuntap open() error: No such file or directory[2]. Is the tun kernel module loaded?

检查tun模块状态

检查是否安装了 tun 模块:

lsmod | grep tun

如果结果为空,请尝试安装它:

insmod /lib/modules/tun.ko

如果一切顺利,继续进行下一个测试。

测试tun.ko模块是否有效

确保 tun.ko 模块可以正常工作:

mkdir /dev/net 
mknod /dev/net/tun c 10 200 
chmod 600 /dev/net/tun 
cat /dev/net/tun

如果 cat 命令的返回结果是 File descriptor in bad state,则表示模块已正确安装。

使tun.ko模块持久化

模块安装需要在每次 Syn­ol­ogy 重启时保持持久性,就必须重复使用 insmod 命令。
可以创建开机脚本搞定,执行如下命令进行创建:

cat <<EOF > /usr/local/etc/rc.d/tun.sh #!/bin/sh -e insmod /lib/modules/tun.ko EOF

给脚本可执行权限:

chmod a+x /usr/local/etc/rc.d/tun.sh

参考连接: https://www.moewah.com/archives/2750.html

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐