linux核心學習筆記(五)

來源:互聯網
上載者:User

 

          4.虛擬機器VMWARE與其網路設定(包你玩轉虛擬機器) 
 


  • 看到有很多人發貼詢問如何玩虛擬機器,其實本人並不建議用虛擬機器,直接裝真實環境最好,不過我還是來發一篇關於虛擬機器網路設定的文章,看完後包你會玩.

    VMWare中的幾種網路設定

    (1)Bridged方式

    用這種方式,虛擬系統的IP可設定成與本機系統在同一網段,虛擬系統相當於網路內的一台獨立的機器,與本機共同插在一個Hub上,網路內其他機器可訪問虛擬系統,虛擬系統也可訪問網路內其他機器,當然與本機系統的雙向訪問也不成問題。

    (2)NAT方式
    這種方式也可以實現本機系統與虛擬系統的雙向訪問。但網路內其他機器不能訪問虛擬系統,虛擬系統可通過本機系統用NAT協議訪問網路內其他機器。
    NAT方式的IP地址配置方法:虛擬系統先用DHCP自動獲得IP地址,本機系統裡的VMware services會為虛擬系統分配一個IP,之後如果想每次啟動都用固定IP的話,在虛擬系統裡直接設定這個IP即可。

    (3)host-only方式
    顧名思義這種方式只能進行虛擬機器和主機之間的網路通訊,既網路內其他機器不能訪問虛擬系統,虛擬系統也不能訪問其他機器。

    (4)not use方式
    既是不使用網路,虛擬系統為一個單機。

    一般來說,Bridged方式最方便好用。但如果本機系統是win2000而網線沒插(或者根本沒有網卡),網路很可能不可用(大部分用PCI網卡的機器都如此),此時就只能用NAT方式或host-only,之前所說的那兩塊虛擬網卡就是適應這兩種網路準備的。

    vmware虛擬機器的網路設定

    虛擬機器的網路設定(原理篇)

    在正式開始之前,我想有必要先來學習一些必要的網路知識。否則,在不懂得任何原理的情況下依葫蘆畫瓢雖然可解一時之需要,但遇到具體情況改變的情況下就只能乾瞪眼了。由於篇幅限制,這裡只講和VMware設定有關的一點簡單網路知識。

    1,什麼是網路?

    Internet是指“互連網”,好象這句話說的有點多餘,不過確實有很多人對他有錯誤的理解,“互連網”是指一個個網路互連,而不是像有些人想象的那樣把一台台電腦雜亂無章的互連。當我們需要用電腦和遠方的電腦通訊的時候,先把本地電腦組成一個網路,當然,遠方的電腦也要組成一個網路,在把這兩個網路“互連”起來,組成“互連網”。用電話線和MODEM撥接的時候是通過電話線先把自己的電腦連到ISP(Internet Service Provider 網路服務供應商)的網路中,再經過ISP的網路和世界各地的電腦通訊。

    2,電腦如何通過網路傳遞資料?

    每一個網路需要一個網路地址,網路中的電腦需要一個在網路中唯一確定的標識,網路號和電腦的標識號組成了IP地址,所以IP地址是由網路號和主機號組成的。當你的電腦要和其他的電腦通訊的時候,電腦會先根據IP地址和子網路遮罩確定目標主機是在本網中還是在遠程網路中,如果在本網中則直接把一個包含資訊的IP資料包發送到本網上,目標主機會檢測到並接收,如果目標主機在遠程網路則需要通過一台被稱為網關的的電腦轉寄到遠程網路,網關(geteway)可以看做是串連網路和網路的橋樑,網關的概念很廣,這裡為了簡化起見,我們暫且認為它和路由器是同一個概念。路由器(router)是一種串連網路和網路,並選擇IP資料包傳送的路徑的一台特殊電腦。很多情況下網關的概念等同於路由器。

    3,網路中電腦的IP地址有何要求?

    在同一個網路中,每台電腦必須具有相同的網路號,這樣電腦才認為目標主機是在本網路中並且可以正確送達,如果網路號不同,即使目標主機已經用網線連到本網路中資料也不能直接送達,即使這兩台電腦近在咫尺,在電腦看來仍舊是一台遠程電腦.比如一個網路的網路號為192.168.0,則該網路中的電腦的IP地址必須以192.168.0開頭。假如要傳送一個資料包到網路號為192.168.1的網路,則必須通過路由器轉寄,如果該網路中沒有路由器,則發送失敗。因此,為了串連兩個網路,一台路又器至少要有兩個網路介面(網卡、數據機等連網裝置稱為網路介面)。網路和路由器的關係見:

     

     

    --------------- -------------- --------------
    | 網路A | | 路由器 | | 網路B |
    | | | | | |
    | □--|-----------|--□ □--|----------|--□ |
    | 1 | | 2 3 | | 4 |
    --------------- -------------- --------------

    圖 一

    圖中的小方框表示網卡或其他網路介面。
    可以看到路由器至少有兩個網路介面。
    假設網路A的地址為192.168.0 網卡1的地址為192.168.0.1
    網路B的地址為192.168.1 網卡4的地址為192.168.1.1
    則路由器上的網卡2必須屬於網路 192.168.0 地址為192.168.0.x (x為任意小於255的數)
    路由器上的網卡3必須屬於網路 192.168.1 地址為192.168.1.x (x為任意小於255的數)
    就是說,路由器既屬於網路A,又屬於網路B,這樣才起到橋樑的作用。
    當資料從網路A發往網路B時,路由器從網卡2接收資料,經過改裝後通過網卡3發送資料到網路B。

    這樣,我們稱網卡2的地址 192.168.0.x為網路A的網關
    網卡3的地址 192.168.1.x為網路B的網關

    4,VMware虛擬機器提供了那些虛擬網路裝置?

    預設安裝的情況下VMware提供了虛擬網卡vmnet1和vmnet8,還有在虛擬系統上的虛擬網卡 "AMD PCNET Family PCI Ethernet Adapter"

    請注意,vmnet1和vmnet8是主系統上虛擬設備,用ifconfig命令可以看到,而"AMD PCNET Family PCI Ethernet Adapter"是虛擬系統上的虛擬設備,在安裝完虛擬系統後可以在裝置管理員中看到,前兩個隸屬於真實系統,是你的真實電腦中的裝置,後一個隸屬於虛擬系統,是虛擬電腦中的裝置,不要搞混淆。

    --------------- -------------- --------------
    | 網路A | | 路由器 | | 網路B |
    | | | | | |
    | □--|-----------|--□ □--|----------|--□ |
    | 1 | | 2 3 | | 4 |
    --------------- -------------- --------------

    ---------------- ------------------------- --------------
    | 虛擬系統 | | 主系統(路由器) | | 真實網路 |
    | | | | | |
    | □--|-----------|--□ □<--->□-----|------|--□ |
    |AMD PCNET卡 | |vmnet1 vmnet8 真實網卡 | | 4 |
    ---------------- ------------------------- --------------

    圖 二

    讓我們來和上面的網路和路由器的關係做一個比對。
    可以看到要想虛擬系統和主系統通訊必須使AMD PCNET 網卡和vmnet1組成一個網路。
    而vmnet1本來就在主系統中,系統可以直接存取,所以主系統又充當了路由器的功能,只要有這兩個虛擬設備主系統和虛擬系統就可以通訊。

    關鍵在於三點:
    1.確定網卡AMD PCNET和vmnet1的網路號相同。
    2.在虛擬系統裡設定網路屬性,把網關地址設為vmnet1的地址。
    3.開啟主系統的路由功能,使它成為一台路由器。

    事實上,如果你只需要虛擬系統和主系統通訊,而不需要和主系統所在的真實網路上的其他主機通訊的話只要滿足第一點就可以了。因為滿足第一點,主系統和虛擬系統就在同一網路中了,不需要路由器便可通訊。但是大多數情況下我們需要虛擬系統和主系統所在的真實網路通訊,這就需要滿足其他兩點了。

    四、虛擬機器的網路設定(實施篇)

    1, 我們先來讓虛擬系統和主系統聯絡上。

    在VMware安裝的時候安裝程式會自動給vmnet1分配一個IP地址,下面是筆者電腦上例子:

    vmnet1 Link encap:Ethernet HWaddr 00:50:56:C0:00:01
    inet addr:192.168.221.1 Bcast:192.168.221.255 Mask:255.255.255.0
    UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
    RX packets:191 errors:0 dropped:0 overruns:0 frame:0
    TX packets:63 errors:0 dropped:0 overruns:0 carrier:0
    collisions:0 txqueuelen:100
    RX bytes:0 (0.0 b) TX bytes:0 (0.0 b)

    在第二行可以看到安裝程式給vmnet1分配的IP地址為192.168.221.1(注意每次安裝VMware IP地址是隨機分配的,實際的情況與這裡的例子會不同)。即虛擬網卡vmnet1屬於網路192.168.221。因此,我們需要啟動虛擬系統,設定網路屬性,把虛擬系統的網卡"AMD PCNET Family PCI Ethernet Adapter"的IP地址設定為192.168.221.x (x為除1以外2~254之間的任一數字筆者把它設定為2),把網關設定為vmnet1的地址:192.168.221.1(如果不和外界真實網路通訊的話網關可以不設)

    windows 2000和XP 設定後立即生效,win98需要重新啟動,linux需要重新啟動網路服務:
    #service network restart

    在主系統上ping一下虛擬系統:
    #ping -c 3 192.168.221.2

    PING 192.168.221.2 (192.168.221.2) from 192.168.221.1 : 56(84) bytes of data.
    64 bytes from 192.168.221.2: icmp_seq=1 ttl=128 time=6.91 ms
    64 bytes from 192.168.221.2: icmp_seq=2 ttl=128 time=0.425 ms
    64 bytes from 192.168.221.2: icmp_seq=3 ttl=128 time=0.527 ms

    --- 192.168.221.2 ping statistics ---
    3 packets transmitted, 3 received, 0% loss, time 2001ms
    rtt min/avg/max/mdev = 0.425/2.623/6.917/3.036 ms

    yeah!通了!

    再在虛擬系統上ping主系統:

    C:/>ping 192.168.221.1

    Pinging 192.168.221.1 with 32 bytes of data:

    Reply from 192.168.221.1: bytes=32 time<10ms TTL=64
    Reply from 192.168.221.1: bytes=32 time<10ms TTL=64
    Reply from 192.168.221.1: bytes=32 time<10ms TTL=64
    Reply from 192.168.221.1: bytes=32 time<10ms TTL=64

    Ping statistics for 192.168.221.1:
    Packets: Sent = 4, Received = 4, Lost = 0 (0% loss),
    Approximate round trip times in milli-seconds:
    Minimum = 0ms, Maximum = 0ms, Average = 0ms

    yeah!又通了!主系統和虛擬系統順利聯絡上啦!

    2, 讓虛擬系統和主系統所在的真實網路通訊

    首先在你的電腦上需要有一塊與真實網路相連真實的網卡(二所示)。vmnet8就在與真實網路通訊的時候起作用了,vmnet8會和真實網卡對應起來,虛擬系統要發送資料包到真實網路中的時候,真實系統是一台路由器,首先資料發到虛擬網卡vmnet1,然後經過路由器(這裡就是主系統linux)發到vmnet8,由於vmnet8和真實網卡是對應起來的,這一機制是有vmware完成的,所以發到vmnet8上的網卡就等於傳送到了真實網卡上,然後資料包再通過真實網卡發送到真實網路,整個過程請看圖二。如果你的系統上有兩塊以上的真實網卡,在安裝的時候安裝程式會詢問把虛擬網卡對應到哪個真實網卡上。可以根據實際情況選擇。

    把vmnet8的IP地址設定為和真實網卡在同一網路的地址,假設真實網路的網路號為192.168.0,真實網卡的IP地址為192.168.0.1則可設定vmnet8的IP地址為192.168.0.2
    在linux中方法如下:

    #ifconfig vmnet8 down
    #ifconfig vmnet8 192.168.0.2 up

    回顧一下上面講的三個條件:
    --------------------------------------------------------------
    關鍵在於三點:
    1.確定網卡AMD PCNET和vmnet1的網路號相同。
    2.在虛擬系統裡設定網路屬性,把網關地址設為vmnet1的地址。
    3.開啟主系統的路由功能,使它成為一台路由器。
    --------------------------------------------------------------

    前兩點我們已經在第一部分中做好了,現在只要開啟了linux的路由功能虛擬系統就可以和外界通訊了。
    linux是一個天生的網路作業系統,他在網路方面的強大功能使得它在網路伺服器領域有廣泛的應用。用linux來做路由器甚至不需要額外的軟體,linux的核心直接支援靜態路由的功能。我們要做的只是把路由功能開啟就可以了。

    可以先看看路由表:
    #route
    確定所有網卡的IP地址或網路地址都在Destination一欄裡,如:
    -------------------------------------------------------------------------------
    Kernel IP routing table
    Destination Gateway Genmask Flags Metric Ref Use Iface
    192.168.0.0 * 255.255.255.0 U 0 0 0 eth1
    192.168.0.0 * 255.255.255.0 U 0 0 0 eth1
    192.168.0.0 * 255.255.255.0 U 0 0 0 vmnet8
    192.168.221.0 * 255.255.255.0 U 0 0 0 vmnet1
    127.0.0.0 * 255.0.0.0 U 0 0 0 lo
    default www.gucuiwen.co 0.0.0.0 UG 0 0 0 eth0
    -------------------------------------------------------------------------------

    預設情況下啟動網路裝置的時候系統會把該裝置的IP地址添加到路由表中,如果沒有的話可以重新啟動一下網路服務:

    #service network restart

     

    再來開啟路由功能:

    # echo 1 > /proc/sys/net/ipv4/ip_forward

    至此,linux的路由功能已經開啟,你的linux系統已經成了一台路由器,串連著虛擬網路和真實網路。虛擬網路和真實網路間就可以通訊了。出於安全考慮,如果有必要的話還需要用iptables命令來設定一下路由規則。

    五、Windows下的虛擬機器網路設定。

    在Windows下的虛擬機器的網路設定大致和linux下的相同,只不過需要安裝額外的路由軟體,在Windows平台上有很多這樣的軟體可以用,比如 SysGate WinGate等,如果用的是Windows 2000 Server 或者是Windows NT Server 的話可以用系統內建的“路由和遠端存取”軟體。具體的設定就不祥述了,相信只要懂了其中的原理就不難找到合適的解決方案了。如果你的電腦硬體足夠的好,有1G以上的記憶體和2G以上的CPU的話,那你也可以同時運行幾台虛擬機器,把這幾台虛擬機器組成一個網路,這樣在一台電腦上就可以有一個功能強大的網路實驗平台了。

    Vmware(虛擬機器工作站)網路設定

    vmware通過虛擬網路組件把虛擬機器同真實的物理網路連接起來。
    虛擬網路組件主要有如下幾種:

    交換器:跟真實的交換器一樣,它允許把多個網路元件連線起來,在vmware軟體安裝時根據需要自動安裝,最多允許掛接9個交換器,名稱分別為VMnet0-8。其中有3個已經預設分配給橋接器(VMnet0),宿主機虛擬網路介面卡(VMnet1)和網路位址轉譯NAT裝置(VMnet8)。

    通過在虛擬機器的“Editing this machine settings”的網路介面卡條目,可以把虛擬機器串連到未被分配的交換器。

    橋接器:橋接器把虛擬機器串連到你的宿主機所在的區域網路LAN上。其實現的方式就是把虛擬機器上的虛擬適配器串連到你的宿主機上的實體網路介面卡上。建立虛擬機器的嚮導中如果選擇了“typical”或者“Using bridged networking”的網路連接方式,那麼橋接器會自動產生。

    上面圖中給出了橋接器串連方式下虛擬機器網路介面卡與宿主機物理適配器之間的關係。這是讓虛擬機器訪問宿主機所在網路的最容易的一種方式。這種情況下虛擬機器需要自己獨立的標識,比如TCP/IP網路中就需要自己的IP地址,這個IP地址從網路系統管理員處獲得,還有其它的一些網路細節都需要手工設定。橋接器方式下虛擬機器跟宿主機一樣是本網中的一個獨立體,如同一個物理的機器一樣。如果在vmware中同時運行多個虛擬機器,那麼每個虛擬機器都應該有一個獨立的IP地址。

    宿主機上的虛擬適配器:就是出現在宿主機上的供vmware工作站使用的一個虛擬網路介面卡。允許虛擬機器與宿主機通訊,但是這個虛擬適配器不會串連到任何外部的網路,只有在宿主機上建立起特殊的軟體諸如Proxy 伺服器才能把虛擬適配器和物理適配器串連起來。實際上虛擬機器只和宿主機進行網路連接,這種方式也稱為host-only。

    在建立虛擬機器的嚮導中選擇了自訂網路設定,並且選擇了“Use Host-only networking”,那麼這種網路連接方式就會被自動建立起來。此時,宿主機作業系統可以看到有一個虛擬網路介面卡。宿主機與虛擬機器可以通訊。很適合建立一個與外部網路隔絕的獨立私人TCP/IP網路。虛擬機器的IP地址由虛擬DHCP伺服器提供。這種串連方式結合Windows2000/XP/2003上的網際網路共用的特性,就可以允許虛擬機器連線到外部Internet。

    網路位址轉譯裝置:如果宿主機只有一個IP地址可用於外部物理網路的串連,那麼使用NAT可以把虛擬機器連線到外部網路。

    如果在建立虛擬機器的嚮導中選擇自訂網路設定,並選擇“Use network address translation”,那麼這樣的串連就會被建立。如果宿主機所在網路不能給該虛擬機器一個IP地址,那麼NAT就是最容易的一種讓虛擬機器訪問宿主機網路的方式。由於虛擬機器沒有外部物理網路的IP地址,因此vmware在宿主機上建立一個獨立的私人網路,通過虛擬DHCP伺服器獲得ip地址。NAT能夠把多個虛擬機器的網路資料加以區分並在虛擬機器與外部物理網路之間進行傳送。NAT方式下許多標準的TCP/IP協議都可以在虛擬機器上使用,比如HTTP/FTP/TELET等。但是預設情況下外部網路上的電腦不能串連到虛擬機器上,因此虛擬機器不能提供諸如WEB瀏覽這樣的服務。

    DHCP伺服器:為虛擬機器提供一個IP地址,只適用於NAT和host-only(指虛擬機器只和宿主機進行網路連接)。

    網路介面卡:當用嚮導產生一個虛擬機器時,為虛擬機器建立一個虛擬網路介面卡。在虛擬機器的作業系統中,可以看到一個名稱為AMD PCNET PCI適配器。在vmware的適配器設定中,可以建立最多3個虛擬網路介面卡。

    配置虛擬機器上網

    一般主機上網有兩種方式,一是本機在區域網路環境中,多台電腦通過交換器訪問Internet,則交換器是撥號主機而不是本機,那麼主機(交換器)就有一個IP地址,這種情況類似辦公室的電腦。另外一種方式是本機直接撥接,如家庭電腦。根據本機不同的上網方式,其虛擬電腦上網設定方法也有所區別,我們分開來介紹。

      一、區域網路環境

      區域網路環境下設定虛擬機器上網其實非常簡單,例如筆者的Windows XP系統電腦在區域網路內分配的IP地址是192.168.0.2,而區域網路環境下交換器的主機IP地址是192.168.0.1,那麼VMware虛擬Windows 2000系統可以把它看作是區域網路內的一台電腦,給它分配一個IP地址為192.168.0.4即可。

      設定過程:

      首先在VMware程式的“虛擬機器”菜單下開啟“設定”命令視窗,然後在硬體設定中選擇“乙太網路”設定一下虛擬機器使用的網卡,這裡選擇“自訂VMnet0預設橋接”即可。

      接下來在虛擬機器Windows 2000系統中設定網路連接屬性,在Windows 2000系統案頭上選中“網路位置”點擊右鍵開啟“屬性”視窗,然後選擇“本地串連”點擊右鍵開啟其屬性視窗,選中“Internet協議(TCP/IP)”點擊屬性按鈕,設定虛擬機器的IP地址,如我們上面為它分配了虛擬機器在區域網路的地址為“192.168.0.4”,預設閘道輸入區域網路主機的IP地址,首選DNS伺服器指定為區域網路主機的IP地址(圖1)。設定好後確定。

      開啟虛擬機器Windows 2000的IE瀏覽器,輸入一個網址訪問檢測是否能正常訪問Internet了。

      二、本機撥接

      如果用本機撥接,那麼與區域網路環境就不同了,本機沒有一個IP地址,虛擬機器該如何設定自己的IP上網呢?VMware虛擬運行環境有一個虛擬網路(虛擬區域網路)的功能,在VMware中配置一下虛擬網路的主機IP,虛擬機器(即Windows 2000系統)就可以利用虛擬網路主機的網關訪問Internet了。

      設定過程:

      首先在VMware程式[編輯] 功能表下選擇“虛擬網路設定”命令,然後虛擬網路編輯器視窗的“摘要”選項卡下看到VMware能夠類比的網路類型,其中有“虛擬網路8”。

      下面要添加一個虛擬網路的網卡硬體,在“主機虛擬適配器”選項卡下添加名為“VMnet8”的虛擬網路,點擊“添加”按鈕,選擇VMnet8添加。

      接著在“NAT”選項卡下查看虛擬主機“VMnet8”的網關IP地址,VMware預設設定的網關IP地址是192.168.59.2,我們也可以自己修改它。

      同樣我們要在“虛擬機器設定”中定義一下“乙太網路”的硬體裝置,這裡選擇網路連接的方式是“自訂VMnet8(NAT)”。

      最後在虛擬機器的“Internet協議(TCP/IP)”中設定當前環境下的虛擬電腦IP、網關、子網路遮罩,如分配這台虛擬機器的IP為192.168.59.3,網關是上一步在“NAT”中設定的網關IP,然後單擊“確定”按鈕完成設定。

      現在開啟虛擬機器的IE瀏覽器,輸入網址便可在虛擬機器中訪問Internet,享受衝浪的樂趣了

    vmware,qemu各種方式上網設定

    vmware三種網路連接,qemu兩種網路連接實現 虛擬機器<--->主機虛擬機器<--->互連網通訊的方法。
      
      順便寫了下如何不重新編譯整個核心支援某個功能,對系統無影響,編譯速度要快於編譯整個核心。
      
      如果你的XXX卡沒被核心支援,又怕自己編譯的核心會造成系統損壞就可以試試這個方法嘍 ^_^
      
      vmware三種網路連接上網設定:
      
      1.bridge :
      
      預設使用vmnet0
      
      將虛擬機器的ip設定與主機同網段未使用ip,其餘與主機相同:
      
      例如主機ip是10.70.54.31,設定虛擬機器ip為10.70.54.22。netmask,broadcast,gateway,dns都與主機相同即可實現虛擬機器<--->主機虛擬機器<---->互連網 通訊。
      
      2.nat :
      
      預設使用vmnet8
      
      將虛擬機器設定成使用dhcp方式上網,windows下選擇"自動擷取ip",linux下開啟dhcp服務即可
      
      也可以手動設定:
      
      ip設定與vmnet8同網段,gateway設定成vmnet8的gateway(/etc/vmware/vmnet8/nat/nat.conf)中可以查到vmnet8的gateway,通常是xxx.xxx.xxx.2。
      
      netmask,broadcast設定與vmnet8相同,dns設定與主機相同。
      
      例如 vmnet8 ip:172.16.249.1 gw :172.16.249.2
      
      虛擬機器設定: ip :172.16.249.100 gw: 172.16.249.2
      
      3.host-only :
      
      預設使用vmnet1
      
      將虛擬機器ip設定與vmnet1同網段,gateway設定成vmnet1的ip,其餘設定與vmnet1相同,dns設定與主機相同
      
      例如 vmnet1 ip :172.16.245.1
      
      虛擬機器設定: ip :172.16.245.100 gateway :172.16.245.1
      
      這樣就實現了虛擬機器<--->主機 通訊,但是虛擬機器<--->互連網 仍無法通訊
      
      虛擬機器與互連網通訊:
      
      1.開啟主機路由功能
      
      2.設定iptables,使主機成為一台nat server
      
      1. echo 1 >/proc/sys/net/ipv4/ip_forward 這樣就主機就具有了路由功能
      
      2. iptables -t nat -A POSTROUTING -o eth0 -s 172.16.245.0/24 -j MASQUERADE
      
      這條規則意思是將來自172.16.245.0/24封包的來源ip偽裝成eth0的ip,實現虛擬機器與互連網通訊
      
      如果網路介面是ppp+或pppoe則需要修改成-o pppoe
      
      當然-s 172.16.245.0/24 也要根據實際情況修改
      
      qemu兩種上網方式:
      
      user mode network :
      
      這種方式實現虛擬機器上網很簡單,類似vmware裡的nat,qemu啟動時加入-user-net參數,虛擬機器裡使用dhcp方式,即可與互連網通訊,但是這種方式虛擬機器與主機的通訊不方便。
      
      tap/tun network :
      
      這種方式要比user mode複雜一些,但是設定好後虛擬機器<-->互連網 虛擬機器<-->主機 通訊都很容易
      
      這種方式設定上類似vmware的host-only,qemu使用tun/tap裝置在主機上增加一塊虛擬網路裝置(tun0),然後就可以象真實網卡一樣配置它.
      
      首先核心中支援tap/tuns裝置:
      
      Device Drivers --->
      Networking support --->
      [M] Universal TUN/TAP device driver support
      
      如果當前核心沒有支援,可以重新只編譯相應模組加入,方法很簡單:
      
      將當前核心設定檔cp到核心源碼目錄下:
      
      [root@LFS ~]#cp /boot/config-[kernel-version] /usr/src/linux
      [root@LFS ~]#cd /usr/src/linux
      
      配置核心,將TUN/TAP選擇模組(M),如上所示:
      
      [root@LFS ~]#make menuconfig
      
      重新只編譯模組(M),不編譯核心(*)支援的東東:
      
      [root@LFS ~]#make modules
      
      編譯好後在/usr/src/linux/drivers/net下可以找到tun.ko:
      
      [root@LFS net]#ls -l /usr/src/linux/drivers/net/tun.ko
      -rw-r--r-- 1 root root 11116 Mar 23 20:29 /usr/src/linux/drivers/net/tun.ko
      [root@LFS net]#
      
      將它cp到當前核心的模組目錄的相應位置:
      
      [root@LFS net]#cp /usr/src/linux/drivers/net/tun.ko /lib/modules/`uname -r`/kernel/drivers/net
      
      重建立立模組依賴關係:
      
      [root@LFS net]#depmod
      
      現在就可以載入它了 :
      
      [root@LFS net]#modprobe tun
      
      檢查一下:
      
      [root@LFS net]#lsmod |grep tun
      tun 8704 0
      [root@LFS net]#
      
      OK. 成功不重新編譯整個核心加入特殊模組支援
      
      如果你的xx卡不被核心支援,又可以編譯成模組,自己怕重新編譯核心後出問題就可以用這個辦法只編譯自己需要的模組,然後手動安裝到相應位置,再載入它。
      
      這樣編譯速度要也比編譯整個核心快,不會對系統有任何損害,就可以使用上XX卡嘍。^_^
      
      要注意三點:
      
      1.核心源碼必須與當前核心版本完全一致,否則編譯出的模組是不能用的。
      
      2.注意只make modules(編譯模組),沒有make modules_install(自動安裝模組到/lib/modules下)
      
      3.載入新編譯的模組前必須先運行depmod,否則modprobe找不到它
      
      其實使用當前核心設定檔(/boot/config-[kernel-version]),只加入自己需要的模組,不做任何其他改,make modules_install應該也不會有問題的。
      
      不過最穩妥的辦法還是手動安裝它,控制權在自己手裡更踏實嘛
      
      OK,轉回qemu上網問題
      
      如果使用udev管理裝置(通常2.6.x核心的發行版都已經使用udev),當modprobe tun後就會自動建立/dev/net目錄,並建立出tun裝置,做好相關連結:
      
      [root@LFS net]#ls -l /dev/net/tun
      lrwxrwxrwx 1 root root 6 Mar 25 15:35 /dev/net/tun -> ../tun
      [root@LFS net]#
      
      如果很不幸,你沒看到它,就需要自己手動做這些工作了
      
      [root@LFS ~]#mkdir /dev/net
      [root@LFS ~]#mknod /dev/net/tun c 10 200
      
      OK,相關裝置已經準備好了,還需要一個tun/tap的初始化指令碼 :
      
      /etc/qemu-ifup :
      #!/bin/sh
      /sbin/ifconfig $1 172.20.0.1
      
      再給予qemu-ifup x執行許可權放在/etc下就可以了。
      
      這個指令碼只能root使用者執行,如果需要普通使用者使用qemu,就需要改成sudo /sbin/ifconfig .....再設定sudo相關許可權。
      
      啟動qemu後,它會在主機上增加一塊虛擬網路裝置(tun0):
      
      [root@LFS ~]#ifconfig tun0
      tun0 Link encap:Ethernet HWaddr 0A3:8A:5D:97:CD
      inet addr:172.20.0.1 Bcast:172.20.255.255 Mask:255.255.0.0
      UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
      RX packets:0 errors:0 dropped:0 overruns:0 frame:0
      TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
      collisions:0 txqueuelen:500
      RX bytes:0 (0.0 b) TX bytes:0 (0.0 b)
      [root@LFS ~]#
      
      現在就可以啟動qemu配置虛擬機器網路參數了,和vmware host-only一樣:
      
      ip與tun0相同網段,gateway為tun0 ip 其餘參數與tun0相同,dns與主機相同:
      
      tun0 : ip :172.20.0.1 broadcast:172.20.255.255 netmask :255.255.0.0
      qemu : ip :172.20.0.100 broadcast:172.20.255.255 netmask :255.255.0.0 gateway:172.20.0.1
      
      與host-only一樣,這樣只實現了虛擬機器<---->主機間通訊,還需要設定router,nat才可以連上互連網
      
      [root@LFS ~]#echo 1 > /proc/sys/net/ipv4/ip_forward
      [root@LFS ~]#iptables -t nat -A POSTROUTING -o eth0 -s 172.20.0.0/24 -j MASQUERADE
      [root@LFS ~]#

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.