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

Исходное сообщение
"Linux и два провайдера. непонятки объясните"

Отправлено stopa85 , 15-Май-12 08:32 
Здравствуйте.

Есть дебиан, локальная сеть (eth0) и два провайдера (eth1, eth2).

Для простоты задача следующая: через канал eth2 пускать пользователей в инет. С обоих каналов принимать входящие соединения.

Вроде бы все работает, пользователи ходят в нет. Соединения принимаются, даже если один из каналов лежит, но не работает ping -I eth1 ya.ru, если eth2 - шлюз по умолчанию.

Вот что имеем после старта системы:

~# ip rule
0:      from all lookup local
1000:   from all lookup localnets
3000:   from X.X.X.78 lookup ruscom
3010:   from Y.Y.Y.134 lookup utel
32766:  from all lookup main
32767:  from all lookup default

~# ip route show table localnets
192.168.0.0/24 dev eth0  scope link

~# ip route show table ruscom
X.X.X.76/30 dev eth1  scope link
default via X.X.X.77 dev eth1

~# ip route show table utel
Y.Y.Y.132/30 dev eth2  scope link
default via Y.Y.Y.133 dev eth2

~# ip route show table main
10.7.0.2 dev tun0  proto kernel  scope link  src 10.7.0.1
X.X.X.76/30 dev eth1  proto kernel  scope link  src X.X.X.78
Y.Y.Y.132/30 dev eth2  proto kernel  scope link  src Y.Y.Y.134
192.168.0.0/24 dev eth0  proto kernel  scope link  src 192.168.0.1
default via Y.Y.Y.133 dev eth2

~# cat ./firewall.sh
...
iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
iptables -t nat -A POSTROUTING -o eth1 -j MASQUERADE
iptables -t nat -A POSTROUTING -o eth2 -j MASQUERADE
...



Содержание

Сообщения в этом обсуждении
"Linux и два провайдера. непонятки объясните"
Отправлено Andrey Mitrofanov , 15-Май-12 09:16 
Вы забыли сформулировать вопрос?

"Linux и два провайдера. непонятки объясните"
Отправлено stopa85 , 15-Май-12 10:56 
> Вы забыли сформулировать вопрос?

Я, домаю, что должно быть так: ping -I eth1 ya.ru - пинг яндекса через первый канал, ping -I eth2 пинг через второй канал. И то и другое должно завершаться успешно.

Работает пинг только через канал что прописан шлюзом по умолчанию в таблице main. Я не понимаю почему.

Это чей-то глюк?
Ядро фильтрует пакеты считаясь только с таблицей main (типа ответ приходит не с того интерфейса)? Если да, то как отключить?

P.S. Я не знаю как спросить об этом гугла, иначе уже спросил бы.


"Linux и два провайдера. непонятки объясните"
Отправлено 1 , 15-Май-12 10:57 
http://www.opennet.me/openforum/vsluhforumID3/31285.html

"Linux и два провайдера. непонятки объясните"
Отправлено Andrey Mitrofanov , 15-Май-12 12:27 
> http://www.opennet.me/openforum/vsluhforumID3/31285.html

Его исходник тут http://www.opennet.me/tips/info/2009.shtml


"Linux и два провайдера. непонятки объясните"
Отправлено stopa85 , 15-Май-12 12:43 
>> http://www.opennet.me/openforum/vsluhforumID3/31285.html
> Его исходник тут http://www.opennet.me/tips/info/2009.shtml

По этому исходнику и делал.

Но не работает ping -I eth1 ya.ru - я так понимаю должен!


"Linux и два провайдера. непонятки объясните"
Отправлено PavelR , 15-Май-12 21:06 
>>> http://www.opennet.me/openforum/vsluhforumID3/31285.html
>> Его исходник тут http://www.opennet.me/tips/info/2009.shtml
> По этому исходнику и делал.
> Но не работает ping -I eth1 ya.ru - я так понимаю должен!

Будет работать если вызовете "ping -I 1.2.3.4" , т.е. явно укажете IP, в частном случае с интерфейса eth1.

Для меня это known issue, причин не помню.


"Linux и два провайдера. непонятки объясните"
Отправлено stopa85 , 16-Май-12 15:55 
>>>> http://www.opennet.me/openforum/vsluhforumID3/31285.html
>>> Его исходник тут http://www.opennet.me/tips/info/2009.shtml
>> По этому исходнику и делал.
>> Но не работает ping -I eth1 ya.ru - я так понимаю должен!
> Будет работать если вызовете "ping -I 1.2.3.4" , т.е. явно укажете IP,
> в частном случае с интерфейса eth1.

Спасибо! Это я знал, но забыл)))

> Для меня это known issue, причин не помню.

Будем иметь ввиду... где-то ведь это еще аукнуться может...


"Linux и два провайдера. непонятки объясните"
Отправлено stopa85 , 26-Май-12 23:34 
> Будем иметь ввиду... где-то ведь это еще аукнуться может...

Аукнулось!
OpenVPN-сервер без директивы local слушает "на всех" интерфейсах, но отвечает только на том что маршрут по умолчанию. Проблема решается вешанием OpenVPN на каждом интерфейсе. Posfix же отрабатывает нормально, так что, вероятно, данная проблема свойственна всем UDP-серверам.

UPD.: Тот случай когда маршрутизатор он-же сервер.


"Linux и два провайдера. непонятки объясните"
Отправлено PavelR , 27-Май-12 08:31 
>> Будем иметь ввиду... где-то ведь это еще аукнуться может...
> Аукнулось!
> OpenVPN-сервер без директивы local слушает "на всех" интерфейсах, но отвечает только на
> том что маршрут по умолчанию. Проблема решается вешанием OpenVPN на каждом
> интерфейсе. Posfix же отрабатывает нормально, так что, вероятно, данная проблема свойственна
> всем UDP-серверам.
> UPD.: Тот случай когда маршрутизатор он-же сервер.

http://www.opennet.me/tips/1651_route_iptables_linux_nat.shtml


Проблема решается вешанием OpenVPN на одном интерфейсе, а для прочих интерфейсов делается DNAT, маркировка входящего соединения и маркировка исходящих (ответных) пакетов.


PS. Не помню, была ли какая-то опция у опенвпн-а, для корректировки этой ситуации (отвечать, используя IP, на который изначально пришло соединение), не пользовался.


"Linux и два провайдера. непонятки объясните"
Отправлено stopa85 , 27-Май-12 12:46 
> PS. Не помню, была ли какая-то опция у опенвпн-а, для корректировки этой
> ситуации (отвечать, используя IP, на который изначально пришло соединение), не пользовался.

multihome - эта опция.

Но если проблема проявиться там где такой опции нет (или я выставлю в наружу какие-то сервисы из локальной сети), тогда без DNAT-та не обойтись и я предпочту единый подход для всех сервисов.


"Linux и два провайдера. непонятки объясните"
Отправлено ALex_hha , 30-Май-12 23:32 
> Но если проблема проявиться там где такой опции нет

нет ее только на freebsd :)