我在以下网址找到了一篇关于负载平衡的非常好的文章http://www.diegolima.org/wordpress/?p=36..但我无法实现它,因为我的要求与纯负载平衡略有不同。
我们有两个 ISP 连接。我已将这两个路由器分别连接到 eth0(公共 IP 121.XXX.XX.XXX)和 eth1(192.168.129.XXX)上的 Linux 服务器,我们的内部网络位于 eth2(192.168.1.XXX)上。
我已经决定我们的 FTP 应该使用 eth1 接口,Squid 应该使用 eth0,Sendmail 应该使用 eth0,并且一些用户应该使用 eth0,而其他一些用户应该使用 eth1。
有人能告诉我这是否可行吗?如何使用 iptables 和 iproute2 实现这一点?非常感谢分步帮助。提前致谢。
答案1
配置 IPROUTE2
echo "4 sendmail" >> /etc/iproute2/rt_tables
ip route add 121.XXX.XX.XXX/MASK dev eth0 src 121.XXX.XX.XXX table sendmail
ip route add 192.168.1.XXX/24 dev eth2 table sendmail
ip route add default via GATEWAY1 table sendmail
ip ru add from 121.XXX.XX.XXX lookup sendmail
ip ru add fwmark 2 table sendmail
ip route flush cache
配置 IPTABLES
iptables -t mangle -I OUTPUT -p tcp --dport 25 -j MARK --set-mark 0x2
iptables -t mangle -I PREROUTING -i eth2 -p tcp --dport 25 -j MARK --set-mark 0x2
iptables -t nat -I POSTROUTING -s 192.168.1.XXX/24 -o eth0 -j SNAT --to-source 121.XXX.XX.XXX
答案2
我使用 shorewall 做了类似的事情。
一切都基于标记和过滤数据包并对其应用一些规则。一切都应该在 larc howt 中解释: http://lartc.org/howto/index.html
过程应该是这样的(我必须重新阅读一些东西,几个月前我就这样做过):
数据包来自内网
netfilter 在流量上应用一些 MARK
基于标记的规则将数据包路由到正确的设备