إيبتبلس القاعدة-تعيين بحيث حاوية عامل الميناء يمكن الوصول إلى خدمة على إب المضيف

لدي مشاكل في الوصول إلى واجهة خاصة المضيف (إب) من حاوية عامل الميناء. أنا متأكد إلى حد ما أنه يرتبط قواعد إيبتبلس بلدي (أو ربما التوجيه). عندما أضيف --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

حاوية التواصل مع المضيف باستخدام docker0 interface.To السماح بحركة المرور من إضافة الحاوية:

-A INPUT -i docker0 -j ACCEPT

لقد واجهت حالة مشابهة جدا ولكن مضيفا -A INPUT -i docker0 -j ACCEPT سيتم فتح جميع المداخل عبر واجهة إيث0 الخاصة بي لمضيف عامل الميناء إلى الحاويات التي ليست على الإطلاق ما قصدته.

وبما أنني لاحظت أن حاوية بلدي كان مجرد وصول محدود (ويقول فقط المنفذ 22) لاستضافة واجهة بدلا من إيقاف تماما من الشبكة المضيفة ، راجعت قواعد إيبتبلس بلدي وجدت قاعدة في سلسلة في السماح العام الذي ينبغي أن يكون مسؤولا عن هذا. القاعدة هي -A IN_public_allow -p tcp -m tcp --dport 22 -m conntrack --ctstate NEW -j ACCEPT. لذلك أضفت قواعد مماثلة للسماح للحاوية الخاصة بي بالوصول إلى منافذ المضيف الأخرى المطلوبة ، والتي أعتقد أنها قد تكون طريقة أكثر دقة لفتح الوصول إلى الشبكة المضيفة للحاويات.

أعتقد أن الحزم من الحاوية تأتي من واجهة عامل الميناء 0 ، وليس إيث1. محاولة ’ - إدخال-أنا عامل الميناء 0-ي قبول`

بالتأكيد ، شكرا للمساعدة حتى الآن: Chain PREROUTING (policy ACCEPT)target prot opt source desti - Pastebin.com (لم يكن مناسبا للتعليق…)- [تحرير] - > تحديث الرابط إلى باستبين التي لا تنتهي.

ربما لم أفهم مشكلتك بشكل صحيح ، لكنني لا أرى أي قاعدة للسماح باستعلامات نظام أسماء النطاقات على المضيف. أيضا, هو تمكين إيب_فوروارد?

مرحبا @لورنتيورويسكو. 'cat كات / بروك/سيس/نت/إيبف 4 / إيب_فوروارد → 1و-أ المدخلات-إيث1-ي قبول` يقبل جميع الاتصالات على واجهة _ خاص_. ما هي القواعد التي تفتقدها?

أعتقد أنك مسمر @لورنتيورويسكو. عندما أضيف الخط الخاص بك يبدو للعمل. لم أكن أحسب أنه كان شيئا تافها… هل يمكن أن يرجى إضافته كإجابة على سؤالي? أود مكافأة إجابتك.

يمكنك نشر إخراج ‘إيبتبلس-تي نات-لا’? هل فعلت أي تحليل الحزمة ، ويقول القيام بينغ من حاوية المصدر واستخدام تكبدومب لالتقاط الحزم على المضيف.