我正在尝试设置 Linux 防火墙(ubuntu 14.04)以使用两条绑定的 ADSL 线路进行负载平衡。我在搜索论坛链接时发现了以下内容:http://lartc.org/howto/lartc.rpdb.multiple-links.html但在我的例子中,它不起作用,因为我没有两个物理接口来分离 ADSL 连接。
我的设置现在是
WAN1 - ADSLrouter1 (192.168.1.1) \
- 192.168.1.3 Firewall - private IP LAN
WAN2 - ADSLrouter2 (192.168.1.2) /
我添加了两个权重为 1 的默认路由,以实现负载平衡。从防火墙到互联网,一切都运行正常。但是,防火墙也需要进行伪装。从内部 LAN 中的主机,ping 到外部世界可以正常工作。我刚刚添加了
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
其中 eth0 的 IP 地址为 192.168.1.3。TCP 连接不太好用;我只是收到对等消息重置连接。我知道问题出在这两条路由上,因为如果我删除一条路由,一切都会顺利运行。
我假设问题出在伪装上,当 tcp 流路由到不同的路由时,就会出错。我能以某种方式修复这个问题吗?还是我需要另一个 NIC 来遵循我找到的说明?
韩努
答案1
你走在正确的轨道上。你需要两个 NIC,主要是因为当选择路由时,你的 Linux 防火墙以循环方式发送出站数据包,因为它们都具有相同的度量。
如果有两个 NIC,则只会按 NIC 进行循环,而不是按路由进行循环,从而使每个 TCP 连接保持在同一 NIC 上。
请记住,这仍然可能给您的某些应用程序带来麻烦,例如网上银行。只要您拥有有效的 cookie,大多数 Web 应用程序都会保持有效会话,但是银行通常也会将其与源 IP 绑定,您可能已经知道这一点,HTTP 使用多个 TCP 连接来获取网站上的所有资源。一旦其中一个 TCP 连接从不同的 NIC(即不同的 ADSL 提供商,因此不同的源 IP)发送,您的 cookie 将被视为无效,银行会话将结束。
如果您可以以某种方式实现某种亲和性(用户 UA 转到站点 SA 使用链接 LA),那么您就不会遇到此问题,并且只要您在合理的时间内使这些条目过期,您的 Linux 防火墙就不会出现 RAM 问题。
也许您只是希望根据来源分析您的网络使用情况并添加一些基于策略的路由(又名源路由)以在可用链接之间静态平衡服务。