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

Written by

in

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

И так есть у меня сервер, он же ОпенВПН сервер в одной организации. и вот упёрлась организация в ширину канала, собственно беда в том, что по этому же каналу ходил 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 и получается, что весь трафик ходит через один интерфейс, а хттп трафик ходит через другой, не хорошо получается. поэтому читаем вот эту статью

Comments

10 ответов для «linux два интерфейса (linux два провайдера)»

  1. Аватар пользователя gavru
    gavru

    Всё очень просто http://traffpro.ru позволяет иметь два провайдера и более, резервировать каналы, аварийно переключать при падении одно из них и так далее.

  2. Аватар пользователя admin
    admin

    ну это же не unix way, ведь кайф когда решаешь проблему руками, а не идёшь в магазин за софтиной решающую задачу, не?

  3. Аватар пользователя Serg
    Serg

    А как быть что-бы было
    net.ipv4.conf.all.rp_filter = 1
    ?

  4. Аватар пользователя krot
    krot

    Скажите, а если мне надо резервный канал иметь, но переключение автоматом чтобы было — куда копать?
    Спасибо!

  5. Аватар пользователя dvanov
    dvanov

    а если второй интерфейс с динамическим IP, как заводить настройки IP и gateway?

  6. Аватар пользователя admin
    admin

    Через сокеты

  7. Аватар пользователя Сергей
    Сергей

    Подскажите, а как быть с туннелем? У меня два провайдера, через одного из них поднимается туннель и весь траф заворачивается в этот туннель. Второй пров включен напрямую. Мне нужно, чтобы из внутренней сети 192.168.100.0/24 траф уходил в туннель, а из сети 192.168.200.0/24 ко второму прову. Я не знаю как прописать роут в туннель, ведь он сам его отдает от сервера.

  8. Аватар пользователя aispam
    aispam

    спасибо
    но вы не поверите, как мне не хватало этой строчки
    ip route add 10.10.10.0/24 via 10.10.10.2 dev tun0
    чтобы заработал openvpn в 18 убунте!

  9. Аватар пользователя кер

    помоему ошибочка вышла в названии
    linux да интерфейса

  10. Аватар пользователя admin
    admin

    да, спасибо

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *