# 子网代理（点对网）

假设网络拓扑如下，节点 B 想将其可访问的子网 10.1.1.0/24 共享给其他节点。

```mermaid
flowchart LR

subgraph 节点 A IP 22.1.1.1
nodeA[EasyTier\n10.144.144.1]
end

subgraph 节点 B
nodeB[EasyTier\n10.144.144.2]
end

id1[[10.1.1.0/24]]

nodeA <--> nodeB <-.-> id1

```

则节点 B 的 easytier 启动参数为（新增 -n 参数）

```sh
sudo easytier-core --ipv4 10.144.144.2 -n 10.1.1.0/24
```

子网代理信息会自动同步到虚拟网络的每个节点，各个节点会自动配置相应的路由，节点 A 可以通过如下命令检查子网代理是否生效。

1. 检查路由信息是否已经同步，proxy_cidrs 列展示了被代理的子网。

   ```sh
   easytier-cli route
   ```

   | ipv4         | hostname | proxy_cidrs | next_hop_ipv4 | next_hop_hostname | next_hop_lat | cost |
   | :----------- | :------- | :---------- | :------------ | :---------------- | :----------- | :--- |
   | 10.144.144.1 | abc-dec  | 10.1.1.0/24 | DIRECT        |                   | 3.25         | 1    |

2. 测试节点 A 是否可访问被代理子网下的节点

   ```sh
   ping 10.1.1.2
   ```

## 手工指定路由

默认情况下，当虚拟网中的某个节点配置了子网代理后，子网代理的网段会被同步到虚拟网内的所有节点上，并自动生成一条路由，将发往这些网段的数据包交由虚拟网处理。

这在大部分情况下可以简化组网，但在有些场景下，用户可能并不希望 EasyTier 在节点上自动配置路由，用户可通过 `--manual-routes` 参数手工配置需要转发到虚拟网的流量。

使用 `--manual-routes` 后，只有该参数配置的网段才会进入虚拟网，如果该参数后的列表为空，则 EasyTier 不会处理任何非虚拟网网段的流量。

## 防火墙

由于代理流量需要用到系统的网络栈，因此子网代理需要关闭在虚拟网卡上的防火墙（Linux 和 Windows 皆是如此）。

如果无法关闭防火墙，可以尝试用用户态的网络栈做子网代理，可以免去配置防火墙的步骤。只需要在启动 EasyTier 时添加 `--use-smoltcp` 参数即可。

---
