ดังที่ได้กล่าวไว้ในคำตอบก่อนหน้าวิธีแก้ปัญหานี้คือการเพิ่มอะแดปเตอร์เครือข่าย macvlan บนโฮสต์ อย่างไรก็ตามฉันรู้สึกว่าการเปลี่ยนเส้นทางไปยังอะแดปเตอร์ macvlan ด้วยตนเองนั้นค่อนข้างแฮ็คโดยเฉพาะอย่างยิ่งเนื่องจากฉันต้องการการสนับสนุน IPv6 และการตั้งค่าเส้นทางด้วยตนเองอาจกลายเป็นปัญหาเมื่อคำนำหน้าเปลี่ยนไป ดังนั้นนี่คือการกำหนดค่าของฉันซึ่งทำให้เคอร์เนลอยู่ในการควบคุมตารางเส้นทาง:
(การกำหนดค่าเฉพาะที่นี่คือเฉพาะ Debian และ Upstart แต่ขั้นตอนพื้นฐานควรทำงานกับ GNU / Linux ใด ๆ )
การสร้างอะแด็ปเตอร์ macvlan เมื่อบูต
ก่อนอื่นคุณต้องเลือกที่อยู่ MAC สำหรับอะแดปเตอร์ของคุณ คุณอาจจะสามารถใช้แบบสุ่มได้ แต่ฉันขอแนะนำให้คุณสร้างอะแดปเตอร์ macvlan ด้วยตนเองและใช้ MAC ด้วยวิธีนี้ MAC จำเป็นต้องปฏิบัติตามอนุสัญญาใด ๆ ที่อาจมี
แนะนำให้ตั้งค่า MAC แบบตายตัวเนื่องจากไม่เช่นนั้นจะไม่มีวิธีเช่นเซิร์ฟเวอร์ DHCP ที่จะจดจำเครื่องของคุณหลังจากรีบูตเครื่องและกำหนดที่อยู่ IP เดิมให้เหมือนเดิม
ดังนั้นสร้างอะแดปเตอร์และค้นหา MAC:
root@host:~# ip link add link eth0 macvlan0 type macvlan mode bridge
root@host:~# ip addr show dev macvlan0
#: macvlan0@eth0: mtu 1500 qdisc noqueue state UNKNOWN group default qlen 1
link/ether 12:34:56:78:90:ab brd ff:ff:ff:ff:ff:ff
...
เลขฐานสิบหกที่ไฮไลต์คือที่อยู่ MAC ของคุณ
ตอนนี้คุณสร้างสคริปต์เริ่มต้น - ซึ่งจะต้องเรียกใช้ก่อนที่เครือข่ายจะ initalized - เพื่อสร้างอะแดปเตอร์ macvlan แต่ละการเริ่มต้น คำสั่งที่ต้องทำคือ:
ip link add link eth0 address <MACADDRESS> macvlan0 type macvlan mode bridge
ตัวอย่างสคริปต์พุ่งพรวดเริ่มต้นเพื่อจุดประสงค์นี้คือ:
start on starting networking
script
ip link add link eth0 address <MACADDRESS> macvlan0 type macvlan mode bridge
end script
/etc/init/macvlan.conf
เพียงแค่ใส่นี้เช่น
การตั้งค่าการกำหนดค่าเครือข่าย
ใน/etc/network/interfaces
ตั้งค่าอะแดปเตอร์เครือข่ายทางกายภาพของคุณเป็นแบบแมนนวล (แต่ปล่อยให้มันอัตโนมัติ) และย้ายการกำหนดค่าก่อนหน้า (โดยทั่วไปคือ DHCP หรือที่อยู่ IP แบบคงที่) ไปยังอะแดปเตอร์ macvlan ของคุณ เช่น:
auto eth0
iface eth0 inet manual
auto macvlan0
iface macvlan0 inet dhcp
ปิดใช้งาน IPv6 สำหรับฟิสิคัลอะแด็ปเตอร์
สุดท้ายคุณไม่ต้องการฟิสิคัลอะแด็ปเตอร์เพื่อรับที่อยู่ IP สำหรับการตั้งค่า IPv4 อะแดปเตอร์เป็นแบบแมนนวลจะป้องกันไม่ให้ได้รับที่อยู่ อย่างไรก็ตามฉันไม่พบการกำหนดค่าที่หยุดเคอร์เนลไม่ให้รับ / กำหนดที่อยู่ IPv6 สำหรับ / ไปยังอะแดปเตอร์ เมื่อใดก็ตามมันยังเพิ่มเส้นทางสำหรับพวกเขาซึ่งอาจทำให้เกิดปัญหา ดังนั้นวิธีที่ดีที่สุดคือปิดการใช้งาน IPv6 สำหรับฟิสิคัลอแด็ปเตอร์ คุณสามารถทำได้โดยเพิ่มบรรทัด
net.ipv6.conf.eth0.disable_ipv6=1
ถึง/etc/sysctl.conf
โดยสร้างไฟล์/etc/sysctl.d/
ด้วยบรรทัดนี้หรือโดยการเพิ่ม
sysctl -w net.ipv6.conf.eth0.disable_ipv6=1
ในสคริปต์เริ่มต้นของคุณ
เมื่อคุณรีบูทเครื่องการสื่อสารจากโฮสต์ถึงแขกควรทำงานกับทั้ง IPv4 และ IPv6
โปรดระวังว่าหากคุณทำผิดพลาดในขณะที่ติดตั้งโฮสต์ของคุณอาจไม่สามารถเข้าถึงได้ผ่านเครือข่ายแม้หลังจากรีบูต ทำเช่นนี้ต่อเมื่อคุณมีการเข้าถึงเครื่องหรือการป้องกันอื่น ๆ อยู่ในสถานที่เพื่อให้คุณสามารถแก้ไขปัญหาที่อาจเกิดขึ้น