Порт вперед. Почему требуется iptables с правилом POSTROUTING?

Предположим, у меня есть два сервера:

-> Сервер A имеет IP XXX.XXX.XXX.XXX

-> Сервер B имеет IP YYY.YYY.YYY.YYY

Я хочу перенаправить трафик с сервера A (порт 80) на сервер B (порт 80).

Простой способ сделать это – поставить следующее правило с iptables на сервере A:

iptables -t nat -A PREROUTING -p tcp --dport port -j DNAT --to-destination server B:80 

Однако это простое правило не работает. Мы должны добавить следующее правило:

 iptables -t nat -A POSTROUTING -j MASQUERADE 

Почему так? Зачем нам нужно добавить правило POSTROUTING? После PREROUTING пакет должен автоматически перейти на сервер B?

* Я не эксперт в iptables или Linux Network Scheduling, но я постараюсь помочь!

Глядя на страницу руководства iptables user@host:~$ man 8 iptables мы можем видеть в nat ( Network Address Translation ) описание таблицы:

«Эта таблица рассматривается, когда встречается пакет, который создает новое соединение. Он состоит из трех встроенных модулей: PREROUTING (для изменения пакетов, как только они входят), OUTPUT (для изменения локально генерируемых пакетов до маршрутизации) и POSTROUTING (для изменения пакетов, поскольку они собираются выйти) . "

Это ПОСТРОЕНИЕ цепи 🙂

Объяснение MASQUERADE ниже, которое я получил от Документационного проекта Linux, и я также добавил, что ваша информация имеет смысл:

  • Я говорю машине B, что мой PPP или Ethernet, подключенный к Linux-порту A, является его шлюзом.
  • Когда пакет входит в ящик Linux A из B , он назначит пакет новому номеру порта TCP / IP и вставляет свой собственный IP-адрес внутри заголовка пакета, сохраняя оригиналы . Затем сервер MASQ отправит измененный пакет через интерфейс PPP / ETH в Интернет.
  • Когда пакет возвращается из Интернета в ящик Linux A , Linux проверяет, является ли номер порта одним из тех портов, которые были назначены выше. Если это так, сервер MASQ возьмет исходный порт и IP-адрес, вернет их обратно в заголовок возвращенного пакета и отправит пакет в B.
  • Хост, который отправил пакет, никогда не узнает разницу.