Перенаправление трафика 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 

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

  • Значение «Редакция» в выпуске ipset
  • Пересылка порта запроса ssh с глобального IP на определенный локальный IP-адрес
  • Ограничить максимальное количество соединений на IP с помощью OpenWRT?
  • iptables: использует ли -m conntrack увеличение загрузки системы?
  • Потеря связи после смены iptables
  • Радиолюбитель Whiptail
  • Ip, отправляющий малину pi
  • iptables не пересылает из WAN виртуальные машины
  • 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 . Вот вступительное слово .

    Interesting Posts

    Как передать Ctrl-C гостю при запуске qemu с -nographic?

    «Lftp» вход по-прежнему возможен для заблокированных пользователей «/etc/pam.d/vsftpd»

    В чем разница между кэшированной памятью и используемой памятью?

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

    Командный способ отправки pinging

    Как найти все диски и их размер перед их использованием?

    Debian Linux: запуск / запуск приложения / процесса в другом виртуальном терминале

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

    Можно ли выставить USB-UPS через SNMPD?

    Как решить проблему службы PostgreSQL не запускается?

    делает головной вход> вывод копирует все невидимые символы в новый файл?

    Как сделать выбор блока в `screen`

    Удалить всю переменную окружения и загрузить rcfile

    Как проверить первый элемент в массиве

    Будет ли форматирование моего диска TRIM моим SSD?

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