iptables prerouting позволяет добавлять правила перенаправления с одного адреса и порта на другой адрес и порт средствами системного фильтра.
Пользователь при этом не замечает перенаправления и работает с теми адресом и портом, на которые обратился.
Часто используется для настройки системы безопасности на сервере и при маршрутизации запросов.
Пример настройки iptables PREROUTING
Выполним настройку переадресации трафика с внешнего IP адреса на внутренний.
Внешний выделенный IP адрес сервера 123.123.123.123/32.
На машине поднят LXC контейнер на приватном IP адресе, который не маршрутизируется в сети общего пользования.
Предположим, что требуется весь трафик приходящий на определенный порт машины извне переадресовывать в контейнер.
Цели можно добиться добавив правило в цепочку PREROUTING iptables.
iptables -t nat -I PREROUTING -i eth0 -p TCP -d 123.123.123.123/32 --dport 80 -j DNAT --to-destination 10.160.152.184:80
Здесь указываются приватный и публичный IP адрес, а также порты. Директивой --dport
задается внешний порт.
Порты могут быть произвольные, всё зависит от того какие порты исопльзуются сервисами для которых настраивается проксирование.
Помимо этих основных директив в качестве условий существуют сетевой интерфейс (eth0) и протокол(TCP).
Такое решение может требоваться если в контейнерах работают разные сервисы с трафик нужно переправлять с разных портов на публичном адресе.
Автоматическое добавление правил после перезагрузки
Чтобы изменения сохранились требуется создавать скрипт, который будет подгружать их после перезагрузки. В Debian / Ubuntu достаточно установить из репозитория пакет iptables-persistent, который будет выполнять эту задачу
apt-get install iptables-persistent
В процессе установки будет предложено сохранить все правила для IPv4. Ответить нужно положительно.
Проверить актуальные правила можно выполнив iptables-save
iptables-save
Читайте подробнее про LXC, а также про настройку iptables firewall.