ip route show поле src

Я прочитал справочную страницу ip и до сих пор не понимаю что src и я не смог найти много документации.

Пожалуйста, если вы можете объяснить это полностью или указать ссылку, это хороший ответ.

2 ответа

Решение

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

Краткий пример: у вас есть хост с двумя интерфейсами и IP-адресами 192.168.1.123/24 и 10.45.22.12/24. Вы добавляете маршрут к 78.22.45.0/24 через 10.45.22.1 и хотите убедиться, что вы не отправляете на 78.22.45.0/24 по адресу 192.168.1.123 (возможно, потому что сеть 78.22.45.0/24 не имеет обратного маршрута на 192.168.1.0/24 или потому, что вы не хотите, чтобы ваш трафик проходил по этому маршруту по той или иной причине):

ip route add 78.22.45.0/24 via 10.45.22.1 src 10.45.22.12

Обратите внимание, что предоставляемый вами src будет влиять только на трафик, исходящий от вашего хоста. Если сторонний пакет маршрутизируется, он, очевидно, уже будет иметь исходный IP-адрес, поэтому он будет передаваться без изменений (если, конечно, вы не используете NAT, но это совсем другой вопрос). Кроме того, этот параметр может быть переопределен процессом, специально выбирающим привязку к определенному адресу вместо использования значений по умолчанию при инициировании подключений (довольно редко).

src Атрибут является подсказкой, используемой алгоритмом выбора адреса. Это важно, когда у хоста несколько IP-адресов, что обычно, но не всегда, когда у него несколько интерфейсов. Хотя существуют другие правила, влияющие на выбор адреса, сетевое приложение также может переопределить алгоритм выбора с помощью системных вызовов, таких как bind(), src Атрибут - это способ использования поиска в таблице маршрутизации для ответа на вопрос: "Если я хочу установить соединение с хостом X, какой из моих адресов мне следует использовать?"

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

$ ip -4 addr show dev eth0
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    inet 10.1.0.2/24 brd 10.1.0.255 scope global eth0
    inet 10.1.0.16/24 scope global secondary eth0
$ ip route list dev eth0
10.1.0.32/27  scope link  src 10.1.0.16
10.1.0.0/24  proto kernel  scope link  src 10.1.0.2

Этот хост может связываться с любыми другими 252 адресами в этой подсети /24 с любого адреса, но по умолчанию он будет использовать 10.1.0.16 при установлении соединения с 10.1.0.32 по 10.1.0.63 и использовать 10.1.0.2 для всех остальное.

Если хост отвечает, а не инициирует, то он ответит с адреса назначения запроса. Например, если другой хост в 10.1.0.32 подключается к этому хосту в 10.1.0.2, ответ будет исходить из 10.1.0.2, даже если это не соответствует src атрибут обратного маршрута.

Другие вопросы по тегам