利用linux的策略路由加连接跟踪可以做到双出口上网的负载均衡,这种负载均衡是基于连接的,比基于源地址或目的地址的效果更好,传统基于源地址的负载 均衡是指定一部分内网用户走A出口、另一部分内网用户走B出口,传统的基于目的地址的负载均衡是将流量按目的地址进行分流,也就是说访问S1服务器的总走A出口,访问S2服务器的总走B出口。
实际测试的服务器采用debian5.03(内核2.6.26.2),他需要包含netfilter的以下模块:nat、conntrack、 connmark、CONNMARK、mark、MARK、statistic。另外需要使用策略路由,所以需要用到iproute2工具包,内核必须开启策略路由和连接跟踪(编译时要选择) 配置如下: eth0:外网1,接口IP:10.0.1.2/24 网关:10.0.1.1 eth1:外网2,接口IP:10.0.2.2/24 网关:10.0.2.1 eth2:内网,接口IP:192.168.3.0/24 加载nat:
modprobe -v ip-nat 设置iptables:先对新建连接轮流打上1、2的标志(基于连接的标志),然后根据连接标志给数据包打上对应的标志 iptables -t mangle -A PREROUTING -s 192.168.3.0/24 -m conntrack --ctstate NEW -m statistic -- mode nth --every 2 --packet 1 -j CONNMARK --set-mark 1 iptables -t mangle -A PREROUTING -s 192.168.3.0/24 -m conntrack --ctstate NEW -m statistic --mode nth --every 2 --packet 0 -j CONNMARK --set-mark 2 iptables -t mangle -A PREROUTING -m connmark --mark 1 -j MARK --set-mark 1 iptables -t mangle -A PREROUTING -m connmark --mark 2 -j MARK --set-mark 2 设置nat: iptables -t nat -A POSTROUTING -s 192.168.3.0/24 -o eth0 -j MASQUERADE iptables -t nat -A POSTROUTING -s 192.168.3.0/24 -o eth1 -j MASQUERADE
设置两个策略路由表table10和table20: ip route add default via 10.0.1.1 table 10(注意:这里不能使用dev eth0) ip route add 192.168.3.0/24 dev eth2 table 10
ip route add default via 10.0.2.1 table 20(注意:这里不能使用dev eth1) ip route add 192.168.3.0/24 dev eth2 table 20 设置策略路由规则:标志为1的走出口1、标志位2的走出口2 ip rule add pref 10 fwmark 1 table 10 ip rule add pref 10 fwmark 2 table 20 另外在ubuntu9.10server中测试有问题,通过以上配置后发现无法上网,tcpdump显示返回数据包无法进行nat转换!
本文由路由器网www.luyouqiwang.net站长编辑整理,转载请注明出处。 |