Когда используешь сетевой фильтр
, вы должны понимать, как пакет проходит через ядро, т.е. цепи (аналог «дорожного контрольно-пропускного пункта»), которые он посещает, и какие виды обработка он попадает в каждую цепочку (обозначается термином Таблица). Процессинг и цепочки показаны на эта иллюстрация, каждая коробка имеет цепь в нижней части и тип обработки в верхней. (Вы должны сосредоточиться на сетевом уровне.) В зависимости от пути пакета задействовано только подмножество цепочек: пакеты, проходящие через вашу малину, будут проходить только через ПРЕДВАРИТЕЛЬНАЯ МАРШРУТИЗАЦИЯ
, ВПЕРЕД
и РАЗМЕЩЕНИЕ
.
Имея ВПЕРЕД
chain, не означает, что он маршрутизирует пакеты. Вы должны включить его с помощью команды sysctl -w net.ipv4.ip_forward=1
(не стойкий).
Кроме того, как показано на рисунке, нет нат
обработка в ВПЕРЕД
цепь, только калечить
и фильтр
, поэтому команда
iptables -t nat -d <список IP-адресов> -A FORWARD -j NFQUEUE --queue-num 1
это неверно.
Обработка пакетов для каждой таблицы/цепочки фактически управляется упорядоченным списком правил, таблицей, которую вы определяете с помощью iptables
команда. Каждое правило состоит из критериев соответствия и действия, которое зависит от типа таблицы (nfqueue
допускается только в фильтр
столы, маскарад
в нат
столы и др.)
Теперь, подойдя к nfqueue
. Мы используем такое действие, когда дальнейшая обработка некоторых пакетов должна производиться вне ядра программой, которую вы сами создаете (см. пример питона здесьнапример, в системах обнаружения вторжений.Пакеты помещаются в очередь (обозначается 16-битным номером), обрабатываются, а затем возвращаются в ядро, чтобы возобновить их поток в следующей таблице/цепочке. (Их также можно сбросить в пространстве пользователя).
В обычном сценарии вы обычно хотите отправлять в пространство пользователя только принятые пакеты (отфильтрованные пакеты игнорируются на уровне ядра).
Вы должны быть осторожны с вашими точными потребностями, которые еще не ясны. Я попытаюсь привести пример, чтобы объяснить, как это работает, используя ваш сценарий:
судо iptables-F
sudo iptables -t nat -F
sudo iptables -t nat -A POSTROUTING -o $eth -j MASQUERADE
sudo iptables -A FORWARD -i $eth -o $wlan -m state --state RELATED, ESTABLISHED -j NFQUEUE --queue-num 1
sudo iptables -A FORWARD -i $wlan -o $eth -j NFQUEUE --queue-num 1
Это означает, что пакеты, проходящие между $эт
и $wlan
будут поставлены в ту же очередь. Вы должны убедиться, что какая-то программа обрабатывает очередь №. 1 и готов к обработке пакетов.