我正在尝试管理具有两个不太稳定的 WAN(LTE/3g)连接的 NAT 私有网络的“故障转移”设置。
拓扑结构非常典型:内部网络内的主机连接到内部接口[int_if]然后流量通过 PF 进行 NAT 处理,到达 OpenBSD 盒子的两个外部接口之一[ext_if1 和 ext_if2]。
LAN---->[int_if]--NAT--[ext_if1 or ext_if2]---->WAN1 or WAN2 (depending on kernel decision).
我在两个出口接口上都使用了静态 IP,每个接口位于不同的子网中,并使用多路径默认路由到 ISP 的 LTE/3g 路由器盒,如OpenBSD 常见问题实现等价负载平衡。
不幸的是,我遭受了这种恼人的行为:
如果从内部设置,多路径路由不起作用主机名.接口文件。在这种情况下,两个默认路由都存在于路由表中,但没有“P”标志。只要我不刷新路由并手动重新设置它们,所有流量都只会通过两个网关中的一个转发,我猜是根据接口名称的字母顺序选择的。看起来好像它只是一个“标准”默认网关,没有启用多路径(
net.inet.ip.multipath
当然设置为1
)。虽然“手动”设置的多路径默认路由似乎运行良好 - 路由表中出现“P”标志,并且 neststat -r 显示两条路由上的流量都在增长,并且 traceroute 命令的序列随后又出现了另一个混乱。
ping -I one_of_ext_if's_ip some.internet.host 我想说,这种方法是随机的,不依赖于实际的 ISP 连接状态。有时,在一个接口上使用 ip 地址而不是 cname 会有所帮助,而另一个接口则“更喜欢”使用 cname。Ping 随机无效,而来自 LAN 的 http 流量是等价负载平衡的,没有延迟。我没有用 PF 阻止任何传出流量,所以这不是重点,禁用 pf 不会改变任何东西(除了切断 LAN 与世界的联系)。将所有内容重新设置为标准,单个默认网关设置可以解决问题 - 我可以手动在两个默认路由之间切换,如果 ISP 处于活动状态,ping 就可以正常工作。
我花了两个晚上在 Google 上搜索和测试,以找出我做错了什么,但仍然不知道为什么该配置的行为如此奇怪。当然,我也不知道当 ping world 不起作用时,如何使用 ifstated 监控连接以进行故障转移,即使我的 ISP 仍然有效。当它们真的死机一段时间时,负载平衡会将 LAN 请求发送到 void 以拾取未检测到的死机连接。
我想检测此类事件,并将路由更改为工作连接上的单个默认网关,直到其他 ISP 开始再次响应。如果没有有效的 ping,我只能在后台使用无用的 ifstated。
我感谢任何帮助...
答案1
这现在涵盖OpenBSD 常见问题解答在里面等价多路径路由部分。诀窍是在每个 hostname.if 文件中添加路由命令。
从示例中,将 fxp1 和 fxp2 替换为您的 NIC 的实际内容及其正确的网关:
fxp1
由于 mygate(5) 文件尚不支持多路径默认路由,因此应将上述命令添加到和接口的 hostname.if(5) 文件底部。然后应删除fxp2
该文件。/etc/mygate
$ tail -1 /etc/hostname.fxp1 !route add -mpath default 10.130.128.1 $ tail -1 /etc/hostname.fxp2 !route add -mpath default 10.132.0.1