Intereting Posts
Как сделать vim apply / var / log / messages подсветкой синтаксиса для любого файла, называемого «сообщениями» или «сообщениями»? Почему «ln -s / directory» D: «Работает так, как есть? Судо доступ к учетной записи другого пользователя Автоматическое отключение после запуска Новый пользователь Linux, где я начинаю и как я могу управлять ОС Как заставить Vim вести себя как «tail -f»? Я хочу больше контроля над удалением дубликатов файлов Как использовать команду вставки для многих файлов, имена которых не являются цифрами? (вставьте столбцы из каждого файла в один файл) Сервер загрузки проблем из командной строки GRUB stunnel Нет сертификата, возвращенного неизвестным CA Как ограничить входящую и исходящую полосу пропускания на конкретный хост на CentOS и с него Установка марионетки на RHEL6 Виртуальный хост работает только тогда, когда SELinux настроен на разрешительный – почему? Может ли Xorg-Server и Wayland-Compositor запускаться одновременно в Linux? Команда для удаления первого N числа строк на входе

TPROXY для перенаправления UDP на произвольные порты

Я хочу перехватить весь трафик UDP, оставляя tap1. И, возможно, ответьте, например, на DNS-запросы. Для этого я написал код python, который прослушивал localhost, и использовал iptables с набором правил следующим образом:

 Цепочка PREROUTING (политика ACCEPT 2 пакета, 333 байта)
  pkts bytes target prot выбирает выход из источника   

     0 0 DIVERT udp - tap1 в любом месте в любом месте гнезда
     0 0 TPROXY udp - tap1 в любом месте где угодно TPROXY redirect 127.0.0.1:5001 mark 0x1 / 0x1


 Сеть DIVERT (1 ссылка)
  pkts bytes target prot выбирает выход из источника         
     0 0 MARK udp - любое любое место где угодно MARK set 0x1
     0 0 ACCEPT udp - любой в любом месте где угодно

Маршрутизация политики выполняется с помощью:

 ip правило добавить fwmark 1 поиск 100
 ip route добавить локальную 0.0.0.0/0 dev lo table 100

Эта настройка была адаптирована из документации ядра / сети / tproxy.txt. Это работает безупречно для сокета TCP, открытого с помощью опции IP_TRANSPARENT.

К сожалению, сокеты UDP, похоже, не способны обрабатывать соединения. Например, если я делаю ncat -u localhost 1234 сокет будет получать данные, но ничего не сможет отправить. Wireshark отобразит ровно три пакета для:

  1. входящий пакет ncat (на localhost: 1234)
  2. исходящий пакет моего программного обеспечения (до: 5001)
  3. порт ICMP недоступен (конечно)

Для работы с любыми портами я предполагаю, что невозможно настроить правильные (S) правила NAT.

Итак, какова необходимая настройка для работы с произвольными входящими портами?