ฉันมีปัญหาเดียวกันที่แน่นอนและเห็นผ่านการแก้ไขดังนั้นฉันยินดีที่จะอธิบายปัญหาและวิธีแก้ปัญหาในรายละเอียด
โดยไม่เกี่ยวข้องกับ VPN
สิ่งสำคัญคือต้องเข้าใจการกำหนดค่าที่จำเป็นเพื่อให้ตรงกับความต้องการของคุณโดยไม่ต้องมี VPN นอกจากนี้ข้อมูลนี้อนุมานว่าไม่มีซอฟต์แวร์ไฟร์วอลล์รบกวนทั้งในโฮสต์และแขก
หากไม่มี VPN นี่จะแก้ไขได้โดยการสร้างอะแดปเตอร์เครือข่ายสองตัวในการกำหนดค่าของเครื่องเสมือน
อะแดปเตอร์แรกจะต้องตั้งค่าเป็นNAT
โหมดซึ่งทำให้แขกสามารถเข้าถึงทรัพยากรเครือข่าย (รวมถึงอินเทอร์เน็ต) ผ่านทางอินเทอร์เฟซเครือข่ายของโฮสต์
ต้องตั้งค่าอะแด็ปเตอร์ที่สองเป็นHost-only
ซึ่งเปิดใช้งานการสื่อสารแบบสองทิศทางระหว่างโฮสต์และแขก
อะแดปเตอร์นี้มีความซับซ้อนในการตั้งค่ามากกว่าครั้งแรกเล็กน้อยเนื่องจากต้องมีการแก้ไขการตั้งค่าเครือข่ายทั่วโลกของ VirtualBox เพื่อกำหนดค่าอะแดปเตอร์สำหรับโฮสต์เท่านั้น (หมายเหตุ: ต้องใช้สิทธิ์ผู้ดูแลระบบ)
ใน VirtualBox File -> Preferences -> Network
ไปที่ คลิกที่Host-only Networks
แท็บและคลิกที่+
ไอคอนเล็ก ๆ น้อย ๆเพื่อเพิ่มอะแดปเตอร์ใหม่ คุณจะได้รับแจ้งให้ยกระดับสิทธิ์ของ VirtualBox
บรรจุออกAdapter
แท็บมีผลบังคับใช้; ควรมีลักษณะเช่นนี้ (ละเว้นอะแดปเตอร์ที่มีข้อความกำกับ#2
ซึ่งใช้สำหรับบางสิ่งที่ไม่เกี่ยวข้อง):
ค่าบนDHCP
แท็บเซิร์ฟเวอร์เป็นตัวเลือก หากคุณต้องการกำหนดรหัสที่อยู่ IP สำหรับการ์ดเชื่อมต่อนี้ภายในการกำหนดค่าเครือข่ายของผู้เข้าชมค่าเหล่านี้ไม่จำเป็น หากในอีกทางหนึ่งคุณตั้งใจจะใช้ DHCP ค่าอาจมีลักษณะดังนี้:
ขั้นตอนสุดท้ายเกี่ยวกับการกำหนดค่า VirtualBox คือการย้อนกลับไปสู่การกำหนดค่าเครือข่ายของ VM และเพิ่มอะแดปเตอร์ตัวที่สองซึ่งอ้างอิงอแด็ปเตอร์เฉพาะโฮสต์ที่เราเพิ่งสร้างขึ้น:
ตอนนี้ในระบบปฏิบัติการ guest เครือข่ายจะต้องได้รับการกำหนดค่าให้ใช้ประโยชน์จากส่วนต่อประสานเครือข่ายทั้งสองนี้
บน Debian หรือ Ubuntu GNU / Linux การกำหนดค่านั้นง่ายพอ ๆ กับการปรับเปลี่ยน/etc/network/interfaces
ให้มีลักษณะดังนี้:
# This file describes the network interfaces available on your system
# and how to activate them. For more information, see interfaces(5).
# The loopback network interface
auto lo
iface lo inet loopback
# The primary network interface
auto eth0
iface eth0 inet dhcp
# The secondary network interface
auto eth1
iface eth1 inet static
address 192.168.56.101
netmask 255.255.255.0
(คนพิถีพิถันอาจต้องการใช้/etc/network/interfaces.d
ไดเรกทอรีแทน แต่นั่นก็เกินขอบเขตของคำอธิบายนี้)
รีสตาร์ทบริการระบบเครือข่ายของแขกหรืออย่างง่าย ๆ ให้รีสตาร์ท VM ของผู้เยี่ยมชมทั้งหมดและทุกอย่างควร "ใช้งานได้"
ณ จุดนี้เราควรสามารถ ping guest VM ที่192.168.56.101
และรับการตอบกลับ (หากไฟร์วอลล์ซอฟต์แวร์ไม่ได้ถูกรบกวน)
ในทำนองเดียวกันคนหนึ่งควรจะสามารถ ping 10.0.2.2
โฮสต์ที่ ที่อยู่ IP นี้ดูเหมือนว่า "ฮาร์ดโค้ด" ในการนำ NAT มาใช้ของ VirtualBox หรืออย่างน้อยก็ระบุผ่านคำสั่งการกำหนดค่าบางอย่างที่ไม่ชัดเจนและมีข้อมูลเล็กน้อยเกี่ยวกับที่มาของมัน แต่อนิจจา "ใช้งานได้"
ด้วยการกำหนดค่านี้เงื่อนไขทั้งสามที่สรุปไว้ในคำถามของคุณจะเป็นไปตาม
ป้อน: VPN
แต่นี่คือการถู การแนะนำ VPN ทำให้เกิดปัญหาการหยุดแสดง (ดีขึ้นอยู่กับ VPN เฉพาะและการกำหนดค่า)
VPN สมัยใหม่มีความสามารถในการแยก Tunnelingซึ่งเป็นสิ่งจำเป็นสำหรับการกำหนดค่า VirtualBox ดังกล่าวให้ทำงานตามข้อกำหนดสามข้อของคุณ สำหรับเหตุผลด้านความปลอดภัย (ดี) การแยกการขุดมักจะถูกปิดใช้งานและนี่เป็นปัญหาที่เกิดขึ้นในกรณีของคุณ (และของฉัน)
เมื่อคุณเชื่อมต่อกับ VPN ไคลเอนต์ VPN (ไคลเอนต์ Cisco AnyConnect Secure Mobility, 3.1.02026, ในกรณีของฉัน) ตรวจสอบตารางการเราต์ของโฮสต์คอมพิวเตอร์จดจำพวกเขาแล้วบันทึกค่าเหล่านั้นด้วยค่าที่มาจากส่วนกลาง - ตำแหน่งที่จัดการ (เช่นแม้จะมีสิทธิ์ของผู้ดูแลระบบในพื้นที่แล้วก็ตามก็ไม่สามารถแทนที่การตั้งค่าได้)
คุณสามารถตรวจสอบตารางเส้นทางสำหรับตัวคุณเองโดยเปิดcommand.exe
(บน Windows):
C:\>route print
ก่อนที่จะเชื่อมต่อกับ VPN ตารางการกำหนดเส้นทางจะมีรายการสำคัญที่ช่วยให้การกำหนดค่า VirtualBox นี้ทำงานได้อย่างถูกต้อง การเชื่อมต่อกับ VPN ทำให้รายการเหล่านี้ถูกลบซึ่งป้องกันการสื่อสารระหว่างโฮสต์และแขก
(มีรายการอื่น ๆ อีกมากมายที่ฉันได้ตัดไว้ที่นี่เนื่องจากไม่เกี่ยวข้องกับสาเหตุที่แท้จริงของพฤติกรรมนี้)
ก่อนเชื่อมต่อกับ VPN:
192.168.56.0 255.255.255.0 On-link 192.168.56.1 266
192.168.56.1 255.255.255.255 On-link 192.168.56.1 266
192.168.56.255 255.255.255.255 On-link 192.168.56.1 266
224.0.0.0 240.0.0.0 On-link 192.168.56.1 266
255.255.255.255 255.255.255.255 On-link 192.168.56.1 266
หลังจากเชื่อมต่อกับ VPN:
192.168.56.1 255.255.255.255 On-link 192.168.56.1 266
224.0.0.0 240.0.0.0 On-link 192.168.56.1 266
255.255.255.255 255.255.255.255 On-link 192.168.56.1 266
ไคลเอ็นต์ VPN ลบบรรทัดต่อไปนี้:
192.168.56.0 255.255.255.0 On-link 192.168.56.1 266
192.168.56.255 255.255.255.255 On-link 192.168.56.1 266
หากไม่มีสองรายการสุดท้ายโฮสต์และแขกไม่สามารถสื่อสารได้และนี่เป็นลักษณะการทำงานที่ตั้งใจไว้อย่างชัดเจนเมื่อการแยกอุโมงค์ถูกปิดใช้งานในการกำหนดค่า VPN
โดยปกติสองคำสั่งเหล่านี้จะกู้คืนเส้นทางเหล่านั้น:
C:\>route ADD 192.168.56.0 MASK 255.255.255.0 192.168.56.1 METRIC 266
C:\>route ADD 192.168.56.255 MASK 255.255.255.255 192.168.56.1 METRIC 266
แต่ไคลเอนต์ VPN ยังคงระมระวัง: มันสกัดกั้นความพยายามในการปรับเปลี่ยนตารางเส้นทาง ลูกค้าของฉันดูเหมือนอนุญาตรายการที่สอง แต่ไม่ใช่รายการแรก (และมันอาจปูทับทั้งสองเป็นระยะ ๆ ฉันไม่ได้ทดสอบเรื่องนั้น)
หาก VPN เฉพาะของคุณและการกำหนดค่าผู้ดูแลอนุญาตให้เปิดใช้งานการแยกการเจาะอุโมงค์โดยทั่วไปแล้วจะเปิดใช้งานเช่นนี้:
เมื่อตัดการเชื่อมต่อจาก VPN ไคลเอนต์ VPN ที่ทำงานได้ดีจะคืนค่าตารางการเราต์ที่มีอยู่ก่อนที่จะทำการเชื่อมต่อ ดูเหมือนว่าไคลเอนต์ VPN ของฉันจะทำสิ่งนี้ได้อย่างน่าเชื่อถือซึ่งเป็นประโยชน์เพราะนั่นหมายความว่าแขก VM ไม่จำเป็นต้องรีสตาร์ทเมื่อฉันเชื่อมต่อหรือยกเลิกการเชื่อมต่อกับ VPN ในกรณีเช่นนี้อะแดปเตอร์สำรองของ VM จะถูกรีเซ็ต แต่จะรับที่อยู่ IP ของตนอีกครั้งโดยอัตโนมัติและโปร่งใสคืนค่าการสื่อสารระหว่างโฮสต์และแขกเกือบจะทันที ยังดีกว่า NFS เชื่อมต่อระหว่างโฮสต์และแขก (ฉันใช้การเมาท์ CIFS) ยังคงเชื่อมต่อระหว่างการดำเนินการเชื่อมต่อ / ตัดการเชื่อมต่อ VPN
ในกรณีที่ไม่น่าเป็นไปได้ที่ VPN ของคุณอนุญาตให้ทำการแยกอุโมงค์อาจเป็นเรื่องง่ายในการเปิดใช้งานซึ่งในกรณีนี้ฉันชอบที่จะได้ยินจากคุณว่า "ทุกอย่างใช้งานได้" หรือไม่