🐳 Проброс портов на контейнеры Docker с помощью брандмауэров Linux |

🐳 Проброс портов на контейнеры Docker с помощью брандмауэров Linux

Мануал

В современном мире контейнеров Docker стал популярным решением для развертывания и управления приложениями.

Одним из распространенных вариантов использования является перенаправление сетевого трафика с определенного порта на хост-машине на порт внутри контейнера Docker.

Это может быть особенно полезно, когда необходимо открыть внешний доступ к службе, работающей внутри контейнера, или настроить обратный прокси-сервер для балансировки нагрузки.

В этой статье мы рассмотрим шаги, необходимые для перенаправления порта в контейнер Docker с помощью iptables, мощной и гибкой утилиты межсетевого экрана, доступной в большинстве дистрибутивов Linux.

Продолжение статьи по взаимодействию Docker и UFW

Шаг 1: Определите IP-адрес контейнера Docker

Выполните следующую команду, чтобы узнать IP-адрес контейнера Docker:

docker inspect -f ‘{{ .NetworkSettings.IPAddress }}’ <CONTAINER_NAME_OR_ID>

Замените имя или ID вашего контейнера.

Запишите IP-адрес, отображаемый в выходных данных.

Шаг 2: Перенаправление портов на контейнеры Docker

Использование Iptables

Чтобы перенаправить порт в контейнер Docker с помощью iptables, выполните следующие действия:

Добавьте правила iptables для переадресации: Теперь настройте правила iptables для перенаправления нужного порта в контейнер Docker.

Замените <HOST_PORT> номером порта на хост-машине, <CONTAINER_IP> IP-адресом вашего контейнера, а <CONTAINER_PORT> – номером порта внутри контейнера.

  sudo iptables --t nat --A PREROUTING --p tcp ---dport <HOST_PORT> --j DNAT ---to--destination <CONTAINER_IP>:<CONTAINER_PORT>
sudo iptables --t nat --A POSTROUTING --j MASQUERADE

Например, если необходимо перенаправить порт 8080 с хост-машины на порт 80 контейнера Docker, имеющего IP-адрес 172.21.0.7, то необходимо выполнить указанные команды:

sudo iptables -t nat -A PREROUTING -p tcp --dport 8080 -j DNAT --to-destination 172.21.0.7:80
sudo iptables -t nat -A POSTROUTING -j MASQUERADE

Сохраните правила iptables: Для того чтобы правила iptables сохранялись при перезагрузке, их можно сохранить с помощью команды iptables-save:

 sudo iptables-save > /etc/iptables/rules.v4

Обратите внимание, что путь к файлу правил может отличаться в зависимости от дистрибутива Linux.

Сделайте правила iptables постоянными: Если вы используете дистрибутив на базе Debian/Ubuntu, вы можете установить пакет iptables-persistent, чтобы правила сохранялись при перезагрузке:

 sudo apt-get install iptables-persistent

Использование firewall-cmd

Чтобы перенаправить порт в контейнер Docker с помощью firewall-cmd, входящего в состав утилиты firewalld в системах на базе RHEL/CentOS/Fedora, выполните следующие действия:

Добавьте правила firewall-cmd для переадресации: Теперь настройте правила firewall-cmd для перенаправления нужного порта в ваш Docker-контейнер.

Замените <HOST_PORT> номером порта на хост-машине, <CONTAINER_IP> – IP-адресом вашего контейнера, а <CONTAINER_PORT> – номером порта внутри контейнера.

Сначала включите маскарад в зоне active:

sudo firewall-cmd --zone=public --add-masquerade --permanent

Далее создайте правило переадресации портов:

  sudo firewall-cmd --zone=public --add-forward-port=port=<HOST_PORT>:proto=tcp:toaddr=<CONTAINER_IP>:toport=<CONTAINER_PORT> --permanent

Например, чтобы перенаправить порт 8080 на хост-машине на порт 80 контейнера Docker с IP-адресом 172.17.0.7, нужно выполнить следующую команду:

  sudo firewall-cmd --zone=public --add-forward-port=port=8080:proto=tcp:toaddr=172.17.0.7:toport=80 --permanent

Перезагрузите правила межсетевого экрана:

После добавления правил необходимо перезагрузить конфигурацию firewalld, чтобы изменения вступили в силу:

  sudo firewall-cmd --reload

Теперь проброс портов должен работать, и любой трафик, приходящий на <HOST_PORT> на хост-машине, будет перенаправляться на <CONTAINER_PORT> в контейнере Docker.

Заключение

В заключение следует отметить, что перенаправление порта на контейнер Docker с помощью iptables – это простой процесс, который включает в себя определение IP-адреса контейнера, добавление необходимых правил iptables и обеспечение сохранения правил при перезагрузке.

Выполнив описанные в этой статье действия, можно добиться того, что трафик, отправляемый на определенный порт хост-машины, будет перенаправлен на соответствующий порт контейнера.

Такой подход позволяет открывать сервисы, работающие внутри контейнеров, устанавливать обратные прокси-серверы, реализовывать балансировку нагрузки и т.д., повышая гибкость и эффективность контейнерной инфраструктуры.

см. также:

Пожалуйста, не спамьте и никого не оскорбляйте. Это поле для комментариев, а не спамбокс. Рекламные ссылки не индексируются!
Добавить комментарий

  1. Alex

    Ну сначала все заработало, а через какое-то время остался снаружи только ssh, который был настроен до установки iptables и наружу ping, да и тот только по ip…

    Ответить