Как ОС знает, какой сетевой интерфейс использовать для Интернета?

У меня есть ПК с двумя сетевыми интерфейсами: eth0 и eth1.

eth0 - имеет ip 192.168.11.X/24.

eth1 - имеет ip 192.168.130.X/24. eth1 имеет подключение к Интернету.

Как моя ОС знает, какой интерфейс использовать, когда я пытаюсь подключиться к Интернету? Происходит ли она по всем шлюзам по умолчанию? Имеет ли он какой-то кеш того, что предоставляет каждый интерфейс? Есть ли разница в поведении между Windows и Linux?

Ответы

Ответ 1

Я собираюсь ответить за Linux-часть дома (по крайней мере для систем на базе Debian, таких как Ubuntu, поскольку это более распространено для пользователей на данный момент):

Введите в командной строке следующее:

route -n

Вы должны увидеть свою "таблицу маршрутизации", имеющую примерно следующее:

Destination    Gateway          Genmask         ...    Iface
0.0.0.0        192.168.11.254   0.0.0.0         ...    eth0
169.254.0.0    0.0.0.0          255.255.0.0     ...    eth0
192.168.11.0   0.0.0.0          255.255.255.0   ...    eth0
192.168.130.0  0.0.0.0          255.255.255.0   ...    eth1

Я пропустил пару столбцов, но в основном строка, которая говорит "0.0.0.0" в разделе "Назначение", является строкой, определяющей, где находится ваш маршрут по умолчанию. Другими словами, когда весь трафик идет, который не предназначен для любой другой подсетей в других строках (google.com, facebook.com, что угодно).

Если это неверно (например, в приведенной выше таблице, где "eth1" - это карта, которую вы хотите с доступом в Интернет), вы должны изменить маршрут по умолчанию:

sudo route del default
sudo route add default gw 192.168.130.254 netmask 255.255.255.0

Теперь это исправит. Чтобы сделать его постоянным, отредактируйте файл интерфейсов:

sudo gedit /etc/network/interfaces

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

auto eth0
iface eth0 inet dhcp
up route del default

auto eth1
iface eth1 inet dhcp
up route add default gw 192.168.130.254 netmask 255.255.255.0

Затем перезагрузите сеть, чтобы узнать, выполнил ли это трюк:

sudo /etc/init.d/networking restart

Ответ 2

Функция, о которой вы спрашиваете, представляет собой таблицу маршрутизации, список назначений, известных хосту.

Когда ОС необходимо переслать пакет, он проверяет этот список и выбирает наиболее подходящий (от конкретных получателей до общих). Например:

192.0.2.0/28    - 192.0.2.1 via eth1
198.51.100.0/27 - 198.51.100.1 via eth0
0.0.0.0/0       - 203.0.113.1 via eth0

Обратите внимание на последний пункт назначения: он будет соответствовать любому IPv4-адресу.