📜 ⬆️ ⬇️

Combining bandwidth of two Internet channels and simple fault tolerance

I have my own home network, with a linux server, and it is connected to the Internet via a wireless connection - on the roof of the antenna and the router, connected to the server with a twisted pair. All in general is not bad, the channel with a guaranteed band in both directions, a permanent IP address, quite reliable - rarely falls. But here he has one drawback - the price bites.
The pricing policy of the provider is built in such a way that in order to double the speed - you also need to pay twice as much. And I want more speed! And reliability too - as it became “cold” during a strong frost and the Internet was not available in the evening and at night.
Therefore, I decided to conduct a second Internet channel home, chose one known provider in Ukraine, which provides access via ADSL. He and cheap rates and ADSL modem is inexpensive. So I did, connected, stuck the ADLS switch modem - everything works. But I didn’t want to refuse the good old wireless channel, so I decided to make the Internet traffic go straight on both channels, so that I could use the total bandwidth. Yes, and so that when one channel falls, it takes the other load on itself.



After searching on the Internet, I found out that there are at least two solutions:
')
- at the firewall level, scatter TCP sessions across different interfaces. Disadvantages - sites that have session binding to an IP address will stop working, since consecutive requests from one user may come through different channels and from different IP.
- at the routing level, scatter routes through different interfaces. Problems of the first solution will not be, since the routes are cached and subsequent calls to the same address will go through the same interface. But balancing will not be as accurate, and downloading from one server even in several streams will not be able to achieve the total speed of the two channels.

I chose for myself balancing with routing, since the stable operation of all sites was very important to me, well, this functionality was already in my core, and the firewall would have to be patched.

So let's get started!

First, we define the variables:
$ cat / etc / balance / vars

  1. #!/bin/bash # LAN interface IF0= "eth1" # WAN interface 1 IF1= "eth0" # WAN interface 2 IF2= "ppp0" IP1= "194.9.xx.xx" IP2= "`ip addr show $IF2 | grep inet | awk '{print $2}'`" # gateway 1 P1= "194.9.xx.xx" # gateway 2 P2= "195.5.xx.xx" # LAN netmask P0_NET= "192.168.0.0/24" # WAN1 netmask P1_NET= "194.9.xx.xx/xx" # WAN2 netmask P2_NET= "195.5.xx.xx/xx" TBL1= "provider1" TBL2= "provider2" # Realtive weight of channels bandwidth W1= "2" W2= "1"
  2. #!/bin/bash # LAN interface IF0= "eth1" # WAN interface 1 IF1= "eth0" # WAN interface 2 IF2= "ppp0" IP1= "194.9.xx.xx" IP2= "`ip addr show $IF2 | grep inet | awk '{print $2}'`" # gateway 1 P1= "194.9.xx.xx" # gateway 2 P2= "195.5.xx.xx" # LAN netmask P0_NET= "192.168.0.0/24" # WAN1 netmask P1_NET= "194.9.xx.xx/xx" # WAN2 netmask P2_NET= "195.5.xx.xx/xx" TBL1= "provider1" TBL2= "provider2" # Realtive weight of channels bandwidth W1= "2" W2= "1"
  3. #!/bin/bash # LAN interface IF0= "eth1" # WAN interface 1 IF1= "eth0" # WAN interface 2 IF2= "ppp0" IP1= "194.9.xx.xx" IP2= "`ip addr show $IF2 | grep inet | awk '{print $2}'`" # gateway 1 P1= "194.9.xx.xx" # gateway 2 P2= "195.5.xx.xx" # LAN netmask P0_NET= "192.168.0.0/24" # WAN1 netmask P1_NET= "194.9.xx.xx/xx" # WAN2 netmask P2_NET= "195.5.xx.xx/xx" TBL1= "provider1" TBL2= "provider2" # Realtive weight of channels bandwidth W1= "2" W2= "1"
  4. #!/bin/bash # LAN interface IF0= "eth1" # WAN interface 1 IF1= "eth0" # WAN interface 2 IF2= "ppp0" IP1= "194.9.xx.xx" IP2= "`ip addr show $IF2 | grep inet | awk '{print $2}'`" # gateway 1 P1= "194.9.xx.xx" # gateway 2 P2= "195.5.xx.xx" # LAN netmask P0_NET= "192.168.0.0/24" # WAN1 netmask P1_NET= "194.9.xx.xx/xx" # WAN2 netmask P2_NET= "195.5.xx.xx/xx" TBL1= "provider1" TBL2= "provider2" # Realtive weight of channels bandwidth W1= "2" W2= "1"
  5. #!/bin/bash # LAN interface IF0= "eth1" # WAN interface 1 IF1= "eth0" # WAN interface 2 IF2= "ppp0" IP1= "194.9.xx.xx" IP2= "`ip addr show $IF2 | grep inet | awk '{print $2}'`" # gateway 1 P1= "194.9.xx.xx" # gateway 2 P2= "195.5.xx.xx" # LAN netmask P0_NET= "192.168.0.0/24" # WAN1 netmask P1_NET= "194.9.xx.xx/xx" # WAN2 netmask P2_NET= "195.5.xx.xx/xx" TBL1= "provider1" TBL2= "provider2" # Realtive weight of channels bandwidth W1= "2" W2= "1"
  6. #!/bin/bash # LAN interface IF0= "eth1" # WAN interface 1 IF1= "eth0" # WAN interface 2 IF2= "ppp0" IP1= "194.9.xx.xx" IP2= "`ip addr show $IF2 | grep inet | awk '{print $2}'`" # gateway 1 P1= "194.9.xx.xx" # gateway 2 P2= "195.5.xx.xx" # LAN netmask P0_NET= "192.168.0.0/24" # WAN1 netmask P1_NET= "194.9.xx.xx/xx" # WAN2 netmask P2_NET= "195.5.xx.xx/xx" TBL1= "provider1" TBL2= "provider2" # Realtive weight of channels bandwidth W1= "2" W2= "1"
  7. #!/bin/bash # LAN interface IF0= "eth1" # WAN interface 1 IF1= "eth0" # WAN interface 2 IF2= "ppp0" IP1= "194.9.xx.xx" IP2= "`ip addr show $IF2 | grep inet | awk '{print $2}'`" # gateway 1 P1= "194.9.xx.xx" # gateway 2 P2= "195.5.xx.xx" # LAN netmask P0_NET= "192.168.0.0/24" # WAN1 netmask P1_NET= "194.9.xx.xx/xx" # WAN2 netmask P2_NET= "195.5.xx.xx/xx" TBL1= "provider1" TBL2= "provider2" # Realtive weight of channels bandwidth W1= "2" W2= "1"
  8. #!/bin/bash # LAN interface IF0= "eth1" # WAN interface 1 IF1= "eth0" # WAN interface 2 IF2= "ppp0" IP1= "194.9.xx.xx" IP2= "`ip addr show $IF2 | grep inet | awk '{print $2}'`" # gateway 1 P1= "194.9.xx.xx" # gateway 2 P2= "195.5.xx.xx" # LAN netmask P0_NET= "192.168.0.0/24" # WAN1 netmask P1_NET= "194.9.xx.xx/xx" # WAN2 netmask P2_NET= "195.5.xx.xx/xx" TBL1= "provider1" TBL2= "provider2" # Realtive weight of channels bandwidth W1= "2" W2= "1"
  9. #!/bin/bash # LAN interface IF0= "eth1" # WAN interface 1 IF1= "eth0" # WAN interface 2 IF2= "ppp0" IP1= "194.9.xx.xx" IP2= "`ip addr show $IF2 | grep inet | awk '{print $2}'`" # gateway 1 P1= "194.9.xx.xx" # gateway 2 P2= "195.5.xx.xx" # LAN netmask P0_NET= "192.168.0.0/24" # WAN1 netmask P1_NET= "194.9.xx.xx/xx" # WAN2 netmask P2_NET= "195.5.xx.xx/xx" TBL1= "provider1" TBL2= "provider2" # Realtive weight of channels bandwidth W1= "2" W2= "1"
  10. #!/bin/bash # LAN interface IF0= "eth1" # WAN interface 1 IF1= "eth0" # WAN interface 2 IF2= "ppp0" IP1= "194.9.xx.xx" IP2= "`ip addr show $IF2 | grep inet | awk '{print $2}'`" # gateway 1 P1= "194.9.xx.xx" # gateway 2 P2= "195.5.xx.xx" # LAN netmask P0_NET= "192.168.0.0/24" # WAN1 netmask P1_NET= "194.9.xx.xx/xx" # WAN2 netmask P2_NET= "195.5.xx.xx/xx" TBL1= "provider1" TBL2= "provider2" # Realtive weight of channels bandwidth W1= "2" W2= "1"
  11. #!/bin/bash # LAN interface IF0= "eth1" # WAN interface 1 IF1= "eth0" # WAN interface 2 IF2= "ppp0" IP1= "194.9.xx.xx" IP2= "`ip addr show $IF2 | grep inet | awk '{print $2}'`" # gateway 1 P1= "194.9.xx.xx" # gateway 2 P2= "195.5.xx.xx" # LAN netmask P0_NET= "192.168.0.0/24" # WAN1 netmask P1_NET= "194.9.xx.xx/xx" # WAN2 netmask P2_NET= "195.5.xx.xx/xx" TBL1= "provider1" TBL2= "provider2" # Realtive weight of channels bandwidth W1= "2" W2= "1"
  12. #!/bin/bash # LAN interface IF0= "eth1" # WAN interface 1 IF1= "eth0" # WAN interface 2 IF2= "ppp0" IP1= "194.9.xx.xx" IP2= "`ip addr show $IF2 | grep inet | awk '{print $2}'`" # gateway 1 P1= "194.9.xx.xx" # gateway 2 P2= "195.5.xx.xx" # LAN netmask P0_NET= "192.168.0.0/24" # WAN1 netmask P1_NET= "194.9.xx.xx/xx" # WAN2 netmask P2_NET= "195.5.xx.xx/xx" TBL1= "provider1" TBL2= "provider2" # Realtive weight of channels bandwidth W1= "2" W2= "1"
  13. #!/bin/bash # LAN interface IF0= "eth1" # WAN interface 1 IF1= "eth0" # WAN interface 2 IF2= "ppp0" IP1= "194.9.xx.xx" IP2= "`ip addr show $IF2 | grep inet | awk '{print $2}'`" # gateway 1 P1= "194.9.xx.xx" # gateway 2 P2= "195.5.xx.xx" # LAN netmask P0_NET= "192.168.0.0/24" # WAN1 netmask P1_NET= "194.9.xx.xx/xx" # WAN2 netmask P2_NET= "195.5.xx.xx/xx" TBL1= "provider1" TBL2= "provider2" # Realtive weight of channels bandwidth W1= "2" W2= "1"
  14. #!/bin/bash # LAN interface IF0= "eth1" # WAN interface 1 IF1= "eth0" # WAN interface 2 IF2= "ppp0" IP1= "194.9.xx.xx" IP2= "`ip addr show $IF2 | grep inet | awk '{print $2}'`" # gateway 1 P1= "194.9.xx.xx" # gateway 2 P2= "195.5.xx.xx" # LAN netmask P0_NET= "192.168.0.0/24" # WAN1 netmask P1_NET= "194.9.xx.xx/xx" # WAN2 netmask P2_NET= "195.5.xx.xx/xx" TBL1= "provider1" TBL2= "provider2" # Realtive weight of channels bandwidth W1= "2" W2= "1"
  15. #!/bin/bash # LAN interface IF0= "eth1" # WAN interface 1 IF1= "eth0" # WAN interface 2 IF2= "ppp0" IP1= "194.9.xx.xx" IP2= "`ip addr show $IF2 | grep inet | awk '{print $2}'`" # gateway 1 P1= "194.9.xx.xx" # gateway 2 P2= "195.5.xx.xx" # LAN netmask P0_NET= "192.168.0.0/24" # WAN1 netmask P1_NET= "194.9.xx.xx/xx" # WAN2 netmask P2_NET= "195.5.xx.xx/xx" TBL1= "provider1" TBL2= "provider2" # Realtive weight of channels bandwidth W1= "2" W2= "1"
  16. #!/bin/bash # LAN interface IF0= "eth1" # WAN interface 1 IF1= "eth0" # WAN interface 2 IF2= "ppp0" IP1= "194.9.xx.xx" IP2= "`ip addr show $IF2 | grep inet | awk '{print $2}'`" # gateway 1 P1= "194.9.xx.xx" # gateway 2 P2= "195.5.xx.xx" # LAN netmask P0_NET= "192.168.0.0/24" # WAN1 netmask P1_NET= "194.9.xx.xx/xx" # WAN2 netmask P2_NET= "195.5.xx.xx/xx" TBL1= "provider1" TBL2= "provider2" # Realtive weight of channels bandwidth W1= "2" W2= "1"
  17. #!/bin/bash # LAN interface IF0= "eth1" # WAN interface 1 IF1= "eth0" # WAN interface 2 IF2= "ppp0" IP1= "194.9.xx.xx" IP2= "`ip addr show $IF2 | grep inet | awk '{print $2}'`" # gateway 1 P1= "194.9.xx.xx" # gateway 2 P2= "195.5.xx.xx" # LAN netmask P0_NET= "192.168.0.0/24" # WAN1 netmask P1_NET= "194.9.xx.xx/xx" # WAN2 netmask P2_NET= "195.5.xx.xx/xx" TBL1= "provider1" TBL2= "provider2" # Realtive weight of channels bandwidth W1= "2" W2= "1"
  18. #!/bin/bash # LAN interface IF0= "eth1" # WAN interface 1 IF1= "eth0" # WAN interface 2 IF2= "ppp0" IP1= "194.9.xx.xx" IP2= "`ip addr show $IF2 | grep inet | awk '{print $2}'`" # gateway 1 P1= "194.9.xx.xx" # gateway 2 P2= "195.5.xx.xx" # LAN netmask P0_NET= "192.168.0.0/24" # WAN1 netmask P1_NET= "194.9.xx.xx/xx" # WAN2 netmask P2_NET= "195.5.xx.xx/xx" TBL1= "provider1" TBL2= "provider2" # Realtive weight of channels bandwidth W1= "2" W2= "1"
  19. #!/bin/bash # LAN interface IF0= "eth1" # WAN interface 1 IF1= "eth0" # WAN interface 2 IF2= "ppp0" IP1= "194.9.xx.xx" IP2= "`ip addr show $IF2 | grep inet | awk '{print $2}'`" # gateway 1 P1= "194.9.xx.xx" # gateway 2 P2= "195.5.xx.xx" # LAN netmask P0_NET= "192.168.0.0/24" # WAN1 netmask P1_NET= "194.9.xx.xx/xx" # WAN2 netmask P2_NET= "195.5.xx.xx/xx" TBL1= "provider1" TBL2= "provider2" # Realtive weight of channels bandwidth W1= "2" W2= "1"
  20. #!/bin/bash # LAN interface IF0= "eth1" # WAN interface 1 IF1= "eth0" # WAN interface 2 IF2= "ppp0" IP1= "194.9.xx.xx" IP2= "`ip addr show $IF2 | grep inet | awk '{print $2}'`" # gateway 1 P1= "194.9.xx.xx" # gateway 2 P2= "195.5.xx.xx" # LAN netmask P0_NET= "192.168.0.0/24" # WAN1 netmask P1_NET= "194.9.xx.xx/xx" # WAN2 netmask P2_NET= "195.5.xx.xx/xx" TBL1= "provider1" TBL2= "provider2" # Realtive weight of channels bandwidth W1= "2" W2= "1"
  21. #!/bin/bash # LAN interface IF0= "eth1" # WAN interface 1 IF1= "eth0" # WAN interface 2 IF2= "ppp0" IP1= "194.9.xx.xx" IP2= "`ip addr show $IF2 | grep inet | awk '{print $2}'`" # gateway 1 P1= "194.9.xx.xx" # gateway 2 P2= "195.5.xx.xx" # LAN netmask P0_NET= "192.168.0.0/24" # WAN1 netmask P1_NET= "194.9.xx.xx/xx" # WAN2 netmask P2_NET= "195.5.xx.xx/xx" TBL1= "provider1" TBL2= "provider2" # Realtive weight of channels bandwidth W1= "2" W2= "1"
  22. #!/bin/bash # LAN interface IF0= "eth1" # WAN interface 1 IF1= "eth0" # WAN interface 2 IF2= "ppp0" IP1= "194.9.xx.xx" IP2= "`ip addr show $IF2 | grep inet | awk '{print $2}'`" # gateway 1 P1= "194.9.xx.xx" # gateway 2 P2= "195.5.xx.xx" # LAN netmask P0_NET= "192.168.0.0/24" # WAN1 netmask P1_NET= "194.9.xx.xx/xx" # WAN2 netmask P2_NET= "195.5.xx.xx/xx" TBL1= "provider1" TBL2= "provider2" # Realtive weight of channels bandwidth W1= "2" W2= "1"
  23. #!/bin/bash # LAN interface IF0= "eth1" # WAN interface 1 IF1= "eth0" # WAN interface 2 IF2= "ppp0" IP1= "194.9.xx.xx" IP2= "`ip addr show $IF2 | grep inet | awk '{print $2}'`" # gateway 1 P1= "194.9.xx.xx" # gateway 2 P2= "195.5.xx.xx" # LAN netmask P0_NET= "192.168.0.0/24" # WAN1 netmask P1_NET= "194.9.xx.xx/xx" # WAN2 netmask P2_NET= "195.5.xx.xx/xx" TBL1= "provider1" TBL2= "provider2" # Realtive weight of channels bandwidth W1= "2" W2= "1"
  24. #!/bin/bash # LAN interface IF0= "eth1" # WAN interface 1 IF1= "eth0" # WAN interface 2 IF2= "ppp0" IP1= "194.9.xx.xx" IP2= "`ip addr show $IF2 | grep inet | awk '{print $2}'`" # gateway 1 P1= "194.9.xx.xx" # gateway 2 P2= "195.5.xx.xx" # LAN netmask P0_NET= "192.168.0.0/24" # WAN1 netmask P1_NET= "194.9.xx.xx/xx" # WAN2 netmask P2_NET= "195.5.xx.xx/xx" TBL1= "provider1" TBL2= "provider2" # Realtive weight of channels bandwidth W1= "2" W2= "1"
#!/bin/bash # LAN interface IF0= "eth1" # WAN interface 1 IF1= "eth0" # WAN interface 2 IF2= "ppp0" IP1= "194.9.xx.xx" IP2= "`ip addr show $IF2 | grep inet | awk '{print $2}'`" # gateway 1 P1= "194.9.xx.xx" # gateway 2 P2= "195.5.xx.xx" # LAN netmask P0_NET= "192.168.0.0/24" # WAN1 netmask P1_NET= "194.9.xx.xx/xx" # WAN2 netmask P2_NET= "195.5.xx.xx/xx" TBL1= "provider1" TBL2= "provider2" # Realtive weight of channels bandwidth W1= "2" W2= "1"


Add two additional routing tables to the / etc / iproute2 / rt_tables file:
echo "1 provider1" >> /etc/iproute2/rt_tables
echo "2 provider2" >> /etc/iproute2/rt_tables


Now we will write a script that will prescribe all the necessary routes and firewall rules:

cat /etc/balance/routing.sh

  1. #!/bin/bash . /etc/balance/vars echo "1" > /proc/sys/net/ipv4/ip_forward ip route add $P1_NET dev $IF1 src $IP1 table $TBL1 > /dev/ null 2>&1 ip route add default via $P1 table $TBL1 > /dev/ null 2>&1 ip route add $P2_NET dev $IF2 src $IP2 table $TBL2 > /dev/ null 2>&1 ip route add default via $P2 table $TBL2 > /dev/ null 2>&1 ip route add $P1_NET dev $IF1 src $IP1 > /dev/ null 2>&1 ip route add $P2_NET dev $IF2 src $IP2 ip route add default via $P1 > /dev/ null 2>&1 ip rule add from $IP1 table $TBL1 > /dev/ null 2>&1 ip rule add from $IP2 table $TBL2 > /dev/ null 2>&1 ip route add $P0_NET dev $IF0 table $TBL1 > /dev/ null 2>&1 ip route add $P2_NET dev $IF2 table $TBL1 > /dev/ null 2>&1 ip route add 127.0.0.0/8 dev lo table $TBL1 > /dev/ null 2>&1 ip route add $P0_NET dev $IF0 table $TBL2 > /dev/ null 2>&1 ip route add $P1_NET dev $IF1 table $TBL2 > /dev/ null 2>&1 ip route add 127.0.0.0/8 dev lo table $TBL2 > /dev/ null 2>&1 iptables -t nat -F POSTROUTING iptables -t nat -A POSTROUTING -s $P0_NET -o $IF1 -j MASQUERADE iptables -t nat -A POSTROUTING -s $P0_NET -o $IF2 -j MASQUERADE
  2. #!/bin/bash . /etc/balance/vars echo "1" > /proc/sys/net/ipv4/ip_forward ip route add $P1_NET dev $IF1 src $IP1 table $TBL1 > /dev/ null 2>&1 ip route add default via $P1 table $TBL1 > /dev/ null 2>&1 ip route add $P2_NET dev $IF2 src $IP2 table $TBL2 > /dev/ null 2>&1 ip route add default via $P2 table $TBL2 > /dev/ null 2>&1 ip route add $P1_NET dev $IF1 src $IP1 > /dev/ null 2>&1 ip route add $P2_NET dev $IF2 src $IP2 ip route add default via $P1 > /dev/ null 2>&1 ip rule add from $IP1 table $TBL1 > /dev/ null 2>&1 ip rule add from $IP2 table $TBL2 > /dev/ null 2>&1 ip route add $P0_NET dev $IF0 table $TBL1 > /dev/ null 2>&1 ip route add $P2_NET dev $IF2 table $TBL1 > /dev/ null 2>&1 ip route add 127.0.0.0/8 dev lo table $TBL1 > /dev/ null 2>&1 ip route add $P0_NET dev $IF0 table $TBL2 > /dev/ null 2>&1 ip route add $P1_NET dev $IF1 table $TBL2 > /dev/ null 2>&1 ip route add 127.0.0.0/8 dev lo table $TBL2 > /dev/ null 2>&1 iptables -t nat -F POSTROUTING iptables -t nat -A POSTROUTING -s $P0_NET -o $IF1 -j MASQUERADE iptables -t nat -A POSTROUTING -s $P0_NET -o $IF2 -j MASQUERADE
  3. #!/bin/bash . /etc/balance/vars echo "1" > /proc/sys/net/ipv4/ip_forward ip route add $P1_NET dev $IF1 src $IP1 table $TBL1 > /dev/ null 2>&1 ip route add default via $P1 table $TBL1 > /dev/ null 2>&1 ip route add $P2_NET dev $IF2 src $IP2 table $TBL2 > /dev/ null 2>&1 ip route add default via $P2 table $TBL2 > /dev/ null 2>&1 ip route add $P1_NET dev $IF1 src $IP1 > /dev/ null 2>&1 ip route add $P2_NET dev $IF2 src $IP2 ip route add default via $P1 > /dev/ null 2>&1 ip rule add from $IP1 table $TBL1 > /dev/ null 2>&1 ip rule add from $IP2 table $TBL2 > /dev/ null 2>&1 ip route add $P0_NET dev $IF0 table $TBL1 > /dev/ null 2>&1 ip route add $P2_NET dev $IF2 table $TBL1 > /dev/ null 2>&1 ip route add 127.0.0.0/8 dev lo table $TBL1 > /dev/ null 2>&1 ip route add $P0_NET dev $IF0 table $TBL2 > /dev/ null 2>&1 ip route add $P1_NET dev $IF1 table $TBL2 > /dev/ null 2>&1 ip route add 127.0.0.0/8 dev lo table $TBL2 > /dev/ null 2>&1 iptables -t nat -F POSTROUTING iptables -t nat -A POSTROUTING -s $P0_NET -o $IF1 -j MASQUERADE iptables -t nat -A POSTROUTING -s $P0_NET -o $IF2 -j MASQUERADE
  4. #!/bin/bash . /etc/balance/vars echo "1" > /proc/sys/net/ipv4/ip_forward ip route add $P1_NET dev $IF1 src $IP1 table $TBL1 > /dev/ null 2>&1 ip route add default via $P1 table $TBL1 > /dev/ null 2>&1 ip route add $P2_NET dev $IF2 src $IP2 table $TBL2 > /dev/ null 2>&1 ip route add default via $P2 table $TBL2 > /dev/ null 2>&1 ip route add $P1_NET dev $IF1 src $IP1 > /dev/ null 2>&1 ip route add $P2_NET dev $IF2 src $IP2 ip route add default via $P1 > /dev/ null 2>&1 ip rule add from $IP1 table $TBL1 > /dev/ null 2>&1 ip rule add from $IP2 table $TBL2 > /dev/ null 2>&1 ip route add $P0_NET dev $IF0 table $TBL1 > /dev/ null 2>&1 ip route add $P2_NET dev $IF2 table $TBL1 > /dev/ null 2>&1 ip route add 127.0.0.0/8 dev lo table $TBL1 > /dev/ null 2>&1 ip route add $P0_NET dev $IF0 table $TBL2 > /dev/ null 2>&1 ip route add $P1_NET dev $IF1 table $TBL2 > /dev/ null 2>&1 ip route add 127.0.0.0/8 dev lo table $TBL2 > /dev/ null 2>&1 iptables -t nat -F POSTROUTING iptables -t nat -A POSTROUTING -s $P0_NET -o $IF1 -j MASQUERADE iptables -t nat -A POSTROUTING -s $P0_NET -o $IF2 -j MASQUERADE
  5. #!/bin/bash . /etc/balance/vars echo "1" > /proc/sys/net/ipv4/ip_forward ip route add $P1_NET dev $IF1 src $IP1 table $TBL1 > /dev/ null 2>&1 ip route add default via $P1 table $TBL1 > /dev/ null 2>&1 ip route add $P2_NET dev $IF2 src $IP2 table $TBL2 > /dev/ null 2>&1 ip route add default via $P2 table $TBL2 > /dev/ null 2>&1 ip route add $P1_NET dev $IF1 src $IP1 > /dev/ null 2>&1 ip route add $P2_NET dev $IF2 src $IP2 ip route add default via $P1 > /dev/ null 2>&1 ip rule add from $IP1 table $TBL1 > /dev/ null 2>&1 ip rule add from $IP2 table $TBL2 > /dev/ null 2>&1 ip route add $P0_NET dev $IF0 table $TBL1 > /dev/ null 2>&1 ip route add $P2_NET dev $IF2 table $TBL1 > /dev/ null 2>&1 ip route add 127.0.0.0/8 dev lo table $TBL1 > /dev/ null 2>&1 ip route add $P0_NET dev $IF0 table $TBL2 > /dev/ null 2>&1 ip route add $P1_NET dev $IF1 table $TBL2 > /dev/ null 2>&1 ip route add 127.0.0.0/8 dev lo table $TBL2 > /dev/ null 2>&1 iptables -t nat -F POSTROUTING iptables -t nat -A POSTROUTING -s $P0_NET -o $IF1 -j MASQUERADE iptables -t nat -A POSTROUTING -s $P0_NET -o $IF2 -j MASQUERADE
  6. #!/bin/bash . /etc/balance/vars echo "1" > /proc/sys/net/ipv4/ip_forward ip route add $P1_NET dev $IF1 src $IP1 table $TBL1 > /dev/ null 2>&1 ip route add default via $P1 table $TBL1 > /dev/ null 2>&1 ip route add $P2_NET dev $IF2 src $IP2 table $TBL2 > /dev/ null 2>&1 ip route add default via $P2 table $TBL2 > /dev/ null 2>&1 ip route add $P1_NET dev $IF1 src $IP1 > /dev/ null 2>&1 ip route add $P2_NET dev $IF2 src $IP2 ip route add default via $P1 > /dev/ null 2>&1 ip rule add from $IP1 table $TBL1 > /dev/ null 2>&1 ip rule add from $IP2 table $TBL2 > /dev/ null 2>&1 ip route add $P0_NET dev $IF0 table $TBL1 > /dev/ null 2>&1 ip route add $P2_NET dev $IF2 table $TBL1 > /dev/ null 2>&1 ip route add 127.0.0.0/8 dev lo table $TBL1 > /dev/ null 2>&1 ip route add $P0_NET dev $IF0 table $TBL2 > /dev/ null 2>&1 ip route add $P1_NET dev $IF1 table $TBL2 > /dev/ null 2>&1 ip route add 127.0.0.0/8 dev lo table $TBL2 > /dev/ null 2>&1 iptables -t nat -F POSTROUTING iptables -t nat -A POSTROUTING -s $P0_NET -o $IF1 -j MASQUERADE iptables -t nat -A POSTROUTING -s $P0_NET -o $IF2 -j MASQUERADE
  7. #!/bin/bash . /etc/balance/vars echo "1" > /proc/sys/net/ipv4/ip_forward ip route add $P1_NET dev $IF1 src $IP1 table $TBL1 > /dev/ null 2>&1 ip route add default via $P1 table $TBL1 > /dev/ null 2>&1 ip route add $P2_NET dev $IF2 src $IP2 table $TBL2 > /dev/ null 2>&1 ip route add default via $P2 table $TBL2 > /dev/ null 2>&1 ip route add $P1_NET dev $IF1 src $IP1 > /dev/ null 2>&1 ip route add $P2_NET dev $IF2 src $IP2 ip route add default via $P1 > /dev/ null 2>&1 ip rule add from $IP1 table $TBL1 > /dev/ null 2>&1 ip rule add from $IP2 table $TBL2 > /dev/ null 2>&1 ip route add $P0_NET dev $IF0 table $TBL1 > /dev/ null 2>&1 ip route add $P2_NET dev $IF2 table $TBL1 > /dev/ null 2>&1 ip route add 127.0.0.0/8 dev lo table $TBL1 > /dev/ null 2>&1 ip route add $P0_NET dev $IF0 table $TBL2 > /dev/ null 2>&1 ip route add $P1_NET dev $IF1 table $TBL2 > /dev/ null 2>&1 ip route add 127.0.0.0/8 dev lo table $TBL2 > /dev/ null 2>&1 iptables -t nat -F POSTROUTING iptables -t nat -A POSTROUTING -s $P0_NET -o $IF1 -j MASQUERADE iptables -t nat -A POSTROUTING -s $P0_NET -o $IF2 -j MASQUERADE
  8. #!/bin/bash . /etc/balance/vars echo "1" > /proc/sys/net/ipv4/ip_forward ip route add $P1_NET dev $IF1 src $IP1 table $TBL1 > /dev/ null 2>&1 ip route add default via $P1 table $TBL1 > /dev/ null 2>&1 ip route add $P2_NET dev $IF2 src $IP2 table $TBL2 > /dev/ null 2>&1 ip route add default via $P2 table $TBL2 > /dev/ null 2>&1 ip route add $P1_NET dev $IF1 src $IP1 > /dev/ null 2>&1 ip route add $P2_NET dev $IF2 src $IP2 ip route add default via $P1 > /dev/ null 2>&1 ip rule add from $IP1 table $TBL1 > /dev/ null 2>&1 ip rule add from $IP2 table $TBL2 > /dev/ null 2>&1 ip route add $P0_NET dev $IF0 table $TBL1 > /dev/ null 2>&1 ip route add $P2_NET dev $IF2 table $TBL1 > /dev/ null 2>&1 ip route add 127.0.0.0/8 dev lo table $TBL1 > /dev/ null 2>&1 ip route add $P0_NET dev $IF0 table $TBL2 > /dev/ null 2>&1 ip route add $P1_NET dev $IF1 table $TBL2 > /dev/ null 2>&1 ip route add 127.0.0.0/8 dev lo table $TBL2 > /dev/ null 2>&1 iptables -t nat -F POSTROUTING iptables -t nat -A POSTROUTING -s $P0_NET -o $IF1 -j MASQUERADE iptables -t nat -A POSTROUTING -s $P0_NET -o $IF2 -j MASQUERADE
  9. #!/bin/bash . /etc/balance/vars echo "1" > /proc/sys/net/ipv4/ip_forward ip route add $P1_NET dev $IF1 src $IP1 table $TBL1 > /dev/ null 2>&1 ip route add default via $P1 table $TBL1 > /dev/ null 2>&1 ip route add $P2_NET dev $IF2 src $IP2 table $TBL2 > /dev/ null 2>&1 ip route add default via $P2 table $TBL2 > /dev/ null 2>&1 ip route add $P1_NET dev $IF1 src $IP1 > /dev/ null 2>&1 ip route add $P2_NET dev $IF2 src $IP2 ip route add default via $P1 > /dev/ null 2>&1 ip rule add from $IP1 table $TBL1 > /dev/ null 2>&1 ip rule add from $IP2 table $TBL2 > /dev/ null 2>&1 ip route add $P0_NET dev $IF0 table $TBL1 > /dev/ null 2>&1 ip route add $P2_NET dev $IF2 table $TBL1 > /dev/ null 2>&1 ip route add 127.0.0.0/8 dev lo table $TBL1 > /dev/ null 2>&1 ip route add $P0_NET dev $IF0 table $TBL2 > /dev/ null 2>&1 ip route add $P1_NET dev $IF1 table $TBL2 > /dev/ null 2>&1 ip route add 127.0.0.0/8 dev lo table $TBL2 > /dev/ null 2>&1 iptables -t nat -F POSTROUTING iptables -t nat -A POSTROUTING -s $P0_NET -o $IF1 -j MASQUERADE iptables -t nat -A POSTROUTING -s $P0_NET -o $IF2 -j MASQUERADE
  10. #!/bin/bash . /etc/balance/vars echo "1" > /proc/sys/net/ipv4/ip_forward ip route add $P1_NET dev $IF1 src $IP1 table $TBL1 > /dev/ null 2>&1 ip route add default via $P1 table $TBL1 > /dev/ null 2>&1 ip route add $P2_NET dev $IF2 src $IP2 table $TBL2 > /dev/ null 2>&1 ip route add default via $P2 table $TBL2 > /dev/ null 2>&1 ip route add $P1_NET dev $IF1 src $IP1 > /dev/ null 2>&1 ip route add $P2_NET dev $IF2 src $IP2 ip route add default via $P1 > /dev/ null 2>&1 ip rule add from $IP1 table $TBL1 > /dev/ null 2>&1 ip rule add from $IP2 table $TBL2 > /dev/ null 2>&1 ip route add $P0_NET dev $IF0 table $TBL1 > /dev/ null 2>&1 ip route add $P2_NET dev $IF2 table $TBL1 > /dev/ null 2>&1 ip route add 127.0.0.0/8 dev lo table $TBL1 > /dev/ null 2>&1 ip route add $P0_NET dev $IF0 table $TBL2 > /dev/ null 2>&1 ip route add $P1_NET dev $IF1 table $TBL2 > /dev/ null 2>&1 ip route add 127.0.0.0/8 dev lo table $TBL2 > /dev/ null 2>&1 iptables -t nat -F POSTROUTING iptables -t nat -A POSTROUTING -s $P0_NET -o $IF1 -j MASQUERADE iptables -t nat -A POSTROUTING -s $P0_NET -o $IF2 -j MASQUERADE
  11. #!/bin/bash . /etc/balance/vars echo "1" > /proc/sys/net/ipv4/ip_forward ip route add $P1_NET dev $IF1 src $IP1 table $TBL1 > /dev/ null 2>&1 ip route add default via $P1 table $TBL1 > /dev/ null 2>&1 ip route add $P2_NET dev $IF2 src $IP2 table $TBL2 > /dev/ null 2>&1 ip route add default via $P2 table $TBL2 > /dev/ null 2>&1 ip route add $P1_NET dev $IF1 src $IP1 > /dev/ null 2>&1 ip route add $P2_NET dev $IF2 src $IP2 ip route add default via $P1 > /dev/ null 2>&1 ip rule add from $IP1 table $TBL1 > /dev/ null 2>&1 ip rule add from $IP2 table $TBL2 > /dev/ null 2>&1 ip route add $P0_NET dev $IF0 table $TBL1 > /dev/ null 2>&1 ip route add $P2_NET dev $IF2 table $TBL1 > /dev/ null 2>&1 ip route add 127.0.0.0/8 dev lo table $TBL1 > /dev/ null 2>&1 ip route add $P0_NET dev $IF0 table $TBL2 > /dev/ null 2>&1 ip route add $P1_NET dev $IF1 table $TBL2 > /dev/ null 2>&1 ip route add 127.0.0.0/8 dev lo table $TBL2 > /dev/ null 2>&1 iptables -t nat -F POSTROUTING iptables -t nat -A POSTROUTING -s $P0_NET -o $IF1 -j MASQUERADE iptables -t nat -A POSTROUTING -s $P0_NET -o $IF2 -j MASQUERADE
  12. #!/bin/bash . /etc/balance/vars echo "1" > /proc/sys/net/ipv4/ip_forward ip route add $P1_NET dev $IF1 src $IP1 table $TBL1 > /dev/ null 2>&1 ip route add default via $P1 table $TBL1 > /dev/ null 2>&1 ip route add $P2_NET dev $IF2 src $IP2 table $TBL2 > /dev/ null 2>&1 ip route add default via $P2 table $TBL2 > /dev/ null 2>&1 ip route add $P1_NET dev $IF1 src $IP1 > /dev/ null 2>&1 ip route add $P2_NET dev $IF2 src $IP2 ip route add default via $P1 > /dev/ null 2>&1 ip rule add from $IP1 table $TBL1 > /dev/ null 2>&1 ip rule add from $IP2 table $TBL2 > /dev/ null 2>&1 ip route add $P0_NET dev $IF0 table $TBL1 > /dev/ null 2>&1 ip route add $P2_NET dev $IF2 table $TBL1 > /dev/ null 2>&1 ip route add 127.0.0.0/8 dev lo table $TBL1 > /dev/ null 2>&1 ip route add $P0_NET dev $IF0 table $TBL2 > /dev/ null 2>&1 ip route add $P1_NET dev $IF1 table $TBL2 > /dev/ null 2>&1 ip route add 127.0.0.0/8 dev lo table $TBL2 > /dev/ null 2>&1 iptables -t nat -F POSTROUTING iptables -t nat -A POSTROUTING -s $P0_NET -o $IF1 -j MASQUERADE iptables -t nat -A POSTROUTING -s $P0_NET -o $IF2 -j MASQUERADE
  13. #!/bin/bash . /etc/balance/vars echo "1" > /proc/sys/net/ipv4/ip_forward ip route add $P1_NET dev $IF1 src $IP1 table $TBL1 > /dev/ null 2>&1 ip route add default via $P1 table $TBL1 > /dev/ null 2>&1 ip route add $P2_NET dev $IF2 src $IP2 table $TBL2 > /dev/ null 2>&1 ip route add default via $P2 table $TBL2 > /dev/ null 2>&1 ip route add $P1_NET dev $IF1 src $IP1 > /dev/ null 2>&1 ip route add $P2_NET dev $IF2 src $IP2 ip route add default via $P1 > /dev/ null 2>&1 ip rule add from $IP1 table $TBL1 > /dev/ null 2>&1 ip rule add from $IP2 table $TBL2 > /dev/ null 2>&1 ip route add $P0_NET dev $IF0 table $TBL1 > /dev/ null 2>&1 ip route add $P2_NET dev $IF2 table $TBL1 > /dev/ null 2>&1 ip route add 127.0.0.0/8 dev lo table $TBL1 > /dev/ null 2>&1 ip route add $P0_NET dev $IF0 table $TBL2 > /dev/ null 2>&1 ip route add $P1_NET dev $IF1 table $TBL2 > /dev/ null 2>&1 ip route add 127.0.0.0/8 dev lo table $TBL2 > /dev/ null 2>&1 iptables -t nat -F POSTROUTING iptables -t nat -A POSTROUTING -s $P0_NET -o $IF1 -j MASQUERADE iptables -t nat -A POSTROUTING -s $P0_NET -o $IF2 -j MASQUERADE
  14. #!/bin/bash . /etc/balance/vars echo "1" > /proc/sys/net/ipv4/ip_forward ip route add $P1_NET dev $IF1 src $IP1 table $TBL1 > /dev/ null 2>&1 ip route add default via $P1 table $TBL1 > /dev/ null 2>&1 ip route add $P2_NET dev $IF2 src $IP2 table $TBL2 > /dev/ null 2>&1 ip route add default via $P2 table $TBL2 > /dev/ null 2>&1 ip route add $P1_NET dev $IF1 src $IP1 > /dev/ null 2>&1 ip route add $P2_NET dev $IF2 src $IP2 ip route add default via $P1 > /dev/ null 2>&1 ip rule add from $IP1 table $TBL1 > /dev/ null 2>&1 ip rule add from $IP2 table $TBL2 > /dev/ null 2>&1 ip route add $P0_NET dev $IF0 table $TBL1 > /dev/ null 2>&1 ip route add $P2_NET dev $IF2 table $TBL1 > /dev/ null 2>&1 ip route add 127.0.0.0/8 dev lo table $TBL1 > /dev/ null 2>&1 ip route add $P0_NET dev $IF0 table $TBL2 > /dev/ null 2>&1 ip route add $P1_NET dev $IF1 table $TBL2 > /dev/ null 2>&1 ip route add 127.0.0.0/8 dev lo table $TBL2 > /dev/ null 2>&1 iptables -t nat -F POSTROUTING iptables -t nat -A POSTROUTING -s $P0_NET -o $IF1 -j MASQUERADE iptables -t nat -A POSTROUTING -s $P0_NET -o $IF2 -j MASQUERADE
  15. #!/bin/bash . /etc/balance/vars echo "1" > /proc/sys/net/ipv4/ip_forward ip route add $P1_NET dev $IF1 src $IP1 table $TBL1 > /dev/ null 2>&1 ip route add default via $P1 table $TBL1 > /dev/ null 2>&1 ip route add $P2_NET dev $IF2 src $IP2 table $TBL2 > /dev/ null 2>&1 ip route add default via $P2 table $TBL2 > /dev/ null 2>&1 ip route add $P1_NET dev $IF1 src $IP1 > /dev/ null 2>&1 ip route add $P2_NET dev $IF2 src $IP2 ip route add default via $P1 > /dev/ null 2>&1 ip rule add from $IP1 table $TBL1 > /dev/ null 2>&1 ip rule add from $IP2 table $TBL2 > /dev/ null 2>&1 ip route add $P0_NET dev $IF0 table $TBL1 > /dev/ null 2>&1 ip route add $P2_NET dev $IF2 table $TBL1 > /dev/ null 2>&1 ip route add 127.0.0.0/8 dev lo table $TBL1 > /dev/ null 2>&1 ip route add $P0_NET dev $IF0 table $TBL2 > /dev/ null 2>&1 ip route add $P1_NET dev $IF1 table $TBL2 > /dev/ null 2>&1 ip route add 127.0.0.0/8 dev lo table $TBL2 > /dev/ null 2>&1 iptables -t nat -F POSTROUTING iptables -t nat -A POSTROUTING -s $P0_NET -o $IF1 -j MASQUERADE iptables -t nat -A POSTROUTING -s $P0_NET -o $IF2 -j MASQUERADE
  16. #!/bin/bash . /etc/balance/vars echo "1" > /proc/sys/net/ipv4/ip_forward ip route add $P1_NET dev $IF1 src $IP1 table $TBL1 > /dev/ null 2>&1 ip route add default via $P1 table $TBL1 > /dev/ null 2>&1 ip route add $P2_NET dev $IF2 src $IP2 table $TBL2 > /dev/ null 2>&1 ip route add default via $P2 table $TBL2 > /dev/ null 2>&1 ip route add $P1_NET dev $IF1 src $IP1 > /dev/ null 2>&1 ip route add $P2_NET dev $IF2 src $IP2 ip route add default via $P1 > /dev/ null 2>&1 ip rule add from $IP1 table $TBL1 > /dev/ null 2>&1 ip rule add from $IP2 table $TBL2 > /dev/ null 2>&1 ip route add $P0_NET dev $IF0 table $TBL1 > /dev/ null 2>&1 ip route add $P2_NET dev $IF2 table $TBL1 > /dev/ null 2>&1 ip route add 127.0.0.0/8 dev lo table $TBL1 > /dev/ null 2>&1 ip route add $P0_NET dev $IF0 table $TBL2 > /dev/ null 2>&1 ip route add $P1_NET dev $IF1 table $TBL2 > /dev/ null 2>&1 ip route add 127.0.0.0/8 dev lo table $TBL2 > /dev/ null 2>&1 iptables -t nat -F POSTROUTING iptables -t nat -A POSTROUTING -s $P0_NET -o $IF1 -j MASQUERADE iptables -t nat -A POSTROUTING -s $P0_NET -o $IF2 -j MASQUERADE
  17. #!/bin/bash . /etc/balance/vars echo "1" > /proc/sys/net/ipv4/ip_forward ip route add $P1_NET dev $IF1 src $IP1 table $TBL1 > /dev/ null 2>&1 ip route add default via $P1 table $TBL1 > /dev/ null 2>&1 ip route add $P2_NET dev $IF2 src $IP2 table $TBL2 > /dev/ null 2>&1 ip route add default via $P2 table $TBL2 > /dev/ null 2>&1 ip route add $P1_NET dev $IF1 src $IP1 > /dev/ null 2>&1 ip route add $P2_NET dev $IF2 src $IP2 ip route add default via $P1 > /dev/ null 2>&1 ip rule add from $IP1 table $TBL1 > /dev/ null 2>&1 ip rule add from $IP2 table $TBL2 > /dev/ null 2>&1 ip route add $P0_NET dev $IF0 table $TBL1 > /dev/ null 2>&1 ip route add $P2_NET dev $IF2 table $TBL1 > /dev/ null 2>&1 ip route add 127.0.0.0/8 dev lo table $TBL1 > /dev/ null 2>&1 ip route add $P0_NET dev $IF0 table $TBL2 > /dev/ null 2>&1 ip route add $P1_NET dev $IF1 table $TBL2 > /dev/ null 2>&1 ip route add 127.0.0.0/8 dev lo table $TBL2 > /dev/ null 2>&1 iptables -t nat -F POSTROUTING iptables -t nat -A POSTROUTING -s $P0_NET -o $IF1 -j MASQUERADE iptables -t nat -A POSTROUTING -s $P0_NET -o $IF2 -j MASQUERADE
  18. #!/bin/bash . /etc/balance/vars echo "1" > /proc/sys/net/ipv4/ip_forward ip route add $P1_NET dev $IF1 src $IP1 table $TBL1 > /dev/ null 2>&1 ip route add default via $P1 table $TBL1 > /dev/ null 2>&1 ip route add $P2_NET dev $IF2 src $IP2 table $TBL2 > /dev/ null 2>&1 ip route add default via $P2 table $TBL2 > /dev/ null 2>&1 ip route add $P1_NET dev $IF1 src $IP1 > /dev/ null 2>&1 ip route add $P2_NET dev $IF2 src $IP2 ip route add default via $P1 > /dev/ null 2>&1 ip rule add from $IP1 table $TBL1 > /dev/ null 2>&1 ip rule add from $IP2 table $TBL2 > /dev/ null 2>&1 ip route add $P0_NET dev $IF0 table $TBL1 > /dev/ null 2>&1 ip route add $P2_NET dev $IF2 table $TBL1 > /dev/ null 2>&1 ip route add 127.0.0.0/8 dev lo table $TBL1 > /dev/ null 2>&1 ip route add $P0_NET dev $IF0 table $TBL2 > /dev/ null 2>&1 ip route add $P1_NET dev $IF1 table $TBL2 > /dev/ null 2>&1 ip route add 127.0.0.0/8 dev lo table $TBL2 > /dev/ null 2>&1 iptables -t nat -F POSTROUTING iptables -t nat -A POSTROUTING -s $P0_NET -o $IF1 -j MASQUERADE iptables -t nat -A POSTROUTING -s $P0_NET -o $IF2 -j MASQUERADE
  19. #!/bin/bash . /etc/balance/vars echo "1" > /proc/sys/net/ipv4/ip_forward ip route add $P1_NET dev $IF1 src $IP1 table $TBL1 > /dev/ null 2>&1 ip route add default via $P1 table $TBL1 > /dev/ null 2>&1 ip route add $P2_NET dev $IF2 src $IP2 table $TBL2 > /dev/ null 2>&1 ip route add default via $P2 table $TBL2 > /dev/ null 2>&1 ip route add $P1_NET dev $IF1 src $IP1 > /dev/ null 2>&1 ip route add $P2_NET dev $IF2 src $IP2 ip route add default via $P1 > /dev/ null 2>&1 ip rule add from $IP1 table $TBL1 > /dev/ null 2>&1 ip rule add from $IP2 table $TBL2 > /dev/ null 2>&1 ip route add $P0_NET dev $IF0 table $TBL1 > /dev/ null 2>&1 ip route add $P2_NET dev $IF2 table $TBL1 > /dev/ null 2>&1 ip route add 127.0.0.0/8 dev lo table $TBL1 > /dev/ null 2>&1 ip route add $P0_NET dev $IF0 table $TBL2 > /dev/ null 2>&1 ip route add $P1_NET dev $IF1 table $TBL2 > /dev/ null 2>&1 ip route add 127.0.0.0/8 dev lo table $TBL2 > /dev/ null 2>&1 iptables -t nat -F POSTROUTING iptables -t nat -A POSTROUTING -s $P0_NET -o $IF1 -j MASQUERADE iptables -t nat -A POSTROUTING -s $P0_NET -o $IF2 -j MASQUERADE
  20. #!/bin/bash . /etc/balance/vars echo "1" > /proc/sys/net/ipv4/ip_forward ip route add $P1_NET dev $IF1 src $IP1 table $TBL1 > /dev/ null 2>&1 ip route add default via $P1 table $TBL1 > /dev/ null 2>&1 ip route add $P2_NET dev $IF2 src $IP2 table $TBL2 > /dev/ null 2>&1 ip route add default via $P2 table $TBL2 > /dev/ null 2>&1 ip route add $P1_NET dev $IF1 src $IP1 > /dev/ null 2>&1 ip route add $P2_NET dev $IF2 src $IP2 ip route add default via $P1 > /dev/ null 2>&1 ip rule add from $IP1 table $TBL1 > /dev/ null 2>&1 ip rule add from $IP2 table $TBL2 > /dev/ null 2>&1 ip route add $P0_NET dev $IF0 table $TBL1 > /dev/ null 2>&1 ip route add $P2_NET dev $IF2 table $TBL1 > /dev/ null 2>&1 ip route add 127.0.0.0/8 dev lo table $TBL1 > /dev/ null 2>&1 ip route add $P0_NET dev $IF0 table $TBL2 > /dev/ null 2>&1 ip route add $P1_NET dev $IF1 table $TBL2 > /dev/ null 2>&1 ip route add 127.0.0.0/8 dev lo table $TBL2 > /dev/ null 2>&1 iptables -t nat -F POSTROUTING iptables -t nat -A POSTROUTING -s $P0_NET -o $IF1 -j MASQUERADE iptables -t nat -A POSTROUTING -s $P0_NET -o $IF2 -j MASQUERADE
  21. #!/bin/bash . /etc/balance/vars echo "1" > /proc/sys/net/ipv4/ip_forward ip route add $P1_NET dev $IF1 src $IP1 table $TBL1 > /dev/ null 2>&1 ip route add default via $P1 table $TBL1 > /dev/ null 2>&1 ip route add $P2_NET dev $IF2 src $IP2 table $TBL2 > /dev/ null 2>&1 ip route add default via $P2 table $TBL2 > /dev/ null 2>&1 ip route add $P1_NET dev $IF1 src $IP1 > /dev/ null 2>&1 ip route add $P2_NET dev $IF2 src $IP2 ip route add default via $P1 > /dev/ null 2>&1 ip rule add from $IP1 table $TBL1 > /dev/ null 2>&1 ip rule add from $IP2 table $TBL2 > /dev/ null 2>&1 ip route add $P0_NET dev $IF0 table $TBL1 > /dev/ null 2>&1 ip route add $P2_NET dev $IF2 table $TBL1 > /dev/ null 2>&1 ip route add 127.0.0.0/8 dev lo table $TBL1 > /dev/ null 2>&1 ip route add $P0_NET dev $IF0 table $TBL2 > /dev/ null 2>&1 ip route add $P1_NET dev $IF1 table $TBL2 > /dev/ null 2>&1 ip route add 127.0.0.0/8 dev lo table $TBL2 > /dev/ null 2>&1 iptables -t nat -F POSTROUTING iptables -t nat -A POSTROUTING -s $P0_NET -o $IF1 -j MASQUERADE iptables -t nat -A POSTROUTING -s $P0_NET -o $IF2 -j MASQUERADE


This command set provides response routing through the interface on which the request was received, as well as masquerading on both interfaces.

Now we will write a script that will determine if a particular channel is working and change the default gateway entries accordingly.

$ cat /etc/balance/check.sh

  1. #! / bin / bash
  2. . / etc / balance / vars
  3. OLDIF1 = 0
  4. OLDIF2 = 0
  5. . /etc/balance/routing.sh
  6. while true ; do
  7. ping -c 3 -s 100 $ P1 -I $ IF1> / dev / null
  8. if [$? -ne 0]; then
  9. echo "Failed IF1!"
  10. NEWIF1 = 0
  11. else
  12. NEWIF1 = 1
  13. fi
  14. ping -c 3 -s 100 $ P2 -I $ IF2> / dev / null
  15. if [$? -ne 0]; then
  16. echo "Failed IF2!"
  17. NEWIF2 = 0
  18. else
  19. NEWIF2 = 1
  20. fi
  21. if ((($ NEWIF1! = $ OLDIF1) || ($ NEWIF2! = $ OLDIF2))); then
  22. echo "Changing routes"
  23. if ((($ NEWIF1 == 1) && ($ NEWIF2 == 1))); then
  24. echo "Both channels"
  25. ip route delete default
  26. ip route add default scope global nexthop via $ P1 dev $ IF1 weight $ W1 \
  27. nexthop via $ P2 dev $ IF2 weight $ W2
  28. elif ((($ NEWIF1 == 1) && ($ NEWIF2 == 0))); then
  29. echo "First channel"
  30. ip route delete default
  31. ip route add default via $ P1 dev $ IF1
  32. elif ((($ NEWIF1 == 0) && ($ NEWIF2 == 1))); then
  33. echo "Second channel"
  34. ip route delete default
  35. ip route add default via $ P2 dev $ IF2
  36. fi
  37. else
  38. echo "Not changed"
  39. fi
  40. OLDIF1 = $ NEWIF1
  41. OLDIF2 = $ NEWIF2
  42. sleep 3
  43. done


We check the work of the channel by pinging the gateway, and if there is no answer to 3 pings in a row, we consider that the channel has fallen, and accordingly exclude it from the routing table.

Thus, if both channels work:

$ ip route
195.5.xx.xx dev ppp0 proto kernel scope link src 95.133.xx.xx
194.9.xx.xx/xx dev eth0 proto kernel scope link src 194.9.xx.xx
192.168.0.0/24 dev eth1 proto kernel scope link src 192.168.0.75
default
nexthop via 194.9.xx.xx dev eth0 weight 2
nexthop via 195.5.xx.xx dev ppp0 weight 1


Total we have two default gw, the first with a weight of 2 and the second with a weight of 1. Ie through the first channel will go twice as much traffic than through the second.

In order to customize these scripts for your needs, you need to adjust the values ​​in the vars file, the other scripts practically do not require any configuration.

Source: https://habr.com/ru/post/54748/


All Articles