// NETWORK / MESH
用 EasyTier 把两台服务器连成内网
一台有公网 IPv6,一台只有家用宽带。监控机需要看见另一边的服务端口, 但又不想把这些端口暴露给整个互联网。于是我用 EasyTier 给两台机器铺了一条虚拟内网。
00 / 场景
两台机器分别在不同网络里:一台是对外提供网站的 Alpine,另一台是跑监控和机器人的旧 Ubuntu。 我需要让监控机能够访问 Alpine 上的几个 TCP 服务,同时保持这些服务只在内网可见。
可选方案有很多:WireGuard、Tailscale、ZeroTier、frp。选 EasyTier 的原因很简单: 它支持点对点组网,配置不重,而且可以自己控制中继节点。
01 / 它解决什么
EasyTier 会在两台机器之间建立一张虚拟网络,每台机器拿到一个虚拟 IP。
之后访问 10.144.144.1:6186 就像访问同一交换机下的机器,
不需要知道对方的公网地址,也不需要把服务端口映射到公网。
02 / 配置示例
两台机器使用同一个网络名和密钥,其中一台作为初始 peer。下面的字段仅作示例, 不同版本的 EasyTier 配置格式可能略有差异,照着官方文档改:
[network_identity]
network_name = "home-lab"
network_secret = "a-long-random-secret"
[[peer]]
uri = "tcp://public-node.example.com:11010"
[[proxy_network]]
cidr = "10.144.144.0/24"
如果没有固定的公网节点,可以让一台有公网地址的机器做首个 peer,或者使用一个 自己控制的中继。不要把网络密钥交给不可信的公共中继。
03 / 分配虚拟地址
给两台机器固定虚拟 IP,监控配置里就能写死地址,不必每次查:
- Alpine:
10.144.144.1 - 旧 Ubuntu:
10.144.144.2 - 网段:
10.144.144.0/24
固定地址比 DHCP 更适合监控:Uptime Kuma 的 TCP 监控项一旦写好,就不应该因为地址变化而误报。
04 / 服务要监听对地址
这是最容易踩的坑:服务如果只监听 127.0.0.1,通过虚拟内网是访问不到的。
要么让它监听虚拟 IP,要么给它套一层 SSH 隧道。
ss -tlnp | grep 6186
# 只监听虚拟地址的示例
# 具体参数取决于服务,有的用 --host,有的改配置文件
如果不想改服务监听地址,可以保持 127.0.0.1,然后在监控机上开一条
SSH 本地转发。安全边界更清楚,但监控项会多一层依赖。
05 / 防火墙只放行必要流量
公网节点只需要放行 EasyTier 自己的端口;业务端口只在虚拟网段内可见。 如果使用 nftables,可以把虚拟网段加进白名单:
ip saddr 10.144.144.0/24 tcp dport { 6186, 18765, 8932 } accept
ip saddr 0.0.0.0/0 tcp dport { 6186, 18765, 8932 } drop
同时在公网入口上关闭这些端口的端口映射。虚拟内网只是多了一条路,不是替代防火墙。
06 / 验证连通性
ping -c 3 10.144.144.1
nc -vz 10.144.144.1 6186
curl -sS -o /dev/null -w '%{http_code}\n' http://10.144.144.1:18765/
如果 ping 通但端口不通,先看目标服务监听地址,再看防火墙,最后看 MTU。 虚拟网络里 MTU 配得过大,SSH 可能能连上但一传大数据就卡住。
07 / 小结
EasyTier 让「两台机器在同一个内网」这件事变得很轻。 但真正决定安全性的,仍然是服务监听地址、防火墙规则和密钥管理。 组网只是把路修好,门还是要自己锁。