Странная проблема с перенаправлением iptables

Я пытаюсь перенаправить весь входящий трафик с UDP-порта 5060 на порт 56790 и весь исходящий трафик с 5060 на порт 56789. Я использовал следующие правила iptables:

iptables -t nat -I PREROUTING -p udp ! -s localhost --dport 5060 -j REDIRECT --to-port 56790
iptables -t nat -I OUTPUT -p udp ! -s localhost --sport 5060 -j REDIRECT --to-port 56789

Я прослушиваю оба порта используя RAW SOCKETS после установки интерфейса в режим PROMISCUOUS с помощью ioctl.

Я вижу пакеты ТОЛЬКО на стороне 56789, т.е. ОТПРАВЛЯЮЩУЮ, и не вижу пакетов на 56790, в то время как wireshark показывает, что многие пакеты доставлены на порт 5060.

Почему это случилось? Есть идеи? Как вы думаете, это проблема с правилами iptables или с необработанными сокетами?

[Это Ubuntu 10.04 и iptables v1.4.4]

2
задан 19 October 2010 в 14:36

1 ответ

Если вы хотите прозрачно перенаправить пакеты, поступающие на порт 5060 / udp, на порт 56790 / udp, вам понадобятся два правила iptables для этого: одно для входящих пакетов и одно для сопоставления ответных пакетов (которые имеют исходный порт 56790) обратно. на удаленный порт назначения 5060:

sudo iptables -A PREROUTING -p udp -m udp --dport 5060 -j DNAT --to-destination :56790
sudo iptables -A POSTROUTING -p udp -m udp --sport 56790 -j SNAT --to-source :5060

И наоборот, для перенаправления исходящих пакетов (исходящих из порта 5060 и предназначенных для порта 5060) в порт 56789 вы меняете номера портов:

sudo iptables -A PREROUTING -p udp -m udp --dport 57689 -j DNAT --to-destination :5060
sudo iptables -A POSTROUTING -p udp -m udp --sport 5060 -j SNAT --to-source :56789
0
ответ дан 19 October 2010 в 14:36

Другие вопросы по тегам:

Похожие вопросы: