TL; DR:
- รีบูตเครื่อง VM เพื่อให้แน่ใจว่าสถานะ VPN (เชื่อมต่อหรือยกเลิกการเชื่อมต่อ) ของโฮสต์จะไม่เปลี่ยนแปลงในระหว่างนี้
- ให้โปรแกรม VirtualBox NAT สกัดกั้นการร้องขอ DNS และส่งต่อไปยังโปรแกรมแก้ไขของโฮสต์นั่นคือการใช้ DNS API ของโฮสต์เพื่อสอบถามข้อมูลและส่งกลับไปยังผู้เยี่ยมชม คุณตั้งค่านี้โดย:
VBoxManage modifyvm "VM name" --natdnshostresolver1 on
การใช้ VM ในโฮสต์ที่เชื่อมต่อกับ VPN สามารถนำไปสู่ปัญหา DNS ทุกครั้งที่มีการเปลี่ยนแปลงสถานะ VPN มีสองสถานการณ์:
- VM นั้นวางไข่ในโฮสต์ที่เชื่อมต่อกับ VPN และ ณ จุดหนึ่ง VPN จะถูกตัดการเชื่อมต่อ
- VM นั้นวางไข่ในโฮสต์ที่ไม่ได้เชื่อมต่อกับ VPN และ ณ จุดหนึ่งที่ VPN เชื่อมต่อ
1) เชื่อมต่อ VPN -> ยกเลิกการเชื่อมต่อ VPN
ในกรณีนี้ VM อาจได้รับที่อยู่ DNS ซึ่งเป็นส่วนหนึ่งของเครือข่ายผู้ให้บริการ VPN โดยปกติจะเป็นที่อยู่ IP ส่วนตัวภายใน cat /etc/resolv.conf
ตรวจสอบเนื้อหาของ ในกรณีของฉันฉันได้รับต่อไปนี้:
nameserver 10.8.8.1
<--- นี่คือภายในเครือข่ายผู้ให้บริการ VPN
nameserver 192.168.178.1
<--- นี่คือเกตเวย์บ้านของฉัน (เราเตอร์)
ตอนนี้ตัดการเชื่อมต่อโฮสต์จากการเชื่อมต่อ VPN:
- การกำหนดค่า DNS ใน VM ไม่เปลี่ยนแปลง -> VM จะยังคงส่งคำขอ DNS ไปยังปลายทาง IP 10.8.8.1 ซึ่งไม่สามารถเข้าถึงได้เนื่องจากโฮสต์ไม่ได้เชื่อมต่อกับ VPN อีก
รายละเอียดเพิ่มเติม:
- แพ็คเก็ตจะถูกส่งไปยัง def GW ที่กำหนดโดยเครือข่าย VirtualBox NAT แหล่งที่มา NATTed (พร้อมที่อยู่ IP ของโฮสต์) และจัดการในที่สุดโดยตารางเส้นทางของโฮสต์ที่จะส่งต่อไปยังเกตเวย์บ้านของคุณ
- แพ็กเก็ตจะถูกทิ้งเนื่องจากเกตเวย์บ้านของคุณไม่มีรายการ 10.8.8.1 ในด้าน LAN (ที่อยู่ส่วนตัว) และไม่สามารถส่งต่อไปยังฝั่ง WAN (ที่อยู่สาธารณะ) ได้เนื่องจากเป็นที่อยู่ส่วนตัว
2) การเชื่อมต่อ VPN -> เชื่อมต่อกับ VPN
ในกรณีนี้ VM จะไม่ได้รับที่อยู่ DNS ที่เป็นส่วนหนึ่งของผู้ให้บริการเครือข่าย VPN เนื่องจากโฮสต์ไม่ได้เชื่อมต่อกับ VPN เมื่อ VM เริ่มต้น cat /etc/resolv.conf
ตรวจสอบเนื้อหาของ ในกรณีของฉันฉันได้รับต่อไปนี้:
nameserver 192.168.178.1
<--- นี่คือเกตเวย์บ้านของฉัน (เราเตอร์)
ตอนนี้เชื่อมต่อโฮสต์กับการเชื่อมต่อ VPN:
- การกำหนดค่า DNS ใน VM ไม่เปลี่ยนแปลง -> VM จะยังคงส่งคำขอ DNS ไปยังปลายทาง IP 192.168.178.1 ซึ่งไม่สามารถเข้าถึงได้ (ping ไปยังใช้งานได้แม้ว่า) ขณะนี้คำขอ DNS จาก VM จะถูกจัดการโดย อินเทอร์เฟซ VPN Tap ที่จะส่งต่อแพ็กเก็ตไปยังเครือข่าย VPN โดยที่ไม่สามารถเข้าถึง 192.168.178.1 (ที่อยู่ IP ภายในเกตเวย์บ้านของคุณ)
รายละเอียดเพิ่มเติม:
- แพ็คเก็ตจะถูกส่งไปยัง def GW ที่กำหนดโดยเครือข่าย VirtualBox NAT ส่งไปยังอินเทอร์เฟซ VPN Tap ที่จะแก้ไขส่วนหัว IP แทนที่ที่อยู่ IP IP ของ VM ด้วยที่อยู่ IP ที่กำหนดให้กับโฮสต์โดยเครือข่าย VPN ในขณะที่ปลายทาง ที่อยู่ยังคงอยู่ที่อยู่ DNS 192.168.178.1
- แพ็กเก็ตนี้จะถูกห่อหุ้มในส่วนหัว IP ด้านนอกที่จะมีที่อยู่ IP ของโฮสต์เป็นแหล่งที่มา (btw นั้นจะถูกแทนที่ในภายหลังโดย NAT ต้นทางบนเกตเวย์ภายในบ้าน) และเซิร์ฟเวอร์ VPN เป็นที่อยู่ปลายทาง
- เมื่อแพ็กเก็ตมาถึงเครือข่าย VPN จะมีการถอดรหัส ที่อยู่ IP ปลายทางกลายเป็นที่อยู่ DNS อีกครั้ง 192.168.178.1 ที่เครือข่ายผู้ให้บริการ VPN ไม่มีวิธีเข้าถึง (ยกเว้นในกรณีที่เป็นกรณีพิเศษซึ่งเป็นที่อยู่ IP เดียวกันกับที่ผู้ให้บริการเครือข่าย VPN ใช้สำหรับเซิร์ฟเวอร์ DNS)