Перенаправление трафика loopback через маршрутизатор

Для некоторых целей тестирования я запускаю несколько приложений на основе сокетов на одном компьютере и хочу имитировать «реальные» сетевые условия между ними. Я думал, что самым простым было бы перенаправить весь трафик между приложениями через маршрутизатор, к которому подключен мой компьютер. Интуитивно это должно работать более или менее подобно нескольким компьютерам, подключенным к одной и той же сети, а сама сеть должна быть ограничена возможностями маршрутизатора (100 Мбит / с), а не локальными межсетевыми соединениями.

Моя машина (192.168.1.101) подключается непосредственно к маршрутизатору (192.168.1.2) через интерфейс em1 . Я попытался сделать это, добавив ip-маршрут. Результатом моей команды ip route является:

 default via 192.168.1.2 dev em1 proto static metric 1024 192.168.1.0/24 dev em1 proto kernel scope link src 192.168.1.101 192.168.1.101 via 192.168.1.2 dev em1 

Это, однако, похоже, не имеет никакого эффекта, поскольку pinging localhost возвращает более или менее те же результаты, что и pinging my machine (192.168.1.101), что составляет около 0,040 мс. В то же время, pinging другой машины в моей сети приводит к pings около 0.3-0.5ms.

Я пробовал traceroute, вот что я получаю:

 $traceroute 192.168.1.200 # my other computer traceroute to 192.168.1.200 (192.168.1.200), 30 hops max, 60 byte packets 1 192.168.1.200 (192.168.1.200) 1.005 ms 0.972 ms 0.954 ms $traceroute 192.168.1.101 traceroute to 192.168.1.101 (192.168.1.101), 30 hops max, 60 byte packets 1 localhost.localdomain (192.168.1.101) 0.051 ms 0.014 ms 0.013 ms $traceroute 127.0.0.1 traceroute to 127.0.0.1 (127.0.0.1), 30 hops max, 60 byte packets 1 localhost.localdomain (127.0.0.1) 0.053 ms 0.015 ms 0.013 ms 

Я что-то упускаю, или, может быть, я делаю это совершенно неправильно?

2 Solutions collect form web for “Перенаправление трафика loopback через маршрутизатор”

Проблема в том, что у вас есть маршрут в вашей local таблице, где говорится:

 $ ip route show table local [...] local 192.168.1.101 dev eth0 scope host [...] 

При отправке пакета с [src = 192.168.1.101 dst = 192.168.1.101] и ожидая, что маршрутизатор отправит отраженный пакет обратно (некоторые откажутся от такого рода вещей), вы хотите, чтобы исходящий пакет пропустил этот маршрут, но а не возвращение пакета.

Для этого вы можете изменить rules ip :

Удалите правило catch-all для local таблицы.

 # ip rule del from all table local 

И замените его на тот, который не делает этого для пакетов 192.168.1.101-> 192.168.1.101:

 # ip rule add not from 192.168.1.101 to 192.168.1.101 table local pref 0 

Затем отметьте входящие пакеты netfilter:

 # iptables -t mangle -I PREROUTING -s 192.168.1.101 -d 192.168.1.101 -j MARK --set-mark 1 

И скажите правилу ip, чтобы использовать только local таблицу:

 # ip rule add fwmark 1 table local pref 1 

(конечно, вам также понадобится ваш ip route add to 192.168.1.101 via 192.168.1.2 в свою main таблицу)

Вот несколько решений, которые могут ввести латентность, переупорядочивание пакетов и падение пакетов на * BSD и Linux.

  1. Использование netfilter для имитации потери пакетов

  2. Использование tc и netem для введения задержек и потерь

  3. В FreeBSD используйте dummynet . Вот вступительное слово .

  • iCloud перестает работать при подключении к OpenVPN
  • Использование iptables для блокировки определенных служб
  • Запустить сценарий оболочки на основе попытки доступа к порталу IPTABLES
  • Прозрачный прокси TOR - как работает переадресация TCP
  • Как добавить метки в iptables (цели MARK и CONNMARK)
  • ubuntu iptables не блокирует wget
  • Прозрачный прокси
  • Блокировка iptables с интернет-стороны на eth1?
  • Как вы перенаправляете NAT-порт с помощью PF?
  • В процессе межсетевого экрана?
  • Передача голоса по IP с помощью VPN
  • Пакеты, отправленные через интерфейс TUN, не маршрутизированы
  • Interesting Posts

    Почему остановка не выключает машину?

    sed удалить конец строки для определенных строк

    Как отключить мой монитор от выключения и каждые несколько секунд, когда он должен быть в режиме DPMS?

    Загрузочный сектор ядра Linux (vmlinuz) в x86-системе с форматом bzImage

    netcat не заканчивается, когда stdin закрывается

    Как определить, смонтировано ли монтирование NFS как v3 или v4?

    Неопределенные ссылки на «get_rome_version» и «rome_download» при компиляции «btusb_probe» в ядре SM-G360T

    Как Unix «fsck» отличается от Windows «chkdsk»?

    Есть ли способ использовать знак фунта «#» как псевдоним?

    Установите postgresql 9.2 на debian wheezy (на виртуальном боксе)

    tar extract в каталог с таким же базовым именем?

    Печать PDF с масштабированным контентом

    Греп с пробелами внезапно не работает

    Как установить git-svn с учетом этого странного статуса apt-cache?

    Машина сохраняет резервные копии файлов, которые я уже удалил

    Linux и Unix - лучшая ОС в мире.