У нас был мост докеров, содержащий несколько контейнеров докеров. Основным докером является сервер nginx, который действует как веб-хост и перенаправляет все данные в другие контейнеры.
Теперь требуется, чтобы соединения были ограничены только указанным списком IP-адресов. Для этого я отредактировал файл сервера nginx:
server {
allow 127.0.0.0/8;
deny all;
...
, который должен разрешить соединение 127.0.0.1.
Однако это не удается, и просмотр журнала access.log показывает, почему: Все строки начинаются с:
172.25.0.1 - - [10/Apr/2018:08:22:46 +0000] "GET
172.25.0.1
- сетевой шлюз моста докеров; таким образом, докер «забывает» внешние IP-адреса, и я больше не могу фильтровать их.
Как я могу фильтровать IP-адреса? Или переслать исходный IP-адрес докеру?
Это ожидаемо, и именно так работает сеть докеров. По умолчанию вы получаете что-то вроде виртуальной сети на вашем хосте докеров. Перенаправляемые извне соединения будут приходить в каждый контейнер через docker0 и NAT.
Чтобы преодолеть это, простой ответ - использовать сеть хостов в контейнере nginx.
т.е. - параметр сетевого хоста
для команды docker run
. См .: сеть хостов
Также прочтите документацию по сети докеров. Там это объясняется более подробно. https://docs.docker.com/network/