2013-06-30 85 views
9

Đối với tôi đây là thiết lập rất chuẩn, tôi có một máy ubuntu chạy docker và ufw làm tường lửa của mình.Tường lửa của tôi đang chặn kết nối mạng từ vùng chứa docker sang bên ngoài

Nếu tường lửa của tôi là cho phép các trường hợp Docker là không thể kết nối với bên ngoài

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

Đây là nhật ký ufw cho thấy các kết nối bị chặn từ container 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 

Tôi đã thử thêm quy tắc bằng cách sử dụng ip.

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

Và không có thay đổi nào vẫn bị chặn.

Làm cách nào tôi có thể cho phép tất cả các kết nối từ thùng chứa ra bên ngoài bằng quy tắc ufw?

Trả lời

7

Có thể điều này là do phiên bản hiện tại, nhưng câu trả lời hiện tại không hoạt động trên hệ thống của tôi (Docker 0.7.2 với hình ảnh cơ sở Ubuntu).

Giải pháp được giải thích here in the official Docker documentation.

Đối với những người lười biếng:

  • chỉnh sửa /etc/default/ufw để thay đổi giá trị DEFAULT_FORWARD_POLICY 's để "ACCEPT",
  • tải lại với [sudo] ufw reload.

Điều này đảm bảo chuyển tiếp lưu lượng truy cập đến mạng cầu nối của Docker (như sự hiểu biết hiện tại của tôi về những điều này ...).

+0

Đây không còn là giải pháp đủ cho các phiên bản docker mới hơn trên ufw. – ctbrown

-2

Bạn có chắc chắn rằng ufw cho phép kết nối trên cổng có liên quan không?

+0

tôi làm không phải bây giờ những gì cổng được ngăn chặn, hoặc làm thế nào ufw chặn nó. –

12

Sửa /etc/ufw/before.rules như sau:

Trong * lọc phần, sau khi khối đầu tiên của dòng cần thiết, thêm:

# 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 

Vào cuối của tập tin, sau dòng nói rằng COMMIT, hãy thêm phần sau:

*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 

Sau khi lưu tệp, hãy khởi động lại ufw với sudo ufw disable && sudo ufw enable

+2

Cảm ơn, Franchu, điều này đã làm được. Nó sẽ là tốt đẹp nếu bạn sẽ giải thích những gì tất cả các thiết lập này cuối cùng có nghĩa là (đối với tôi nó không thực sự rõ ràng). – Heri

+0

sau COMMIT? vì vậy họ là 2 COMMIT phải không? –

15

này cố định nó cho tôi:

ufw allow in on docker0 
+0

Điều này cũng làm việc cho tôi, trong khi tôi nghĩ rằng bước đầu tiên cũng là cần thiết, như rchampourlier chỉ ra trong câu trả lời của mình: thiết lập giá trị của ufw DEFAULT_FORWARD_POLICY thành "ACCEPT". – Heri

+0

Cập nhật: Xin lỗi, bình luận ở trên của tôi là sai. Chỉ có giải pháp Franchus cuối cùng đã làm việc, tất nhiên cùng với giải pháp rchampourliers (tôi đã thử nghiệm đầu tiên i một môi trường sai) – Heri

+0

Tôi đã cho phép trên 'docker_gwbridge' đó là những gì các dòng khối ufw trong syslog đã được báo cáo. Vì tôi chỉ muốn postgres, đó là: '' '$ sudo ufw cho phép trên docker_gwbridge vào bất kỳ cổng nào 5432''' ' '' Quy tắc được thêm Quy tắc được thêm (v6) '' ' – Blaskovicz

Các vấn đề liên quan