Внезапно, сложная задача: промаркировать весь FTP трафик на локальной машине и зарулить его по отдельному каналу. Локальная машина - FTP клиент, коннектится ко множеству неизвестных и неподконтрольных FTP серверов. Промаркировать нужно и active и passive ftp (в последнем, помимо соединений на порты 21 и 20, устанавливается исходящее соединение на произвольный порт от 1024 до 65535)
Решил начать сначала с passive, подход в лоб не работает:
modprobe nf_conntrack_ftp
modprobe nf_nat_ftp
iptables -t mangle -I OUTPUT -p tcp --dport 21 -m state --state NEW,ESTABLISHED -j MARK --set-mark 22
iptables -t mangle -I OUTPUT -p tcp --dport 20 -m state --state ESTABLISHED -j MARK --set-mark 22
iptables -t mangle -A OUTPUT -p tcp -m helper --helper "ftp" -j MARK --set-mark 22
Не работает - т.к. маркируются только коннекты на 20 и 21 порт, коннекты пассивного FTP на порты 1024 и выше не маркируются.
Вроде простая и старая как мир задача, но уже кажется, решения у нее нет, helper не работает, а без него нереально, т.к. придется весь трафик с порта 1024 и выше маркировать, а это не годится. Как вообще локально шейпят FTP трафик? Подход то должен быть тот же.
Кто-нибудь имеет хоть какое-нибудь решение этой задачи? Очень прошу помочь.