4

Что произойдет, если у вас есть 2 сетевых интерфейса в той же сети, где находится шлюз / маршрутизатор по умолчанию?

например

  • сетевой интерфейс e1000g0 - 192.168.1.50
  • сетевой интерфейс e1000g1 - 192.168.1.51
  • Шлюз - 192.168.1.1

Если я отправлю пакет на 8.8.8.8 , какой сетевой интерфейс будет использоваться? Я использую коробку Solaris 10. Но предположим, что этот вопрос для всех общих реализаций Unix / Linux

В моей таблице маршрутизации кажется, что e1000g1 выбран в качестве UG, но почему / как он выбран?

3 ответа3

5

В Linux и Unix для каждой таблицы маршрутизации может быть только один шлюз. В Linux у вас может быть несколько таблиц маршрутизации, но у каждой есть один шлюз.

В Linux это определяется следующим образом:

    > ip route show
      default via 192.168.73.1 dev eth0  proto static 
      192.168.73.0/24 dev eth0  proto kernel  scope link  src 192.168.73.75  metric 1 

Ключевая строка начинается со default и гласит, что (мой) шлюз - 192.168.73.1 . Вы меняете это следующим образом:

     > ip route del default
     > ip route add default via 192.168.73.1 dev eth0

Если у меня подключено более одного интерфейса, моя таблица маршрутизации будет выглядеть так:

     > ip route show
       default via 192.168.73.1 dev eth0  proto static 
       192.168.73.0/24 dev eth0  proto kernel  scope link  src 192.168.73.75  metric 1 
       192.168.73.0/24 dev wlan0  proto kernel  scope link  src 192.168.73.66  metric 9 

Как вы можете видеть, локальный трафик может проходить через eth0 или wlan0 , но, благодаря меньшему значению metric (1 против 9), будет маршрутизироваться через eth0 .

WAN трафик будет , безусловно , пройти через eth0 , потому что шлюз по умолчанию на dev eth0

Эти значения автоматически поддерживаются вашим network manager который по умолчанию предпочитает кабельные соединения Wi-Fi. Однако вы можете отменить его выбор с помощью команд, аналогичных предыдущим,

       > ip route delete default
       > ip route add default via 192.168.73.1 dev wlan0

Если у вас есть несколько интерфейсов одного типа (например, несколько соединений Ethernet), то приоритет отдается интерфейсу, который был подключен первым.

Шлюз по умолчанию идентифицируется, так сказать, самой сетью: это один из параметров, которые передаются на ваш компьютер при согласовании перехода DHCP (остальные - маска сети, сеть, широковещательный адрес). Вы не знаете об этом, потому что процесс DHCP обрабатывается для вас network-manager . Иногда вам может потребоваться настроить статический IP-адрес, который не использует DHCP; в этом случае вам придется указать четыре параметра, упомянутых выше. Существуют методы изучения этих параметров даже в совершенно новых для вас сетях, но обычно вы устанавливаете статический адрес только в тех локальных сетях, которые вы уже хорошо знаете.

Помимо вашей локальной сети и маршрутов шлюза по умолчанию, вы можете иметь определенные маршруты через любой интерфейс. В этом случае порядок приоритетов маршрутов определяется на основе принципа наиболее конкретных маршрутов в первую очередь. Предположим, у вас есть маршрут для 1.1.1.0/24 через wlan0 . Затем, когда нам нужно направить пакеты, скажем, для 1.1.1.1 , применяются как это правило (через wlan0), так и правило по умолчанию (через eth0), но первый более конкретен, поэтому эти пакеты будут проходить через wlan0 . В этом случае шлюз dafult становится маршрутом, когда все остальное терпит неудачу, то есть, когда никакой другой маршрут не применяется.

В Linux у вас может быть несколько таблиц маршрутизации, это называется policy or source routing . В этом случае вам также понадобится правило для ядра, чтобы различать, когда применять несколько таблиц маршрутизации в вашем распоряжении. Вы найдете краткое введение в политику маршрутизации здесь . В этом случае вышеприведенные команды остаются идентичными, за исключением того, что за ними следует имя таблицы маршрутизации, над которой вы хотите работать, например:

       > ip route show table main
       > ip route show table MyOtherRoutingTable

Вы часто найдете ссылки на такие команды, как netstat, route, ifconfig. В Linux (но не в Unix, прочитайте верхний комментарий ниже) они устарели. Текущая команда, ip из набора iproute2 , заменяет все эти и некоторые другие. Посмотрев в googling linux ip cheat sheet вы можете найти сайты, сравнивающие возможности ip и предыдущих утилит.

редактировать

В Unix приведенные выше команды будут такими: вы запрашиваете таблицу маршрутизации как

   >  netstat -rn -f inet
      Routing tables

      Internet:
      Destination        Gateway            Flags        Refs      Use   Netif Expire
      default            192.168.11.1       UGSc           10        0     en0
      127                127.0.0.1          UCS             0        0     lo0
      127.0.0.1          127.0.0.1          UH              2   161444     lo0
      169.254            link#4             UCS             1        0     en0
      169.254.10.9       10:c3:7b:9d:c8:78  UHLSW           0        0     en0
      192.168.11         link#4             UCS             4        0     en0
      192.168.11.1       10:6f:3f:25:c6:33  UHLWIir        11     4589     en0   1162
      192.168.11.56      88:53:2e:10:77:5f  UHLWI           0        0     en0   1187
      192.168.11.65      2:f:b5:70:5b:22    UHLWI           0        0     en0   1081
      192.168.11.67      127.0.0.1          UHS             0        0     lo0
      192.168.11.113     6:20:3e:52:16:4d   UHLWIi          2      278     en0   1188

Здесь шлюз идентифицируется ключевым словом по default и флагом G

Вы меняете шлюз по умолчанию как:

   > route delete default
   > route add default 192.168.0.1
   > route change default -interface enp0s3

Каждый комментарий остается тем же, за исключением того, что касается policy routing , которая не поддерживается ядрами Unix.

1

Наличие двух активных разных физических интерфейсов в одном и том же экземпляре ОС, подключенных к одной подсети, такой как e1000g0 и e1000g1, в вашем вопросе ненадежно и явно не поддерживается, по крайней мере, в Solaris:

В системе, в которой несколько интерфейсов подключаются к одной подсети, необходимо сначала настроить интерфейсы в группу IPMP. В противном случае система не может быть многосетевым хостом.

Как уже говорилось, один из способов обеспечить надежную работу - включить ipmp (IP-многопутевость). Вы также можете отключить пересылку пакетов и настроить статические маршруты, как описано здесь для Solaris 10.

В качестве альтернативы вы также можете использовать агрегацию ссылок более низкого уровня, также называемую связыванием интерфейса в терминологии Linux.

-1

Я думаю, что сообщение будет отправлено через интерфейс, настроенный в записи маршрута по умолчанию. Вероятно, последний, который встал.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .