Я пытаюсь перенаправить весь входящий трафик на 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, а wirehark показывает, что многие пакеты доставляются на порт 5060.
Почему это произошло? Есть идеи? Считаете ли вы, что это проблема с правилами iptables или что-то делать с сырыми сокетами?
[Это ubuntu 10.04 и iptables v1.4.4]
Если вы хотите прозрачно перенаправлять пакеты, поступающие на порт 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
Если вы хотите прозрачно перенаправлять пакеты, поступающие на порт 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
Если вы хотите прозрачно перенаправить пакеты, поступающие на порт 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
Если вы хотите прозрачно перенаправить пакеты, поступающие на порт 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
Если вы хотите прозрачно перенаправить пакеты, поступающие на порт 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
Если вы хотите прозрачно перенаправить пакеты, поступающие на порт 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
Если вы хотите прозрачно перенаправить пакеты, поступающие на порт 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
Если вы хотите прозрачно перенаправить пакеты, поступающие на порт 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