Fedora KVM Networking

這幾天在自己電腦上安裝了 fedora 15 除了感受一下 gnome3 嶄新的使用者界面外,

順便也玩一下整合很完整的 KVM,用 dvd 裝完以後有勾選虛擬化,就會把相關軟體一次都裝好了(kvm,qemu,libvirtd…) ,只要透過虛擬機管理員就可以輕鬆的建立 vm,並且使用了~感覺很愜意呢~

只是想要瞭解他相關網路的設定,好像就沒有很簡單了…原本網路概念就有一點模糊,順便重新整理自己網路的知識…

Linux Networking

Linux 可以當作 Router , Switch(bridge) 來使用,當成 Router 來使用之前遇到的情況是使用 iptables 來建立一個 hdcp+nat 的區域網路,透過一台電腦來 forwarding 一整個內網的封包到另外一個界面,架設在 vmware 的環境,之前應該有一篇文章有寫過哩~然後 switch 之前就沒用過了,所以不曉得在 linux 內要怎麼使用,這次順便有學到一點…

Linux bridge
先安裝相關工具再來學…怎麼用~

 # install bridge utils 有指令 brctl 可以用
 $ yum install bridge-utils
 # install User-mode Linux (utility) 有些工具可以用 主要是 tunctl 可以製作虛擬介面(nic)
 $ yum install uml-utilities

然後就可以開始玩~bridge 了

 # show all bridge stauts
 $ brctl show

 # add bridge
 $ brctl addbr br0

 # add interface to br0
 $ brctl addif br0 eth0
 $ brctl addif br0 eth1

 # remove interfece from br0
 $ brctl delif br0 eth0

也可以用 tunctl 增加一些 tap(虛擬網卡),用來加進去 bridge ,在真實 KVM 情況就是用這些虛擬網卡來對應 VM 的網卡的。

 # add tap0  and tap1
 $ tunctl -t tap0 -u user -g user
 $ tunctl -t tap1 -u user -g user

 # create bridge and  add taps
 $ brctl addbr mybr
 $ brctl addif mybr tap0
 $ brctl addif mybr tap1
 # show staus
 $ brctl show
bridge name	bridge id		STP enabled	interfaces
mybr		0000.002421e18258	no		tap0
							tap1

ㄜ應該蠻好玩的吧~然後我建立一個環境來測試一些網路佈署的情況~

我有一個真實的網卡 eth0,有兩台 VM 各有一張網卡,我想要一個可以透過分享實體網卡設定實體IP上網,另外一台可以透過主機的的 iptables 作 forwarding NAT 上網~所以我需要兩個 bridge ,一個橋接真實網卡與虛擬網卡,另外一個是純虛擬 bridge 橋接虛擬網卡,

 # 大略網路資訊
 $ ifconfig
 eth0
 vnet0
 vnet1
 switch
 nat-br

 # 建立兩個 bridge
 $ brctl addbr switch
 $ brctl addbr nat-br

 # 把實體網卡跟虛擬網卡榜在一起
 $ brctl addif switch eth0
 $ brctl addif switch vnet0

 # 把 vnet1 加到虛擬 switch 中
 $ brctl addif nat-br vnet1

然後就讓 libvirtd 位於 /etc/libvirt/qemu/networks/default.xml 的 dhcp 設定檔,指向 nat-br 這樣 dhcpd 就會往這個介面分配 IP 了,然後再把 iptables 的 forwarding 從 nat-br 指到 switch ,vnet1 就可以透過 nat 上網了,另外要讓 vnet1 可以透過實體 IP 上網,要把 eth0 設成混亂模式,當成對內對外的介面,然後把 switch 設成實際要上網的 ip,這邊概念還不太清楚,但是這樣確定可以運作 libvirt networking[3]也是這樣寫的~

這邊提一下我目前理解的概念,實體網卡設成 promisc 模式是為了處理該網卡所有看的到的封包,不要被丟棄,這樣才能模擬交換器的行為,然後把虛擬交換器(if switch)本身順便當成自己的實體網卡,送到交換器而且符合交換器 ip 的封包會被送到這台電腦上處理,不符合的就送到其他有符合的 port 或者  flooding 。

 $ ifconfig eth0 0.0.0.0 promisc
 $ ifconfig switch 123.123.123.123 netmask 255.255.255.0
 $ route add default gw 123.123.123.126

這樣就能有兩個 bridge,一個區網提供虛擬 IP 讓虛擬機能透過 nat 上網,另外一個直接跟實體網路銜接,看起來就像跟實體網卡接在同一個 switch 上。

參考資源:

  1. Connect to Host Network – 虛擬網路裝置(virtual network)
  2. KVM – Network
  3. libvirt Networking
  4. RHEL6 KVM橋接使虛擬主機上網
  5. Ubuntu KVM Networking

2 comments on “Fedora KVM Networking

發佈回覆給「mlwmlw」的留言 取消回覆

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *