Как сделать два отдельно работающих провайдера на одном сервере?

Есть два провайдера, у одного из них статический ип, а другого статик DHCP. Нужно чтобы сетевые интерфейсы работали одновременно отдельно друг от друга. Не получается так сделать, потому что пока Debian выбирает шлюз только одного из провайдеров. Соответственно работает только тот, который втыкнут в нулевой интерфейс.
  • Вопрос задан
  • 7978 просмотров
Решения вопроса 1
@sergeevav82
Вот для примера, как и обещал:
В /etc/iproute2/rt_tables добавляем
101     P1  -  Провайдер1
102     P2  -  Провайдер2


routing.sh
echo "Чистим таблицы"
ip route flush table P1
ip route flush table P2
echo "Чистим правила в таблицах"
ip rule delete table P1
ip rule delete table P2
echo "Чистим кэш"
ip route flush cache
echo "Заносим gw в таблици"
ip route add default via <шлюз 1-го провайдера> dev <интерфейс 1-го прова> table P1
ip route add default via <шлюз 2-го провайдера> dev <интерфейс 2-го прова> table P2
echo "Добавляем правила в таблици"
ip rule add from <IP 1-го прова> table P1
ip rule add from <IP 2-го прова> table P2
echo "Добавляем правила в таблици по маркировке"
ip rule add fwmark 1 table P1
ip rule add fwmark 2 table P2
echo "Заносим сети провайдера в таблицу 1"
ip route add <Сеть 1-го прова> dev <интерфейс 1-го прова> src <IP 1-го прова> table P1
echo "Заносим сети провайдера в таблицу 2"
ip route add <Сеть 2-го прова> dev <интерфейс 2-го прова> src <IP 2-го прова> table P2
echo "Заносим локальные сети в таблицу 1"
ip route add <локальная сеть> dev <интерфейс локалки> src <IP на интерфейсе локалки> table P1
ip route add 127.0.0.0/8 dev lo table P1
echo "Заносим локальные сети в таблицу 2"
ip route add <локальная сеть> dev <интерфейс локалки> src <IP на интерфейсе локалки> table P2
ip route add 127.0.0.0/8 dev lo table P2
echo "Удаляем маршрут по умолчанию"
ip route del default
echo "Создаем маршрут по умолчанию"
ip route add default scope global nexthop via <шлюз 1-го прова> dev <интерфейс 1-го прова> weight 1 nexthop via <шлюз 2-го прова> dev <интерфейс 2-го прова> weight 1


Если провайдер выдает динамику, то можно в качестве параметров скрипту передавать IP и шлюз

Вырезка из правил iptables

*mangle
:PREROUTING ACCEPT [0:0]
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
:POSTROUTING ACCEPT [0:0]
:balance - [0:0]
-A PREROUTING -m state --state RELATED,ESTABLISHED -j CONNMARK --restore-mark --nfmask 0xffffffff --ctmask 0xffffffff
-A PREROUTING -i <интерф. прова1> -m state --state NEW -j CONNMARK --set-xmark 0x1/0xffffffff
-A PREROUTING -i <интерф. прова2> -m state --state NEW -j CONNMARK --set-xmark 0x2/0xffffffff
-A PREROUTING -d <IP или сеть> -j CONNMARK --set-xmark 0x1/0xffffffff  - это принудительный выход через 1-го прова.
-A PREROUTING -d <IP или сеть> -j CONNMARK --set-xmark 0x2/0xffffffff   - это принудительный выход через 2-го прова.
-A PREROUTING -i <интерфейс локалки> -m state --state NEW -j balance
-A PREROUTING -m connmark --mark 0x1 -j MARK --set-xmark 0x1/0xffffffff
-A PREROUTING -m connmark --mark 0x2 -j MARK --set-xmark 0x2/0xffffffff
-A PREROUTING -m state --state NEW -m connmark ! --mark 0x0 -j CONNMARK --save-mark --nfmask 0xffffffff --ctmask 0xffffffff
-A OUTPUT -m state --state RELATED,ESTABLISHED -j CONNMARK --restore-mark --nfmask 0xffffffff --ctmask 0xffffffff
-A OUTPUT -m state --state NEW -j balance
-A balance -o lo -j RETURN
-A balance -o <интерфейс локалки> -j RETURN
-A balance -m connmark ! --mark 0x0 -j RETURN
-A balance -m state --state RELATED,ESTABLISHED -j RETURN
-A balance -j CONNMARK --set-xmark 0x2/0xffffffff
-A balance -j RETURN


В итоге вывод команды ip ro будет следующим.
..........
default 
        nexthop via <шлюз 1-го прова>  dev <интерфейс 1-го прова> weight 1
        nexthop via <шлюз 2-го прова>  dev <интерфейс 2-го прова> weight 1
...........


Оба провайдера работают как на вход так и на выход.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 3
@sergeevav82
Советую посмотреть в сторону iproute2 + iptables балансировка. У меня на работе так настроены два прова.
Ответ написан
@inkvizitor68sl
Linux-сисадмин с 8 летним стажем.
https://debian.pro/697 - "Linux-машинка с 2мя VLAN." Суть примерно та же.
Смотрите с "Пишем примерно следующее в /etc/network/interfaces"

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

Это самый быстрый способ (и с точки зрения конфигурирования, и с точки зрения скорости работы). Только у вас задача не описано настолько, чтобы я вам определенно сказал - оно или нет. Но в целом подходит.
Ответ написан
Комментировать
@resetsa
Системный администратор
вот глянь, вроде про default route, debian и 2 провайдера
https://www.debian-administration.org/articles/377
там тот же ip-route
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы