Доброго дняТема банальная: дается 2 интернет канала от 2 провайдеров. Нужно часть народа пустить через один, часть через второй по всяким разным условиям. Но потыкавшись, попробовав нифига не вышло
Знаю, тема и поднималась неоднократно, но как-то...Уже сделал банально, смотря вот на это http://www.opennet.me/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 P1ip 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 P2ip route add $NET_INET1 dev $IF_INET1 src $IP_INET1
ip route add $NET_INET2 dev $IF_INET2 src $IP_INET2ip 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 P2ip 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 11iptables -t nat -A POSTROUTING -m mark --mark 10 -j MASQUERADE
iptables -t nat -A POSTROUTING -m mark --mark 11 -j MASQUERADE
Заранее благодарен
>[оверквотинг удален]
>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
>
>
>Заранее благодаренпопробуйте MASQUERADE заменить четко на SNAT , если оба интерфейса ppp то поставить в правилах маскарадинга "-o pppX" иначе как iptables узнает на какой ip ему маскарадинг делать
>попробуйте MASQUERADE заменить четко на SNAT , если оба интерфейса ppp то
>поставить в правилах маскарадинга "-o pppX" иначе как iptables узнает на
>какой ip ему маскарадинг делатьСделал - не помогло )
Уходили пакеты и так куда нужно
iproute же на основании марок маршрутизирует, а iptables потом в построутинге просто маскарадитНе улавливаю связь между маршрутом по умолчанию в таблице main и тем что ответы до внутренней сети не доходят...
Решилось!Почти везде пишут что надо отключать rp_filter таким макаром: sysctl net.ipv4.conf.all.rp_filter=0
Что собственно сделал и успокоился
Сейчас случайно обнаружил что для конкретных интерфейсов он включен Отключил для eth0 и eth3 (те что смотрят в инет) и всё заработало!