Назад | Перейти на главную страницу

Отправка сокета перенаправлена ​​на другой интерфейс, чем тот, к которому он привязан

Есть 2 NIC (сетевые карты) с IP-адресами IP0 и IP1 как первичные адреса, предоставленные им, как видно в таблице маршрутизации ядра через ip route. Скажем, сокет TCP привязан к IP0 (и немного порта P0). Таким образом, он будет получать пакеты, предназначенные для IP0:P0 и эту часть я понимаю. Когда он хочет отправить данные в пункт назначения IP-Dest:Port-Dest, таблица маршрутизации ядра говорит, что в конечном итоге это должно пройти через другую сетевую карту с основным IP как IP1. Я хочу знать, каковы правила в таких случаях. Отбрасывает ли ядро ​​пакет, поскольку отправитель (сокет) был привязан к другому сетевому адаптеру с другим IP (IP0) или он отправляет его через другой сетевой адаптер, но игнорирует связанный с ним IP (IP1) и вместо этого отметьте исходный IP как IP0 к которому был привязан сокет или (наоборот) игнорировать IP0 и отметьте источник как IP1 при этом все еще отправляя другую сетевую карту, или существуют другие правила, которые определяют поведение здесь, и результаты могут отличаться?

Последующий вопрос: при привязке ко всем интерфейсам через 0.0.0.0 и порт 0, - это один и тот же (независимо от выбора ядра) номер порта, выбранный для всех интерфейсов для этого сокета, или нет такой гарантии, и он может выбрать IP0:P0 и IP1:P1 где P0 != P1 или это зависит от протокола или другого фактора?

Если приложение привязывается к 0.0.0.0 порты будут одинаковыми для всех интерфейсов.

Тем не менее маршрутизация становится сложной при привязке к 0.0.0.0. Часто программное обеспечение генерирует пакеты, а затем 0.0.0.0 источник в IP SRC. Это приводит к попаданию в таблицу маршрутизации по умолчанию, которая обычно является первым шлюзом / подсетью интерфейсов.

Поэтому необходимо настроить две независимые таблицы маршрутизации:

https://serverfault.com/a/823061/476056

И укажите маршрутизацию на основе пункта назначения для интерфейсов

https://serverfault.com/a/918875/476056