2025-03-12 17:29:31 +08:00

205 lines
7.9 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

+++
author = "FlintyLemming"
title = "中心化逻辑部署 Easytier - 无 Web 管理"
slug = "1b37bda595c580c989edf890db8e0b19"
date = "2025-03-11"
description = "纯命令行启动组网"
categories = ["Network"]
tags = ["Easytier"]
image = "https://hf-image.mitsea.com:8840/blog/posts/2025/03/%E4%B8%AD%E5%BF%83%E5%8C%96%E9%80%BB%E8%BE%91%E9%83%A8%E7%BD%B2%20Easytier%20-%20%E6%97%A0%20Web%20%E7%AE%A1%E7%90%86/pawel-czerwinski-MIXZflFpQXk-unsplash.avif"
+++
## 部署逻辑
这个软件其实主打的是去中心化,但是如果从 netbird 或者 tailscale 迁移过来,就很不习惯。所以写一个教程按照中心化的使用逻辑去部署。
按中心化的使用逻辑,需要先部署一个中枢,用来管理所有节点,所有节点也要连接到这个机器上。
如果你部署 Headscale那本质上就是一个 Web 控制台 + DERP 中继服务器;如果你部署 Netbird那本质上就是 Web 控制台 + coturn 中继服务器。只不过你部署的时候是丢到一个 Compose 里一起跑的。
Easytier 也类似只不过你需要分开部署。不过由于当前版本下web 配置无法设置网络白名单和接受子网的白名单,这会导致你的中继节点只要被扫描到就可以被他人使用,你的子网路由也会默认下发到所有节点上,使用上有所不便,所以本版本教程是在无 web 管理的情形下进行配置。若要查看 web 控制台部署,请参阅[这篇文章](https://blog.mitsea.com/1a57bda595c580088006c17d6ba2a744/)
若要便捷地查看其他设备,你只需要任意节点使用 GUI 客户端,或是使用 web 配置,也可看到其他设备,只是不能管理他们。
本教程使用二进制程序启动加参数的形式进行配置,不使用配置文件。二进制的所有参数可以通过执行 `easytier --help` 查看说明。
## 添加中继设备
### 配置步骤
1. 首先你要想一个网络名,比如叫 mytier。这个名字会在下面启动中继服务器时设置为白名单。
2. 在你想要作为中继服务器上启动 easytier
使用 `--network-name``--network-secret` 设置网络名称与密码,后续的节点也要使用这个网络名称和密码
使用 `--ipv4` 设置你要组网的内网 IP
使用 `--hostname` 来设置一个容易辨别的设备名称
`--relay-network-whitelist` 可以说是必加的,否则如果这个节点直接暴露在公网,任何人都可以拿来做中转服务器
`--manual-routes` 也是建议加上的EasyTier 如果你设置了子网路由,他会把路由表自动下发到所有节点上,这与 Tailscale 的行为是正好相反的。--manual-routes 后不加任何选项则默认拒绝所有子网路由表,后续你要接受哪个子网网段的路由表就再添加即可
```bash
./easytier-core --network-name mytier \
--network-secret passwd \
--ipv4 192.168.99.1/24 \
--hostname node1 \
--manual-routes \
--relay-network-whitelist mytier
```
3. 默认端口是 11010记得开放端口假设你公网 IP 是 11.22.33.44
## 添加其他设备
启动命令和中转服务器基本是一样的,只需要修改 `--ipv4` 和 `--hostname` 和添加中继节点信息
```bash
./easytier-core --network-name mytier \
--network-secret passwd \
--ipv4 192.168.99.2/24 \
--hostname node2 \
--manual-routes \
--relay-network-whitelist mytier \
--external-node tcp://11.22.33.44:11010
```
至此,完成了等效于 Netbird 或是 Tailscale 的添加两个设备的步骤
## 子网路由设置
需要再次提醒的是,本教程只是面向从 Netbird 或者 Tailscale 迁移过来的用户,所以下面的说明假设你已经熟悉 Netbird 或者 Tailscale 的子网路由功能
1. 在你需要共享的局域网内按照上面的步骤安装并配置好 Easytier
2. 启动参数增加 `--proxy-networks` ,比如你要下发你当前所在的内网 192.168.5.0/24 和 192.168.2.0/24 给其他节点,那你的启动命令就变成
```bash
./easytier-core --network-name mytier \
--network-secret passwd \
--ipv4 192.168.99.2/24 \
--hostname node2 \
--manual-routes \
--relay-network-whitelist mytier \
--proxy-networks 192.168.5.0/24 \
--proxy-networks 192.168.2.0/24 \
--external-node tcp://11.22.33.44:11010
```
默认情况下,他会把路由表下发到所有其他设备上,不过由于在前面我推荐你使用不带参数的 `--manual-routes` 启动客户端,所以现在其他客户端默认是不会接受下发的路由的。
3. 若要在别的设备上接收这条路由,修改 `--manual-routes` 选项的参数即可,比如你要接受 192.168.5.0/24 和 192.168.2.0/24 的路由,那启动命令就改成
```bash
./easytier-core --network-name mytier \
--network-secret passwd \
--ipv4 192.168.99.3/24 \
--hostname node3 \
--manual-routes 192.168.5.0/24 192.168.2.0/24 \
--relay-network-whitelist mytier \
--external-node tcp://11.22.33.44:11010
```
4. 如果做网关的话,转发和防火墙可以酌情配置,这些和 netbird 与 tailscale 是一致的:开启 ipv4 转发
在 `/etc/sysctl.conf` ****文件中添加或修改以下行:
```
net.ipv4.ip_forward = 1
```
然后运行 `sudo sysctl -p` 来应用更改
5. 配置 NAT 规则
```bash
sudo iptables -I FORWARD -i eth0 -j ACCEPT
sudo iptables -I FORWARD -o eth0 -j ACCEPT
sudo iptables -t nat -I POSTROUTING -o eth0 -j MASQUERADE
sudo iptables -I FORWARD -i tun0 -j ACCEPT
sudo iptables -I FORWARD -o tun0 -j ACCEPT
sudo iptables -t nat -I POSTROUTING -o tun0 -j MASQUERADE
```
## 保活进程
由于不使用 web 管理,所以只需要保活 easytire-core 这一个程序
### 注册为 systemd 服务
1. 移动二进制文件并设置执行权限
```bash
sudo mv easytier-core /usr/local/bin/easytier-core
sudo chmod +x /usr/local/bin/easytier-core
```
2. 创建 systemd 服务单元文件
```bash
sudo nano /etc/systemd/system/easytier-core.service
```
内容如下,就是把启动的参数重新写一遍
```
[Unit]
Description=easytier-core Service
After=network.target
[Service]
Type=simple
ExecStart=/usr/local/bin/easytier-core --network-name mytier --network-secret passwd --ipv4 192.168.99.1/24 --hostname node1 --manual-routes --relay-network-whitelist mytier
User=root
Restart=on-failure
RestartSec=5
[Install]
WantedBy=multi-user.target
```
3. 设置权限与加载服务
保存并退出编辑器后,执行以下命令让 systemd 重新加载服务配置:
```
sudo systemctl daemon-reload
```
让该服务在开机时自动启动:
```
sudo systemctl enable easytier-core
```
启动该服务:
```
sudo systemctl start easytier-core
```
你可以使用下面的命令查看服务状态和日志:
```
systemctl status easytier-core
journalctl -u easytier-core -f
```
### 使用 docker 部署
参考官方文档 https://easytier.cn/guide/installation.html 修改这里的启动参数即可
![](https://hf-image.mitsea.com:8840/blog/posts/2025/03/%E4%B8%AD%E5%BF%83%E5%8C%96%E9%80%BB%E8%BE%91%E9%83%A8%E7%BD%B2%20Easytier%20-%20%E6%97%A0%20Web%20%E7%AE%A1%E7%90%86/image.avif)
```bash
command: --network-name mytier --network-secret passwd --ipv4 192.168.99.1/24 --hostname node1 --manual-routes --relay-network-whitelist mytier
```
> Photo by [Pawel Czerwinski](https://unsplash.com/@pawel_czerwinski?utm_content=creditCopyText&utm_medium=referral&utm_source=unsplash) on [Unsplash](https://unsplash.com/photos/a-black-and-white-photo-of-a-bunch-of-flowers-MIXZflFpQXk?utm_content=creditCopyText&utm_medium=referral&utm_source=unsplash)