Вопрос: Как Linux выбирает, какой сетевой интерфейс использовать?


Предположим, у меня есть машина с двумя сетевыми адаптерами в разных подсетях, eth0 (10.0.100.5) и eth1 (10.0.200.5). Предполагая, что обе подсети имеют маршруты к Интернету (хотя их собственные NAT) и остальную часть локальной сети (хотя и имеют собственные коммутаторы):

  1. Как Linux будет выбирать, какой сетевой интерфейс использовать при обращении к 10.0.150.5 или 173.194.43.102?
  2. Есть ли способ повлиять на это на сетевом уровне? Может ли это повлиять на удаление маршрутов из подсетей? Я в среде AWS и работаю с AMI Appliance, с которым я не могу войти, поэтому что-то вроде это не будет работать.

AWS VPC, другие машины, работающие с Ubuntu 12.04, не знают, на что работает машина, на которую я пытаюсь повлиять (поскольку я не могу войти в нее).

Разъяснения:

  • Обе подсети настроены как /24s

6
2017-11-15 23:11


Источник


для получения дополнительной информации, пожалуйста, route -n - Hrvoje Špoljar
Как уже упоминалось, я не могу войти в поле на вопрос - позже сегодня вечером я могу развернуть еще один в той же конфигурации и проверить. - Dan


Ответы:


Подсеть определяется сеть а также маскировать, например.

сеть: 10.0.100.5 маска: / 8

Это означает, что ваша подсеть: 10.0.100.5 /8

В принципе, для этой подсети принадлежит любой действительный IP-адрес семейства 10.xxx.xxx.xxx. Для доступа к хостам в этой подсети может использоваться только один интерфейс. Так что это либо eth0, либо eth1 в вашем случае. Другой интерфейс может иметь IP-адрес в той же подсети, но он не будет работать нормально.

Вот что произойдет, если у вас есть такая ситуация, как вы описали как eth0, так и eth1, подключенные к одной сети с IP-адресами в той же подсети.

  • eth0 10.0.100.5/8
  • eth1 10.0.200.5/8

Теперь только один из этих интерфейсов имеет маршрут (скажем, это eth0), который гласит: to access subnet 10.0.100.0/8 использование eth0, Таким образом, пакет, выходящий из этого интерфейса, будет иметь адрес источника 10.0.100.5

! УВЕДОМЛЕНИЕ  - 10.0.100.5/8 и 10.0.200.5/8 - это одна и та же подсеть (поскольку маски маски последние 3 октета, мы также можем записать ее как 10.0.0.0/8)

Итак, теперь рассмотрим, что у нас есть хост в этой подсети, которая пытается связаться с 10.0.200.5 Пакет входит в систему через eth1 но не может вернуться из eth1 поскольку eth0 только один с маршрутом в сеть 10.0.0.0/8 и ответы от eth0 имеют разные IP; поэтому одно инициирующее соединение с 10.0.200.5 не сможет понять ответ, исходящий из какого-то другого источника.

РЕДАКТИРОВАТЬ 

Чтобы определить, какой интерфейс будет использоваться, вам нужно посмотреть таблицу маршрутизации. Поскольку вопрос не содержит таблицу маршрутизации, я попытаюсь объяснить следующую таблицу маршрутизации

$ route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         192.168.0.1     0.0.0.0         UG    0      0        0 wlan0
10.0.0.0        0.0.0.0         255.255.255.0   U     0      0        0 eth0
192.168.0.0     0.0.0.0         255.255.255.0   U     0      0        0 wlan0

вывод альтернативной таблицы маршрутизации

$ ip route show
default via 192.168.0.1 dev wlan0  proto static 
10.0.0.0/24 dev eth0  proto kernel  scope link  src 10.0.0.5 
192.168.0.0/24 dev wlan0  proto kernel  scope link  src 192.168.0.14 

Итак, у нас есть два интерфейса в примере выше.

  • eth0 с IP 10.0.0.5 в подсети 10.0.0.5/255.255.255.0 или в нотации CIDR 10.0.0.5/24
  • wlan0 с IP 192.168.0.14 в подсети 192.168.0.14/255.255.255.0 или в нотации CIDR 192.168.0.0/24

Теперь о том, что говорит нам таблица маршрутизации; поэтапная интерпретация, снизу вверх:

192.168.0.0/24 dev wlan0 proto kernel scope link src 192.168.0.14

Доступ к узлам в подсети 192.168.0.0/24 использование интерфейса wlan0 и src IP 192.168.0.14

10.0.0.0/24 dev eth0 proto kernel scope link src 10.0.0.5

Доступ к узлам в подсети 10.0.0.0/24 использование интерфейса eth0 и src IP 10.0.0.5

default via 192.168.0.1 dev wlan0 proto static

Чтобы получить доступ к любому другому хосту, не включенному в приведенные выше правила, используйте defaultмаршрут, доступный с использованием интерфейса wlan0 и шлюз в другие сети 192.168.0.1


4
2017-11-15 23:20



Добавлено уточнение о маске, которую я использую, - извините за упущение. - Dan
Можете ли вы объяснить, как это влияет на таблицу маршрутизации? - Dan
проверить последний отредактированный ответ для получения более подробной информации - Hrvoje Špoljar


Посмотрите на свою таблицу маршрутизации - команда маршрута. С помощью новой команды ip используйте ip route show. Вы можете обратиться за помощью к любой из них о том, как добавлять / удалять записи маршрутизации в таблице.


0
2017-11-16 07:33