На «сервере A» у меня есть служба, работающая на порту 1445. «Сервер B» может подключаться к «серверу A» через порт 445 с помощью следующего правила:
iptables -t nat -A PREROUTING -d www.kunde.de -p tcp -m tcp --dport 445 -j REDIRECT --to-ports 1445
Это не работает для подключений, инициированных на «сервере A», т.е. локальных подключений. Что я могу сделать?
iptables -t nat -A OUTPUT -d www.kunde.de -p tcp -m tcp --dport 445 -j REDIRECT --to-ports 1445
Потому что пакеты, отправленные локально, проходят через ВЫХОД, а не через PREROUTING.
если вы используете lxc или другую технологию виртуализации, вы перенаправляете весь трафик с порта 445 на порт 1455 контейнера.
Локальный запрос на сервере A не пройдет PREROUTING
. Причина уже упоминалась ранее. Локальный трафик не получит доступа nat table
, но если вы раньше использовали DNAT, он работает только для внешнего трафика на сервер A, REDIRECT
работает только для переадресации порта, его нельзя использовать как DNAT
Вам лучше прочитать некоторые руководства и документы.
В любом случае краткое описание цепочек:
* “PREROUTING”: Packets will enter this chain before a routing decision is made.
* “INPUT”: Packet is going to be locally delivered. (N.B.: It does not have anything to do with processes having a socket open. Local delivery is controlled by the “local-delivery” routing table: `ip route show table local`.)
* “FORWARD”: All packets that have been routed and were not for local delivery will traverse this chain.
* “OUTPUT”: Packets sent from the machine itself will be visiting this chain.
* “POSTROUTING”: Routing decision has been made. Packets enter this chain just before handing them off to the hardware.
И посмотрите сюда: