Я хочу перенаправить доступ на моем шлюзе (внутренний ip: 192.168.4.4) с внешнего порта 1965 на FTP-сервер внутри моей локальной сети (192.168.4.2)
Другими словами, кто-то, получающий доступ по FTP к моему шлюз: 1965 будет перенаправлен на 192.168.4.2:21
Раньше я делал это со старыми ядрами Linux, и это сработало.
Похоже, что с версии ядра 4.9 все изменилось, и я не могу обновить свой скрипт iptables.
IP-переадресация и nf conntracking включены:
net.ipv4.ip_forward = 1
net.netfilter.nf_conntrack_helper = 1
и загружены необходимые модули:
nf_nat_ftp 16384 0
nf_conntrack_ftp 20480 3 nf_nat_ftp
nf_nat 24576 5 xt_nat,nf_nat_redirect,nf_nat_ftp,nf_nat_masquerade_ipv4,nf_nat_ipv4
nf_conntrack 94208 9 nf_conntrack_ftp,nf_conntrack_ipv4,xt_helper,nf_nat_ftp,xt_CT,nf_nat_masquerade_ipv4,xt_conntrack,nf_nat_ipv4,nf_nat
iptable_raw 16384 1
iptable_nat 16384 1
nf_nat_ipv4 16384 1 iptable_nat
iptable_filter 16384 1
ip_tables 28672 3 iptable_filter,iptable_raw,iptable_nat
Я в основном изменил сырой которые не были нужны в ядрах 4.1 для маскировки FTP.
Я понял, что теперь нужно использовать CT helper.
Для удобства чтения я вырезал все правила ведения журнала и все, что не было связано с ftp (samba, ssh,…)
сырой
ПЕРЕДАЧА
[21:1052] -A PREROUTING -p tcp -m tcp --dport 21 -j CT --helper ftp
[20:1128] -A PREROUTING -p tcp -m tcp --dport 1965 -j CT --helper ftp
нац
ПЕРЕДАЧА
[20:1128] -A PREROUTING -i wan -p tcp -m tcp --dport 1965 -j DNAT --to-destination 192.168.4.2:21
РАЗМЕЩЕНИЕ
[0:0] -A POSTROUTING -s 192.168.0.0/16 -o wan -j MASQUERADE
[22:1248] -A POSTROUTING -d 192.168.4.2/32 -j SNAT --to-source 192.168.4.4
фильтр
ВВОД
[564393:501714526] -A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
[0:0] -A INPUT -m helper --helper ftp -j ACCEPT
[0:0] -A INPUT -p tcp -m tcp --dport 1965 -j ACCEPT
[0:0] -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
ВПЕРЕД
[0:0] -A FORWARD -p tcp -m tcp --sport 20 --dport 1965 -m state --state NEW,RELATED,ESTABLISHED -j ACCEPT
[20:1128] -A FORWARD -d 192.168.4.2/32 -i wan -p tcp -m tcp --dport 21 -j ACCEPT
[0:0] -A FORWARD -p tcp -m tcp --dport 21 -m state --state NEW,RELATED,ESTABLISHED -j ACCEPT
[0:0] -A FORWARD -p tcp -m tcp --sport 20 -m state --state NEW,RELATED,ESTABLISHED -j ACCEPT
Спасибо за чтение.