2013-06-30 17 views
9

Per me questa è una configurazione molto standard, avevo una macchina Ubuntu che esegue la finestra mobile e ufw come il mio firewall.Il mio firewall sta bloccando le connessioni di rete dal contenitore docker all'esterno

Se il mio firewall è abilitare le istanze della finestra mobile è in grado di connettersi al di fuori

$ 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] 
[email protected]:/# 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. 

Ecco il registro ufw che mostra le connessioni bloccate dal contenitore finestra mobile.

$ 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 

Ho provato ad aggiungere una regola utilizzando l'ip.

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

E nessuna modifica è ancora bloccata.

Come è possibile consentire tutte le connessioni dal contenitore all'esterno con una regola ufw?

risposta

7

Forse questo è dovuto alla versione corrente, ma la risposta corrente non funziona sul mio sistema (Docker 0.7.2 con immagine di base Ubuntu).

La soluzione è spiegata here in the official Docker documentation.

Per i più pigri:

  • modifica /etc/default/ufw per cambiare il valore DEFAULT_FORWARD_POLICY s' a "ACCEPT",
  • ricarica con [sudo] ufw reload.

Ciò garantisce che il traffico venga inoltrato alla rete in parallelo del Docker (a causa della mia attuale comprensione di queste cose ...).

+0

Questa soluzione non è più sufficiente per le versioni più recenti della finestra mobile su ufw. – ctbrown

-2

Sei sicuro che autorizzi la connessione sulla porta in questione?

+0

non lo faccio ora quale porta sta bloccando, o come ufw sta bloccando. –

12

Modifica /etc/ufw/before.rules come segue:

Nella sezione * filtro, dopo il primo blocco di linee necessarie, aggiungere:

# 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 

Alla fine del file, dopo linea che dice COMMIT, aggiungi la seguente sezione:

*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 

Dopo aver salvato il file, riavviare ufw con sudo ufw disable && sudo ufw enable

+2

Grazie, Franchu, questo è stato. Sarebbe bello se tu spiegassi cosa significano tutte queste impostazioni (per me non è così ovvio). – Heri

+0

dopo COMMIT? quindi sono 2 COMMIT giusto? –

15

questa fissa per me:

ufw allow in on docker0 
+0

Questo ha funzionato anche per me, mentre penso che sia necessario anche il primo passo, come ha sottolineato Rchampourlier nella sua risposta: impostando il valore di ufw DEFAULT_FORWARD_POLICY su "ACCEPT". Aggiornamento – Heri

+0

: Spiacente, il mio commento sopra è sbagliato. Solo la soluzione Franchus ha funzionato alla fine, naturalmente insieme alla soluzione rchampourliers (ho provato prima un ambiente sbagliato) – Heri

+0

Ho fatto un permesso su 'docker_gwbridge', che era quello che le righe di blocco ufw in syslog segnalavano. Poiché volevo solo postgres, era: '' '$ sudo ufw consentire su docker_gwbridge a qualsiasi porta 5432''' ' '' Aggiunta regola Aggiunta regola (v6) '' ' – Blaskovicz

Problemi correlati