Я прочитал справочную страницу ip
и до сих пор не понимаю, что это src
такое, и я не смог найти много документации.
Пожалуйста, если вы можете объяснить это полностью или указать ссылку, это хороший ответ.
Я прочитал справочную страницу ip
и до сих пор не понимаю, что это src
такое, и я не смог найти много документации.
Пожалуйста, если вы можете объяснить это полностью или указать ссылку, это хороший ответ.
Ответы:
При добавлении маршрута к многосетевому хосту вы можете захотеть контролировать исходный 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
атрибуту обратного маршрута.