لدي مشاكل في الوصول إلى واجهة خاصة المضيف (إب) من حاوية عامل الميناء. أنا متأكد إلى حد ما أنه يرتبط قواعد إيبتبلس بلدي (أو ربما التوجيه). عندما أضيف --net=host
العلم إلى docker run
، كل شيء يعمل كما هو متوقع. وبالمثل عندما أحدد أن سياسة الإدخال تتبع ليبرالية -P INPUT ACCEPT
، تعمل الأشياء أيضا كما أتوقع. ومع ذلك ، فهذه خيارات غير مرغوب فيها وغير آمنة أود تجنبها.
وبما أنها ليست محددة لخدماتي (دنس) لقد استبعدت ذلك من المشكلة ، منذ البحث عن ذلك في تركيبة مع عوائد عامل الميناء في منطقة مشكلة مختلفة (شعبية) ، إضافة الضوضاء إلى نتائج البحث.
أيضا ربط حاويات عامل الميناء ليس خيارا قابلا للتطبيق ، لأن بعض الحاويات تحتاج إلى تشغيل مع net صافي = الخيار المضيف ، ومنع ربط وأريد أن خلق حالة متسقة حيثما كان ذلك ممكنا.
لدي قواعد إيبتبلس التالية. مزيج من النواة, المحيط الرقمي وعامل الميناء أفترض.
-P INPUT DROP-P FORWARD ACCEPT-P OUTPUT ACCEPT-N DOCKER-A INPUT -i lo -j ACCEPT-A INPUT -i eth1 -j ACCEPT-A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT-A INPUT -p tcp -m tcp --dport 22 -j ACCEPT-A INPUT -p icmp -m icmp --icmp-type 0 -j ACCEPT-A INPUT -p icmp -m icmp --icmp-type 3 -j ACCEPT-A INPUT -p icmp -m icmp --icmp-type 11 -j ACCEPT-A FORWARD -o docker0 -j DOCKER-A FORWARD -o docker0 -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT-A FORWARD -i docker0 ! -o docker0 -j ACCEPT-A FORWARD -i docker0 -o docker0 -j ACCEPT
واجهات المضيف (ذات الصلة):
3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000 inet 10.129.112.210/16 brd 10.129.255.255 scope global eth1 valid_lft forever preferred_lft forever4: docker0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default inet 172.17.42.1/16 scope global docker0 valid_lft forever preferred_lft forever
وأنا تشغيل حاوية عامل الميناء:
$ docker run --rm -it --dns=10.129.112.210 debian:jessie # Specifying the DNS is so that the public DNS servers aren't used.
عند هذه النقطة أريد أن أكون قادرا على استخدام خدمة محلية ، ملزمة على 10.129.112.210:53. بحيث يلي يجب أن تسفر عن الرد:
$ ping google.com^C$ ping user.skydns.local^C
عند تشغيل نفس الأمر من مضيفي:
$ ping photo.skydns.localPING photo.skydns.local (10.129.112.206) 56(84) bytes of data.64 bytes from 10.129.112.206: icmp_seq=1 ttl=64 time=0.790 ms^C
قراري.أسيوط
$ cat /etc/resolv.confnameserver 10.129.112.210nameserver 127.0.0.1nameserver 8.8.8.8nameserver 8.8.4.4
النقطة هنا ليست الوصول إلى المضيفين العامين ، ولكن بدلا من ذلك الداخلية ، وذلك باستخدام خدمة دنس المحلية المتاحة على المضيف (عبر مثيل عامل ميناء آخر).
لتوضيح ذلك أكثر من ذلك (بلدي أسي مهارات التصميم الفني تتجاوز بلدي إيبتبلس فو، بحيث ينبغي أن أقول ما يكفي في هذه المرحلة):
______________________________________________| __________________________ Host || | Docker DNS container | || ``````````````````````|``` || | || ,----------,---( private n. interface ) || | | || | | ( public n. interface )---| | | || | | ( loopbck n. interface ) || | | || | | || | __|_______________________ || | | Docker service container | || | `````````````````````````` || | || | || [ Local host service using DNS. ] || ||______________________________________________| private (host) network interface: eth1 (10.129.0.0/16) Docker network interface: docker0 (172.17.0.0/16)
لقد بحثت وقراءة وتطبيق تكوينات إيبتبلس المثال مختلفة ، ولكن أنا أعرف القليل جدا من قواعد إيبتبلس أكثر "متقدمة" لفهم ما يحدث ، وبالتالي للحصول على النتيجة المرجوة.
إخراج iptables -t nat -nL
:
Chain PREROUTING (policy ACCEPT)target prot opt source destinationDOCKER all -- 0.0.0.0/0 0.0.0.0/0 ADDRTYPE match dst-type LOCALChain INPUT (policy ACCEPT)target prot opt source destinationChain OUTPUT (policy ACCEPT)target prot opt source destinationDOCKER all -- 0.0.0.0/0 !127.0.0.0/8 ADDRTYPE match dst-type LOCALChain POSTROUTING (policy ACCEPT)target prot opt source destinationMASQUERADE all -- 172.17.0.0/16 0.0.0.0/0Chain DOCKER (2 references)target prot opt source destination
إخراج cat /proc/sys/net/ipv4/ip_forward
:
1