Featured image of post 中心化逻辑部署 Easytier - 无 Web 管理

中心化逻辑部署 Easytier - 无 Web 管理

纯命令行启动组网

部署逻辑

这个软件其实主打的是去中心化,但是如果从 netbird 或者 tailscale 迁移过来,就很不习惯。所以写一个教程按照中心化的使用逻辑去部署。

按中心化的使用逻辑,需要先部署一个中枢,用来管理所有节点,所有节点也要连接到这个机器上。

如果你部署 Headscale,那本质上就是一个 Web 控制台 + DERP 中继服务器;如果你部署 Netbird,那本质上就是 Web 控制台 + coturn 中继服务器。只不过你部署的时候是丢到一个 Compose 里一起跑的。

Easytier 也类似,只不过你需要分开部署。不过由于当前版本下,web 配置无法设置网络白名单和接受子网的白名单,这会导致你的中继节点只要被扫描到就可以被他人使用,你的子网路由也会默认下发到所有节点上,使用上有所不便,所以本版本教程是在无 web 管理的情形下进行配置。若要查看 web 控制台部署,请参阅这篇文章

若要便捷地查看其他设备,你只需要任意节点使用 GUI 客户端,或是使用 web 配置,也可看到其他设备,只是不能管理他们。

本教程使用二进制程序启动加参数的形式进行配置,不使用配置文件。二进制的所有参数可以通过执行 easytier --help 查看说明。

添加中继设备

配置步骤

  1. 首先你要想一个网络名,比如叫 mytier。这个名字会在下面启动中继服务器时设置为白名单。

  2. 在你想要作为中继服务器上启动 easytier

    使用 --network-name--network-secret 设置网络名称与密码,后续的节点也要使用这个网络名称和密码

    使用 --ipv4 设置你要组网的内网 IP

    使用 --hostname 来设置一个容易辨别的设备名称

    --relay-network-whitelist 可以说是必加的,否则如果这个节点直接暴露在公网,任何人都可以拿来做中转服务器

    --manual-routes 也是建议加上的,EasyTier 如果你设置了子网路由,他会把路由表自动下发到所有节点上,这与 Tailscale 的行为是正好相反的。–manual-routes 后不加任何选项则默认拒绝所有子网路由表,后续你要接受哪个子网网段的路由表就再添加即可

    1
    2
    3
    4
    5
    6
    
    ./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 和添加中继节点信息

1
2
3
4
5
6
7
./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 给其他节点,那你的启动命令就变成

    1
    2
    3
    4
    5
    6
    7
    8
    
    ./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 \
    --external-node tcp://11.22.33.44:11010
    

    默认情况下,他会把路由表下发到所有其他设备上,不过由于在前面我推荐你使用不带参数的 --manual-routes 启动客户端,所以现在其他客户端默认是不会接受下发的路由的。

  3. 若要在别的设备上接收这条路由,修改 --manual-routes 选项的参数即可,比如你要接受 192.168.5.0/24 和 192.168.2.0/24 的路由,那启动命令就改成

    1
    2
    3
    4
    5
    6
    7
    
    ./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 ****文件中添加或修改以下行:

    1
    
    net.ipv4.ip_forward = 1
    

    然后运行 sudo sysctl -p 来应用更改

  5. 配置 NAT 规则

    1
    2
    3
    4
    5
    6
    
    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. 移动二进制文件并设置执行权限

    1
    2
    
    sudo mv easytier-core /usr/local/bin/easytier-core
    sudo chmod +x /usr/local/bin/easytier-core
    
  2. 创建 systemd 服务单元文件

    1
    
    sudo nano /etc/systemd/system/easytier-core.service
    

    内容如下,就是把启动的参数重新写一遍

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    
    [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 重新加载服务配置:

    1
    
    sudo systemctl daemon-reload
    

    让该服务在开机时自动启动:

    1
    
    sudo systemctl enable easytier-core
    

    启动该服务:

    1
    
    sudo systemctl start easytier-core
    

    你可以使用下面的命令查看服务状态和日志:

    1
    2
    
    systemctl status easytier-core
    journalctl -u easytier-core -f
    

使用 docker 部署

参考官方文档 https://easytier.cn/guide/installation.html 修改这里的启动参数即可

1
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 on Unsplash

Licensed under CC BY-NC-SA 4.0