最近使用 VirtualBox 安裝 CentOS 7 虛擬集羣環境,爲實現主機網絡訪問虛擬機、虛擬機與虛擬機之間網絡互訪,VirtualBox 默認的 NAT 網絡鏈接方式是確定不能知足了,之前經常使用的橋接網絡方式此次也不行不通了,緣由是我在公司的網絡環境下搭建,我寫了個腳本把我主機網段的IP都跑了一遍,發現剩餘的可用IP都是被限制了的,我只能研究 Host-only Adapter/主機適配器 模式來解決,借鑑不少相關的博文,寫得亂七八糟的,害我走了很多彎路,折騰了三個晚上,終於配置完成,我以爲頗有必要將此次的配置過程及時總結下來。shell
使用 CentOS 7 NetInstall(最小安裝盤)安裝的CentOS默認是沒有配置網絡的,VirtualBox 默認 NAT 網絡鏈接方式都有還沒能連通網絡的,請先看這篇文章:編程
VirtualBox 管理 --> 全局設定 --> 網絡
,全局添加一個 Host-only Adapter
,本質其實就是在主機新增一個虛擬網卡,添加完成後會發現主機多出了一個網卡(這一步必須配置,不然下一步將會找不到界面名稱):服務器
在虛擬機關閉狀態下,去到虛擬機的 設置 --> 網絡 --> 鏈接方式
, 選擇 僅主機(Host-only Adapter)適配器
,配置以下所示:
網絡
同上的方式再去另一臺虛擬機配置;.net
打開兩臺虛擬機, 再次使用 ip address
查看 IP ,能夠看到兩臺虛擬機自動分配了不一樣的 IP ,這兩個 IP 都是第一步配置主機虛擬網卡 ipv4 網段下的,且虛擬機與虛擬機之間可以 ping
通,以下所示:rest
細心留意的會發現,兩個 IP 是相鄰的,這是由於我兩臺虛擬機都是使用的
dhcp
自動分配 IP , IP 爲何是從101開始呢?這是由於我第一步配置主機虛擬網卡的時候服務地址默認是100,我沒有改,以下圖所示:code
使用主機向兩臺虛擬機之間 ping
,搭建成功確定是可以 ping
通的,以下圖所示:blog
默認的 NAT 網絡鏈接模式順利配置聯網後是能夠訪問到外網的,搭建主機適配器(Host-only Adapter)模式以後,發現是不能訪問外網的, ping baidu.com
沒法 ping
通, cat /etc/resolv.conf
發現以前聯網自動生成的DNS解析也空了,緣由是更改聯網方式後,重啓系統時,網卡重啓時沒法鏈接到外網也就不存在自動生成的DNS解析了(驗證這個緣由也很簡單: ping
一個外網IP,或者將DNS手動配置以後重啓網卡,仍是同樣的狀況天然也就不是DNS的緣由,因此不少博文建議配置DNS解決這個問題徹底就是沒有實踐過的錯誤方式):dns
以前能夠訪問外網,更改主機適配器(Host-only Adapter)模式以後爲何又不能訪問外網了呢?其實 host-only 意思就很明確了,就是僅僅主機模式,這種技術提供的是主機和虛擬機之間的網絡互訪,虛擬機與主機的之間就至關於構成了一個局域網,在一些特殊的場景下,這個模式就是爲了提供一個無外網干預的內網模擬環境,而不是提供虛擬機訪問Internet的技術;
不過,真要將 Host-only Adapter 連上Internet也不是不能夠,Windows 作主機的可使用其自帶的網絡共享的設置,將網絡共享到虛擬機內(Windows 不適合作編程,仍是儘早脫坑,Windows 怎麼作網絡共享我這篇文章就不細說了,可自行百度)。Linux 下實現原理也是網絡共享,只是共享的方式須要本身手動配置一下將主機網卡和虛擬網卡實現網絡共享,實現方式一樣有 NAT 模式和橋接模式,NAT 模式是最簡單的,我給出 NAT 模式的實現方式(個人主機是Ubuntu):
主機上打開IP轉發, sudo vim /etc/sysctl.conf
打開編輯,在文件最後加入:
#1表示轉發;0表示不轉發 net.ipv4.ip_forward = 1
:wq
保存退出以後, sudo sysctl -p /etc/sysctl.conf
生效IP轉發,sudo /etc/init.d/networking restart
重啓網絡,IP轉發就生效了;
開啓 NAT
, sudo vim /etc/rc.local
打開編輯,在文件 exit 0
以前加入:
iptables -F #清除掉以前全部的iptables規則 iptables -P INPUT ACCEPT #容許接收數據包 iptables -P FORWARD ACCEPT #容許數據包IP轉發 #我主機是Ubuntu 14.05,網卡爲eth0,最新的Ubuntu使用新的Linux內核,網卡名字可能不同 #另外,無線網的網卡也是不同的,因此隨本身的實際的網卡而變化 iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
:wq
保存退出以後, 須要重啓才能生效(在 /etc/rc.local
中配置是爲了主機重啓後能自動開啓NAT),若是想要馬上生效,依次將上面寫入文件的命令在shell中執行完成就馬上生效了。
主機配置完成後,虛擬機必定要配置靜態IP,不然仍是沒法連到外網(不知爲什麼必定要配置靜態IP才行,有知道的麻煩給我留下評論),靜態IP配置方式:
vi /etc/sysconfig/network-scripts/ifcfg-enp0s3
打開編輯(這個文件名可能會因不通計算機硬件而不一樣),修改以下內容:
BOOTPROTO=static #默認dhcp,改成static,表示啓用靜態IP地址 ONBOOT=yes #開啓自動啓用網絡鏈接 IPADDR=192.168.56.166 #靜態IP地址,靜態IP必定要和最開始主機適配器配置的在同一個網段,且IP惟一未被使用 GATEWAY=192.168.56.1 #網關,需和最開始主機適配器配置的網關一致 NETMASK=255.255.255.0 #子網掩碼,需和最開始主機適配器配置的網關一致 DNS1=8.8.8.8 #第一個dns服務器,BOOTPROTO=static 的時候不會自動生成DNS解析,最好在這裏也一併配置上 #8.8.8.8 是Google提供的一個免費DNS服務器ip
:wq
保存退出以後,service network restart
或 /etc/init.d/network restart
重啓網絡以後就生效了
在虛擬機向主機發起 ping
驗證是否 ping
通, ping baidu.com
驗證可否 ping
通,都能 ping
通,那麼至此 VirtualBox 中 Host-only Adapter/主機適配器 模式的網絡鏈接就搭建起來了。