[LARTC] Example of load balancing/redundant internet connections
From: "William L. Thomson Jr."
To: lartc
This is a working example from a network I had in CA.
This is not a how to. There are no instructions provided. Please do not ask me for them, as I did not write the original ones I followed when doing this.
Only ask me for help after you have done your homework, and spent at least a day of complete frustration. If you can prove both to me in your first email, I will help out. Otherwise the web, and Google are your friends.
The links I used have been posted to this list more times than I care to say, but for completeness.
Load balance traffic from the inside out (Kernel)
- http://www.ssi.bg/~ja/
- http://www.ssi.bg/~ja/#routes
Load balance from the outside in (DNS)
- http://www.samag.com/documents/s=1824/sam0201h/0201h.htm
(Pay attention to the DNS part and forget the rest)
You must compile a customer kernel with multipath route support, and patched with Julian's patches.
There are three sections. The first applies to all. The second to 2.2 kernels, and the third to 2.4 kernels.
general rules
ip link set lo up
ip link set eth0 up
ip link set eth1 up
ip link set eth2 up
ip addr add 127.0.0.1/8 brd 127.0.0.255 dev lo
ip addr add 192.168.1.250/24 brd 192.168.1.255 dev eth0
ip addr add 10.1.0.2/16 brd 10.1.255.255 dev eth1
ip addr add 10.1.0.97/16 brd 10.1.255.255 dev eth1
ip addr add 10.1.0.98/16 brd 10.1.255.255 dev eth1
ip addr add 10.1.0.99/16 brd 10.1.255.255 dev eth1
ip addr add 10.1.0.103/16 brd 10.1.255.255 dev eth1
ip addr add 10.2.0.2/16 brd 10.2.255.255 dev eth2
ip addr add 10.2.0.57/16 brd 10.2.255.255 dev eth2
ip addr add 10.2.0.58/16 brd 10.2.255.255 dev eth2
ip addr add 10.2.0.59/16 brd 10.2.255.255 dev eth2
ip addr add 10.2.0.62/16 brd 10.2.255.255 dev eth2
ip route add 127.0.0.0/8 dev lo
ip rule add prio 10 table main
ip route del default table main
ip rule add prio 20 from 10.1.0.0/16 table 20
ip route add default via 10.1.0.1 dev eth1 src 10.1.0.2 proto static table 20
ip route append prohibit default table 20 metric 1 proto static
ip rule add prio 30 from 10.2.0.0/16 table 30
ip route add default via 10.2.0.1 dev eth2 src 10.2.0.2 proto static table 30
ip route append prohibit default table 30 metric 1 proto static
# Set up load balancing gateways
ip rule add prio 50 table 50
ip route add default table 50 proto static \
nexthop via 10.1.0.1 dev eth1 \
nexthop via 10.2.0.1 dev eth2
Begin 2.2 NAT
ipmasqadm portfw -a -P tcp -L 10.1.0.103 443 -R 192.168.1.3 443
ipmasqadm portfw -a -P tcp -L 10.1.0.103 143 -R 192.168.1.3 143
ipmasqadm portfw -a -P tcp -L 10.1.0.103 110 -R 192.168.1.3 110
ipmasqadm portfw -a -P tcp -L 10.1.0.103 81 -R 192.168.1.3 81
ipmasqadm portfw -a -P tcp -L 10.1.0.103 80 -R 192.168.1.3 80
ipmasqadm portfw -a -P tcp -L 10.1.0.103 25 -R 192.168.1.3 25
ipmasqadm portfw -a -P tcp -L 10.1.0.99 443 -R 192.168.1.1 443
ipmasqadm portfw -a -P tcp -L 10.1.0.99 143 -R 192.168.1.1 143
ipmasqadm portfw -a -P tcp -L 10.1.0.99 110 -R 192.168.1.1 110
ipmasqadm portfw -a -P tcp -L 10.1.0.99 81 -R 192.168.1.1 81
ipmasqadm portfw -a -P tcp -L 10.1.0.99 80 -R 192.168.1.1 80
ipmasqadm portfw -a -P tcp -L 10.1.0.99 25 -R 192.168.1.1 25
ipmasqadm portfw -a -P tcp -L 10.1.0.99 22 -R 192.168.1.1 22
ipmasqadm portfw -a -P tcp -L 10.1.0.99 21 -R 192.168.1.1 21
ipmasqadm portfw -a -P udp -L 10.1.0.98 53 -R 192.168.1.222 53
ipmasqadm portfw -a -P tcp -L 10.1.0.98 53 -R 192.168.1.222 53
ipmasqadm portfw -a -P udp -L 10.1.0.97 53 -R 192.168.1.221 53
ipmasqadm portfw -a -P tcp -L 10.1.0.97 53 -R 192.168.1.221 53
ipmasqadm portfw -a -P tcp -L 10.2.0.62 443 -R 192.168.1.3 443
ipmasqadm portfw -a -P tcp -L 10.2.0.62 143 -R 192.168.1.3 143
ipmasqadm portfw -a -P tcp -L 10.2.0.62 110 -R 192.168.1.3 110
ipmasqadm portfw -a -P tcp -L 10.2.0.62 81 -R 192.168.1.3 81
ipmasqadm portfw -a -P tcp -L 10.2.0.62 80 -R 192.168.1.3 80
ipmasqadm portfw -a -P tcp -L 10.2.0.62 25 -R 192.168.1.3 25
ipmasqadm portfw -a -P tcp -L 10.2.0.59 443 -R 192.168.1.1 443
ipmasqadm portfw -a -P tcp -L 10.2.0.59 143 -R 192.168.1.1 143
ipmasqadm portfw -a -P tcp -L 10.2.0.59 110 -R 192.168.1.1 110
ipmasqadm portfw -a -P tcp -L 10.2.0.59 81 -R 192.168.1.1 81
ipmasqadm portfw -a -P tcp -L 10.2.0.59 80 -R 192.168.1.1 80
ipmasqadm portfw -a -P tcp -L 10.2.0.59 25 -R 192.168.1.1 25
ipmasqadm portfw -a -P tcp -L 10.2.0.59 22 -R 192.168.1.1 22
ipmasqadm portfw -a -P tcp -L 10.2.0.59 21 -R 192.168.1.1 21
ipmasqadm portfw -a -P udp -L 10.2.0.58 53 -R 192.168.1.222 53
ipmasqadm portfw -a -P tcp -L 10.2.0.58 53 -R 192.168.1.222 53
ipmasqadm portfw -a -P udp -L 10.2.0.57 53 -R 192.168.1.221 53
ipmasqadm portfw -a -P tcp -L 10.2.0.57 53 -R 192.168.1.221 53
ipchains -A forward -s 192.168.1.0/24 -j MASQ
Begin 2.4 NAT
iptables -t nat -A PREROUTING -i eth1 -d 10.1.0.99 -p tcp -m multiport --dport 443,143,110,81,80,25,22,21 -j DNAT --to 192.168.1.1
iptables -t nat -A PREROUTING -i eth1 -d 10.1.0.103 -p tcp -m multiport --dport 443,143,110,81,80,25 -j DNAT --to 192.168.1.3
iptables -t nat -A PREROUTING -i eth2 -d 10.1.0.97 -p udp --dport 53 -j DNAT --to 192.168.1.221
iptables -t nat -A PREROUTING -i eth2 -d 10.1.0.97 -p tcp --dport 53 -j DNAT --to 192.168.1.221
iptables -t nat -A PREROUTING -i eth2 -d 10.1.0.98 -p udp --dport 53 -j DNAT --to 192.168.1.222
iptables -t nat -A PREROUTING -i eth2 -d 10.1.0.98 -p tcp --dport 53 -j DNAT --to 192.168.1.222
iptables -t nat -A PREROUTING -i eth2 -d 10.2.0.59 -p tcp -m multiport --dport 443,143,110,81,80,25,22,21 -j DNAT --to 192.168.1.1
iptables -t nat -A PREROUTING -i eth1 -d 10.2.0.62 -p tcp -m multiport --dport 443,143,110,81,80,25 -j DNAT --to 192.168.1.3
iptables -t nat -A PREROUTING -i eth2 -d 10.2.0.57 -p udp --dport 53 -j DNAT --to 192.168.1.221
iptables -t nat -A PREROUTING -i eth2 -d 10.2.0.57 -p tcp --dport 53 -j DNAT --to 192.168.1.221
iptables -t nat -A PREROUTING -i eth2 -d 10.2.0.58 -p udp --dport 53 -j DNAT --to 192.168.1.222
iptables -t nat -A PREROUTING -i eth2 -d 10.2.0.58 -p tcp --dport 53 -j DNAT --to 192.168.1.222
iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -j MASQUERADE
other things
Then before you are done make sure to
# Turn on ip forwarding
echo 1 > /proc/sys/net/ipv4/ip_forward
Good luck, and hopefully the above can save others from having to ask questions, and others having to answer them.
stef.coene@docum.org |