Мне нужно проверить сетевые характеристики, такие как RTT в сети, например, с помощью ICMP-пингов.
Этот вопрос особенный, поскольку я хочу принудительно пересылать каждый пакет через сервер, который должен работать как маршрутизатор, но не может предлагать перенаправления. Но именно это невозможно, вместо этого я всегда теряю связи между хостами.
Сеть была настроена (в "ip route" / таблицах маршрутизации) для первой передачи всех пакетов на сервер (IP: 10.0.0.4), который затем отправляет его обратно на шлюз (IP: 10.0.0.1). От шлюза он направляется на правильный хост (IP: 10.0.0.5 - 10.0.0.255).
В будущем этот сценарий позволит серверу изменять все пакеты в сети.
Чтобы упростить сценарий, настроены только два хоста (10.0.0.5 и .6). Затем хосты настраиваются со следующей таблицей маршрутизации (показана для 10.0.0.5):
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
default 10.0.0.1 0.0.0.0 UG 0 0 0 ens3
10.0.0.0 * 255.255.255.0 U 0 0 0 ens3
host-10-0-0-6.o host-10-0-0-4.o 255.255.255.255 UGH 0 0 0 ens3
Для сервера 10.0.0.4 таблица маршрутизации выглядит следующим образом:
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
default 10.0.0.1 0.0.0.0 UG 0 0 0 ens3
10.0.0.0 * 255.255.255.0 U 0 0 0 ens3
На данный момент iptables полностью пуст для всех устройств. Кроме того, чтобы разрешить IP-пересылку, сервер был настроен с /proc/sys/net/ipv4/ip_forward = 1
С помощью этого параметра я могу легко пропинговать между двумя хостами, вывод выглядит следующим образом (для хоста 10.0.0.6):
# ping 10.0.0.5
PING 10.0.0.5 (10.0.0.5) 56(84) bytes of data.
From 10.0.0.4: icmp_seq=1 Redirect Host(New nexthop: 10.0.0.5)
64 bytes from 10.0.0.5: icmp_seq=2 ttl=64 time=0.441 ms
64 bytes from 10.0.0.5: icmp_seq=3 ttl=64 time=0.405 ms
Проблема заключается в ICMP-перенаправлении, которое серверы немедленно отправляют. При этом все ping-пакеты больше не проходят через сервер.
Я пробовал много вещей, включая изменение iptable для удаления перенаправлений и изменение файла sysctl.conf с net.ipv4.conf.all.accept_redirects = 0 и net.ipv4.conf.all.send_redirects = 0 (соответственно для интерфейса. ..conf.ens3 ....)
Проблема в том, что каждый раз, когда я отключаю перенаправления, пинг больше не возможен вообще (потеря пакета 100%).
Как я могу заставить этот простой сценарий работать, а это означает: как я могу маршрутизировать все пакеты каждый раз через сервер и обратно?