URL: https://www.opennet.ru/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID1
Нить номер: 86184
[ Назад ]

Исходное сообщение
"Маршрутизация, 2ой провайдер"

Отправлено Alexovi4 , 04-Авг-09 18:29 
Провожу настройку подключения 2 провайдера. Работает сервер Suse Enterprise Server 11.
Три сетевые карточки: две (eth0 и eth1) смотрят на провайдеров, одна (eth2) в локальную сеть.
На интерфейсе eth0 получаю адрес и интернет через шлюз, интерфейс eth1 настроен на статический адрес, выданный вторым провайдером, интерфейс eth2 смотрит в локальную сеть.  
Адреса интерфейсов:
eth1 - 99.99.99.2
eth2 - 88.88.88.2  
Скрипт:
#!/bin/bash
IP_LOCAL="88.88.88.2"       # IP-адрес нашего маршрутизатора в локальной сети.
PROV2_IP="99.99.99.61"      # IP-адрес нашего маршрутизатора в сети второго 2 провайдера.
IF_PROV1="eth0"             # имя интерфейса на первого 1 провайдера.
IF_PROV2="eth1"             # имя интерфейса на второго 2 провайдера.
IF_LOCAL="eth2"             # имя интерфейса на локальную сеть
NET_LOCAL="88.88.88.0/24"   # локальная сеть.
NET_PROV2="99.99.99.60/30"  # адрес сети, в которой находится гейт второго 2 провайдера.
PROV2_GW="99.99.99.61"      # гейт второго провайдера.
echo "1">/proc/sys/net/ipv4/ip_forward
iptables -t nat -F
iptables -t nat -A POSTROUTING -s 88.88.88.0/24 -j SNAT --to 99.99.99.62
ip route flush table T_PROV2

    ip route add 99.99.99.60/30 dev eth1 table T_PROV2 # заполняем маршруты таблицы второго 2 прова
    ip route add 88.88.88.0/24 dev eth2 table T_PROV2
    ip route add 10.0.0.8 dev eth0 table T_PROV2
    ip route add default via 99.99.99.61 table T_PROV2
    ip route add 127.0.0.0/8 dev lo table T_PROV2
    ip route add 99.99.99.60/30 dev eth1 src 99.99.99.62 #заполнение таблицы main
    ip route add dev eth2 src 88.88.88.2
    ip route add default via 99.99.99.61

    ip rule delete table T_PROV2  # удаление правил
    ip rule delete table T_PROV2
    ip rule add from all lookup T_PROV2
    ip rule add from 99.99.99.62 lookup T_PROV2

ip route flush cache # очистить кеш
exit 0

После инициализации скрипта получаю следующее:
С интерфейса eth1 (который смотрит на 2 прова) пингуется шлюз 2го прова и интернет, но не проходят пинги до интерфейса который смотрит в локальную сеть (eth2).
С интерфейса eth2 (локалка) пингуется шлюз 2го прова,но не проходят пинги до интернета.
Пинг с интерфейса eth2 (локалка) до интерфейса eth1 выводит следующее:
ping -I eth2 99.99.99.62
PING 99.99.99.62 (99.99.99.99) from 88.88.88.2 eth2: 56(84) bytes of data.
From 99.99.99.62: icmp_seq=1 Destination Host Unreachable
From 99.99.99.62 icmp_seq=1 Destination Host Unreachable

Список правил:
# ip rule list
0:      from all lookup local
32764:  from 99.99.99.62 lookup T_PROV2
32765:  from all lookup T_PROV2
32766:  from all lookup main
32767:  from all lookup default

Таблица main выглядит след образом:
# ip route show table main
99.99.99.60/30 dev eth1  proto kernel  scope link  src 99.99.99.62
88.88.88.0/24 dev eth2  proto kernel  scope link  src 88.88.88.2
10.0.0.0/8 dev eth0  proto kernel  scope link  src 10.0.10.29
127.0.0.0/8 dev lo  scope link
default via 99.99.99.61 dev eth1

Таблица T_PROV1 выглядит след образом:
#ip route show table T_PROV2
99.99.99.60/30 dev eth1  scope link
88.88.88.0/24 dev eth2  scope link
127.0.0.0/8 dev lo  scope link
default via 99.99.99.61 dev eth1

Почему-то не видят друг друга два интерфейса eth2 и eth1?
Отсутствует соединение с интернетом из 88.88.88.0 (eth2), когда с eth1 все проходит.
Помогите разобраться почему не работает интернет на интерфейсе eth2?


Содержание

Сообщения в этом обсуждении
"Маршрутизация, 2ой провайдер"
Отправлено ze6ra , 05-Авг-09 12:55 
>>>iptables -t nat -A POSTROUTING -s 88.88.88.0/24 -j SNAT --to 99.99.99.62<<<<

Может NAT не так глобально включать, а только на необходимых интерфейса (на eth2 он явно лишний)


"Маршрутизация, 2ой провайдер"
Отправлено Alexovi4 , 05-Авг-09 15:01 
>>>>iptables -t nat -A POSTROUTING -s 88.88.88.0/24 -j SNAT --to 99.99.99.62<<<<
>
>Может NAT не так глобально включать, а только на необходимых интерфейса (на
>eth2 он явно лишний)

Т.е. настроить NAT на работу с конкретными интерфейсами?
Мне вообще кажется с этой строкой что-то не так, потому что при просмотре счётчиков (по команде iptables -t nat -L -n -V) они всегда оставались в нулях.


"Маршрутизация, 2ой провайдер"
Отправлено ze6ra , 05-Авг-09 16:39 
>>>>>iptables -t nat -A POSTROUTING -s 88.88.88.0/24 -j SNAT --to 99.99.99.62<<<<
>>
>>Может NAT не так глобально включать, а только на необходимых интерфейса (на
>>eth2 он явно лишний)
>
>Т.е. настроить NAT на работу с конкретными интерфейсами?
>Мне вообще кажется с этой строкой что-то не так, потому что при
>просмотре счётчиков (по команде iptables -t nat -L -n -V) они
>всегда оставались в нулях.

Ну да NAT должен работать только там где нужно, то-есть на eth0 и eth1 (на eth2 которая смотрит в локалку химичить с подменной адресов не стоит иначе ничего не заработает), а во вторых раз ip eth0 получает динамически то лучше там включить маскард. Получим примерно следуещее:
iptables -t nat -A POSTROUTING -s 88.88.88.0/24 -o eth1 -j SNAT --to 99.99.99.62
iptables -t nat -A POSTROUTING -s 88.88.88.0/24 -o eth0 -j MASQUERADE

да и счётчики не должны быть нулевыми


"Маршрутизация, 2ой провайдер"
Отправлено ze6ra , 05-Авг-09 16:42 
да и ip 99.99.99.62 откуда в NAT нужно IP интерфейса забивать.



"Маршрутизация, 2ой провайдер"
Отправлено Alexovi4 , 05-Авг-09 16:54 
>да и ip 99.99.99.62 откуда в NAT нужно IP интерфейса забивать.

Немного не понял (((


"Маршрутизация, 2ой провайдер"
Отправлено ze6ra , 05-Авг-09 17:06 
>>да и ip 99.99.99.62 откуда в NAT нужно IP интерфейса забивать.
>
>Немного не понял (((
>>Адреса интерфейсов:
>>eth1 - 99.99.99.2
>>eth2 - 88.88.88.2  

а далее
>>iptables -t nat -A POSTROUTING -s 88.88.88.0/24 -j SNAT --to 99.99.99.62

Какой реально ip у eth1 (если судить по дальнейшему скрипту то 99.99.99.62), если шлюз по умолчанию один то зачем весь огород с политиками маршрутизации чем не устроила одна таблица.
Хотя ошибок в маршрутизации в глаза не бросилось а вот из-за NAT на всех интерфейсах проблемы должны были быть примерно такие как и описаны.


"Маршрутизация, 2ой провайдер"
Отправлено Alexovi4 , 05-Авг-09 17:18 
Должно быть так:
>>Адреса интерфейсов:
>>eth1 - 99.99.99.62
>>eth2 - 88.88.88.2

Я допустил ошибку из-за невнимательности при описании задачи.
Большое спасибо, попробую. По результата отпишусь.


"Маршрутизация, 2ой провайдер"
Отправлено Alexovi4 , 06-Авг-09 13:06 
>Должно быть так:
>>>Адреса интерфейсов:
>>>eth1 - 99.99.99.62
>>>eth2 - 88.88.88.2
>
>Я допустил ошибку из-за невнимательности при описании задачи.
>Большое спасибо, попробую. По результата отпишусь.

Изменив правило на iptables -t nat -A POSTROUTING -s 88.88.88.0/24 -o eth1 -j SNAT --to 99.99.99.62
ничего не изменилось. Счетчики таблицы nat не изменяются. Нет маршрутизации с eth1 (пров) на eth2(локал).
Как её настроить?


"Маршрутизация, 2ой провайдер"
Отправлено ze6ra , 06-Авг-09 14:11 
>[оверквотинг удален]
>>>>eth2 - 88.88.88.2
>>
>>Я допустил ошибку из-за невнимательности при описании задачи.
>>Большое спасибо, попробую. По результата отпишусь.
>
>Изменив правило на iptables -t nat -A POSTROUTING -s 88.88.88.0/24 -o eth1
>-j SNAT --to 99.99.99.62
>ничего не изменилось. Счетчики таблицы nat не изменяются. Нет маршрутизации с eth1
>(пров) на eth2(локал).
>Как её настроить?

Если счётчики не меняются значит NAT и нету. Такое может быть если данные исходят непосредственно от самой машины где запщен NAT поскольку NAT включен для пакетов с аресом источника из подсети 88.88.88.0/24
сделайте просто
iptables -t nat -A POSTROUTING -o eth1 -j SNAT --to 99.99.99.62
тогда NAT будет для любого пакета уходящего с интерфейса eth1.
Во вторых какая может быть маршрутизация с eth1 на eth2 если вы за NAT. Все уходящие от вас пакеты будут иметь ip источника равный ip eth1 соответственно ему и будут возвращаться дальше NAT востановит адрес и после отдаст ядру для маршрутизации. Если с машины где запущен NAT станции в локалке (на eth2) пингуются то маршрутизация должна работать. Если нужно что из интернета могли подключиться к конкретному сервису на какойто машине то нужно задействовать DNAT.
Убедитесь что с машины где пингуются станции в сети на eth2 а со станций пинг идёт да вышего сервера.


"Маршрутизация, 2ой провайдер"
Отправлено Alexovi4 , 06-Авг-09 23:27 
Всё получилось. Изначально скрипт написан правильно (за исключением опечатки с интерфейсом eth1 в самом начале). Все дело было в установленном по умолчанию брандмауэре SUSE Firewall. Его настройки не позволяли работать данному скрипту в полном объёме. Сначала были какие-то подозрения на этот счет: анализ таблицы filter показывал, что счетчики накапливали большое количество блокируемых пакетов.Но я думал, что iptables с такими настройками работает изначально. А о брандмауэре я не подозревал, так как SLES 11 ставил в первый раз и просто не обратил внимание на тот факт, что он запускается по умолчанию.
Выяснилось всё после того, как надо было установить такую же систему на другую машину. На Suse firewall уже пришлось обратить внимание.....

Спасибо огромное товарищу ze6ra, что помогли глубже разобраться в данном вопросе и не оставили один на один с iproute и iptables. Надеюсь на вашу поддержку и в дальнейшем.

Кстати, ze6ra, что вы можете сказать по данному вопросу: чистые iptables или надстройка над ними Suse Firewall? ))))


"Маршрутизация, 2ой провайдер"
Отправлено ze6ra , 06-Авг-09 23:58 
>[оверквотинг удален]
>SUSE Firewall. Его настройки не позволяли работать данному скрипту в полном
>объёме. Сначала были какие-то подозрения на этот счет: анализ таблицы filter
>показывал, что счетчики накапливали большое количество блокируемых пакетов.Но я думал, что
>iptables с такими настройками работает изначально. А о брандмауэре я не
>подозревал, так как SLES 11 ставил в первый раз и просто
>не обратил внимание на тот факт, что он запускается по умолчанию.
>
>Выяснилось всё после того, как надо было установить такую же систему на
>другую машину. На Suse firewall уже пришлось обратить внимание.....
>

Не заметить лишнии правила в выводе iptables ....

>Спасибо огромное товарищу ze6ra, что помогли глубже разобраться в данном вопросе и
>не оставили один на один с iproute и iptables. Надеюсь на
>вашу поддержку и в дальнейшем.
>

попробую
>Кстати, ze6ra, что вы можете сказать по данному вопросу: чистые iptables или
>надстройка над ними Suse Firewall? ))))

iptables знать надо, а надстройка для упрощения жизни, но упрощение при осутсвии знаний основ до добра не доведёт. Да iptables везде однаковые, а SuSe Firewall говорит само за себя. Да и SuSe практически не пользовал.


"Маршрутизация, 2ой провайдер"
Отправлено Alexovi4 , 07-Авг-09 18:05 
>Не заметить лишнии правила в выводе iptables ....

Да, не заметил. Практики использования, начитанности в данном вопросе не хватало.
Какие правила,и как вообще должен выглядеть вывод команды iptables на чистой системе не знал.


"Маршрутизация, 2ой провайдер"
Отправлено Alexovi4 , 19-Авг-09 18:01 
Требуется настроить выбор одного из двух провайдеров для выхода в интернет для различных адресов одной большой локальной сети.
Это получилось реализовать 2 способами, теперь надо выбрать какой из них является оптимальным с точки зрения производительности работы, легкости управления списком адресов для первого и второго провайдера.
Допустим есть локалка 192.168.1.0/24, имеющая выход в интернет через ПЕРВОГО провайдера. А надо для адреса 192.168.1.5 настроить выход через ВТОРОГО провайдера.
Два решения (добавляем в нижеприведенный скрипт):
   1) использовать маркировку пакетов:
iptables -t mangle -A PREROUTING -s 192.168.1.5 -j MARK --set-mark 10
iptables -t mangle -A PREROUTING -s 192.168.1.0/24 -j MARK --set-mark 20
iptables -t nat -A POSTROUTING -m mark --mark 10 -j SNAT --to-source $IP_PROV2
iptables -t nat -A POSTROUTING -m mark --mark 20 -j SNAT --to-source $IP_PROV1
ip rule add fwmark 10 lookup T_PROV2
ip rule add fwmark 20 lookup T_PROV1
   2) используя данные команды:
iptables -t nat -A POSTROUTING -s 192.168.1.5 -o $IF_PROV2 -j SNAT --to-source $IP_PROV2
ip rule add from 192.168.10.2 lookup T_PROV2 pref 2001
---------------------------------------------------------------------
#!/bin/bash
echo "1">/proc/sys/net/ipv4/ip_forward
iptables -t nat -F
iptables -t mangle -F
ip route flush table T_PROV1
ip route flush table T_PROV2
iptables -t nat -A POSTROUTING -s $NET_LOCAL1 -o $IF_PROV1 -j SNAT --to-source $IP_PROV1
    #T_PROV1
    ip route add $NET_LOCAL1 dev $IF_LOCAL1 src $IP_LOCAL1 table T_PROV1
    ip route add $NET_PROV1 dev $IF_PROV1 src $IP_PROV1 table T_PROV1
    ip route add $NET_LOCAL2 dev $IF_LOCAL2 src $IP_LOCAL2 table T_PROV1
    ip route add $NET_PROV2 dev $IF_PROV2  src $IP_PROV2 table T_PROV1
    ip route add default via $GW_PROV1 table T_PROV1
    ip route add 127.0.0.0/8 dev lo table T_PROV1
    #T_PROV2
    ip route add $NET_PROV2 dev $IF_PROV2 src $IP_PROV2 table T_PROV2
    ip route add $NET_PROV1 dev $IF_PROV1 src $IP_PROV1 table T_PROV2
    ip route add $NET_LOCAL2 dev $IF_LOCAL2 src $IP_LOCAL2 table
    ip route add $NET_LOCAL1 dev $IF_LOCAL1 src $IP_LOCAL1 table T_PROV2
    ip route add default via $GW_PROV2 table T_PROV2
    ip route add 127.0.0.0/8 dev lo table T_PROV2
    #main
    ip route add $NET_LOCAL1 dev $IF_LOCAL1 src $IP_LOCAL1
    ip route add $NET_PROV1 dev $IF_PROV1 src $IP_PROV1
    ip route add $NET_PROV2 dev $IF_PROV2 src $IP_PROV2
    ip route add $NET_LOCAL2 dev $IF_LOCAL2 src $IP_LOCAL1
    ip route add default via $GW_PROV2
  
    ip rule delete table T_PROV1
    ip rule delete table T_PROV1
    ip rule delete table T_PROV2
    ip rule delete table T_PROV2
    ip rule delete table T_PROV1
    ip rule delete table T_PROV1
    ip rule delete table T_PROV2
    ip rule delete table T_PROV2

     ip rule add from $IP_PROV1 lookup T_PROV1 pref 2010
     ip rule add from $IP_PROV2 lookup T_PROV2 pref 2020
     ip rule add from $NET_LOCAL1 lookup T_PROV1 pref 2030
     ip rule add from $NET_LOCAL2 lookup T_PROV2 pref 2040
ip route flush cache
exit 0.
----------------------------------------------------------
Подскажите как управлять выбором провайдера для выхода в интернет для конкретных адресов локальной сети?
Какие варианты решения данного вопроса существуют ещё?