בודק התנגשויות רשת של Docker

מזינים את טווחי ה-LAN וה-VPN, או מדביקים פלט של ip route, ורואים אילו רשתות של Docker יתנגשו בהם, ו-pool שעוקף אותם ל-daemon.json. שום דבר שתזינו או תדביקו לא יוצא מהעמוד.

טווח או כתובת בכל שורה, למשל 192.168.1.0/24 לנתב ביתי או 10.8.0.0/24 ל-VPN.
‏/24 נותן לכל רשת של Docker ‏254 כתובות ול-pool מקום ל-256 רשתות.
נשאר רק בדפדפן שלך. מה שהדבקתם או בחרתם נקרא רק בעמוד הזה. הוא לא נשלח לשרת, לא נשמר בקישור או באחסון הדפדפן, ולעולם לא נכלל ב-analytics.

הדביקו את הטקסט, או בחרו קובץ מהמחשב. עד 256 KiB.

0 מתוך 256 KiB

נשאר רק בדפדפן שלך. מה שהדבקתם או בחרתם נקרא רק בעמוד הזה. הוא לא נשלח לשרת, לא נשמר בקישור או באחסון הדפדפן, ולעולם לא נכלל ב-analytics.

הדביקו את הטקסט, או בחרו קובץ מהמחשב. עד 64 KiB.

0 מתוך 64 KiB

עדיין אין מה לבדוק. הזינו לפחות טווח אחד, או הדביקו פלט של ip route או של docker network inspect.

מה הכלי עושה

הכלי בודק אם הרשתות ש-Docker יוצר מתנגשות עם הרשתות שאתם משתמשים בהן: ה-LAN הביתי, ‏VPN, משרד או VPC בענן. כשהן מתנגשות, תעבורה לכתובות האלה נכנסת לרשת של קונטיינר במקום לצאת לרשת האמיתית, ושירותים מעבר ל-VPN או ב-LAN נעשים בלתי נגישים מהשרת או מהקונטיינרים.

איך זה עובד

  1. ‏Docker יוצר רשתות מה-pools המובנים שלו, ‏172.17.0.0/16 עד 172.31.0.0/16 ואחר כך רשתות ‎/20 מתוך 192.168.0.0/16, או מ-default-address-pools ב-daemon.json. הבדיקה מוצאת כל רשת Docker שעלולה לנחות על אחד הטווחים שלכם.
  2. מפלט של ip route נלקחות הרשתות של השרת עצמו וה-bridges של Docker ‏(docker0, ‏br-…); מ-docker network inspect, הרשתות הקיימות; מ-daemon.json, ה-pools וה-bip.
  3. אחר כך מוצעים pool אחד ו-bip מחוץ לכולם, שהמחולל כותב ל-daemon.json. הכול רץ בדפדפן עם @anaroq/linux; שום דבר לא נשלח, לא נשמר ולא נכנס לקישור, חוץ מה-pool המוצע כשפותחים את המחולל.

פקודות שאת הפלט שלהן מדביקים כאן

ip route
הנתיבים של השרת: ‏LAN, ‏VPN וה-bridges של Docker.
docker network inspect $(docker network ls -q)
כל רשתות Docker עם ה-subnet שלהן.
sudo cat /etc/docker/daemon.json
ה-pools וה-bip הנוכחיים, אם יש.

דוגמה

שרת ב-LAN ביתי 192.168.1.0/24 עם VPN על 10.8.0.0/24 והגדרות ברירת המחדל של Docker. ה-LAN נמצא בתוך ה-pool ‏192.168.0.0/16 של Docker:

ip-route.txt
default via 192.168.1.1 dev eth0 proto dhcp src 192.168.1.20 metric 100
10.8.0.0/24 dev tun0 proto kernel scope link src 10.8.0.6
172.17.0.0/16 dev docker0 proto kernel scope link src 172.17.0.1
192.168.1.0/24 dev eth0 proto kernel scope link src 192.168.1.20 metric 100
  • 192.168.1.0/24 ↔ 192.168.0.0/20 (192.168.0.0/16)

ההצעה ל-daemon.json:

daemon.json
{
  "default-address-pools": [
    {
      "base": "10.200.0.0/16",
      "size": 24
    }
  ],
  "bip": "10.199.0.1/24"
}

מגבלות

  • ‏IPv4 בלבד ל-pools. נתיבי IPv6 נקראים, אבל ה-pools של IPv6 ב-Docker לא נבדקים.
  • הבדיקה קוראת את מה שהודבק ברגע אחד: ‏VPN שמתחבר אחר כך, או רשת שנוצרת אחר כך, לא נכללים.
  • ‏Docker Desktop ו-rootless Docker לא נתמכים. רשתות overlay של Swarm ‏(default-addr-pool של docker swarm init) לא נבדקות.
  • הכלי לא משנה רשתות. העברת רשת קיימת פירושה מחיקה ויצירה מחדש.

כתיבת daemon.json מלא, עם רוטציית לוגים, במחולל daemon.json

מקורות

  1. dockerd: daemon configuration file
  2. Docker Engine: configure logging drivers
  3. Docker Engine: live restore
  4. Docker Engine: storage drivers
  5. Docker Engine: collect metrics with Prometheus
  6. Docker Engine: bridge network driver
  7. ip-route(8)
  8. RFC 1918: private address space

עודכן

הצעד הבא

מחולל daemon.json ל-Docker

כלי ציבורי חינמי של אנרוק, חברה שבונה תשתיות מחשוב. מה אנרוק בונה