Назад | Перейти на главную страницу

Принудительная обратная петля UDP по сети

Я пытаюсь настроить небольшую программу обратной связи на python для отправки пакетов UDP с одного интерфейса на другой. Без изменения iptables ядро ​​просто закроет любое соединение и отправит его напрямую на определенный интерфейс, даже не переходя по сети. Используя следующее, я смог получить эхо-запросы, перемещающиеся по проводу (от этот post), но я не уверен, как заставить UDP делать то же самое.

ifconfig eth2 10.50.0.1/24
ifconfig eth3 10.50.1.1/24

# nat source IP 10.50.0.1 -> 10.60.0.1 when going to 10.60.1.1
iptables -t nat -A POSTROUTING -s 10.50.0.1 -d 10.60.1.1 -j SNAT --to-source 10.60.0.1

# nat inbound 10.60.0.1 -> 10.50.0.1
iptables -t nat -A PREROUTING -d 10.60.0.1 -j DNAT --to-destination 10.50.0.1

# nat source IP 10.50.1.1 -> 10.60.1.1 when going to 10.60.0.1
iptables -t nat -A POSTROUTING -s 10.50.1.1 -d 10.60.0.1 -j SNAT --to-source 10.60.1.1

# nat inbound 10.60.1.1 -> 10.50.1.1
iptables -t nat -A PREROUTING -d 10.60.1.1 -j DNAT --to-destination 10.50.1.1

ip route add 10.60.1.1 dev eth2
arp -i eth2 -s 10.60.1.1 00:1B:21:C1:F6:0F # eth3's mac address

ip route add 10.60.0.1 dev eth3 
arp -i eth3 -s 10.60.0.1 00:1B:21:C1:F6:0E # eth2's mac address

ping 10.60.1.1

Я хотел бы, чтобы tp мог транслировать UDP-сообщение на 10.50.0.1, и прочтите это 10.50.1.1

Как я могу это сделать?

Не полный ответ, потому что сейчас я использую мобильный телефон, но это слишком долго для комментария:

По умолчанию все сетевые карты управляются одним стеком IP в ядре Linux, и поэтому ядро ​​«знает», что трафик с IP-адреса 10.50.0.1 на eth2 на 10.50.1.1 не нужно отправлять на маршрутизатор в 10.50.0.0/24 и полностью обойдет эту маршрутизацию и отправит ее напрямую на eth3.

Как правило, это разумная вещь, поскольку это практически не даст вам задержек и даст гораздо большую пропускную способность, чем фактические скорости проводов для eth2 и eth3 и маршрутизатора (ов) между ними.

Вы можете предотвратить это, настроив конкретные инструкции маршрутизации, которые кажутся такими же, как вы пытались использовать с iptables, но, возможно, лучшим решением является использование сетевых пространств имен. Назначив каждую сетевую карту другому пространству имен, ядро ​​Linux больше не будет обрабатывать трафик от eth2 к eth3 как локальный и вместо того, чтобы просто отправлять пакеты только в памяти от 10.50.0.1 до 10.50.1.1, они будут выходить по сети.