2

У меня есть хост, на котором я переписываю saddr и daddr IP-пакетов, приходящих на него, это делается программой, использующей libnetfilter_queue. В основном это действует как прокси. Например, пакет приходит от 10.0.0.2, предназначенного для этого хоста (IP- хоста), мы переписываем этот пакет, чтобы прийти с IP- хоста, например. google.com. Я хочу использовать conntrack, чтобы пометить ответный пакет google.com → IP- хост, чтобы перейти в ту же очередь, которую нужно переписать, и отправить обратно на 10.0.0.2.

Я использую два правила PREROUTING:

iptables -tmangle -A PREROUTING -p tcp -s 10.0.0.2 -j CONNMARK --set-mark 0x10
iptables -tmangle -A PREROUTING -m connmark --mark 0x10 -j NFQUEUE

Но ответные пакеты не имеют этой метки, и я вижу только пакет 10.0.0.2 → IP- хост в выходных данных программы conntrack.

Вопрос в том, можно ли так поступить? Или я не понимаю, что делает CONNMARK? Мне кажется, он должен установить эту отметку на всем, что связано с соединением, включая ответные пакеты.

1 ответ1

0

Близко. CONNMARK ничего не делает с пакетами - он просто хранит отметку в таблице conntrack вместе с записью этого сеанса. Этот connmark предназначен для последующего использования с «--restore-mark», который необходим, чтобы пакет "наследовал" метку, назначенную его соединению.

Это может сломаться в зависимости от перезаписи пакета в пользовательском пространстве. метка восстановления может не связывать исходящий пакет с записью conntrack, которая была создана с использованием исходного src/dst.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .