User Tools

Site Tools


topic:linux-clone-udp

Разветвление udp трафика

Вводная

Появилась задача, отправлять udp трафик на пару серверов.
При этом на источнике udp трафика (устройство udp-sourсe
) нельзя настроить пару дестинейшинов (ВМ udp-destination1\2
), можно настроить только один.
Задачу будем решать с помощь iptables.

Вспоминаем путь пакета по таблицам и цепям - https://i.stack.imgur.com/MkqJb.gif

На ВМ udp-destination1 трафик будет клонирован и направлен в сторону промежуточной ВМ noc1 c помощью модуля TEE (таблица mangle, цепочка PREROUTING).
При этом все L3\4 source и destination поля udp пакета останутся без изменений, на noc1 придет такой же пакет как ранее пришел на udp-destination1.
Модуль TEE может отправлять трафик только на соседний адрес в рамках одного бродкаст домена.

Что бы отправить трафик куда-нибудь подальше, нужна промежуточная ВМ noc1.
ВМ noc1 принимает клонированный трафик и, с помощью модулей DNAT и SNAT (таблица nat, цепочки PREROUTING и POSTROUTING), меняет source и destination ip адреса.
В поле source будет стоять адрес самого noc1, в destination будет стоять ВМ udp-destination2
.

В итоге, схема решения будет такая:


Настройка udp-destination1

В настройки iptables (/etc/sysconfig/iptables в случае Centos) дописываем правило в таблицу mangle.

*mangle
:PREROUTING ACCEPT [0:0]
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
:POSTROUTING ACCEPT [0:0]
-A PREROUTING -i eth0 -p udp -m udp --sport 100 -s 10.200.0.10/32 -j TEE --gateway 10.200.0.30
COMMIT

Настройка noc1

В настройки iptables дописываем правила в таблицу nat.

*nat
:PREROUTING ACCEPT [0:0]
:INPUT ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
:POSTROUTING ACCEPT [0:0]
-A PREROUTING -p udp -s 10.200.0.10/32 --sport 100 -j DNAT --to-destination 87.250.250.247
-A POSTROUTING -p udp -s 10.200.0.10/32 --sport 100 -j SNAT --to-source 10.200.2.55:2000
COMMIT

Включаем форвардинг пакетов через ВМ.

sysctl net.ipv4.ip_forward=1

В настройки iptables дописываем правило в таблицу filter.

*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
...
-A FORWARD -p udp -d 87.250.250.247/32 -j ACCEPT 
...
COMMIT

Все, этого должно хватить.

topic/linux-clone-udp.txt · Last modified: 2021/08/12 08:35 by 127.0.0.1

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki