Я тут чуть-чуть заблудился в iptables.Я сделал перенаправление портов (чтобы сделать доступным из интернет сервер из локалки).
eth0 - внешний интерфейс шлюза.
Правило простое:
iptables -t nat -A PREROUTING -i eth0 -p tcp -d 1.2.3.4 --dport 443 -j DNAT --to 192.168.1.10:443
iptables -A FORWARD -i eth0 -o eth1 -d 192.168.1.10 -p tcp --dport 443 -j ACCEPT
Все работает норм.
На сервере 192.168.1.10 регистрируются внешние IP адреса посетителей.
Т.е. пакет проходит путь (1): INTERNET -> PREROUTING -> FORWARD -> POSTROUTING -> 192.168.1.10
Так как машина у меня тестовая, я решил проверить, что будет, если добавить правило:
iptables -A INPUT -i eth0 -p tcp --dport 443 -j ACCEPT
Насколько я везде читал, если есть правило INPUT, то пакет адресуется локальной машине, в данном случае самому шлюзу. Т.к. на самом шлюзе нет веб-сервера, то я ожидал, что на этом путь пакета прервется и я не смогу достучаться до сервера в LAN. НО!
на сервере в LAN (192.168.1.10) регистрируются все от имени внутреннего IP шлюза. Т.е. я по прежнему могу открыть веб-страницу, только уже "затерев" внешний IP посетителя. Т.е. в любом случае FORWARD идет.
Вопрос: какой путь проходит пакет в этом случае? Как после прохождения INPUT пакет попадает в FORWARD?
Так считать верно (2): INTERNET -> PREROUTING -> INPUT -> FORWARD -> POSTROUTING -> 192.168.1.10 или нет? Если нет, просто напишите эту цепочку, плиз, так, как должно.