2 провайдера и некорректная маршрутизация
Доброго дня
Тема банальная: дается 2 интернет канала от 2 провайдеров. Нужно часть народа пустить через один, часть через второй по всяким разным условиям. Но потыкавшись, попробовав нифига не вышло
Знаю, тема и поднималась неоднократно, но как-то...
Уже сделал банально, смотря вот на это http://www.opennet.ru/base/net/debian_multilink.txt.html аще копипастом (ну тока поменяв переменные на нужные значения), но всё равно одна и та же ситуация, а именно такая:
исходящие пакеты (смотрю tcpdump 'ом) уходят куда надо (например через провайдера P1), и ответы от удаленного сервера приходят на интерфейс прова P1, но до получателя ответы не доходят
НО, если в таблицу main добавить маршрут по умолчанию через этого же провайдера P1
ip route add default dev eth0 via 1.1.1.1
сразу начинает всё работать, но только для правил этого провайдера (с правилами для P2, та же самая ситуация - ответы до получателя не доходят)
Аналогично для провайдера P2
Куда копать?..
Ubuntu server 9.10
Вот конфиг:
IP_LOCAL=«10.10.1.99» # адрес нашего маршрутизатора в локальной сети.
IP_INET1=«1.1.1.10» # адрес нашего маршрутизатора в сети первого провайдера.
IP_INET2=«2.2.2.10» # адрес нашего марщрутизатора в сети второго провайдера.
IF_LOCAL=«eth1» # имя интерфейса на локальную сеть
IF_INET1=«eth0» # имя интерфейса на первого провайдера.
IF_INET2=«eth3» # имя интерфейса на второго провайдера.
NET_LOCAL=«10.10.0.0/16» # локальная сеть.
NET_INET1=«1.1.1.0/24» # адрес сети в которой гейт нашего первого провайдера.
NET_INET2=«2.2.2.0/24» # адрес сети в которой гейт нашего второго провайдера.
NET_SUB1=«10.10.10.0/24» # подсеть пользователей на первого провайдера
NET_SUB2=«10.10.1.0/24» # подсеть пользователей на второго провайдера
GW1=«1.1.1.1» # гейт первого провайдера.
GW2=«2.2.2.1» # гейт второго провайдера.
ip route add $NET_INET1 dev $IF_INET1 src $IP_INET1 table P1
ip route add $NET_LOCAL dev $IF_LOCAL table P1
ip route add $NET_INET2 dev $IF_INET2 table P1
ip route add 127.0.0.0/8 dev lo table P1
ip route add default via $GW1 table P1
ip route add $NET_INET2 dev $IF_INET2 src $IP_INET2 table P2
ip route add $NET_LOCAL dev $IF_LOCAL table P2
ip route add $NET_INET1 dev $IF_INET1 table P2
ip route add 127.0.0.0/8 dev lo table P2
ip route add default via $GW2 table P2
ip route add $NET_INET1 dev $IF_INET1 src $IP_INET1
ip route add $NET_INET2 dev $IF_INET2 src $IP_INET2
ip rule add from $IP_INET1 table P1
ip rule add from $IP_INET2 table P2
ip rule add fwmark 10 table P1
ip rule add fwmark 11 table P2
ip route flush cache
iptables -t mangle -A PREROUTING -s $NET_SUB1 ! -d $NET_LOCAL -j MARK --set-mark 10
iptables -t mangle -A PREROUTING -s $NET_SUB2 ! -d $NET_LOCAL -j MARK --set-mark 11
iptables -t nat -A POSTROUTING -m mark --mark 10 -j MASQUERADE
iptables -t nat -A POSTROUTING -m mark --mark 11 -j MASQUERADE