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

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

  • iptables перенаправляет FORWARD http-трафик на порт privorxy
  • VPN-туннель для двух служб на двух серверах?
  • IPtables на ubuntu 12.04
  • iptables: как разрешить трафик с перенаправленного порта
  • Изолировать сеть хостов с помощью iptables
  • iptables добавляет правила в цепочку OUTPUT
  • Linux + iptables резервный
  • Удаленный (REST) ​​API для системного администрирования
  • 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

    Умножьте определенные числа в текстовом файле определенной константой

    Получите процент использования для точки монтирования

    Зависимость не удалась для монтирования после dist-upgrade

    Как вы обрабатываете всю команду как sudo, которая включает перенаправление или конвейер?

    Командная строка Linux: путаница glob

    Если имя файла имеет более n символов, удалите последние

    Как включить WebGL в Chrome или Firefox?

    Как я могу использовать две команды bash в команде -exec команды find?

    Копирование файла с использованием scp в несуществующий локальный каталог – вводящее в заблуждение сообщение об ошибке

    Почему некоторые процессы заканчиваются буквой «d»?

    Почему в руководстве по установке Debian предлагается выполнить «синхронизацию» после необработанной копии файла изображения на USB-ключ?

    Насколько обновлен и уместен «Проект документации Linux»?

    Пакеты дополнительных пакетов Virtualbox?

    Suspend в Linux Mint 18 не работает

    Как проверить, есть ли у меня root-доступ?

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