วิธีรับ VirtualBox VMs เพื่อใช้ DNS ของโฮสต์


69

ฉันใช้VirtualBoxสำหรับ VMs ของฉัน การตั้งค่าเครือข่ายสำนักงานของฉันเป็นแบบไร้สายเช่นฉันเชื่อมต่อกับเครือข่าย WiFi ของ บริษัท ซึ่งมี DNS ในตัวเครื่องเพื่อแก้ไขชื่อท้องถิ่น (เช่นsomething.mycompany.comไปที่ 123.45.67.89) เมื่อฉันสร้าง VM ใหม่มันสามารถเชื่อมต่อกับอินเทอร์เน็ตภายนอกที่รับการเชื่อมต่อของโฮสต์ แต่ไม่สามารถแก้ไขชื่อท้องถิ่นโดยใช้ DNS ท้องถิ่น ดังนั้นฉันต้องเข้าไป/etc/hostsใน VM และสร้างรายการด้วยตนเองหลังจากที่ฉันแก้ไขชื่อบนโฮสต์ซึ่งน่ารำคาญ

มีวิธีใดที่จะให้ VirtualBox เชื่อมต่อแขกกับ DNS ของโฮสต์โดยอัตโนมัติเพื่อที่ฉันจะได้ไม่ต้องทำตามขั้นตอนด้วยตนเอง? โฮสต์ของฉันคือOSX Mountain Lionโดยทั่วไปแล้ว VM เป็นUbuntuแต่ฉันสงสัยว่าควรสำคัญ

คำตอบ:


99

ในการเปิดใช้งานโหมด DNS Proxy โดยใช้โปรแกรมแก้ไขของโฮสต์ให้รันคำสั่งต่อไปนี้:

VBoxManage modifiedvm " <ชื่อ VM> " --natdnshostresolver1 บน

เป็นผลให้ผู้เข้าพัก OS หน้า DNS จะถูกดักจับและได้รับการแก้ไขโดยใช้โฮสต์ DNS API มากกว่าที่มีผู้เข้าพัก OS เชื่อมต่อกับเซิร์ฟเวอร์ DNS --natdnsproxy1 onภายนอกเช่นเดียวกับ

คุณจะได้รับชื่อของ VM VBoxManage list runningvmsโดยใช้


9
สำหรับข้อมูลเพิ่มเติมสำหรับผู้อื่น: ต้องเรียกใช้จากโฮสต์ หากโฮสต์ของคุณคือ Windows ให้เปิดพร้อมรับคำสั่ง cd ไปที่ "C: \ Program Files \ Oracle \ VirtualBox" และเรียกใช้คำสั่งนั้น ดูเหมือนจะไม่มีตัวเลือกใด ๆ ใน VirtualBox Manager GUI (อย่างน้อยในทุกรุ่นตั้งแต่ 4 * ถึง 5.0.20) ซึ่งช่วยให้คุณตั้งค่านี้ด้วยวิธีอื่น
เกรแฮม

ฉันต้องการเพิ่มว่าคุณต้องเรียกใช้คำสั่งนี้ในฐานะผู้ดูแลระบบ ฉันลองจากคำสั่งของฉันและมันไม่ได้ผลสำหรับฉัน แต่จากนั้นฉันก็เรียกใช้คำสั่งในฐานะผู้ดูแลระบบและมันก็ใช้ได้ดีอย่างสมบูรณ์
SergeyOvchinnik

3
สิ่งนี้เคยทำงานให้ฉัน แต่ไม่ใช่กับ Ubuntu 16.04 และ virtualbox ล่าสุดสำหรับ Windows
Shanteva

ไม่ทำงานสำหรับฉันเช่นกัน :(
Pavel Durov

1
ยังคงใช้งานได้กับ MacOs High Sierra ในฐานะโฮสต์ VirtualBox 5.2.6 ที่ใช้ Windows 7 ใน VM
John Eikenberry

6

ใช่มันเป็นไปได้ มีหลายโหมดใน VirtualBox เพื่อสร้างเครือข่ายระหว่างแขกและโฮสต์ แทนที่จะใช้โหมด NAT (ซึ่งเป็นค่าเริ่มต้น) คุณสามารถใช้โหมดบริดจ์ที่เครื่องเกสต์ของคุณสามารถถือว่าเป็นเอนทิตีที่แยกต่างหากทั้งหมดในเครือข่ายของคุณ ดังนั้นไม่เพียง แต่โฮสต์ของคุณ แต่เครื่องอื่น ๆ (เช่นเซิร์ฟเวอร์ DNS ของคุณ) จะเห็นแขกของคุณเป็นเครื่องแยกต่างหาก

เมื่อคุณตั้งค่าโหมดบริดจ์เพียงไปที่แขกของ Ubuntu และรับมันเพื่อใช้ชื่อเซิร์ฟเวอร์หรือ ip ของ บริษัท DNS ของคุณ อ่านบทช่วยสอนนี้สำหรับข้อมูลเพิ่มเติม: http://prahladyeri.wordpress.com/2012/08/02/how-to-setup-a-virtual-lan-on-your-machine-using-oracle-virtualbox/


5

นี่เป็นผลการค้นหาอันดับต้น ๆ ของ Google ดังนั้นฉันจึงต้องการชี้แจงให้คนอื่นฟัง โซลูชันของโจไซยาทำงานให้ฉันด้วยการเพิ่มการเพิ่มบรรทัด:

hosts: files dns ไปยัง /etc/nsswitch.conf

ดังที่คนอื่น ๆ ชี้ให้เห็นว่าโซลูชันดั้งเดิมไม่สามารถทำงานได้เหนือ Ubuntu 16.04 VM แขกของฉันคือ Ubuntu 16.04

การอ้างอิงการสร้างเซิร์ฟเวอร์ Linux


2
ยินดีต้อนรับสู่ Super User! คุณสามารถเสนอว่าเป็นแก้ไขเพื่อตอบโยสิยาห์ซึ่งจะช่วยให้ผู้ที่ต้องการ :)
bertieb

ขอบคุณสำหรับทิป! ฉันพยายามเพิ่มความคิดเห็น แต่ไม่ได้รับอนุญาต ฉันส่งการแก้ไขแทน
pretzel11

1

ฉันยังสังเกตเห็นว่าการเชื่อมต่อ VPN ของฉันขัดขวางการเชื่อมต่ออินเทอร์เน็ตที่ไม่เหมาะสม

ขอบคุณการแลกเปลี่ยนครั้งนี้ทำให้ฉันสามารถแก้ไขได้โดยฝังลงใน Vagrantfile ของฉัน

config.vm.provider "virtualbox" do |vb|
  vb.cpus = 1
  vb.customize ["modifyvm", :id, "--natdnshostresolver1", "on"]
  vb.memory = "2048"
end

และหลีกเลี่ยงความเบื่อหน่ายที่ต้องปิดกล่องเพื่อแก้ไขผ่านทางบรรทัดคำสั่งจากนั้นทำซ้ำ

export PATH=$PATH:/c/Program\ Files/Oracle/VirtualBox/
VBoxManage list runningvms
export vbox=`VBoxManage list runningvms | cut -d '"' -f 2`
VBoxManage controlvm $vbox poweroff
VBoxManage modifyvm $vbox --natdnshostresolver1 on
vagrant.exe up --provision

0

สำหรับฉันมันช่วยเพิ่มอะแดปเตอร์อีกตัวด้วยอะแดปเตอร์สำหรับโฮสต์อย่างเดียวในขณะที่รักษาโหมดแรก (โหมด NAT) ไว้ที่นั่นเช่นกัน

[screenshot1]

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.