Я пытаюсь перенаправить один порт на локальный сервер через IPtables. На данный момент у меня действуют следующие правила:
iptables -t nat -A PREROUTING -p tcp -m tcp --dport 55555 -j DNAT --to-destination 10.188.44.125:3306
iptables -t nat -A POSTROUTING -j MASQUERADE
Когда у меня есть эти правила, мой процесс rsync ssh не работает. Я предполагаю, что здесь что-то противоречивое, но я не уверен, что именно. Какие-либо предложения? Спасибо!
Обновление: вот правила, которые у меня есть, чтобы разрешить соединение rsync через ssh. Моя политика ввода отключена. Другие политики настроены на принятие.
iptables -A INPUT -p tcp -m tcp --dport 22 -j ACCEPT
iptables -A INPUT -p tcp -m tcp --dport 80 -j ACCEPT
iptables -A INPUT -p tcp -m tcp --dport 443 -j ACCEPT
iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A INPUT -p icmp -j ACCEPT
iptables -A INPUT -s 127.0.0.1/32 -d 127.0.0.1/32 -i lo -j ACCEPT
Обновление 2
Вот результаты iptables-save для нат:
*nat
:PREROUTING ACCEPT [8:468]
:INPUT ACCEPT [7:408]
:OUTPUT ACCEPT [2:134]
:POSTROUTING ACCEPT [0:0]
[0:0] -A PREROUTING -p tcp -m tcp --dport 53306 -j DNAT --to-destination 10.183.42.125:3306
[2:134] -A POSTROUTING -j MASQUERADE
COMMIT
В ваших правилах DNAT и MASQUERADE отсутствует спецификация интерфейса. Без них они пытаются работать над все трафик в обоих направлениях, а это не то, что вам нужно.
Правило DNAT должно указывать входящий интерфейс (например, -i enp2s1
), по которому приходит соединение; обычно это интерфейс с выходом на WAN / Internet. И правило SNAT или MASQUERADE должно указывать исходящий интерфейс (например, -o enp2s1
) по которому отправляется трафик; опять же, это обычно интерфейс, обращенный к WAN / Internet.