Score:0

ไม่สามารถเชื่อมต่อคอนเทนเนอร์กับบริดจ์กับอินเทอร์เน็ตโดยใช้เครือข่าย

ธง pm

ฉันมีเซิร์ฟเวอร์ที่ใช้ Ubuntu 20.04 LTS ที่เชื่อมต่อผ่านอินเทอร์เฟซอีเธอร์เน็ตแบบฟิสิคัลเข้ากับอินเทอร์เน็ต ผู้จัดหาของฉันกำหนด IP4 หลักแบบคงที่ให้ฉัน (ฉันจะใช้ A.A.A.A ที่นี่สำหรับ IP นี้) ดังนั้นไฟล์การกำหนดค่า systemd-networkd ของฉันจึงมีลักษณะเช่นนี้มาก่อน (ปิดการใช้งาน netplan เพื่อทำงานโดยตรงกับ systemd-networkd):

# /etc/systemd/network/20-enp7s0.network
[จับคู่]
ชื่อ=enp7s0

[เครือข่าย]
LinkLocalAddressing=ipv6
ที่อยู่=A.A.A.A/32
เกตเวย์=fe80::1
DNS=X.X.X.1
DNS=X.X.X.2

[เส้นทาง]
ปลายทาง=0.0.0.0/0
เกตเวย์=ปปปป
GatewayOnlink=จริง

ผู้ให้บริการของฉันเสนอให้เพิ่มที่อยู่ IP เพิ่มเติมให้กับเซิร์ฟเวอร์ของฉัน ซึ่งจะถูกส่งไปยังอินเทอร์เฟซเดียวกันกับ IP หลัก เมื่อเพิ่ม IP ที่สองนี้ในอินเทอร์เฟซของฉัน ฉันสามารถ ping ได้ เนื่องจากฉันใช้คอนเทนเนอร์ systemd-nspawn ฉันคิดว่าจะใช้ IP เพิ่มเติมนี้เพื่อจัดหาหนึ่งในคอนเทนเนอร์ของฉันด้วย IP4 แบบคงที่พิเศษ (จะใช้ B.B.B.B ที่นี่) การแมปรายการ DNS กับคอนเทนเนอร์บนเซิร์ฟเวอร์ของฉันโดยตรงจะเป็นการดีมาก ในขณะที่แอปพลิเคชันอื่นๆ บนเซิร์ฟเวอร์ยังคงใช้ที่อยู่ IP หลัก

ดังนั้นฉันจึงเริ่มทำตามคำแนะนำที่ดีจาก Arch wiki บน systemd-nspawn และ systemd-เครือข่าย. ฉันกำหนดค่าบริดจ์และย้ายที่อยู่ทั้งหมดจากอินเทอร์เฟซทางกายภาพไปที่บริดจ์:

/etc/systemd/network/br0.netdev

[เน็ตเดฟ]
ชื่อ=br0
ชนิด = สะพาน
MACAddress=xx:xx:xx:xx:xx:xx # เหมือนกับที่อยู่ของฉัน อินเตอร์เฟซ

/etc/systemd/network/20-br0.network

[จับคู่]
ชื่อ=br0

[เครือข่าย]
LinkLocalAddressing=ipv6
ที่อยู่=A.A.A.A/32
เกตเวย์=fe80::1
DNS=X.X.X.1
DNS=X.X.X.2

[เส้นทาง]
ปลายทาง=0.0.0.0/0
เกตเวย์=ปปปป
GatewayOnlink=จริง

/etc/systemd/network/20-enp7s0.network

[จับคู่]
ชื่อ=enp7s0

[เครือข่าย]
สะพาน=br0

เปิดใช้งานการส่งต่อ IP4:

$sysctl net.ipv4.ip_forward
net.ipv4.ip_forward = 1

ฉันเริ่มคอนเทนเนอร์ nspawn ด้วยการกำหนดค่าต่อไปนี้:

/etc/systemd/nspawn/mycontainer.nspawn

[เครือข่าย]
VirtualEthernet=ใช่
สะพาน=br0

ภายในคอนเทนเนอร์ (Debian 11 Bullseye) ฉันเปิดใช้งาน systemd-networkd และใช้การกำหนดค่าต่อไปนี้สำหรับเครือข่าย:

# /etc/systemd/network/80-container-host0.network
[จับคู่]
ชื่อ = โฮสต์ 0

[เครือข่าย]
ที่อยู่=B.B.B.B/32
DNS=X.X.X.1
DNS=X.X.X.2

[เส้นทาง]
ปลายทาง=0.0.0.0/0
เกตเวย์=ปปปป
GatewayOnlink=จริง

นี่คือผลลัพธ์ของการกำหนดค่านี้ บนโฮสต์:

$ ไอพี

2: enp7s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq master br0 สถานะกลุ่ม UP เริ่มต้น qlen 1000
    ลิงค์/อีเธอร์ xx:xx:xx:xx:xx:xx brd ff:ff:ff:ff:ff:ff
3: br0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP กลุ่มเริ่มต้น qlen 1000
    ลิงค์/อีเธอร์ xx:xx:xx:xx:xx:xx brd ff:ff:ff:ff:ff:ff
    inet A.A.A.A/32 ขอบเขตทั่วโลก br0
       valid_lft ตลอดไป reserved_lft ตลอดไป
6: vb-mycontainer@if2: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue master br0 สถานะ UP กลุ่มเริ่มต้น qlen 1000
    ลิงค์/อีเธอร์ yy:yy:yy:yy:yy:yy brd ff:ff:ff:ff:ff:ff ลิงค์-netnsid 0

$networkctl สถานะ -a
â 1: แท้จริง [...]                                  
2: enp7s0                                                            
             ลิงก์ไฟล์: /usr/lib/systemd/network/99-default.link       
          ไฟล์เครือข่าย: /etc/systemd/network/20-enp7s0.network         
                  ประเภท: อีเธอร์                                          
                 สถานะ: เป็นทาส (กำหนดค่า)
                  เส้นทาง: pci-0000:07:00.0                               
                ไดรเวอร์: igb                                            
                ผู้จำหน่าย: Intel Corporation                              
                 รุ่น: I210 การเชื่อมต่อเครือข่าย Gigabit                
            ที่อยู่ HW: xx:xx:xx:xx:xx:xx                              
                   MTU: 1500 (ต่ำสุด: 68, สูงสุด: 9216)                      
  ความยาวคิว (Tx/Rx): 8/8                                            
      การเจรจาอัตโนมัติ: ใช่                                            
                 ความเร็ว: 1Gbps                                          
                ดูเพล็กซ์: เต็ม                                           
                  ท่าเรือ: tp                                             
     นโยบายการเปิดใช้งาน: ขึ้น                                             
   จำเป็นสำหรับออนไลน์: ใช่                                            
3: br0                                                                 
               ลิงก์ไฟล์: /usr/lib/systemd/network/99-default.link       
            ไฟล์เครือข่าย: /etc/systemd/network/20-br0.network            
                    ประเภท: สะพาน                                         
                   สถานะ: กำหนดเส้นทางได้ (กำหนดค่า)
                  คนขับ: สะพาน                                         
              ที่อยู่ HW: xx:xx:xx:xx:xx:xx                              
                     MTU: 1500 (ต่ำสุด: 68, สูงสุด: 65535)                     
           ส่งต่อล่าช้า: 15 วินาที                                            
              สวัสดี เวลา: 2 วินาที                                             
                 อายุสูงสุด: 20s                                            
             อายุการใช้งาน: 5 นาที                                           
                ลำดับความสำคัญ: 32768                                          
                     STP: ไม่                                             
  เวอร์ชัน IGMP แบบหลายผู้รับ: 2                                              
    ความยาวคิว (Tx/Rx): 1/1                                            
                 ที่อยู่: A.A.A.A                                                  
                 เกตเวย์: Y.Y.Y.Y (Juniper Networks)                  
                          fe80::1 (เครือข่ายจูนิเปอร์)                     
                     DNS: X.X.X.1                                    
                          X.X.X.2                                                           
       นโยบายการเปิดใช้งาน: ขึ้น                                             
     จำเป็นสำหรับออนไลน์: ใช่                                            
6: vb-mycontainer                                              
             ลิงก์ไฟล์: /usr/lib/systemd/network/99-default.link
          ไฟล์เครือข่าย: n/a                                     
                  ประเภท: อีเธอร์                                   
                 สถานะ: เสื่อมโทรม (ไม่มีการจัดการ) 
                คนขับ: veth                                    
            ที่อยู่ HW: yy:yy:yy:yy:yy:yy                       
                   MTU: 1500 (ต่ำสุด: 68, สูงสุด: 65535)              
  ความยาวคิว (Tx/Rx): 1/1                                     
      การเจรจาอัตโนมัติ: ไม่                                      
                 ความเร็ว: 10Gbps                                  
                ดูเพล็กซ์: เต็ม                                    
                  ท่าเรือ: tp                                      
               ที่อยู่: fe80::xxxx:xxxx:xxxx:xxxx               
     นโยบายการเปิดใช้งาน: ขึ้น                                      
   จำเป็นสำหรับออนไลน์: ใช่

เส้นทาง $ ip
ค่าเริ่มต้นผ่าน Y.Y.Y.Y dev br0 proto static onlink

และภายในภาชนะของฉัน:

#ไอพีเอ
1: แท้จริง: [...]
2: host0@if6: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP กลุ่มเริ่มต้น qlen 1000
    ลิงค์/อีเธอร์ yy:yy:yy:yy:yy:yy brd ff:ff:ff:ff:ff:ff ลิงค์-netnsid 0
    inet B.B.B.B/32 ขอบเขต global host0
       valid_lft ตลอดไป reserved_lft ตลอดไป
    inet6 fe80::xxxx:xxxx:xxxx:xxxx/64 ขอบเขตการเชื่อมโยง 
       valid_lft ตลอดไป reserved_lft ตลอดไป

# สถานะ networkctl -a
1: แท้จริง [...]
2: โฮสต์ 0                                                                     
                     ลิงค์ไฟล์: n/a
                  ไฟล์เครือข่าย: /etc/systemd/network/80-container-host0.network
                          ประเภท: อีเธอร์
                         สถานะ: กำหนดเส้นทางได้ (กำหนดค่า)
                    ที่อยู่ HW: zz:zz:zz:zz:zz:zz
                           MTU: 1500 (ต่ำสุด: 68, สูงสุด: 65535)
                         QDisc: ไม่มีคิว
  โหมดการสร้างที่อยู่ IPv6: eui64
          ความยาวคิว (Tx/Rx): 1/1
              การเจรจาอัตโนมัติ: ไม่
                         ความเร็ว: 10Gbps
                        ดูเพล็กซ์: เต็ม
                          ท่าเรือ: tp
                       ที่อยู่: B.B.B.B
                                fe80::xxxx:xxxx:xxxx:xxxx
                       เกตเวย์: ปปปป
                           DNS: X.X.X.1
                                X.X.X.2
             DHCP6 ไคลเอ็นต์ DUID: DUID-EN/Vendor:0000ab117511f183668420370000

17 ก.พ. 19:45:26 mycontainer systemd-networkd[25]: host0: เชื่อมโยงขึ้น
17 ก.พ. 19:45:26 mycontainer systemd-networkd[25]: host0: รับผู้ให้บริการ
17 ก.พ. 19:45:27 mycontainer systemd-networkd[25]: host0: ได้รับ IPv6LL

# เส้นทางไอพี
ค่าเริ่มต้นผ่าน Y.Y.Y.Y dev host0 proto static onlink

เกี่ยวกับการตั้งค่าอื่น ๆ ทั้งหมด ฉันยึดติดกับค่าเริ่มต้นของระบบ แต่มันใช้งานไม่ได้ ฉันไม่สามารถ ping จากโฮสต์ไปยังแขก หรือจากแขกไปยังโฮสต์ อินเทอร์เน็ตหรือเกตเวย์ได้ ไม่สามารถเข้าถึงโฮสต์ปลายทางได้. ฉันพลาดอะไรที่นี่? ฉันไม่ได้เจาะลึกเรื่องเครือข่ายและใช้เวลากับเรื่องนี้มากแล้ว แต่ขอโทษแล้วสำหรับความผิดพลาดโง่ๆ ที่ฉันอาจทำลงไป ยินดีรับทุกเบาะแส ขอขอบคุณ!

แก้ไข:

ฉันดูตารางเพื่อนบ้าน:

เจ้าภาพ:

$ ip เพื่อนบ้าน
Y.Y.Y.Y dev br0 lladdr 84:c1:c1:76:ae:9b เข้าถึงได้ <- เกตเวย์
fe80::f80b:aff:fe80:d92 dev vb-mycontainer ล้มเหลว
fe80::6c91:a7ff:fe1f:19a2 dev br0 ล้มเหลว
fe80::1 dev br0 lladdr 84:c1:c1:76:ae:9b เราเตอร์ STALE
fe80::f80b:aff:fe80:d92 dev br0 lladdr fa:0b:0a:80:0d:92 STALE

แขก:

$ ip เพื่อนบ้าน
fe80::7e10:c9ff:fe21:ed87 dev host0 lladdr 7c:10:c9:21:ed:87 เราเตอร์ STALE
fe80::6c91:a7ff:fe1f:19a2 dev host0 ล้มเหลว
fe80::1 dev host0 lladdr 84:c1:c1:76:ae:9b เราเตอร์ STALE

fe80::6c91:a7ff:fe1f:19a2 คือที่อยู่ลิงก์โลแคลของอินเทอร์เฟซเสมือน vb-mycontainer บนโฮสต์ ดูเหมือนว่าจะมีปัญหาในการเชื่อมต่อระหว่างแขกและโฮสต์ที่ฉันคิดใช่ไหม

Score:0
ธง pm

ตกลง ฉันแก้ปัญหาด้วยตัวเอง ฉันไม่ได้เพิ่มเส้นทาง IP ในการกำหนดค่าบริดจ์บนโฮสต์ไปยังคอนเทนเนอร์ของฉัน:

# /etc/systemd/network/20-br0.network
[จับคู่]
ชื่อ=br0

[เครือข่าย]
LinkLocalAddressing=ipv6
ที่อยู่=A.A.A.A/32
เกตเวย์=fe80::1
DNS=X.X.X.1
DNS=X.X.X.2

[เส้นทาง]
ปลายทาง=0.0.0.0/0
เกตเวย์=ปปปป
GatewayOnlink=จริง

[เส้นทาง]
ปลายทาง=B.B.B.B/32

และในแขก เกตเวย์คือที่อยู่ IPv4 หลักของโฮสต์ (A.A.A.A/32):

# /etc/systemd/network/80-container-host0.network
[จับคู่]
ชื่อ = โฮสต์ 0

[เครือข่าย]
ที่อยู่=B.B.B.B/32
DNS=X.X.X.1
DNS=X.X.X.2

[เส้นทาง]
ปลายทาง=0.0.0.0/0
เกตเวย์=A.A.A.A
GatewayOnlink=จริง

จำเป็นต้องมีการแก้ไข systemd ที่เปิดใช้งานเพิ่มเติมเพื่อรับการแก้ไข DNS

โพสต์คำตอบ

คนส่วนใหญ่ไม่เข้าใจว่าการถามคำถามมากมายจะปลดล็อกการเรียนรู้และปรับปรุงความสัมพันธ์ระหว่างบุคคล ตัวอย่างเช่น ในการศึกษาของ Alison แม้ว่าผู้คนจะจำได้อย่างแม่นยำว่ามีคำถามกี่ข้อที่ถูกถามในการสนทนา แต่พวกเขาไม่เข้าใจความเชื่อมโยงระหว่างคำถามและความชอบ จากการศึกษาทั้ง 4 เรื่องที่ผู้เข้าร่วมมีส่วนร่วมในการสนทนาด้วยตนเองหรืออ่านบันทึกการสนทนาของผู้อื่น ผู้คนมักไม่ตระหนักว่าการถามคำถามจะมีอิทธิพลหรือมีอิทธิพลต่อระดับมิตรภาพระหว่างผู้สนทนา