diff --git a/guide/network/host-public-server.md b/guide/network/host-public-server.md index c002e81..3f64bf5 100644 --- a/guide/network/host-public-server.md +++ b/guide/network/host-public-server.md @@ -2,7 +2,7 @@ 用户可以使用自己的公网节点自建用于无公网 IP 组网的公共共享节点,方便其他无公网 IP 的用户组网。 需要不带任何参数启动 EasyTier,该节点就可作为公共服务器使用(不需要 root 权限): -``` +```shell easytier-core ``` @@ -18,7 +18,7 @@ easytier-core EasyTier 可以做到不转发其他虚拟网的网络包,而是只帮助他们建立 P2P 链接,只需将白名单置空,并设置仅转发 RPC 流量即可。参考命令为: -``` +```shell easytier-core --relay-network-whitelist --relay-all-peer-rpc ``` @@ -26,8 +26,118 @@ easytier-core --relay-network-whitelist --relay-all-peer-rpc 如果你希望 EasyTier 仅在你的虚拟网络中提供服务,而不希望其他虚拟网的节点连接到你的节点,可以使用 `--private-mode true` 参数启动 EasyTier。 -``` +```shell sudo easytier-core --private-mode true --network-name my-network --network-secret my-secret ``` -这会仅允许网络名为 `my-network` 且密钥为 `my-secret` 的节点连接到该 EasyTier 节点。 \ No newline at end of file +这会仅允许网络名为 `my-network` 且密钥为 `my-secret` 的节点连接到该 EasyTier 节点。 + +## 配置 systemd 自启动 + +可以参考:[安装为 Linux systemd 服务](install-as-a-systemd-service) + +值得注意的是,作为服务器运行时,由于 Linux 默认给用户配置的 fd 上限为 1024,可能会面临 fd 耗尽的问题。 + +此时应该配置 `LimitNOFILE` 在 serivce 文件中,如: + +```shell +LimitNOFILE=1048576 +``` + +配置好的 service unit 供参考: + +```shell +# cat /etc/systemd/system/easytier.service + +[Unit] +Description=EasyTier Service +After=network.target syslog.target +Wants=network.target + +[Service] +Type=simple +ExecStart=/usr/local/bin/easytier-core --hostname --network-name --network-secret -p tcp://public.easytier.top:11010 +Restart=always +RestartSec=3 +LimitNOFILE=1048576 +Environment=TOKIO_CONSOLE=1 + +[Install] +WantedBy=multi-user.target +``` + +## 配置 fail2ban + +如您贡献了公共服务器,可能会遇到这样的问题:大量的节点尝试连接到您的服务器,但是无法建立连接 + +```plain +connection error. local: udp://0.0.0.0:11010, remote: udp://***.***.***.***:14947, err: wait resp error: wait handshake timeout: Elapsed(()) +``` + +此时建议配置 `fail2ban`,以阻止这样的用户访问节点,可以有效的降低服务器的连接数,提高用户的访问质量。 + +以 Fedora 42 为例,配置方法如下: + +```shell +# install fail2ban +sudo dnf install fail2ban + +# enable and start +sudo systemctl enable --now fail2ban +``` + +配置日志过滤器: + +```ini +# cat /etc/fail2ban/filter.d/easytier.conf +[Definition] +failregex = remote: \S+://:\d+, err: wait resp error:.+ +``` + +配置 jail: + +```ini +# cat /etc/fail2ban/jail.local +[easytier] +enabled = true +filter = easytier +backend = systemd +journalmatch = '_SYSTEMD_UNIT=easytier.service' +maxretry = 3 +bantime = 3600 +findtime = 600 +banaction = nftables-multiport +``` + +此处的策略代表:`findtime=600s` 内尝试 `maxretry=3` 次失败,则会被关进小黑屋(阻止访问)`bantime=3600s` 一小时。 + +配置好后,重载 `fail2ban` + +```shell +sudo fail2ban-client reload +# OK +``` + +配置后,检查运行状态,可以看到已经阻止的客户端列表: + +```shell +sudo fail2ban-client status easytier +``` + +```plain +Status for the jail: easytier +|- Filter +| |- Currently failed: 11 +| |- Total failed: 4742 +| `- Journal matches: _SYSTEMD_UNIT=easytier.service +`- Actions + |- Currently banned: 99 + |- Total banned: 663 + `- Banned IP list: *** +``` + +此时服务器连接数应该明显降低(可能需要等待一会儿才能看到效果): + +```shell +netstat -ntp | grep easytier +```