Назад | Перейти на главную страницу

Docker bridge и nginx разрешены ip

У нас есть мост докеров, содержащий несколько контейнеров докеров. Основной докер - это сервер nginx, который действует как веб-хост и перенаправляет все данные в другие контейнеры.

Теперь требуется, чтобы соединения были ограничены только указанным списком IP-адресов. Для этого я отредактировал файл сервера nginx:

server {
        allow 127.0.0.0/8;
        deny all;
        ...

Это должно позволить подключиться через loopback 127.0.0.1.

Однако это не удается, и просмотр журнала access.log показывает, почему: Все строки начинаются с:

    172.25.0.1 - - [10/Apr/2018:08:22:46 +0000] "GET

172.25.0.1 это сетевой шлюз docker bridge; таким образом, докер «забывает» внешние IP-адреса, и я больше не могу фильтровать их.

Как я могу фильтровать по ips? Или перенаправить исходный IPS в докер?

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

Чтобы преодолеть это, простой ответ - использовать сеть хостов в контейнере nginx. т.е. --network host возможность docker run команда. Видеть: сеть хостов

Также прочтите документацию по сети докеров. Там это объясняется более подробно. https://docs.docker.com/network/