2014年3月13日 星期四

如何在 Qemu 環境下使用 tun/tap 設定以與外界連繫 ?

前言,要使用 VM (虛擬機器) 的一個相當重要的前提是外界可以連到我們的 VM,因此需要使用到 tun tap 來進行設定,以下我們將介紹如何在 Debian 底下以 Qemu 架設 VM,再來與外界連繫。


什麼是 tun tap ?
http://www.ibm.com/developerworks/cn/linux/l-tuntap/index.html

首先請先確認你的機器中有載入 tun 模組,指令如下:

lsmod |grep tun

如果有載入 tun 模組的話,那麼會有底下的輸出:

tun                    16887  13

萬一沒有的話,可以使用 root 權限執行

modprobe tun

來載入此模組。我們可以觀察底下檔案

/dev/net/tun

來看看是否有 tun 裝置。其輸出如下:

crw-rw-rwT 1 root root 10, 200 12月 30 15:03 /dev/net/tun

理論上,你的 tun 裝置現在的 owner 及 group 都是 root,這對我們執行虛擬機器有
很大安全漏洞,因為使用者要使用 tun 裝置必須將其加入 root 群組才行,但是把一般
使用者加入 root 群組讓這個使用者擁有不必要的 root 權限。為了系統安全著想,我
們特別新增一個 kvm 的群組,並且讓所有人(包括裝置)都以 kvm 群組為內定權限來開
啟虛擬機器。並將 /dev/net/tun 之群組改為 kvm,如底下所示:


crw-rw-rwT 1 root kvm 10, 200 11月 11 08:42 /dev/net/tun


新增群組 groupadd kvm
設定群組 chgrp kvm /dev/net/tun
觀看使用群組 id username
該 user 必須要有一個次群組為 kvm 才行,如下所示:

id herman
uid=1000(herman) gid=1000(herman) groups=1000(herman),24(cdrom),25(floppy),29(audio),30(dip),44(video),46(plugdev),1001(kvm),120(uml-net),500(nfsuser),501(ftp),502(qemu)




Q: 萬一你的 Linux 核心沒有 tun 模組怎麼辦 ?
A: 自己編 Linux 核心,並將 tun 編譯成模組。

接下來請以 qemu 執行虛擬機器,指令如下:

 qemu-system-x86_64 -enable-kvm -m 1024 -hda linux1.img -net nic -net bridge,br=br1


成功的話,我們可以在實體機器上 ping 虛擬機器,也可以在虛擬機器上 ping 實體機器,而此時虛擬機器要以 192.168.1.xx 為 IP。


沒有留言:

張貼留言