Mon pare-feu bloque les connexions réseau du conteneur docker vers l'extérieur

pour moi c'est une configuration très standard, j'ai eu une machine ubuntu tournant docker et ufw comme mon pare-feu.

si mon pare-feu est activer les instances docker est incapable de se connecter à l'extérieur""

$ 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.

voici le journal d'ufw montrant les connexions bloquées depuis le conteneur 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

j'ai essayé d'ajouter une règle en utilisant l'ip.

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

Et n'ont pas de changement est encore bloquer.

Comment puis-je autoriser toutes les connexions du conteneur à l'extérieur avec une règle ufw?

9
demandé sur Mario César 2013-06-30 23:49:15

4 réponses

peut-être est-ce dû à la version actuelle, mais la réponse actuelle ne fonctionne pas sur mon système (Docker 0.7.2 avec base Ubuntu image).

la solution est expliquée ici dans la documentation officielle Docker .

pour les paresseux:

  • modifier /etc/default/ufw modifier DEFAULT_FORWARD_POLICY valeur "ACCEPT" ,
  • recharger avec [sudo] ufw reload .

cela assure ufw transmettre votre trafic vers le réseau ponté du Docker (selon ma compréhension actuelle de ces choses...).

7
répondu rchampourlier 2013-12-28 15:39:46

modifier /etc/ufw/before.rules comme suit:

dans la section *filtre , après le premier bloc des lignes requises, ajouter:

# 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

à la fin du fichier, après la ligne qui dit COMMIT , ajouter la section suivante:

*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

après avoir sauvegardé le fichier, redémarrez ufw avec sudo ufw disable && sudo ufw enable

16
répondu Franchu 2013-07-05 23:45:46

cela l'a fixé pour moi:

 ufw allow in on docker0
15
répondu Bryan Larsen 2015-01-13 21:08:10

Êtes-vous sûr que l'ufw autorise la connexion sur le port concerné ?

-2
répondu marshallino16 2013-06-30 20:57:20