لقد قمت للتو بتثبيت أحدث إصدار من docker-ce على سينتوس ، ولكن أنا لا يمكن الوصول إلى المنافذ المنشورة من خادم مجاور و لا يمكن الوصول إلى الخارج من الحاوية نفسها.
تشغيل الفانيليا عادي سينتوس 8 مع نيتوركماناجر و فيريولد تمكين. منطقة جدار الحماية الافتراضية هي public.
الإصدارات:
docker-ce 19.03.3 (رم عامل الميناء الرسمي)
containerd.io 1.2.6 (رم عامل الميناء الرسمي ل سينت أو إس 7-غير متوفر ل سينت أو إس 8 بعد)
بعد أن أمضى بضعة أيام تبحث في سجلات وتكوينات للمكونات المعنية ، وكنت على وشك رمي في منشفة والعودة إلى فيدورا 30 ، حيث يبدو أن هذا العمل مباشرة من خارج منطقة الجزاء.
مع التركيز على الجدران النارية ، أدركت أن تعطيل firewalld يبدو أن تفعل خدعة ، ولكن أنا أفضل عدم القيام بذلك. أثناء فحص قواعد الشبكة باستخدام iptables، أدركت أن التحول إلى nftables يعني ذلك iptables هو الآن طبقة التجريد الذي يظهر سوى جزء صغير من nftables القواعد. وهذا يعني معظم-إن لم يكن كل-من firewalld سيتم تطبيق التكوين خارج نطاق iptables.
اعتدت أن أكون قادرا على العثور على الحقيقة كاملة في iptables، لذلك هذا سوف يستغرق بعض التعود.
قصة طويلة قصيرة-لكي ينجح هذا ، كان علي تمكين التنكر. بدا الأمر كما يلي dockerd فعلت هذا بالفعل من خلال iptables، ولكن يبدو أن هذا يحتاج إلى تمكين خصيصا لمنطقة جدار الحماية ل iptables يتنكر للعمل:
# Masquerading allows for docker ingress and egress (this is the juicy bit)firewall-cmd --zone=public --add-masquerade --permanent# Specifically allow incoming traffic on port 80/443 (nothing new here)firewall-cmd --zone=public --add-port=80/tcpfirewall-cmd --zone=public --add-port=443/tcp# Reload firewall to apply permanent rulesfirewall-cmd --reload
إعادة التشغيل أو إعادة التشغيل dockerd، ويجب أن يعمل كل من الدخول والخروج.
ما هو مفقود من الإجابات من قبل هو حقيقة أنك تحتاج أولا إلى إضافة واجهة عامل الإرساء إلى المنطقة التي تقوم بتكوينها ، على سبيل المثال عام (أو إضافته إلى المنطقة "الموثوقة" التي تم اقتراحها هنا ولكن أشك في أن من الحكمة ، من منظور أمني). لأنه افتراضيا لم يتم تعيينه إلى منطقة. تذكر أيضا لإعادة تحميل الخفي عامل الميناء عند الانتهاء.
# Check what interface docker is using, e.g. 'docker0'ip link show# Check available firewalld zones, e.g. 'public'sudo firewall-cmd --get-active-zones# Check what zone the docker interface it bound to, most likely 'no zone' yetsudo firewall-cmd --get-zone-of-interface=docker0# So add the 'docker0' interface to the 'public' zone. Changes will be visible only after firewalld reloadsudo nmcli connection modify docker0 connection.zone public# Masquerading allows for docker ingress and egress (this is the juicy bit)sudo firewall-cmd --zone=public --add-masquerade --permanent# Optional open required incomming ports (wasn't required in my tests)# sudo firewall-cmd --zone=public --add-port=443/tcp# Reload firewalldsudo firewall-cmd --reload# Reload dockerdsudo systemctl restart docker# Test ping and DNS works:docker run busybox ping -c 1 172.16.0.1docker run busybox cat /etc/resolv.confdocker run busybox ping -c 1 yourhost.local
# 6. Block all other IPs. This rule has lowest precedence, so you can add allowed IP rules later.firewall-cmd --permanent \ --direct \ --add-rule ipv4 filter DOCKER-USER 10 \ -j REJECT \ -m comment \ --comment 'reject all other traffic to DOCKER-USER'
لقد غيرت متغير فايروالباكند إلى إيبتبلس مرة أخرى وأنه يعمل بالنسبة لي.
مع هذا التحديث ، النظام الفرعي تصفية نفتابلز هو الخلفية جدار الحماية الافتراضية للبرنامج الخفي فيريوال. لتغيير الخلفية ، استخدم الخيار فيريوال في / الخ / فيريوال.ملف أسيوط.
ليس لدي الكثير من المعلومات حول هذا التغيير في السلوك. بعض قواعد إيبتبلس التي يحاول دوكر استخدامها لا تعمل وفقا لسجلات سينتوس 8:
تحذير: فشل الأمر:'/البيرة/سبين / إيبتبلس-10-د إلى الأمام-أنا دوكر 0-س دوكر 0-ي إسقاط ' فشل: إيبتبلس: قاعدة سيئة (هل توجد قاعدة مطابقة في تلك السلسلة?).