Мне нужно установить TCP-соединение, где клиент подделывает свой IP для всего исходящего трафика. Моей первой попыткой было добавить правило в цепочку POSTROUTING следующим образом:
iptables -t nat -A POSTROUTING -p tcp --dport 5555 -j SNAT --to-source 192.168.1.1
Это работает для пакета SYN, но не перехватывает и перезаписывает ACK, приходящий от клиента. Насколько я понимаю, это потому, что ACK проходит только через цепочку OUTPUT, никогда не нажимая на POSTROUTING. Моя следующая попытка состояла в том, чтобы использовать xtables-addons и сделать сырой SNAT следующим образом:
iptables -t raw -A OUTPUT -p tcp --dport 5555 -j RAWSNAT --to-source 192.168.1.1
iptables выдает ошибку в этой команде в зависимости от цели. Я полагаю, что это основано на цели, потому что работают -j DROP и -j ACCEPT. На странице man конкретно сказано, что RAWSNAT действителен в цепочке OUTPUT, и я проверил, что модуль xt_nat.ko загружен ....
У кого-нибудь есть понимание того, что происходит с RAWSNAT, или есть способ заставить ВСЕ исходящий трафик соединения проходить через цепочку POSTROUTING в таблице nat? Я не смог выяснить, могут ли MARK или CONNMARK помочь мне здесь, основываясь на документации, которую я прочитал.