Метка: маршрутизация

  • linux два интерфейса (linux два провайдера)

    Как и обещал, пишу.
    Довольно много времени потратил на понимание происходящего..

    И так есть у меня сервер, он же ОпенВПН сервер в одной организации. и вот упёрлась организация в ширину канала, собственно беда в том, что по этому же каналу ходил SIP трафик, и сильно «лагал» когда ширины канала не хватало 🙁

    Подключаем ещё один канал от второго провайдера. есть сервер в нём внешний канал (eth1), локальная сеть(eth0), ещё ходит OpenVPN (tun0) для связи с остальными филиалами.

    Добавился ещё один внешний провайдер (eth4). для его подключение я сделал так.
    Напомню, что linux умеет работать с несколькими таблицами маршрутизации

    Тоесть для удобства я могу для каждого своего филиала создать табилцу маршрутизации, и в ней уже удобно управлять маршрутами, потом мне не надо будет листать простыню маршрутов таблицы main

    в файл

     /etc/iproute2/rt_tablesCode language: Bash (bash)

    Добавил 2 таблицы

    201 T1
    202 T2Code language: Bash (bash)

    У каждого провайдера будет своя таблица маршрутизация
    Т1 — первый провайдер
    Т2 — второй

    Создал скрипт, что будет заведовать маршрутизацией.

    #!/bin/sh
    IP1=217.111.111.99
    IP2=94.11.111.81
    P1=217.111.111.97
    P2=94.11.111.82
    IF1=eth1
    IF2=eth4
    # добавим дефаулт гетвей в каждую таблицу.
    ip route add default via $P1 table T1
    ip route add default via $P2 table T2
    # Говорим, что по дефолту будем ходить через первого провайдера.
    ip route add default via $P1
    ip rule add from $IP1 table T1
    ip rule add from $IP2 table T2
    #Перечисляю хосты, что будут ходить через новый интерфейс вот так
    #Но не забываем их указывать в NAT iptables
    ip rule add from 192.168.5.107 table T2
    ip rule add from 192.168.5.108 table T2
    ip rule add from 192.168.5.112 table T2
    ip rule add from 192.168.5.199 table T2
    #Это так на всякий случай
    echo 0 > /proc/sys/net/ipv4/conf/eth0/send_redirects
    echo 0 > /proc/sys/net/ipv4/conf/default/send_redirects
    echo 0 > /proc/sys/net/ipv4/conf/all/send_redirectsCode language: Bash (bash)

    Где
    IP# это ИП адрес на интерфейсе,
    P# шлюз на интерфейсе
    после этого сервер отвечает по обоим интерфейсам. также пинги/трацерты с сервера ходят через нужный интерфейс.

     ping -I eth4 ya.ru Code language: Bash (bash)

    теперь мне нужно что нужные мне клиенты ходили через этот интерфейс наружу. в iptables.up.rules у меня есть правила НАТа

    -A POSTROUTING -s 192.168.5.102 -o eth4 -j MASQUERADE
    -A POSTROUTING -s 10.10.10.6 -o eth4 -j MASQUERADE
    -A POSTROUTING -s 192.168.0.0/255.255.0.0 -o eth1 -j MASQUERADE
    -A POSTROUTING -s 10.10.0.0/255.255.0.0 -o eth1 -j MASQUERADECode language: Bash (bash)

    первыми 2мя строками я хочу чтоб вот 192.168.5.102 и 10.10.10.6 НАТились через нового провайдера. rp_filter выключаем вот так в sysctrl

    net.ipv4.conf.default.rp_filter = 0
    net.ipv4.conf.all.rp_filter = 0Code language: Bash (bash)

    Теперь, надо понимать, что если идёт пакет на 192.168.5.108, то он попадает в таблицу T2 а в ней у нас что? правильно один только дефаултгетвей! а что такое другие подсети филиалов и ОпенВПН мы знать не знаем, поэтому тоже необходимо добавить маршрут в таблицу Т2 для указания где у нас ходятся 10.10.10.0

    ip route add 10.10.10.0/24 via 10.10.10.2 dev tun0 table T2Code language: Bash (bash)

    Всё это кидаем в первый скрипт, а скрипт в автозагрузку. Теперь ещё важный момент, браузер у нас работает прозрачно через squid3 и получается, что весь трафик ходит через один интерфейс, а хттп трафик ходит через другой, не хорошо получается. поэтому читаем вот эту статью