子网代理
假设网络拓扑如下,节点 B 想将其可访问的子网 10.1.1.0/24 共享给其他节点。
则节点 B 的 easytier 启动参数为(新增 -n 参数)
sudo easytier-core --ipv4 10.144.144.2 -n 10.1.1.0/24
子网代理信息会自动同步到虚拟网络的每个节点,各个节点会自动配置相应的路由,节点 A 可以通过如下命令检查子网代理是否生效。
检查路由信息是否已经同步,proxy_cidrs 列展示了被代理的子网。
sheasytier-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 测试节点 A 是否可访问被代理子网下的节点
shping 10.1.1.2
提示
子网代理的 -n 参数可以多次指定,以代理多个子网;也可以将掩码设置为 32 以代理单个 IP 地址。
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 上,可以使用
iptables
或ufw
来放行虚拟网卡上的 INPUT 和 OUTPUT 流量。在 OpenWrt 上,可以在 LUCI 界面上放行虚拟网卡流量。
如果无法关闭防火墙,可以尝试用用户态的网络栈做子网代理,可以免去配置防火墙的步骤。只需要在启动 EasyTier 时添加 --use-smoltcp
参数即可。
提示
用户态协议栈在性能、拥塞控制等方面会劣于内核协议栈。
目前 --use-smoltcp
参数仅影响 TCP 协议,UDP 和 ICMP 无论是否使用该参数都会使用用户态协议栈。
手工指定路由
默认情况下,当虚拟网中的某个节点配置了子网代理后,子网代理的网段会被同步到虚拟网内的所有节点上,并自动生成一条路由,将发往这些网段的数据包交由虚拟网处理。
这在大部分情况下可以简化组网,但在有些场景下,用户可能并不希望 EasyTier 在节点上自动配置路由,用户可通过 --manual-routes
参数手工配置需要转发到虚拟网的流量。
使用 --manual-routes
后,只有该参数配置的网段才会进入虚拟网,如果该参数后的列表为空,则 EasyTier 不会处理任何非虚拟网网段的流量。例如:
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
。
# 在节点 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 节点下的子网互相访问称为网对网, 网对网的配置请参考章节 网对网。