ฉันมีเซิร์ฟเวอร์ที่ใช้ 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 บนโฮสต์ ดูเหมือนว่าจะมีปัญหาในการเชื่อมต่อระหว่างแขกและโฮสต์ที่ฉันคิดใช่ไหม