VirtualBox對(duì)虛擬機(jī)支持幾種不同的網(wǎng)絡(luò)方式,其中一種是NAT網(wǎng)絡(luò)。當(dāng)虛擬機(jī)啟用NAT后,VirtualBox會(huì)自動(dòng)在虛擬機(jī)和主機(jī)之間進(jìn)行網(wǎng)絡(luò)翻譯,因此你不必在虛擬機(jī)和主機(jī)之間配置任何東西。這也意味著NAT中的虛擬機(jī)對(duì)于外部網(wǎng)絡(luò)以及主機(jī)本身是不可見的。這會(huì)在你想要從主機(jī)訪問虛擬機(jī)時(shí)會(huì)產(chǎn)生問題(比如SSH)。
如果你想從VirtualBox的NAT環(huán)境的虛擬機(jī),你可以在GUI或者命令行下啟用VirtualBox NAT的端口轉(zhuǎn)發(fā)。本篇教程將會(huì)演示如何通過啟用22端口轉(zhuǎn)發(fā)而從主機(jī)SSH連接到NAT環(huán)境的客戶機(jī)。如果你先想要從HTTP訪問NAT的客戶機(jī),用80端口代替22端口即可。
通過GUI配置VirtualBox端口轉(zhuǎn)發(fā)
在VirtualBox中選擇你想要訪問的虛擬機(jī),打開虛擬機(jī)的“設(shè)置”。點(diǎn)擊左側(cè)的“網(wǎng)絡(luò)”菜單,點(diǎn)擊網(wǎng)絡(luò)適配選項(xiàng)的“高級(jí)”。
點(diǎn)擊“端口轉(zhuǎn)發(fā)”按鈕
你會(huì)看到一個(gè)配置端口轉(zhuǎn)發(fā)規(guī)則的窗口。點(diǎn)擊右上角的“添加”圖標(biāo)。
就會(huì)看到像下面那樣的轉(zhuǎn)發(fā)規(guī)則。
Name: SSH (可以是任意唯一名)
Protocol: TCP
Host IP: 127.0.0.1
Host Port: 2222 (任何大于1024未使用的端口)
Guest IP: 虛擬機(jī)IP
Guest Port: 22 (SSH 端口)
端口轉(zhuǎn)發(fā)的規(guī)則會(huì)自動(dòng)在你啟動(dòng)虛擬機(jī)的時(shí)候啟用。為了驗(yàn)證??梢栽谀銌⒂锰摂M機(jī)后檢查端口2222是否被VirtualBox開啟了。
$ sudo netstat -nap | grep 2222
現(xiàn)在端口轉(zhuǎn)發(fā)可以使用了,你可以用下面的命令SSH到虛擬機(jī)。
$ ssh -p 2222 login>@127.0.0.1
發(fā)送到127.0.0.1:2222的登錄請求會(huì)自動(dòng)被VirtualBox翻譯成10.0.2.15:22,這可以讓你SSH到虛擬機(jī)中。
通過命令行配置VirtualBox端口轉(zhuǎn)發(fā)
VirtualBox有一個(gè)稱為VBoxManage的命令行管理工具。使用命令行工具,你也可以為你的虛擬機(jī)設(shè)置端口轉(zhuǎn)發(fā)。
下面的命令會(huì)為IP地址為10.0.2.15的虛擬機(jī)設(shè)置一個(gè)名字為"centos7"的端口轉(zhuǎn)發(fā)規(guī)則,SSH的端口號(hào)為22,映射到本地主機(jī)的端口為2222。規(guī)則的名字(本例中是SSH)必須是唯一的。
$ VBoxManage modifyvm "centos7" --natpf1 "SSH,tcp,127.0.0.1,2222,10.0.2.15,22"
規(guī)則創(chuàng)建之后,你可以用下面的命令來驗(yàn)證。
$ VBoxManage showvminfo "centos7" | grep NIC