Skip to content

子网代理

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

则节点 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
    ipv4hostnameproxy_cidrsnext_hop_ipv4next_hop_hostnamenext_hop_latcost
    10.144.144.1abc-dec10.1.1.0/24DIRECT3.251
  2. 测试节点 A 是否可访问被代理子网下的节点

    sh
    ping 10.1.1.2

提示

子网代理的 -n 参数可以多次指定,以代理多个子网;也可以将掩码设置为 32 以代理单个 IP 地址。

sh
easytier-core -n 10.1.1.0/24 -n 10.2.0.0/16 -n 10.3.3.3/32

防火墙

由于代理流量需要用到系统的网络栈,因此子网代理需要关闭在虚拟网卡上的防火墙。

  • 在 Windows 上,可以将 easytier-core.exe 添加到防火墙的例外列表中或者直接关闭防火墙。

  • 在 Linux 上,可以使用 iptablesufw 来放行虚拟网卡上的 INPUT 和 OUTPUT 流量。

  • 在 OpenWrt 上,可以在 LUCI 界面上放行虚拟网卡流量。

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

提示

用户态协议栈在性能、拥塞控制等方面会劣于内核协议栈。

目前 --use-smoltcp 参数仅影响 TCP 协议,UDP 和 ICMP 无论是否使用该参数都会使用用户态协议栈。

手工指定路由

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

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

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

sh
sudo easytier-core --ipv4 10.144.144.2 -n 10.1.1.0/24 --manual-routes 10.1.1.0/24

--manual-routes 可以多次指定,来配置多个网段,格式与 -n 参数相同。

则该节点上仅会将 10.1.1.0/24 网段的流量交由虚拟网处理,其他网段的流量不会进入虚拟网。

网段映射

假设有如下场景:A 节点和 B 节点在内部网络中都有 192.168.1.0/24 的子网(网段相同但是物理网络不同),若 A、B 两节点希望对该网段进行代理,则需要将该网段映射到不同的虚拟网段上。

以下命令 A 节点将 192.168.1.0/24 映射到 10.1.1.0/24,B 节点将 192.168.1.0/24 映射到 10.2.2.0/24

sh
# 在节点 A 上运行
sudo easytier-core --ipv4 10.144.144.1 -n '192.168.1.0/24->10.1.1.0/24'

# 在节点 B 上运行
sudo easytier-core --ipv4 10.144.144.2 -n '192.168.1.0/24->10.2.2.0/24'

虚拟网内其他节点,可以通过访问 10.1.1.X 来访问 A 节点代理的 192.168.1.X;通过访问 10.2.2.X 来访问 B 节点代理的 192.168.1.X

注意

映射后的网段大小必须与原网段大小相同,否则会导致 EasyTier 启动失败。

禁用内置NAT

默认情况下,子网代理中启用了内置 NAT,在用户态处理数据包转发,使非网关设备也能成为子网入口,同时规避了不同操作系统上对于数据包转发的限制。

如果 Easytier 工作在网关设备上,用户可通过 --proxy-forward-by-system 参数将子网代理数据包交由系统内核转发,此时内置 NAT 关闭。

需要注意当该选项启用后,子网代理的数据包转发将完全依赖于操作系统,请确认操作系统的防火墙、转发规则、路由规则等配置正确。

网对网

A 节点下的子网和 B 节点下的子网互相访问称为网对网, 网对网的配置请参考章节 网对网