LINUX.ORG.RU
решено ФорумAdmin

интернет через 2 провайдеров


0

1

Убился напрочь, помогите. Есть локальная сеть с двумя подсетями (192.168.0.0/25 и 192.168.0.128/25), 2 провайдера со статическими ip-адресами Надо заставить ходить пользователей из первой подсети через первого провайдера, из 2-й через второго. Ubuntu server 10.10

Шлюзы провайдеров пингуются. Через первого провайдера все идет хорошо (на него установлен шлюз по умолчанию). При попытке выйти в интернет из второй подсети (через второго провайдера) трассировка обрывается на шлюзе.

Трассировка маршрута к ya.ru [77.88.21.3] с максимальным числом прыжков 30:

1 2 ms 1 ms 1 ms 192.168.0.8 2 1 ms 1 ms 1 ms 192.168.2.1 3 * * * Превышен интервал ожидания для запроса. (Если шлюз по умолчанию поменять на второго провайдера - пинги пойдут )

Где недокрутил, подскажите.

#! /bin/sh echo 1 > /proc/sys/net/ipv4/ip_forward

# адреса сетевых карт IP_LOCAL=«192.168.0.8» # локальная сеть IP_INET1=«192.168.1.5» # провайдер 1 IP_INET2=«192.168.2.5» # провайдер 2

IF_LOCAL=«eth0» # локальная сеть IF_INET1=«eth1» # провайдер 1 IF_INET2=«eth2» # провайдер 2

NET_LOCAL=«192.168.0.0/24» # локальная сеть NET_INET1=«192.168.1.0/24» # сеть провайдера 1 NET_INET2=«192.168.2.0/24» # сеть провайдера 2

GW_INET1=«192.168.1.8» # шлюз провайдера 1 GW_INET2=«192.168.2.1» # шлюз провайдера 2

NET_SUB1=«192.168.0.0/25» # подсеть 1 NET_SUB2=«192.168.0.128/25» # подсеть 2

ip route flush table T1 ip route flush table T2

# заполняем таблицу 1 ip route add $NET_INET1 dev $IF_INET1 src $IP_INET1 table T1 ip route add $NET_LOCAL dev $IF_LOCAL table T1 ip route add $NET_INET2 dev $IF_INET2 table T1 ip route add 127.0.0.0/8 dev lo table T1 ip route add default via $GW_INET1 table T1

# заполняем таблицу 2 ip route add $NET_INET2 dev $IF_INET2 src $IP_INET2 table T2 ip route add $NET_LOCAL dev $IF_LOCAL table T2 ip route add $NET_INET1 dev $IF_INET1 table T2 ip route add 127.0.0.0/8 dev lo table T2 ip route add default via $GW_INET2 table T2

# заполняем таблицу main ip route add $NET_INET1 dev $IF_INET1 src $IP_INET1 ip route add $NET_INET2 dev $IF_INET2 src $IP_INET2

# шлюз по умолчанию ip route add default via $GW_INET2

ip rule delete table T1 ip rule delete table T2 ip rule delete table T1 ip rule delete table T2

# заполняем правила ip rule add from $IP_INET1 table T1 ip rule add from $IP_INET2 table T2

ip rule add fwmark 10 table T1 ip rule add fwmark 20 table T2

ip route flush cache

IPT=«/sbin/iptables»

$IPT -F $IPT -t nat -F $IPT -t mangle -F

#$IPT -t mangle -A PREROUTING -s $NET_SUB1 -j MARK --set-mark 10 #$IPT -t mangle -A PREROUTING -s $NET_SUB2 -j MARK --set-mark 20

$IPT -t nat -A POSTROUTING -m mark --mark 10 -j MASQUERADE $IPT -t nat -A POSTROUTING -m mark --mark 20 -j MASQUERADE

# разрешаем форвардинг из локальной сети $IPT -A FORWARD -i $IF_LOCAL -o $IF_INET1 -m state --state NEW,RELATED,ESTABLISHED -j ACCEPT $IPT -A FORWARD -i $IF_LOCAL -o $IF_INET2 -m state --state NEW,RELATED,ESTABLISHED -j ACCEPT

# разрешаем форвардинг из интернета $IPT -A FORWARD -i $IF_INET1 -m state --state RELATED,ESTABLISHED -j ACCEPT $IPT -A FORWARD -i $IF_INET2 -m state --state RELATED,ESTABLISHED -j ACCEPT

exit 0

1) осиль лоркод, б-гом молю!

# заполняем правила ip rule add from $IP_INET1 table T1 ip rule add from $IP_INET2 table T2

ip rule add fwmark 10 table T1 ip rule add fwmark 20 table T2

Первое - расставь pref'ы. Второе - ИМХО сначала должны идти правила с fwmark, а потом уже с from. Почему - обьяснить?

Pinkbyte ★★★★★ ()

Отформатируй по-человечески лоркодом.

Добавь в /etc/iproute2/rt_tables

10	T1
11	T2

#$IPT -t mangle -A PREROUTING -s $NET_SUB1 -j MARK --set-mark 10

Почему оно закомментировано?

Deleted ()
Ответ на: комментарий от Pinkbyte

ИМХО сначала должны идти правила с fwmark, а потом уже с from. Почему - обьяснить?

У меня fwmark идут после from и все работает, но если можешь, объясни почему лучше делать наоборот.

Deleted ()
Ответ на: комментарий от Deleted

потому что если есть маршрут по-умолчанию в главной таблице то ИНОГДА source-address вычисляется сразу. Ну и соответственно все попадает в rule from, а не в fwmark, как должно...

Pinkbyte ★★★★★ ()
Ответ на: комментарий от Pinkbyte

В продолжение мучений :-(

Спасибо всем ответившим.

Сделал - пакеты из разных подсетей четко уходят на шлюзы разных провайдеров. Шлюзы провайдеров отвечают. А дальше - никак.

Трассируем из первой подсети адрес 85.93.52.254:

Трассировка маршрута к static254-6.adsl.kirov.ru [85.93.52.254] с максимальным числом прыжков 30:

1 1 ms 2 ms <1 мс 192.168.0.8

2 1 ms 1 ms 1 ms 192.168.1.8

3 * * * Превышен интервал ожидания для запроса.

4

Трассируем из второй подсети адрес 85.93.52.254:

Трассировка маршрута к static254-6.adsl.kirov.ru [85.93.52.254] с максимальным числом прыжков 30:

1 1 ms 2 ms <1 мс 192.168.0.8

2 1 ms 1 ms 1 ms 192.168.2.1

3 * * * Превышен интервал ожидания для запроса.

4

Почему ответ от шлюза приходит, а дальше тишина? (Если прописать маршрут по умолчанию ip route add default via IP_шлюза_провайдера то пакеты идут)

#! /bin/sh -x

echo 1 > /proc/sys/net/ipv4/ip_forward

IP_LOCAL=«192.168.0.8» #

IP_INET1=«192.168.1.5» #

IP_INET2=«192.168.2.5» #

IF_LOCAL=«eth0» #

IF_INET1=«eth1» #

IF_INET2=«eth2» #

NET_LOCAL=«192.168.0.0/24» #

NET_INET1=«192.168.1.0/24» #

NET_INET2=«192.168.2.0/24» #

GW_INET1=«192.168.1.8» #

GW_INET2=«192.168.2.1» #

SUB_NET1=«192.168.0.0/25» #

SUB_NET2=«192.168.0.128/25» #

ip route flush table T1

ip route flush table T2

ip rule add fwmark 10 table T1

ip rule add fwmark 20 table T2

ip route add default via $GW_INET1 dev eth1 table T1

ip route add default via $GW_INET2 dev eth2 table T2

ip route add $NET_INET1 dev eth1 table T1

ip route add $NET_INET2 dev eth2 table T2

ip route add $SUB_NET1 dev eth0 table T1

ip route add $SUB_NET2 dev eth0 table T2

ip route flush cache

iptables -F

iptables -t nat -F

iptables -t mangle -F

iptables -t mangle -A PREROUTING -i eth1 -j MARK --set-mark 10

iptables -t mangle -A PREROUTING -i eth2 -j MARK --set-mark 20

iptables -t mangle -A PREROUTING -i eth0 -s $SUB_NET1 -j MARK --set-mark 10

iptables -t mangle -A PREROUTING -i eth0 -s $SUB_NET2 -j MARK --set-mark 20

iptables -t nat -A POSTROUTING -o eth1 -j MASQUERADE

iptables -t nat -A POSTROUTING -o eth2 -j MASQUERADE

exit 0

glombert ()
Ответ на: комментарий от Pinkbyte

Если я прописываю

ip route add default via 192.168.1.8 # шлюз первого провайдера

то из первой подсети выход в интернет есть, а из второй - трассировка завершается на шлюзе провайдера.

Если ip route add default via 192.168.2.1 # шлюз второго провайдера

то все наоборот.

glombert ()
Ответ на: комментарий от Deleted

Заработало!!!! Супер!!!!

Огромное спасибо!!! Заработало!!!! 2 недели курения мануала и помощь товарищей сделали свое дело. Взял свою первоначальную конфигурацию (немного не такая, какая приведена здесь) добавил:

ip rule add from $IP_INET1 table T1 # IP, выданный провайдером 1

ip rule add from $IP_INET2 table T2 # IP, выданный провайдером 2

ip rule add from $SUB_NET1 table T1 # подсеть 1

ip rule add from $SUB_INET2 table T2 # подсеть 2

и все получилось.

glombert ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.