初嘗UML的network配置

在UML里可以支持多種網絡適配模式(詳情可訪問http://user-mode-linux.sourceforge.net/old/networking.html),而最常用的是TAP和VDE。

方法/步驟

在UML里可以支持多種網絡適配模式(詳情可訪問http://user-mode-linux.sourceforge.net/old/networking.html),而最常用的是TAP和VDE。

TAP接口是一個能讓應用程式對網絡第2層幀進行注入操作的虛擬網絡設備。當kernel發送幀給TAP設備,此時監聽到設備的應用程式能夠接收到該消息。TAP接口是一個常規的乙太網口,能夠用來橋接或者用於tcpdump命令操作。(下面操作如無註明則均在UML的Kernel源碼目錄下進行)

首先,運行sudo apt-get install uml-utilities和sudo apt-get install bridge-utils命令安裝相應的工具包。

工具安裝好後,接下來模擬兩種網絡連接方式:一種是UML與主機間的網絡連接;一種是兩台UML之間的網絡連接。

接下來先測試下UML與主機間採用TAP方式的網絡連接:

執行如下命令創建一個TAP網絡接口:

sudo tunctl -t tapX1

sudo ifconfig tapX1 192.168.0.121

主機端配置好後,接下來運行UML,使用如下命令:

./linux ubda=../Debian-Wheezy-AMD64-root_fs mem=256m eth0=tuntap,tapX1,,

(在執行該句命令時,我這邊會出現在UML里操作eth0沒權限的問題,故而在該命令前加sudo,請根據實際情況確認需不需要添加)

運行UML後,在UML裡面執行如下命令:

ifconfig eth0 192.168.0.123

此時在UML里執行如下命令:

ping 192.168.0.121

會有如下內容輸出:

root@changeme:~# ping 192.168.0.121

PING 192.168.0.121 (192.168.0.121) 56(84) bytes of data.

64 bytes from 192.168.0.121: icmp_req=1 ttl=64 time=0.422 ms

表示UML能PING通主機,再在主機端執行如下命令:

ping 192.168.0.123

會有如下內容輸出:

xinu@slam:~/uml/linux-3.13.6$ ping 192.168.0.123

PING 192.168.0.123 (192.168.0.123) 56(84) bytes of data.

64 bytes from 192.168.0.123: icmp_seq=1 ttl=64 time=0.122 ms

表示主機也能PING通UML了,至此,主機與UML之間的TAP網絡測試成功。

接下來再測試下兩台UML之間採用TAP方式的網絡連接:

執行如下命令創建兩個TAP網絡接口tap-X1和tap-X2,並將這兩個虛擬網口添加到橋接br-X1X2中再將相關網口和橋接設備啟動:

sudo tunctl -b -u $(whoami) -t tap-X1

sudo ip link set up dev tap-X1

sudo brctl addbr br-X1X2

sudo brctl stp br-X1X2 off

sudo ip link set br-X1X2 up

sudo brctl addif br-X1X2 tap-X1

sudo tunctl -b -u $(whoami) -t tap-X2

sudo ip link set up dev tap-X2

sudo brctl addif br-X1X2 tap-X2

進入到Kernel源碼目錄:cd ~/uml/linux-3.13.6,再執行如下操作:

終端1:./linux ubda=../Debian-Wheezy-AMD64-root_fs mem=256m eth0=tuntap,tap-X1

終端2:./linux ubda=../BusyBox-1.13.2-amd64-root_fs mem=256m eth0=tuntap,tap-X2

接下來在進入的UML里運行如下命令進行相應的配置:

終端1:ip link set up dev eth0

ip addr add 192.168.0.1/24 dev eth0

終端2:ip link set up dev eth0

ip addr add 192.168.0.2/24 dev eth0

接下來,從終端1上運行ping 192.168.0.2,有如下輸出:

root@changeme:~# ping 192.168.0.2

PING 192.168.0.2 (192.168.0.2) 56(84) bytes of data.

64 bytes from 192.168.0.2: icmp_req=1 ttl=64 time=0.422 ms

從終端2上運行ping 192.168.0.1,有如下輸出:

# ping 192.168.0.1

PING 192.168.0.1 (192.168.0.1): 56 data bytes

64 bytes from 192.168.0.1: seq=0 ttl=64 time=0.932 ms

至此,兩台UML之間TAP網絡連接方式也測試通過。

上面說明了TAP的使用,接下來嘗試下VDE。VDE交換設備是由軟體模擬的一個網絡交換設備。下面是兩台UML通過VDE進行網絡連接的過程:

首先,運行sudo apt-get install vde2命令安裝相應的工具包。工具安裝好後,在主機端的命令行運行命令vde_switch,會進入vde$命令行,可在該命令行里進行埠、VLAN等參考的配置,此處僅運行起來,先不進行更複雜的配置。

接下來需要將Kernel里的VDE選項選中,進行配置前先運行sudo apt-get install libvdeplug-dev 將相應的庫安裝上,不然等會編譯Kernel會有如下錯誤:

arch/um/drivers/vde_user.c:8:24: fatal error: libvdeplug.h: No such file or directory

#include

^

compilation terminated.

make[1]: *** [arch/um/drivers/vde_user.o] Error 1

make: *** [arch/um/drivers] Error 2

安裝好庫後,到我們作為UML的Kernel源碼目錄下配置內核,相應操作如下:

cd ~/uml/linux-3.13.6

make menuconfig ARCH=um

在出來的配置界面中將如下項選中:

UML Network Devices--->[*]VDE transport

退出並保存後再運行如下命令重新編譯下Kernel:

make ARCH=um

編譯好後,接下來再打開兩個終端,分別運行兩個UML,分別使用之前下載的Debian和Busybox的根文件系統,下面是相應的命令:

先進入到Kernel源碼目錄:cd ~/uml/linux-3.13.6,再執行如下操作:

終端1:./linux ubda=../Debian-Wheezy-AMD64-root_fs mem=256m eth0=vde

終端2:./linux ubda=../BusyBox-1.13.2-amd64-root_fs mem=256m eth0=vde

接下來在進入的UML里運行如下命令進行相應的配置:

終端1:ip link set up dev eth0

ip addr add 192.168.0.1/24 dev eth0

終端2:ip link set up dev eth0

ip addr add 192.168.0.2/24 dev eth0

接下來,從終端1上運行ping 192.168.0.2,有如下輸出:

root@changeme:~# ping 192.168.0.2

PING 192.168.0.2 (192.168.0.2) 56(84) bytes of data.

64 bytes from 192.168.0.2: icmp_req=1 ttl=64 time=0.422 ms

從終端2上運行ping 192.168.0.1,有如下輸出:

# ping 192.168.0.1

PING 192.168.0.1 (192.168.0.1): 56 data bytes

64 bytes from 192.168.0.1: seq=0 ttl=64 time=0.932 ms

至此,VDE模式也配置成功了。

本文內容整理自網絡, 文中所有觀點看法不代表淘大白的立場