Здравствуйте.Есть дебиан, локальная сеть (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
...
Вы забыли сформулировать вопрос?
> Вы забыли сформулировать вопрос?Я, домаю, что должно быть так: ping -I eth1 ya.ru - пинг яндекса через первый канал, ping -I eth2 пинг через второй канал. И то и другое должно завершаться успешно.
Работает пинг только через канал что прописан шлюзом по умолчанию в таблице main. Я не понимаю почему.
Это чей-то глюк?
Ядро фильтрует пакеты считаясь только с таблицей main (типа ответ приходит не с того интерфейса)? Если да, то как отключить?P.S. Я не знаю как спросить об этом гугла, иначе уже спросил бы.
http://www.opennet.me/openforum/vsluhforumID3/31285.html
> http://www.opennet.me/openforum/vsluhforumID3/31285.htmlЕго исходник тут http://www.opennet.me/tips/info/2009.shtml
>> http://www.opennet.me/openforum/vsluhforumID3/31285.html
> Его исходник тут http://www.opennet.me/tips/info/2009.shtmlПо этому исходнику и делал.
Но не работает ping -I eth1 ya.ru - я так понимаю должен!
>>> 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, причин не помню.
>>>> 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, причин не помню.
Будем иметь ввиду... где-то ведь это еще аукнуться может...
> Будем иметь ввиду... где-то ведь это еще аукнуться может...Аукнулось!
OpenVPN-сервер без директивы local слушает "на всех" интерфейсах, но отвечает только на том что маршрут по умолчанию. Проблема решается вешанием OpenVPN на каждом интерфейсе. Posfix же отрабатывает нормально, так что, вероятно, данная проблема свойственна всем UDP-серверам.UPD.: Тот случай когда маршрутизатор он-же сервер.
>> Будем иметь ввиду... где-то ведь это еще аукнуться может...
> Аукнулось!
> OpenVPN-сервер без директивы local слушает "на всех" интерфейсах, но отвечает только на
> том что маршрут по умолчанию. Проблема решается вешанием OpenVPN на каждом
> интерфейсе. Posfix же отрабатывает нормально, так что, вероятно, данная проблема свойственна
> всем UDP-серверам.
> UPD.: Тот случай когда маршрутизатор он-же сервер.http://www.opennet.me/tips/1651_route_iptables_linux_nat.shtml
Проблема решается вешанием OpenVPN на одном интерфейсе, а для прочих интерфейсов делается DNAT, маркировка входящего соединения и маркировка исходящих (ответных) пакетов.
PS. Не помню, была ли какая-то опция у опенвпн-а, для корректировки этой ситуации (отвечать, используя IP, на который изначально пришло соединение), не пользовался.
> PS. Не помню, была ли какая-то опция у опенвпн-а, для корректировки этой
> ситуации (отвечать, используя IP, на который изначально пришло соединение), не пользовался.multihome - эта опция.
Но если проблема проявиться там где такой опции нет (или я выставлю в наружу какие-то сервисы из локальной сети), тогда без DNAT-та не обойтись и я предпочту единый подход для всех сервисов.
> Но если проблема проявиться там где такой опции нетнет ее только на freebsd :)