Мой брандмауэр блокирует сетевые подключения из контейнера docker наружу

для меня это очень стандартная настройка, у меня была машина ubuntu под управлением docker и ufw в качестве брандмауэра.

Если мой брандмауэр включен, экземпляры docker не могут подключиться к outside

$ docker run -i -t ubuntu /bin/bash
WARNING:  Docker detected local DNS server on resolv.conf. Using default external servers: [8.8.8.8 8.8.4.4]
root@d300c5f17207:/# apt-get update
Err http://archive.ubuntu.com precise InRelease
0% [Connecting to archive.ubuntu.com]
W: Failed to fetch http://archive.ubuntu.com/ubuntu/dists/precise/InRelease  
W: Failed to fetch http://archive.ubuntu.com/ubuntu/dists/precise/Release.gpg  Temporary failure resolving 'archive.ubuntu.com'
W: Some index files failed to download. They have been ignored, or old ones used instead.

вот журнал ufw, показывающий заблокированные соединения из контейнера docker.

$ sudo tail /var/log/ufw.log
Jun 30 15:41:56 localhost kernel: [61609.503199] [UFW BLOCK] IN=testbr0 OUT=eth0 PHYSIN=veth8Rj8Nh MAC=fe:ff:ed:42:b0:01:0a:7c:42:7c:a6:72:08:00 SRC=172.16.42.2 DST=8.8.8.8 LEN=64 TOS=0x00 PREC=0x00 TTL=63 ID=14886 DF PROTO=UDP SPT=60192 DPT=53 LEN=44 
Jun 30 15:42:01 localhost kernel: [61614.500867] [UFW BLOCK] IN=testbr0 OUT=eth0 PHYSIN=veth8Rj8Nh MAC=fe:ff:ed:42:b0:01:0a:7c:42:7c:a6:72:08:00 SRC=172.16.42.2 DST=8.8.4.4 LEN=64 TOS=0x00 PREC=0x00 TTL=63 ID=16137 DF PROTO=UDP SPT=44812 DPT=53 LEN=44 
Jun 30 15:42:06 localhost kernel: [61619.498516] [UFW BLOCK] IN=testbr0 OUT=eth0 PHYSIN=veth8Rj8Nh MAC=fe:ff:ed:42:b0:01:0a:7c:42:7c:a6:72:08:00 SRC=172.16.42.2 DST=8.8.8.8 LEN=64 TOS=0x00 PREC=0x00 TTL=63 ID=14887 DF PROTO=UDP SPT=60192 DPT=53 LEN=44

Я попытался добавить правило, используя ip.

$ sudo ufw allow in from 172.16.42.2
$ sudo ufw allow out from 172.16.42.2

и никаких изменений по-прежнему заблокирован.

как я могу esily разрешить все соединения от контейнера к снаружи с правилом ufw?

4 ответов


возможно, это связано с текущей версией, но текущий ответ не работает в моей системе (Docker 0.7.2 с базовым изображением Ubuntu).

решение объясняется здесь, в официальной документации Docker.

для ленивых:

  • редактировать /etc/default/ufw изменить DEFAULT_FORWARD_POLICY ' s значение "ACCEPT",
  • перезагрузка с [sudo] ufw reload.

Это обеспечивает UFW вперед ваш трафик в Мостовую сеть Докера (по моему текущему пониманию этих вещей...).


редактировать /etc/ufw/before.rules следующим образом:

на *фильтр раздел, после первого блока необходимых строк, добавить:

# docker rules to enable external network access from the container
# forward traffic accross the bridge 
-A ufw-before-forward -i docker0 -j ACCEPT
-A ufw-before-forward -i testbr0 -j ACCEPT
-A ufw-before-forward -m state --state RELATED,ESTABLISHED -j ACCEPT

в конце файла, после в строку COMMIT добавить следующий раздел:

*nat
:POSTROUTING ACCEPT [0:0]
-A POSTROUTING -s 172.16.42.0/8 -o eth0 -j MASQUERADE
# don't delete the 'COMMIT' line or these rules won't be processed
COMMIT

после сохранения файла перезапустите ufw с помощью sudo ufw disable && sudo ufw enable


это исправило его для меня:

 ufw allow in on docker0

вы уверены, что ufw разрешает соединение на соответствующем порту ?