The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

форумы  помощь  поиск  регистрация  майллист  вход/выход  слежка  RSS
"Снова 2 провайдера и опять не работает."
Вариант для распечатки  
Пред. тема | След. тема 
Форумы OpenNET: Виртуальная конференция (Public)
Изначальное сообщение [ Отслеживать ]

"Снова 2 провайдера и опять не работает."  +/
Сообщение от SuperXL (ok) on 04-Сен-09, 16:53 
Приветствую всех !
Сразу прошу прощения за поднятие изжеванной темы, но...

Задача: Есть 2 провайдера, сервер (Ubuntu server 9.04), локальная сеть, DMZ - всем этим делом рулить, то есть раздавать инет пользователям (одним к первому провайдеру, другим ко второму)

Внутреннее убранство сервера:
eth0 - 192.168.0.201                                  Локальная сеть         192.168.0.0/24
eth1 - 192.168.1.2 (гейт 192.168.1.1)*         Первый провайдер    192.168.1.0/24
eth2 - 192.168.2.2                                      DMZ                          192.168.2.0/24
eth3 - 192.168.10.22 (гейт 192.168.10.1)*    Второй провайдер     192.168.10.0/24  

*Гейты по умолчанию в файле interfaces НЕ указаны, т.к. они прописаны в таблицах маршрутизации (Т1 и Т2)

Настройки маршрутизации:


#!/bin/sh

ip route flush table T1            
ip route flush table T2            

ip route add 192.168.1.0/24 dev eth1 src 192.168.1.2 table T1    
ip route add 192.168.0.0/24 dev eth0 table T1            
ip route add 192.168.10.0/24 dev eth3 src 192.168.10.22 table T1            
ip route add 127.0.0.0/8 dev lo table T1            
ip route add default via 192.168.1.1 dev eth1 table T1            

ip route add 192.168.10.0/24 dev eth3 src 192.168.10.22 table T2    
ip route add 192.168.0.0/24 dev eth0 table T2            
ip route add 192.168.1.0/24 dev eth1 src 192.168.1.2 table T2            
ip route add 127.0.0.0/8 dev lo   table T2            
ip route add default via 192.168.10.1 dev eth3 table T2            

ip route add 192.168.1.0/24 dev eth1 src 192.168.1.2    
ip route add 192.168.10.0/24 dev eth3 src 192.168.10.22    
#ip route add default via 192.168.1.1 dev eth1            
            
ip rule delete table T1        
ip rule delete table T2        
ip rule delete table T1        
ip rule delete table T2        
            
ip rule add from 192.168.1.2 table T1    
ip rule add from 192.168.10.22 table T2    
            
ip rule add fwmark 10 table T1    
ip rule add fwmark 11 table T2    
            
ip route flush cache    
echo 1 >/proc/sys/net/ipv4/ip_forward

exit 0

Настройки Iptables


#! /bin/sh
echo "Starting FireWall:"

echo "0" > /proc/sys/net/ipv4/ip_forward

iptables -t mangle -A PREROUTING -s 192.168.0.0/24 -j MARK --set-mark 11

iptables -t nat -A POSTROUTING -o eth1 -j SNAT --to-source 192.168.1.2
iptables -t nat -A POSTROUTING -o eth3 -j SNAT --to-source 192.168.10.22

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

echo "[Done !]"
exit 0

Проблема:
При попытке пропинговать Яндекс, пакеты с компа (192.168.0.10) в локальной сети уходят на сервер (192.168.0.201 - шлюз для локалки), потом натяться (192.168.0.201 -> 192.168.10.2) и отправляются в инет (192.168.1.2 -> (шлюз - 192.168.10.1) -> инет (яндекс)), возвращаются обратно (от яндекса -> (через шлюз)192.168.10.1 -> 192.168.10.2) и "оседают" на этом интерфейсе, то есть складывается такое впечатление, что не происходит обратного преобразования, то есть (192.168.10.2 -> 192.168.0.201 ->192.168.0.10). В результате на клиентской машине "Превышен интервал для ожидания для запроса".
То, что пакеты "оседают" на интерфейсе проверено tcpdump'ом.  

Сервер настраиваю дома, т.к. на работе нет такой возможности (экспериментировать), соответственно дома тока одно инет подключение. Я имитирую 2 подключения путем соединения сервера с домашним компом по первому каналу, и через вай-фай по второму.
Топология "2-х провайдеров" такая:

1 "провайдер":
[инет -> АДСЛ модем (192,168,10,1)  -> Вай-Фай (точка доступа 192,168,10,50)] -> (Домашний комп - (192,168,10,2)  ->FireSatrter -> Сетевая карточка (192,168,1,1) -> сервер (192.168.1.2)

2 "провайдер":
[инет -> АДСЛ модем (192,168,10,1)  -> Вай-Фай (точка доступа 192,168,10,50)] -> (Вай-Фай в режиме клиента - (192,168,10,51)  -> сервер (192.168.10.22)

Как только я указываю шлюз по умолчанию в основной таблице маршрутизации на любом из "провайдерских" интерфейсов в сервере, все замечательно работает, и локалка и сервак. Тоесть мои виртуальные провайдеры работают, даже если я указываю 2 шлюза по умолчанию и пингую через разные интерфейсы (на самом сервере)все идет как надо, но не работает локалка. Как только коментирую шлюз по умолчаинию, все, тишина на сервере (так и должно быть, сообщает, что сеть (инет) недоступна) а вот из локалки (в зависимости от установленой марки (10 или 11) пакеты уходят правильно по таблицам маршрутизации НО "оседают"при ответе яндекса и дальше не идут, не натяться в обратном направлении.

Вопрос: где грабли, что не так, куда копать? ???

PS. Уже неделю борюсь, читал и маны, и гуглил, и форумов перевернул немеряно, все напрасно.

Высказать мнение | Ответить | Правка | Cообщить модератору

Оглавление

Сообщения по теме [Сортировка по времени | RSS]


1. "Снова 2 провайдера и опять не работает."  +/
Сообщение от PavelR (??) on 04-Сен-09, 19:59 

https://www.opennet.ru/tips/info/2009.shtml

Рекомендую посмотреть вывод команды ip ru sh и проанализировать его.


Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

2. "Снова 2 провайдера и опять не работает."  +/
Сообщение от SuperXL (ok) on 04-Сен-09, 20:22 

на мой взляд все верно...

root@inet-servak:~# ip ru sh
0:    from all lookup local
32762:    from all fwmark 0xb lookup T2
32763:    from all fwmark 0xa lookup T1
32764:    from 192.168.10.22 lookup T2
32765:    from 192.168.1.2 lookup T1
32766:    from all lookup main
32767:    from all lookup default

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

3. "РЕШЕНО "  +/
Сообщение от SuperXL (ok) on 05-Сен-09, 21:18 
Все заработало !

Как подсказали на одном из форумов, необходимо выполнить вот такой скрипт


for it in /proc/sys/net/ipv4/conf/*/rp_filter; do
    echo 0 > $it
done

ВНИМАНИЕ ! данный скрипт снижает безопасность системы, если не принимать дополнительных мер в фильтрации входящего трафика из интернета !

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

4. "РЕШЕНО "  +/
Сообщение от ALex_hha (??) on 07-Сен-09, 00:18 
>[оверквотинг удален]
>Как подсказали на одном из форумов, необходимо выполнить вот такой скрипт
>
>
 
>for it in /proc/sys/net/ipv4/conf/*/rp_filter; do
>    echo 0 > $it
>done
>

>
>ВНИМАНИЕ ! данный скрипт снижает безопасность системы, если не принимать дополнительных мер
>в фильтрации входящего трафика из интернета !

Значит у вас явно неправильно настроена маршрутизация, так как при правильной настройке, ответ должен уходить через тот же интерфейс. через который был получен запрос

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

5. "РЕШЕНО "  +/
Сообщение от SuperXL (ok) on 07-Сен-09, 20:10 
>
>Значит у вас явно неправильно настроена маршрутизация, так как при правильной настройке,
>ответ должен уходить через тот же интерфейс. через который был получен
>запрос

Где же тогда грабли ?
Я понимаю, что я отключил проверку обратного адреса, но при отключенной проверке все начинает работать, причем если я указываю маркировать пакеты меткой 10 (см мою конфигурацию) то весь трафик от хоста в локалке с ип 192.168.0.10 идете через "первого" провайдера, если я указываю метку 11 то через "второго". Как только я включаю проверку, все, затык, ответы от яндекса (гугля, майла итд) "не проходят" обратно в локалку к указанному хосту. Тоесть SNAT работает наполовину, когда запрос идет от хоста в локалке происходит преобразование адреса (хост в локалке -> маршрутизатор -> яндекс), когда ответ приходит назад, обратного преобразования (яндекс -> маршрутизатор -> хост в локалке) не происходит, а при отключеной проверке, все работает...
Я в ступоре... Возможно, я так предпологаю, так происходит (в моем случае) что у меня 2 виртуальных инет провайдера и мой модем имеет всего один интерфейс, хотя по логике такого быть не должно.

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

6. "РЕШЕНО "  +/
Сообщение от ALex_hha (ok) on 07-Сен-09, 21:14 
Просто ради интереса, убери метки у пусти весь трафик с 192.168.0.10 через 1го прова, а например с 192.168.0.11 через второго.
Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

7. "РЕШЕНО "  +/
Сообщение от SuperXL (ok) on 08-Сен-09, 00:36 
>
>Значит у вас явно неправильно настроена маршрутизация, так как при правильной настройке,
>ответ должен уходить через тот же интерфейс. через который был получен
>запрос

Он и приходит через тот же интерфейс, только не натится обратно, посмотрите мой пример в первом посте, там где про яндекс и "оседание пакетов"...


>Просто ради интереса, убери метки у пусти весь трафик с 192.168.0.10 через
>1го прова, а например с 192.168.0.11 через второго.

Вы предлагаете прописать маршруты жестко, то есть в правилах маршрутизации, и проверить одновременную работу обоих компов, я правильно Вас понял, или как ?

сегодня не получится, т.к. надо идти на работу и брать свич, дома, увы нет такого количества железа чтоб реализовать то, что было Вами предложено.

Поправка к правилам маршрутизации, убраны следующие строчки:


ip route add 192.168.10.0/24 dev eth3 src 192.168.10.22 table T1
ip route add 192.168.1.0/24 dev eth1 src 192.168.1.2 table T2

(*честно говоря вообще не понимаю зачем закидывать информацию о маршруте в таблицу, если по сути этот маршрут не должен, вообще, участвовать в обмене по этой таблице...)

Поправка к правилам IPtables, вот так они выглядят сейчас.


$IPTABLES -t mangle -A PREROUTING -s 192.168.0.10 -j MARK --set-mark 10
$IPTABLES -t mangle -A PREROUTING -s 192.168.0.11 -j MARK --set-mark 11
$IPTABLES -t mangle -A PREROUTING -s 192.168.0.12 -j MARK --set-mark 10

$IPTABLES -t nat -A POSTROUTING -o eth1 -m mark --mark 10 -j SNAT --to-source 192.168.1.2  
$IPTABLES -t nat -A POSTROUTING -o eth3 -m mark --mark 11 -j SNAT --to-source 192.168.10.22

При смене адреса на испытуемом хосте в локальной сети все маршрутизируется как надо, тоесть хосты с адресами 10 и 12 через первого, а хост с адресом 11 через второго.
А вот те хосты которые не метяться меткой, вообще не могут установить соединение с внешним миром.

И tracerote ya.ru
при метке 10 выдает последовательность: время опущу.

192.168.0.201    гейт для локалки
192.168.1.1      гейт для сервака по маршруту "1-го провайдера"
192.168.10.1     гейт для домашнего компа (ADSL модем)
гейт настоящего провайдера
итд

а при метке 11

192.168.0.201    гейт для локалки
192.168.10.1     гейт для сервака ("2-й провайдер" (ADSL модем) ну и гейт для дом. компа)
гейт настоящего провайдера
итд.
то есть, все как задумано.

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

Архив | Удалить

Индекс форумов | Темы | Пред. тема | След. тема




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2025 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру