Доброго всем линуксистам.
Маршрутизация в Линукс поражает своим масштабом. Но вот закралось сомнение в базовой логике. Проблема уже решилась, но до сих пор остается негативный осадок.
Поясню на простом примере.
Дано: два выхода в интернет через ppp0 и ppp1. Параметр defaultroute у обоих отключен.
Изначально была сделана типовая балансировка:
ip route add default scope global nexthop dev ppp nexthop dev ppp1
Интернет входит и выходит (в общем «замечательно выходит» :).
Теперь возникло желание весь трафик пустить только через ppp1. Делаю типовую команду
ip route del default ip route add default via <шлюз провайдера> dev ppp1
Проблем вроде никаких.
Оставшийся инрфейс ppp0 поднимается вообще без шлюза.
И вот грабли. По ppp0 нужно принимать из интернета входящие подключения - глухо.
Запускаю tcpdump -i ppp0 - вижу что на ppp0 приходят пакеты, но до локальных процессов они не доходят.
Еще запускаю ping -I ppp0 ya.ru - тоже глухо. Смотрю tcpdump -i ppp0 - и снова вижу что echo request нормально уходит в интернет и нормально возвращается echo reply на ppp0, но до локального процесса ping они не доходят.
Файрвол - ВЫРУБЛЕН.
В небезысвестном http://lartc.org говорится, что в случае нескольких выходов в интернет нужно добавить десяток команд для таблиц маршрутизации, и том числе, с указанием источника пакета (src).
Ситуация напоминает как если я вызвал такси, сообщил свой адрес, приезжает таксист и говорит по Вашему адресу доставлено такси, а я ему говорю - этот адрес вообще не мой, потому что я точно не знаю откуда вы вообще.
Моя логика в том, что если пришел пакет этому хосту, зачем еще проверять источник пакета.
В чем я неправ?