Какой IP-адрес использует сетевой интерфейс?

Какой IP-адрес использует сетевой интерфейс?

Какой IP-адрес использует интерфейс, когда хост выступает в роли клиента?

Допустим, я настроил eth0 с 2 IP-адресами: 192.168.1.7 и 192.168.1.8.

Команда route показывает что-то вроде этого:

$ route
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
192.168.240.0   0.0.0.0         255.255.240.0   U     256    0        0 eth0
...

Это в основном означает, что когда я пытаюсь подключиться к любому хосту из 192.168.240.0сети, он использует интерфейс eth0. Хорошо, но... Какой IP-адрес из этого интерфейса?

Если хост действует как сервер, а клиент подключается к моему компьютеру, используя IP-адрес, 192.168.1.7который, как я понимаю, будет использовать eth0 192.168.1.7для связи с клиентом, но что делать, если клиентом являюсь я сам?


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

IP-адреса выдуманы, я не могу добавить еще один IP-адрес к интерфейсу в моем Ubuntu WSL, потому что получаю эту ошибку:

$ ip address add 192.168.1.7/24 dev eth0
RTNETLINK answers: Permission denied

Вывод ip r sпримерно такой:

$ ip r s
none 224.0.0.0/4 dev eth0 proto unspec metric 256
none 255.255.255.255 dev eth0 proto unspec metric 256
none 224.0.0.0/4 dev eth1 proto unspec metric 256
none 255.255.255.255 dev eth1 proto unspec metric 256
...

ПРАВКА 2

Я обновился до WSL2, и теперь команда добавления IP-адресов работает (с помощью sudo).

$ ip -4 a s dev eth0
4: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
    inet 192.168.249.181/20 brd 192.168.255.255 scope global eth0
       valid_lft forever preferred_lft forever
    inet 192.168.1.7/24 scope global eth0
       valid_lft forever preferred_lft forever
    inet 192.168.1.8/24 scope global secondary eth0
       valid_lft forever preferred_lft forever

решение1

Для Linux ответ на ваш вопрос:дано здесь:

Начальный адрес источника для исходящего пакета выбирается в соответствии со следующим рядом правил.

Приложение может запросить определенный IP-адрес, ядро ​​будет использовать подсказку src из выбранного пути маршрута или, при отсутствии этой подсказки, ядро ​​выберет первый адрес, настроенный на интерфейсе, который попадает в ту же сеть, что и адрес назначения или маршрутизатор следующего перехода.

решение2

Клиент будет искать МАРШРУТЫ, соответствующие адресу, к которому он пытается подключиться. Если, как в вашем примере, есть более одного соответствующего маршрута, он выберет запись маршрута с самой высокой метрикой и отправит пакет из интерфейса, найденного в таблице маршрутизации, используя IP-адрес этого интерфейса.

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

На сервере... ну, там все становится немного сложнее. У меня есть хосты Centos и Redhat с несколькими интерфейсами в одной подсети. Они будут отвечать на тот же адрес/интерфейс, на который были отправлены пакеты. Но у меня также есть последние системы Ubuntu и Debian, которые будут повторно посещать таблицу маршрутизации, чтобы найти интерфейс и адрес для использования, игнорируя адресацию в пакете клиента. Клиент будет игнорировать пакеты, возвращающиеся с IP-адреса, с которым он не общается.

Связанный контент