Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
118 changes: 114 additions & 4 deletions guide/network/host-public-server.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

用户可以使用自己的公网节点自建用于无公网 IP 组网的公共共享节点,方便其他无公网 IP 的用户组网。 需要不带任何参数启动 EasyTier,该节点就可作为公共服务器使用(不需要 root 权限):

```
```shell
easytier-core
```

Expand All @@ -18,16 +18,126 @@ easytier-core

EasyTier 可以做到不转发其他虚拟网的网络包,而是只帮助他们建立 P2P 链接,只需将白名单置空,并设置仅转发 RPC 流量即可。参考命令为:

```
```shell
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 节点。
这会仅允许网络名为 `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 <your-hostname> --network-name <your-network> --network-secret <your-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+://<HOST>:\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
```