Debian – iproute2: Linux Advanced Routing – sample split access

С пакета iproute2 Linux придобива мрежовите възможности на Cisco router. Това е пример за Linux router свързан с два доставчика на интернет и две локални мрежи които ще обслужва. Едната мрежа 172.16.1.0/24 ще получава достъп до интернет през първия доставчик Provider 1 а 172.16.2.0/24 през втория Provider 2. Важно е да се отбележи, че примера тук е split access тоест преплетен достъп а не load balancing или клиентските машини да получават балансиран трафик и от двата доставчика. Това е много просто изпълнение но е честа схема и база на която може да се изгради един сложен multihoming маршрутизатор.

                                                                                         ________
                                                                  +------------+        /
                                                     93.155.130.1 |            |       |
   			     	                 +----------------+ Provider 1 +-------
        __                                  eth0 |                |            |     /
    ___/  \_                              +------+----------+     +------------+    |
  _/        \__                           |  93.155.130.2   |                       /
 /             \          172.16.1.1 eth1 |                 |                       |
| Local network --------------------------+  Linux router   |                       |     Internet
 \           __/        172.16.2.1 eth1:0 |                 |                       |
   \__     __/                            | 212.233.252.130 |                       \
      \___/                               +------+----------+     +------------+    |
                                            eth2 |                |            |     \
                                                 +----------------+ Provider 2 +-------
                                                  212.233.252.129 |            |       |
                                                                  +------------+        \________

Първо трябва да добавим таблица например с номер 200 и име T1 в /etc/iproute2/rt_tables

255 local
254 main
253 default
200 T1

След което следва конфигурирането на мрежовите интерфеиси

ifconfig eth0 93.155.130.2 netmask 255.255.255.0
ifconfig eth1 172.16.1.1 netmask 255.255.255.0
ifconfig eth1:0 172.16.2.1 netmask 255.255.255.0
ifconfig eth2 212.233.252.130 netmask 255.255.255.0

Тук ще направим рутирането.С първите два абзаца по три реда създаваме две рутиращи таблици като първата си е подразбиращата default която си я има така или иначе. Втората таблица Т1 е новото в случая забележете със собствен default gateway 212.233.252.129 към втория доставчик. От тук следва логиката, че можем да приобщаваме адреси или мрежи към всяка таблица като осигуряваме видимост между тях. Може да си представите всяка таблица като отделна машина с default gateway водещ към различен доставчик. Имаме две отделни таблици с два различни маршрута по подразбиране default gateway но трябва да иаме такъв и на локалната машина (маршрутизатора) ip route add default via 93.155.130.1 src 93.155.130.2
На последните два реда (правилата ip rule) трябва да се обърне особенно внимание. Тези правила оказват коя мрежа приема за default таблица по подразбиране. И тук точно е ключът за насочването на вътрешните локални мрежи към избран от нас доставчик. Реално на един такъв рутер може да има много таблици описани със синтаксиса ip route add но ip rule се явява като разширение с повече възможности по точно казано приобщаване на мрежа към таблица така сякаш и е default gateway.

ip route add 127.0.0.0/8 dev lo table default
ip route add 93.155.130.0/24 dev eth0 src 93.155.130.2 table default
ip route add default via 93.155.130.1 table default

ip route add 127.0.0.0/8 dev lo table T1
ip route add 212.233.252.0/24 dev eth2 src 212.233.252.130 table T1
ip route add default via 212.233.252.129 table T1

ip route add default via 93.155.130.1 src 93.155.130.2

ip rule add from 172.16.1.0/24 table default
ip rule add from 172.16.2.0/24 table T1

И последната ни стъпка тъи като 172.16.0.0 са заделени зони за частно ползване трябва да ги маскираме зад публичните ни ип адреси дадени от доставчиците на Интернет. Тук също ясно се вижда коя мрежа зад кои адрес се маскира.

iptables -t nat -A POSTROUTING -s 172.16.1.0/24 -o eth0 -j SNAT --to 93.155.130.2
iptables -t nat -A POSTROUTING -s 172.16.2.0/24 -o eth2 -j SNAT --to 212.233.252.130

Leave a Reply

This site uses Akismet to reduce spam. Learn how your comment data is processed.