У меня есть система, которая имеет два сетевых интерфейса с разными IP-адресами, оба из которых находятся в диапазоне общих адресов (хотя и через NAT в случае первого), и оба имеют разные шлюзы. (Длинная история, это для целей тестирования)
Проблема в том, что прямо сейчас, если я пытаюсь пропинговать адрес на втором интерфейсе, маршрут по умолчанию указывает через первый интерфейс - и никогда не прибывает должным образом.
Можно ли быть уверенным, что ответы всегда отправляются через один и тот же сетевой интерфейс (и с одним и тем же исходным IP-адресом), с которым они поступали? И если да, то как?
debian
networking
ipv4
Shadur
источник
источник
Ответы:
Вы неправильно понимаете проблему. Не каждый пакет является ответом, и не каждый пакет может быть сопоставлен с каким-либо другим пакетом, так что имеет смысл иметь «тот же сетевой интерфейс, с которым они пришли». Что вы хотите сделать, это выбрать шлюз для пакета на основе его исходного IP-адреса.
Это называется маршрутизацией на основе источника или политикой маршрутизации. Вы можете сделать это с помощью простого
iptables
правила , но лучше всего настроить две таблицы маршрутизации, по одной для каждого публичного адреса источника:Сначала создайте две таблицы (замените <NAME1> и <NAME2> разумными именами для двух ваших провайдеров, то же самое с IP1, DEV1 и т. Д.):
Добавьте шлюз к каждой таблице маршрутизации (при необходимости):
Тогда маршрут по умолчанию:
Затем правила выбора таблицы маршрутов на основе адреса источника:
См. Маршрутизация для нескольких обратных ссылок / провайдеров для получения дополнительной информации.
источник
Ответ Дэвида Шварца превосходен, но вы можете немного упростить правила маршрутизации, имея только одну дополнительную таблицу и используя маршрут по умолчанию для другой. У меня есть сервер, который находится за двумя шлюзами NAT, и я недавно прошел процесс воссоздания этого сценария между кучей виртуальных машин. Моя
/etc/network/interfaces
выглядит так:(это для настройки, где два интернет-провайдера - Optus и iiNet, отсюда и название таблицы «optus»)
Это, плюс строка при
/etc/iproute2/rt_tables
создании таблицы, должно быть всем, что вам нужно. У вас будет два IP-адреса; трафик с 192.168.13.13 будет выходить через 192.168.13.11, а трафик с 192.168.13.213 будет выходить через 192.168.13.10. Сконфигурируйте эти два шлюза для соответствующей переадресации портов (192.168.13.11 пересылает вещи в 192.168.13.13, а 192.168.13.10 пересылает вещи в 192.168.13.213), а остальные должны позаботиться о себе.Возможно, вам придется немного подправить ситуацию для вашей ситуации, так как вы используете публичные IP-адреса напрямую, но что-то подобное должно работать. Кроме того, гораздо проще сделать эти вещи
/etc/network/interfaces
и затем управлять git-файлом, а не пытаться вспомнить, как он был настроен, два года спустя, когда необходимо перезагрузить систему!источник
Пример двойной сети
В этом примере показано, как можно сделать дополнительные
eth1
с10.130.0.2
сетевой маской255.255.255.255
и шлюзом10.130.0.1
доступными для таких служб, какping -I eth1 8.8.8.8
Технически мы:
источник