Отправить пакет по сети, даже если его целью является локальный хост

10

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

Иногда при тестировании сетевых конфигураций полезно отправлять пакет по локальной ссылке с самого компьютера, причем сама машина является целью. Как я могу это сделать? По крайней мере, для шинного соединения, такого как Ethernet, если не для соединения точка-точка. Меня интересуют только IP-пакеты (как IPv4, так и IPv6).

Жиль "ТАК - перестань быть злым"
источник
Пробовал сканирование nmap?
Рубан Савви
Вы заинтересованы в том, чтобы пакет физически выходил в сеть и возвращался обратно? Или вы просто хотите, чтобы он выглядел так, как если бы он (проходил через стек маршрутизации, iptables и т. Д.)?
Патрик
@ Патрик Я хочу, чтобы он вышел и достиг локального маршрутизатора. Хотя пребывание внутри, но локальный взгляд, как будто он вышел, также может быть полезным в других обстоятельствах.
Жиль "ТАК - перестань быть злым"
@ Жиль У тебя когда-нибудь был этот успех? В настоящее время я пытаюсь сделать это с двумя адаптерами TAP и некоторым простым мостовым кодом, но безуспешно. Маршрутизация кажется правильной, но ARP, похоже, не работает (пакеты отправляются с src mac == dst mac). Я мог бы объяснить мои настройки, если это поможет.
Джонатон Рейнхарт
1
@ Жиль Я не пробовал ничего из этого, но я могу представить себе реализацию маршрутизатора таким образом, чтобы он никогда ничего не отправлял туда, откуда он пришел, например, для предотвращения вечного отскока между двумя маршрутизаторами. Просто нужно следить за тестированием на случай, если пакет выйдет, но не вернется.
Энтон

Ответы:

7

Каждый сетевой адаптер в linux имеет логический параметр sysctl accept_local( /proc/sys/net/ipv4/conf/eth0/accept_local). Попробуйте установить его в 0 для всех задействованных адаптеров (кроме того, вам может потребоваться изменить таблицу маршрутизации в соответствии с вашими настройками теста).

Также убедитесь, что rp_filter( /proc/sys/net/ipv4/conf/eth0/rp_filter) включен (не 0).

Ссылка: http://code.metager.de/source/xref/linux/stable/Documentation/networking/ip-sysctl.txt

oakad
источник