1. 程式人生 > >主機與虛擬機器相互通訊及虛擬機器訪問外網

主機與虛擬機器相互通訊及虛擬機器訪問外網

相互通訊指的是:主機(host)和虛擬主機(Vhost)能相互訪問,宿主機及同一個區域網中的其他計算機能夠訪問到虛擬機器,虛擬機器也能訪問到網路中的其它機器(當然包括宿主機)。在我們接觸的應用中,最常見的應該是互傳檔案了(比如:校內ftp),幾秒鐘一部電影還是十分令人賞心悅目。虛擬機器訪問外網的意思是虛擬機器可以像一臺真實主機一樣訪問Internet。為實現這兩個目的,我們需要在已經安裝好的linux Vhost上完成一些配置。 虛擬機器及linux版本: --VMware workstation 11, --Linux distribution: CentOS 7.1 首先了解下虛擬機器接入網路常見的三種方式:(1)橋接模式( Bridged Adapter)  (2)NAT模式 (Network Address Translation)   (3)僅主機模式( Host-only Adapter)

1.Bridged Adapter模式它是通過主機網絡卡,架設了一條橋,直接連入到網路中了。因此,它使得虛擬機器能被分配到一個網路中的獨立IP,所有網路功能完全和在網路中的真實機器一樣。在橋接模式下,你需要手工為虛擬系統配置IP地址、子網掩碼,而且還要和宿主機器處於同一網段,這樣虛擬系統才能和宿主機器進行通訊。同時也可以手工配置它的IP,DNS伺服器,閘道器等資訊,以實現通過區域網的閘道器或通過交換機訪問外網(不過我們一般都是選擇更加直接的方式NAT來訪問外網,不需要較複雜的配置)。 虛擬機器與主機關係:可以相互訪問,因為虛擬機器在真實網路段中有獨立IP,主機與虛擬機器處於同一網路段中,彼此可以通過各自IP相互訪問。
虛擬機器與網路中其他主機關係:可以相互訪問,同樣因為虛擬機器在真實網路段中有獨立IP,虛擬機器與所有網路其他主機處於同一網路段中,彼此可以通過各自IP相互訪問。 虛擬機器與虛擬機器關係: 可以相互訪問,原因同上。 特點:獨佔網路中的一個ip,所以需要為Vhost設定一個獨立的靜態IP,但值得注意的是:如果主機是直接用撥號上網的,不是通過路由,那麼此方式不可用,這就包括了在上一篇文章中吐槽過的銳捷客戶端校園網,貌似好多學校都是用這個,默默地躲在宿舍角哭(po)泣(gai)一分鐘...   2.NAT模式是最簡單的實現虛擬機器上網的方式, 在vmware裡預設為VMnet8虛擬交換機,它將虛擬系統的IP地址轉換成宿主機的IP地址,從而借用宿主機訪問其他主機及外網。
可以這樣理解:Vhost訪問網路的所有資料都是由主機提供的,vhost並不真實存在於網路中,主機與網路中的任何機器都不能檢視和訪問到Vhost的存在。
虛擬機器與主機關係: 只能單向訪問,虛擬機器可以通過網路訪問到主機,主機無法通過網路訪問到虛擬機器。因為虛擬機器並沒有屬於自己的獨立IP,就好比你去其它的學校找童鞋玩,你可以借你同學的學號用到該學校的資源,但是你並沒有在這間學校註冊學號,那麼該學校的個體就不知道你的存在了。 虛擬機器與網路中其他主機的關係: 只能單向訪問,虛擬機器可以訪問到網路中其他主機,其他主機不能通過網路訪問到虛擬機器。 虛擬機器與虛擬機器之間的關係: 相互不能訪問,虛擬機器與虛擬機器各自完全獨立,相互間無法通過網路訪問彼此。
3.主機模式,這是一種比較複雜的模式,需要有比較紮實的網路基礎知識才能玩轉。可以說前面兩種模式下所實現的功能,在這種模式下,都可以通過設定虛擬機器及網絡卡被實現。我們可以理解為Vbox在主機中模擬出一張專供虛擬機器使用的網絡卡,所有虛擬機器都是連線到該網絡卡上的,我們可以通過設定這張網絡卡來實現上網及其他很多功能,比如(網絡卡共享、網絡卡橋接等)。在host-only模式中,虛擬系統無法上網,但所有(Vmware建立的多個Vhost)的虛擬系統是可以相互通訊的。 虛擬機器與主機關係 :預設不能相互訪問,雙方不屬於同一IP段,host-only網絡卡預設IP段為192.168.56.X 子網掩碼為255.255.255.0,後面的虛擬機器被分配到的也都是這個網段。通過網絡卡共享、網絡卡橋接等,可以實現虛擬機器於主機相互訪問。
虛擬機器與網路主機關係 :預設不能相互訪問,原因同上,通過設定,可以實現相互訪問。
虛擬機器與虛擬機器關係 :預設可以相互訪問,都是同處於一個網段。 
下面我們就linux centos7如何實現宿主機與虛擬機器之間的相互通訊及虛擬機器訪問外網來進行相應的配置:
  • 關閉防火牆
首先得先關掉linux CentOS 7.1系統的防火牆,安裝完之後是預設開啟的。在之前的版本中,關閉防火牆等服務的命令是“service iptables stop” ,從RHEL7開始,使用systemctl工具來管理服務程式,包括了service和chkconfig。執行關閉防火牆和開機時禁用防火牆命令,這樣以後防火牆都是關閉狀態了,待到“猴年馬月”,我們再來開啟防火牆,哈哈,這個夢想還是可以實現的~關閉之後應該是下面這個狀態。
  1.  "# systemctl status firewalld.service"       --檢視防火牆狀態
  2.  "# systemctl stop firewalld.service"         --關閉防火牆
  3. "# systemctl disable firewalld.service"    --開機時禁用防火牆
  4.  "# systemctl restart firewalld.service"      --重啟防火牆服務

  • 宿主機與虛擬機器之間通訊(橋接模式)
在虛擬機器的開啟頁面,選擇橋接模式( Bridged Adapter),從上面我們可以知道橋接模式下,預設的網絡卡為 VMnet0,不用我們設定。終端鍵入“su”,輸入管理賬戶密碼進入root使用者。
  1. 進入網絡卡配置檔案目錄  “cd /etc/sysconfig/network-scripts”
  2. 可以使用ls -l(或者 ll)檢視目錄下的檔案,centos7的網絡卡配置檔名為“ifcfg-eno16777736”
  3. 編輯檔案 "vi  ifcfg-eno16777736",修改下面標紅的欄位。BOOTPROTO表示獲取IP的方式: "dhcp"表示自動獲取,static是固定IP,none是手動。ONBOOT=yes表示開機自動啟用網絡卡。IPADDR設定虛擬機器的獨立IP,在網橋模式下需要和Host IP在同一個網段下。關於什麼叫同一個網段,計算機網路課程已經有了十分詳細的介紹,不過記憶這東西,此一時非彼一時,所以我們還是來複習一遍吧。
  4. 重啟網路服務”systemctl restart network.service“,嘗試主機與虛擬機器互ping,若都能ping通,則完成了通訊,就可以happy地下載個FTP客戶端互傳檔案了。如不能ping通,檢查下防火牆的狀態,看是否關閉了。
IP是由四段數字組成,在此,我們先來了解一下3類常用的IP   A類IP段  0.0.0.0 到127.255.255.255 
  B類IP段  128.0.0.0 到191.255.255.255 
  C類IP段  192.0.0.0 到223.255.255.255   A類的預設子網掩碼 255.0.0.0      一個子網最多可以容納1677萬多臺電腦
  B類的預設子網掩碼 255.255.0.0     一個子網最多可以容納6萬臺電腦
  C類的預設子網掩碼 255.255.255.0    一個子網最多可以容納254臺電腦 要想在同一網段,必需做到網路標識相同,那網路標識怎麼算呢? 演算法只要把IP和子網掩碼的每位數AND就可以了。
  AND方法:0和1=0 0和0=0 1和1=1
  如:And 192.168.0.1,255.255.255.0,先轉換為二進位制,然後AND每一位
  IP      11000000.10101000.00000000.00000001
  子網掩碼    11111111.11111111.11111111.00000000   得出AND結果   11000000.10101000.00000000.00000000   轉換為十進位制192.168.0.0,這就是網路標識。 TYPE=Ethernet BOOTPROTO="none" DEFROUTE=yes PEERDNS=yes PEERROUTES=yes IPV4_FAILURE_FATAL=no IPV6INIT=yes IPV6_AUTOCONF=yes IPV6_DEFROUTE=yes IPV6_PEERDNS=yes IPV6_PEERROUTES=yes IPV6_FAILURE_FATAL=no NAME=eno16777736 UUID=bac415b6-83a1-4d7c-b7f9-783d31d34741 DEVICE=eno16777736 ONBOOT=yes IPADDR=192.168.1.10 GATEWAY=192.168.1.1
  • 虛擬機器訪問外網(NAT模式)
在虛擬機器的開啟頁面,選擇NAT模式,從上面我們可以知道NAT模式下,預設的網絡卡為 VMnet8,需要我們去手動開啟VMnet8網絡卡。先後順序為:先開啟網絡卡,後開啟虛擬機器,如果先開啟虛擬機器,會出現網絡卡不能驅動的異常。終端鍵入“su”,輸入管理賬戶密碼進入root使用者。
  1. 進入網絡卡配置檔案目錄  “cd /etc/sysconfig/network-scripts”,編輯檔案 "vi  ifcfg-eno16777736"
  2. 將ONBOOT="no"改為yes,再新增BOOTPROTO="dhcp"
  3. 重啟網路服務”systemctl restart network.service“,嘗試使用虛擬機器ping百度,若能ping通,則可以使用linux自帶的火狐瀏覽器在網路的海洋裡自由地暢遊了~
TYPE=Ethernet BOOTPROTO="dhcp"   #自動獲取 DEFROUTE=yes PEERDNS=yes PEERROUTES=yes IPV4_FAILURE_FATAL=no IPV6INIT=yes IPV6_AUTOCONF=yes IPV6_DEFROUTE=yes IPV6_PEERDNS=yes IPV6_PEERROUTES=yes IPV6_FAILURE_FATAL=no NAME=eno16777736 UUID=bac415b6-83a1-4d7c-b7f9-783d31d34741 DEVICE=eno16777736 ONBOOT=yes