这篇文章写给第一次接触“组网”的朋友。我会用最少的术语,把“一台服务器、两台电脑怎么连成一个虚拟局域网”这件事讲清楚。

先看结论:这套东西到底是怎么工作的?

一句话版:服务器上有一个一直在运行的 EasyTier 程序,它被注册成了系统服务(开机自动启动);两台电脑用 EasyTier 的图形界面(GUI)加入同一个网络,于是大家就像在同一个局域网里一样。

更具体一点:

  1. 服务器上的程序负责“牵线搭桥”,让两台电脑互相找到对方;
  2. 两台电脑尽量直接通信(P2P),不走服务器,速度快、不占服务器带宽;
  3. 你打开电脑上的 GUI,它就会自动连上服务器。服务器“在线”,就是因为那个服务一直在跑。

一、先搞懂几个词

大白话解释
公网服务器 在网上有固定“门牌号”(公网 IP)的电脑,任何人从任何地方都能访问它
内网电脑 家里或公司路由器后面的电脑,外面的人不能直接找到它
组网 让这些“找不到”的电脑之间也能互相访问,像在同一个局域网里
P2P 直连 两台电脑之间直接通信,不绕路
UDP 打洞 两台内网电脑通过服务器交换联系方式后,尝试直接连通的技术
信令 正式通信前传的少量“打招呼”消息,比如“我在哪、你在哪”
端口 服务器上某个服务的入口,像大楼里的房间号
systemd 服务 Linux 系统管理后台程序的方式,能做到后台常驻、开机自启
防火墙/安全组 门卫,默认不让人进,需要手动放行端口
SSH 工具 远程操作服务器的软件,我用的是 FinalShell

二、整体架构

公网服务器(CentOS + easytier-core)
      │  tcp/udp:<端口>(只传“打招呼”的信令,不传你的文件)
 ┌────┴────┐
 │         │
电脑A     电脑B
(GUI)     (GUI)
 └── 打洞成功后 A ↔ B 直接通信 ──┘

一句话记住方案:服务器只负责介绍,不负责传话。

三、从 0 到 1 的完整步骤

第 0 步:准备材料

  • 一台有公网 IP 的 Linux 服务器(我的系统是 CentOS 7.2。注意:CentOS 7 已停止维护,本教程只做演示,生产环境建议用仍受支持的系统);
  • 两台 Windows 电脑(电脑 A 和电脑 B);
  • 软件:服务器用 EasyTier 命令行版,电脑用 EasyTier GUI 版。

第 1 步:登录服务器

  1. 打开 FinalShell,新建一个 SSH 连接;
  2. 填服务器的公网 IP、用户名(一般是 root)和密码;
  3. 连接成功后,你会看到一个类似“远程黑窗口”的命令行界面,后面所有命令都输在这里。

第 2 步:把 EasyTier 放到服务器上

  1. 打开 EasyTier 官方 GitHub Releases 页面,下载 Linux 对应版本(x86_64);
  2. 用 FinalShell 把压缩包直接拖上去,或者用它的上传功能;
  3. 解压后得到一个 easytier-linux-x86_64/ 文件夹,整个放到 /opt/easytier/ 下;
  4. 给程序加执行权限:
chmod +x /opt/easytier/easytier-linux-x86_64/easytier-core /opt/easytier/easytier-linux-x86_64/easytier-cli

第 3 步:写服务器的配置文件

配置文件是给程序看的“说明书”,告诉它:网络叫什么、密码是什么、监听哪个端口、要不要转发数据。下面是脱敏后的配置文件,真实信息都换成了 <占位符>

# 服务器端:custom-shard-center.toml(脱敏示例)
hostname = "我的服务器"   # 可自定义

# 服务器不加入虚拟网、不分配虚拟 IP,只做中转管理
ipv4 = ""
dhcp = true

# TCP 和 UDP 监听同一个端口,提高穿透成功率
listeners = [
    "tcp://0.0.0.0:<端口>",
    "udp://0.0.0.0:<端口>",
]

# 管理控制台只监听本机,不要暴露到公网
rpc_portal = "127.0.0.1:<本地管理端口>"

[network_identity]
network_name = "<网络名>"
network_secret = "<网络密钥>"

[file_logger]
level = "warn"
file = "easytier"
dir = "/opt/easytier/logs/"

[flags]
default_protocol = "tcp"
enable_encryption = true
multi_thread = true
enable_ipv6 = true

# 允许 UDP 打洞,P2P 直连的关键
disable-udp-hole-punching = false

# 开启 KCP/QUIC 输入,增强穿透和弱网表现
disable_kcp_input = false
disable_quic_input = false

# 白名单留空:服务器只帮忙建立 P2P 连接,不转发业务数据
relay_network_whitelist = ""

# 允许转发 RPC,节点之间才能互相发现
relay_all_peer_rpc = true

disable_p2p = false

几个关键项:

配置项 大白话解释
ipv4 = "" 服务器不进虚拟网、不占虚拟 IP,只当“介绍人”
listeners 同时开 TCP 和 UDP 两个“门”,提高连上的概率
rpc_portal 本地管理口,只给本机用,别对外开放
network_name / network_secret 虚拟网的“网名和密码”,所有设备必须一模一样
relay_network_whitelist = "" 不为别人转发数据,只帮忙建立 P2P 连接
relay_all_peer_rpc = true 允许转发“打招呼”消息,电脑之间才能互相发现
disable-udp-hole-punching = false 允许 UDP 打洞,这是 P2P 直连的关键
enable_encryption = true 通信加密,别忘了用足够强的密码

第 4 步:先手动运行一次,确认配置没问题

cd /opt/easytier/easytier-linux-x86_64
./easytier-core -c custom-shard-center.toml
  • 程序不报错、一直运行,说明配置没问题;
  • 可以另开一个 SSH 会话,用 ss -lntup | grep <端口> 确认端口正在监听;
  • 确认没问题后按 Ctrl+C 停掉,下一步交给系统来管理。

第 5 步:注册成 systemd 服务(重点!)

大白话解释:手动启动的程序,SSH 一关可能就没了;systemd 服务就是把程序交给系统托管,关掉 SSH 它还在跑,重启服务器它也会自动启动。

在服务器上创建服务文件(也可以在电脑上写好再传上去):

vi /etc/systemd/system/easytier-share-center.service

文件内容如下(这就是我服务器上实际用的服务文件):

[Unit]
Description=EasyTier Service
After=network.target syslog.target
Wants=network.target

[Service]
Type=simple
ExecStart=/opt/easytier/easytier-linux-x86_64/easytier-core -c /opt/easytier/easytier-linux-x86_64/custom-shard-center.toml

[Install]
WantedBy=multi-user.target

看不懂没关系,逐行解释:

内容 大白话解释
[Unit] “基本信息”段落开始
Description=EasyTier Service 给服务起的名字,方便自己辨认
After=network.target syslog.target 等网络和日志系统准备好再启动
Wants=network.target 希望网络可用
[Service] “怎么运行”段落开始
Type=simple 程序直接运行,交给系统托管
ExecStart=... 真正执行的启动命令,路径要和你的实际情况一致
[Install] “开机启动”段落开始
WantedBy=multi-user.target 正常开机进入系统后启动它

保存后执行三条命令:

systemctl daemon-reload
systemctl enable --now easytier-share-center
systemctl status easytier-share-center

看到 active (running) 就成功了。enable 表示开机自启,--now 表示现在立刻启动。

小进阶:我上面的服务文件里没有写“崩溃自动重启”。想更省心,可以在 [Service] 段落里加两行:

Restart=on-failure
RestartSec=5

意思是:程序意外退出时,5 秒后自动拉起来。

再验证一下服务真的在跑:

# 1. 看进程和启动参数
ps -ef | grep easytier

# 2. 搜服务名(即使忘了名字也能找到)
systemctl list-unit-files | grep -i easy

# 3. 看端口是否在监听(TCP 和 UDP 都应能看到)
ss -lntup | grep <端口>
  • ps 输出里,进程的父进程 PID 是 1,说明它挂在系统下面,SSH 断开也不受影响;
  • systemctl list-unit-files 里看到 easytier-share-center.service enabledenabled 表示开机自启。

一个小经验:如果 systemctl status easytier 提示找不到服务,不代表没有服务,很可能只是名字不叫 easytier,用上面第 2 条命令搜一下就能找到。

第 6 步:放行防火墙和安全组

服务器上有两个“门卫”,都要放行同一个端口:

  1. 系统防火墙(CentOS 默认是 firewalld):
firewall-cmd --permanent --add-port=<端口>/tcp
firewall-cmd --permanent --add-port=<端口>/udp
firewall-cmd --reload
  1. 云厂商的安全组:登录云控制台,找到这台服务器,在安全组里放行同样的 TCP 和 UDP 端口。

注意:管理端口(rpc_portal)不要对外开放。

第 7 步:两台电脑用 GUI 加入

  1. 两台电脑都安装并打开 EasyTier GUI;
  2. 新建或加入同一个网络:网络名、网络密钥必须和服务器配置完全一致;
  3. 在对端(Peer)设置里添加服务器地址,格式为 tcp://<服务器公网域名或 IP>:<端口>
  4. 建议在 GUI 里给电脑 A、B 各固定一个虚拟 IP(例如 <虚拟IP_A><虚拟IP_B>),方便长期使用;
  5. 两台电脑都显示在线后,从电脑 A 执行:
ping <虚拟IP_B>

能通就说明组网成功。之后就可以像在局域网里一样:

  • 远程桌面:mstsc 连接对方的虚拟 IP;
  • 文件共享:访问 \\<虚拟IP>\共享目录
  • SSH:直接连对方的虚拟 IP。

第 8 步:日常管理

systemctl status easytier-share-center   # 看状态
systemctl restart easytier-share-center  # 重启(改配置后常用)
systemctl stop easytier-share-center     # 停止
systemctl start easytier-share-center    # 启动
journalctl -u easytier-share-center -f   # 看实时日志

四、常见问题

问题 排查方法
GUI 里服务器离线 在服务器上执行 systemctl status easytier-share-centerps -ef | grep easytier
忘了服务叫什么 执行 systemctl list-unit-files | grep -i easy
电脑连不上服务器 检查防火墙和安全组有没有放行 TCP/UDP <端口>;网络名、密钥是否一致
两台电脑 ping 不通 确认虚拟 IP 是否固定;如果打洞失败且服务器不转发数据,可能会连不上,可以把网络名加进白名单让服务器兜底中继

五、叠甲

  • 这套方案只用于连接自己拥有或获得授权的设备,不要开放给陌生人;
  • 不要用它访问法律禁止的内容,也不要把组网能力包装成面向公众的“代理/转发”服务出售或提供;所有使用场景都要符合所在地法律法规和云服务商条款;
  • EasyTier 是 LGPL-3.0 开源项目,个人和内部使用没有问题;如果要做二次分发或商业化,先阅读并遵守许可证条款;
  • CentOS 7 已经停止维护,直接暴露在公网有安全风险,建议迁移到仍受支持的系统,或至少限制来源 IP、只开放必要端口。

参考资料

本文是个人技术实践记录,不构成任何商业建议或服务承诺。

Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐