Странная проблема с перенаправлением 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, а wirehark показывает, что многие пакеты доставляются на порт 5060.

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

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

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

8 ответов

Если вы хотите прозрачно перенаправлять пакеты, поступающие на порт 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
3
ответ дан 25 July 2018 в 23:03
  • 1
    Аналогично, для перенаправления всех выходных пакетов от 5060 до 56789: iptables -A POSTROUTING -p udp -m udp -dport 5060 -j DNAT -to-destination: 56789 Я прав? Я проверю ваши входящие правила и дам вам знать, работают ли они. Благодарю. – skypemesm 20 October 2010 в 03:39
  • 2
    @skypemesm Вам просто нужно поменять номера портов; Я обновил текст ответа исходящими правилами. – Riccardo Murri 20 October 2010 в 12:26
  • 3
    sudo iptables -L -t nat Цепочка PREROUTING (политика ACCEPT) target prot opt ​​source destination DNAT udp - где угодно где угодно udp dpt: sip to: 127.0.0.1: 56790 Цепочка POSTROUTING (policy ACCEPT) целевая защита opt source destination SNAT udp - где угодно udp spt: 56790 to :: 5060 Цепочка OUTPUT (политика ACCEPT) целевая цель opt opt ​​opt ​​У меня есть netcat прослушивание на порту udp 56790, когда я запускаю приложение sip. – skypemesm 20 October 2010 в 15:03
  • 4
    в то время как я вижу пакеты, входящие в мой IP-адрес: 5060, я не получаю никаких пакетов на 56790. Это та же проблема с этими правилами :( – skypemesm 20 October 2010 в 15:04
  • 5
    @skypesm Weird ... Я тестировал правила с netcat, и они работали для меня ... – Riccardo Murri 20 October 2010 в 15:09

Если вы хотите прозрачно перенаправлять пакеты, поступающие на порт 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
3
ответ дан 27 July 2018 в 02:22
  • 1
    Аналогично, для перенаправления всех выходных пакетов от 5060 до 56789: iptables -A POSTROUTING -p udp -m udp -dport 5060 -j DNAT -to-destination: 56789 Я прав? Я проверю ваши входящие правила и дам вам знать, работают ли они. Благодарю. – skypemesm 20 October 2010 в 03:39
  • 2
    @skypemesm Вам просто нужно поменять номера портов; Я обновил текст ответа исходящими правилами. – Riccardo Murri 20 October 2010 в 12:26
  • 3
    sudo iptables -L -t nat Цепочка PREROUTING (политика ACCEPT) target prot opt ​​source destination DNAT udp - где угодно где угодно udp dpt: sip to: 127.0.0.1: 56790 Цепочка POSTROUTING (policy ACCEPT) целевая защита opt source destination SNAT udp - где угодно udp spt: 56790 to :: 5060 Цепочка OUTPUT (политика ACCEPT) целевая цель opt opt ​​opt ​​У меня есть netcat прослушивание на порту udp 56790, когда я запускаю приложение sip. – skypemesm 20 October 2010 в 15:03
  • 4
    в то время как я вижу пакеты, входящие в мой IP-адрес: 5060, я не получаю никаких пакетов на 56790. Это та же проблема с этими правилами :( – skypemesm 20 October 2010 в 15:04
  • 5
    @skypesm Weird ... Я тестировал правила с netcat, и они работали для меня ... – Riccardo Murri 20 October 2010 в 15:09

Если вы хотите прозрачно перенаправить пакеты, поступающие на порт 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  
3
ответ дан 2 August 2018 в 04:24

Если вы хотите прозрачно перенаправить пакеты, поступающие на порт 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  
3
ответ дан 4 August 2018 в 20:56

Если вы хотите прозрачно перенаправить пакеты, поступающие на порт 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  
3
ответ дан 6 August 2018 в 04:29

Если вы хотите прозрачно перенаправить пакеты, поступающие на порт 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  
3
ответ дан 7 August 2018 в 22:37

Если вы хотите прозрачно перенаправить пакеты, поступающие на порт 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  
3
ответ дан 10 August 2018 в 10:44

Если вы хотите прозрачно перенаправить пакеты, поступающие на порт 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  
3
ответ дан 13 August 2018 в 17:17
  • 1
    Аналогично, для перенаправления всех выходных пакетов от 5060 до 56789: iptables -A POSTROUTING -p udp -m udp -dport 5060 -j DNAT -to-destination: 56789 Я прав? Я проверю ваши входящие правила и дам вам знать, работают ли они. Благодарю. – skypemesm 20 October 2010 в 03:39
  • 2
    @skypemesm Вам просто нужно поменять номера портов; Я обновил текст ответа исходящими правилами. – Riccardo Murri 20 October 2010 в 12:26
  • 3
    sudo iptables -L -t nat Цепочка PREROUTING (политика ACCEPT) target prot opt ​​source destination DNAT udp - где угодно где угодно udp dpt: sip to: 127.0.0.1: 56790 Цепочка POSTROUTING (policy ACCEPT) целевая защита opt source destination SNAT udp - где угодно udp spt: 56790 to :: 5060 Цепочка OUTPUT (политика ACCEPT) целевая цель opt opt ​​opt ​​У меня есть netcat прослушивание на порту udp 56790, когда я запускаю приложение sip. – skypemesm 20 October 2010 в 15:03
  • 4
    в то время как я вижу пакеты, входящие в мой IP-адрес: 5060, я не получаю никаких пакетов на 56790. Это та же проблема с этими правилами :( – skypemesm 20 October 2010 в 15:04
  • 5
    – Riccardo Murri 20 October 2010 в 15:09

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

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