lucky+easytier构建个人内网环境

个人内网环境搭建

搭建一个个人的内网环境

前言

随口说几句对于nas而言,网上大部分外网访问方案主要分为内网穿透和异地组网。我主要倾向于异地组网方案,个人认为更加的安全。由于我长期在学校里,学校的ap隔离非常恶心(tailscale打不通,是的,直接timeout),并且我意外的测试出easytier能够打通连接,而且配置一个中转会更加稳定。而且不知什么原因似乎公共的服务器不是很稳定且大部分都不能中转流量,这个对无法p2p的时候非常灾难。所以我尝试做了可以脱离et公共体系的异地组网

lucky可以实现在nat1upnpnat-pmp的环境下打开公网端口;easytier负责异地组网

实现这个方案,你需要:

  • 多台安装了easytier客户端的设备
  • 一台网络环境为公网或者nat1或者上游开启了upnp且打通后为公网或nat1,24小时长期在线的设备,用于做中继服务器
  • 一个域名(可选)
  • 中继服务器上已安装好lucky(可选)

如果你的中继服务器为固定公网ip可以不需要域名,如果是动态的那么需要域名做ddns。如果是nat1或者是upnp环境那么安装lucky来穿透端口。个人建议如果公网是ipv6还是配一个域名比较好

网络环境为公网可以不用检查网络环境和写穿透规则,直接tcp://ip:11010即可

检查网络环境

我们需要先检测设备的stun,首先我们打开lucky,点击 内网穿透里面的stun内网穿透 屏幕截图 2026-04-07 173609.png 然后点NAT类型检测 屏幕截图 2026-04-07 174124.png 然后选多个服务器多测试几遍,这个有些服务器不是很准。如果大部分显示NAT1那么就可以直接去写穿透规则了,否则需要在路由器开启upnpnat-pmp后,在终端执行下面的指令

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
sudo apt update && sudo apt install -y miniupnpc natpmpc && bash -lc '
echo "=== UPnP ==="
u="$(upnpc -s 2>&1)"; echo "$u"; echo
if printf "%s\n" "$u" | grep -Eq "Found valid IGD|ExternalIPAddress|External IP address"; then
  echo "[UPnP] Supported / Responding"
else
  echo "[UPnP] Not detected or disabled"
fi
echo
echo "=== NAT-PMP ==="
n="$(natpmpc 2>&1)"; echo "$n"; echo
if printf "%s\n" "$n" | grep -Eq "Public IP address|using gateway"; then
  echo "[NAT-PMP] Supported / Responding"
else
  echo "[NAT-PMP] Not detected or disabled"
fi
'
  • UPnP 成功:输出 [UPnP] Supported / Responding,并伴随 Found valid IGDExternalIPAddress 之类内容
  • UPnP 失败:输出 [UPnP] Not detected or disabled,常见是 No IGD UPnP Device found on the network
  • NAT-PMP 成功:输出 [NAT-PMP] Supported / Responding,并伴随 Public IP addressusing gateway
  • NAT-PMP 失败:输出 [NAT-PMP] Not detected or disabled,常见是超时或 readnatpmpresponseorretry returned ...

只要其中一个成功就可以写穿透规则了

穿透规则

先点添加穿透规则,然后如下图配置 屏幕截图 2026-04-07 183324.png 然后点添加,可以重复操作来添加udp

添加后等一会就能打通了

出于不知名的原因,我需要禁用通道有效性检测,原因我不清楚,但是不禁用就会陷入lucky设计的重启规则的死循环,而且很奇怪的是通道是通的

我是浙江联通,实测下来tcp连接成功率感人但是udp稳定,一般不都是udp不稳定但是tcp稳定吗……

配置DDNS

由于我是动态ipv4和动态ipv6,而且我不喜欢填ip就是懒😆 ,所以我选择配置ddns。此处我使用托管在cloudflare的域名

首先切换到动态域名,再点击添加任务,填写cf的用户key 屏幕截图 2026-04-07 185602.png 启用{ipv6Addr}{ipv4Addr} 屏幕截图 2026-04-07 185750.png 然后写一个ipv6(AAAA)的同步记录,我建议用子域名,比如et1.example.com。备注随便写只要记得住就行。之后点添加任务

然后添加一个txt记录 屏幕截图 2026-04-07 190339.png 备注随便写,自己看的懂就行。记录名是之前的子域名,记录内容是udp://{STUN_easytier_ADDR}

此处换tcp只要把udp换了就行。{STUN_easytier_ADDR}类似于环境变量,其中easytier是穿透规则的规则名称,比如说写的名称是et那就写{STUN_et_ADDR}

对于ios设备是不支持txt://协议的,所以说我们要换一个方案。我是直接在动态域名里面直接写A解析和AAAA解析的,然后用tcp://et1.example.com:11010和udp://et1.example.com:11010来连到中继服务器

创建easytier虚拟内网

先登录到easytier控制台 屏幕截图 2026-04-07 193054.png 登录成功后,点设备列表,应该会有一台设备,点击那个设备的设置(小齿轮),创建新网络 屏幕截图 2026-04-07 193932.png

  • 虚拟ipv4地址:关闭DHCP,填一个内网ip,比如说:192.168.66.1
  • 网络名称,网络密码:自己想一个,记住
  • 网络方式:这个地方是写中继服务器的地址的,写txt://et.example.com

高级设置可以直接抄我的,主要是选启用私有模式 屏幕截图 2026-04-07 194446.png 然后按照这个格式改一下ip比如说192.168.66.2来配置其他设备就行了

参考来源

使用 Hugo 构建
主题 StackJimmy 设计