นี่คือสิ่งที่ DHCP มีไว้สำหรับ
คุณสามารถเลือกที่อยู่ MAC ได้อย่างอิสระใช่ไหม ตั้งค่าเซิร์ฟเวอร์ DHCP บนระบบในส่วนอีเทอร์เน็ตเดียวกัน (อาจเป็นเสมือน) เป็น VM และผูก IP ของคุณกับ MAC บางตัว
คุณจะต้องแจกจ่ายบางเส้นทางด้วย (ใช้ตัวเลือก DHCP 121 และ 249) เครื่องที่มีเซิร์ฟเวอร์ DHCP นั้นไม่จำเป็นต้องมี IP สาธารณะหรือ IP ในเครือข่ายเดียวกันกับไคลเอนต์ทั้งหมด การสื่อสารกับเซิร์ฟเวอร์ DHCP เกิดขึ้นเมื่อยังไม่มีที่อยู่ที่กำหนดค่าบนไคลเอนต์
หากคุณใช้ ISC DHCP คุณต้องทำสิ่งต่อไปนี้ ฉันถือว่าเครื่องโฮสต์ของคุณคือเราเตอร์และกล่อง NAT สำหรับ VM และจะโฮสต์เซิร์ฟเวอร์ DHCP ของคุณด้วย หากคุณต้องการทำอย่างอื่น จะต้องมีการปรับเปลี่ยนเล็กน้อย:
- กำหนดตัวเลือก 121 และ 249 ที่ด้านบนของ
dhcpd.conf
:
ตัวเลือก rfc3442-classless-static-routes รหัส 121 = อาร์เรย์ของจำนวนเต็ม 8;
ตัวเลือก ms-classless-static-routes รหัส 249 = อาร์เรย์ของจำนวนเต็ม 8;
อาจเป็นไปได้ว่าเวอร์ชันใหม่ไม่ต้องการสิ่งนี้ แต่ของฉันต้องการ
- สร้าง
เครือข่ายที่ใช้ร่วมกัน
บล็อก ใส่ซับเน็ตส่วนตัวแบบไดนามิกและที่อยู่สาธารณะของคุณเป็น "ซับเน็ต" ด้วยมาสก์ 32:
เราเตอร์ตัวเลือก 192.168.210.1;
ตัวเลือกโดเมนเนมเซิร์ฟเวอร์ 8.8.8.8, 8.8.4.4;
เครือข่ายที่ใช้ร่วมกัน libvirt-vm-net {
ซับเน็ต 192.168.210.0 เน็ตมาสก์ 255.255.255.0 {
ช่วง 192.168.210.2 192.168.210.254;
}
ซับเน็ต 192.0.2.1 เน็ตมาสก์ 255.255.255.255 {
ตัวเลือก rfc3442-classless-static-routes 32, 192,168,210,1, 0,0,0,0, 0, 192,168,210,1;
ตัวเลือก ms-classless-static-routes 32, 192,168,210,1, 0,0,0,0, 0, 192,168,210,1;
}
...
}
ฉันถือว่าเครือข่าย "ส่วนตัว" ของคุณสำหรับเครื่องที่อยู่เบื้องหลัง NAT จะเป็น 192.168.210.0/24 และโฮสต์จะเป็น .1 ในเครือข่ายนั้น (กำหนดให้กับบริดจ์) เส้นทางที่ไม่มีคลาสคงที่ (ตัวเลือก 121 และ 249) จะเพิ่มเส้นทางต่อไปนี้:
เส้นทาง ip เพิ่ม 192.168.210.1 dev eth0
เส้นทาง ip เพิ่มค่าเริ่มต้นผ่าน 192.168.210.1
ซึ่งจำเป็นสำหรับทุกอย่างในการทำงานแม้ว่าจะไม่มีเครือข่ายย่อยที่มี 192.0.2.1/32 และ 192.168.210.1 ให้ลองตั้งค่าดังกล่าวในสภาพแวดล้อมของห้องปฏิบัติการ หากคุณไม่แน่ใจว่าการกำหนดเส้นทางนี้ทำงานอย่างไร
- สร้างคำจำกัดความโฮสต์ด้วยที่อยู่ MAC ที่คุณต้องการซึ่งเชื่อมโยงกับที่อยู่ IP แบบคงที่ของคุณ:
โฮสต์เซิร์ฟเวอร์สาธารณะ-1 { ฮาร์ดแวร์อีเธอร์เน็ต 00:11:22:33:44:55; ที่อยู่คงที่ 192.0.2.1; }
...
- เพิ่มรายการเพื่อนบ้านแบบคงที่ ("ARP") สำหรับ MAC เหล่านั้นเข้าไป
/etc/ethers
(บนโฮสต์):
00:11:22:33:44:55 192.0.2.1
...
- เพิ่มเส้นทางคงที่ไปยังที่อยู่เหล่านั้นผ่านอินเทอร์เฟซบริดจ์ที่สอดคล้องกัน ฉันไม่รู้วิธีการทำสิ่งนี้โดยใช้การกำหนดค่าเครือข่ายมาตรฐานของ OS distro ของคุณ แต่วิธี Linux ทั่วไปจะเป็นดังนี้:
เส้นทาง ip เพิ่ม 192.0.2.1 dev br0
...
จากนั้นตรวจสอบให้แน่ใจว่าคุณกำหนด MAC เหล่านั้นให้กับ VM ที่สำคัญของคุณภายใน libvirt configs VM อื่นๆ (ซึ่ง MAC ไม่ได้ถูกผูกไว้) จะได้รับที่อยู่ของตนจากช่วงที่กำหนดค่าไว้ตามปกติ
ที่จริงฉันใช้งานและทดสอบการตั้งค่านี้ในการตั้งค่าที่ "ซับซ้อนกว่า" (DHCP, โฮสต์และเราเตอร์ทั้งหมดเป็นระบบที่แตกต่างกัน) ฉันไม่ได้ใช้ libvirt และโฮสต์ของฉันคือ PVE แม้แต่การบูท PXE ก็ทำงานได้อย่างสมบูรณ์แบบสำหรับทั้งเครื่องเครือข่ายย่อย "ปกติ" (เช่น 192.168.210.0 ในตัวอย่าง) และสำหรับเครื่อง "public IP" (เช่น 192.0.2.1)
ในการอนุญาตให้ VM ทั้งหมดเข้าถึงอินเทอร์เน็ต คุณต้องใช้ NAT สำหรับ IP ส่วนตัวและห้ามใช้เพื่อสาธารณะ ไม่มีปัญหา ใช้กฎเช่น iptables -t nat -A POSTROUTING -o <ฟิสิคัลอินเทอร์เฟซกับสาธารณะ-ip> -s <private-ip-range> -j MASQUERADE
. ด้วยวิธีนี้ ช่วงส่วนตัวของคุณจะถูกแปลไปยังที่อยู่สาธารณะของโฮสต์เอง แต่ที่อยู่สาธารณะจะไม่ได้รับการแปล แต่จะถูกส่งไปตามที่เป็นอยู่ อีกครั้ง ไม่มีปัญหาในการมีที่อยู่สาธารณะและส่วนตัวในส่วนเครือข่ายเดียวกันและเดินผ่าน NIC เสมือนเดียวกัน