#2019/09/23 修訂
192.168.10.0/24 -> IP 範圍為 192.168.10.0 ~ 192.168.10.255
Netmask為 255.255.255.0 (24 bit)
Gateway ?
DNS ?
Bridge 命名方式:最好可以一眼看出此橋之網路設定,例如:
br0 -> 192.168.0.0/24
br1 -> 192.168.1.0/24
br2 -> 192.168.2.0/24
..
br10 -> 192.168.10.0/24
我們可以執行底下指令新增 br10
# brctl addbr br10
# ifconfig br10
br10 Link encap:Ethernet HWaddr 52:55:ae:8e:ad:d0
BROADCAST 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:0
RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)
現在可以看到 br10 沒有 IP,接下來可以指定 192.168.10.1/24 作為 br10 的 IP,指令如下:
# ifconfig br10 192.168.10.1/24 up
或是
# ifconfig br10 192.168.10.1 netmask 255.255.255.0
接著可以觀察 br10 的 IP,如下所示:
# ifconfig br10
br10 Link encap:Ethernet HWaddr 52:55:ae:8e:ad:d0
inet addr:192.168.10.1 Bcast:192.168.10.255 Mask:255.255.255.0
inet6 addr: fe80::5055:aeff:fe8e:add0/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:6 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:0 (0.0 B) TX bytes:508 (508.0 B)
此時我們可以 ping 192.168.10.1 看看其輸出:
$ ping 192.168.10.1
PING 192.168.10.1 (192.168.10.1) 56(84) bytes of data.
64 bytes from 192.168.10.1: icmp_seq=1 ttl=64 time=0.024 ms
64 bytes from 192.168.10.1: icmp_seq=2 ttl=64 time=0.023 ms
64 bytes from 192.168.10.1: icmp_seq=3 ttl=64 time=0.045 ms
^C
--- 192.168.10.1 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2051ms
rtt min/avg/max/mdev = 0.023/0.030/0.045/0.012 ms
這表示 192.168.10.1 這個介面已經被我們「無中生有」製造出來,這就是虛擬的橋接網路介面。
如果要刪除此網路介面的話,可以用 root 權限執行:
# brctl delbr br10
bridge br10 is still up; can't delete it
此時會有錯誤訊息,告訴我們 br10 還在使用中,不能刪除。因此要用 root 權限關閉此網路介面,指令如下:
# ifconfig br10 down
接著再執行
# brctl delbr br10
即可刪除此網路介面,我們可以使用 brctl show 來觀察 br10 是否仍然存在。
使用 brctl 建立 br10 有個缺點,那就是 br10 在系統重開後就會不見,因此我們要建立一個永久的 br10 介面。在本課程,我們建立一個 192.168.10.0/24 之橋接網路介面,其
/etc/network/interfaces 之設定如下:
auto br10
iface br10 inet static
address 192.168.10.1 # 橋接網路介面之 IP
netmask 255.255.255.0 # NetMask
gateway 120.117.72.71 # eth0 IP,亦即橋接網路介面之 gateway。
bridge_ports tap0 # 初始 tap,之後 br10 會自動新增其它 tap。
bridge_fd 9
bridge_hello 2
bridge_maxage 12
bridge_stp off
設定完之後,重新啟動網路介面,或是執行底指令:
# ifconfig br10 up
# ifup br10
即可啟動 br10,我們可以執行
# ifconfig br10
來觀看其輸出,如底下所示:
br10 Link encap:Ethernet HWaddr 8e:03:1e:8e:fe:99
inet addr:192.168.10.1 Bcast:192.168.10.255 Mask:255.255.255.0
inet6 addr: fe80::8c03:1eff:fe8e:fe99/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:8 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:0 (0.0 B) TX bytes:648 (648.0 B)
接下來要將 /usr/local/libexec/qemu-bridge-helper 這個檔案 setuid,指令如下:
# cd /usr/local/libexec
# chmod u+s qemu-bridge-helper
# ls -l qemu-bridge-helper
-rwsr-xr-x 1 root staff 39680 10月 21 10:46 qemu-bridge-helper
^
此檔現在具有 u+s 屬性。
然後要修改 /usr/local/etc/qemu/bridge.conf 這個檔案,若此檔不存在的話,請自行新增,加入一行:
allow br10
接著請建立 ~/qemu_stretch 目錄,再在其中新增 buildpxe.sh 這個檔案,其內容如下:
# IP=192.168.10.254 pxeserver.my.com
CPU=host
SMP=2
MEMORY=1024
HDA=pxeserver.img
#HDA=pxe2.img
HDA_SIZE=4G
MAC="DE:AD:BE:CF:EC:B7"
BRIDGE=br10
CDROM=/opt/iso/debian-stretch-DI-rc2-amd64-netinst.iso
[ -f $HDA ] && mv $HDA ${HDA}.`date +%Y%m%d`
qemu-img create $HDA $HDA_SIZE -f qcow2
qemu-system-x86_64 -enable-kvm -cpu $CPU -smp $SMP -m $MEMORY \
-drive file=$HDA,format=qcow2 -vga qxl \
-cdrom $CDROM -boot d \
-net nic,macaddr=$MAC -net bridge,br=$BRIDGE
請注意 debian 的安裝 iso 檔要放在 /opt/iso 目錄下,不然上面這個 script 檔要修改才可以執行。
接著我們要把 runpxe.sh 改成底下格式:
# IP=192.168.10.254 pxeserver.example.org
CPU=host
SMP=2
MEMORY=1024
HDA=pxeserver.img
HDB=hdb.img
MAC="DE:AD:BE:CF:EC:B7"
BRIDGE=br10
qemu-system-x86_64 -enable-kvm -cpu $CPU -smp $SMP -m $MEMORY \
-drive file=$HDA,format=raw \
-boot c \
-net nic,macaddr=$MAC -net bridge,br=$BRIDGE
接著,我們要將 ARM 虛擬機接上 br10 這個橋接網路介面,請在 runarm.sh 中修改為:
qemu-system-arm -M versatilepb -m 512 \
-kernel ./vmlinuz-3.2.0-4-versatile \
-initrd ./initrd.img-3.2.0-4-versatile \
-net nic,macaddr="52:54:00:12:34:56" -net bridge,br=br10 \
-hda arm.img \
-append "root=/dev/sda1"
全部設定完畢後,我們即可執行 sh runarm.sh 來看看新的 ARM 虛擬環境是否有在
192.168.10.0/24 之網段內。在此可以先執行
# brctl show br10
bridge name bridge id STP enabled interfaces
br10 8000.fe624e24d08c no tap0
上述輸出告訴我們 br10 目前有一台虛擬機器掛上。接著修改虛擬 ARM 機器之 IP 設定,>在 /etc/network/interfaces 中,如底下所示:
# The primary network interface
allow-hotplug eth0
#iface eth0 inet dhcp
iface eth0 inet static
address 192.168.10.20
netmask 255.255.255.0
gateway 120.117.72.71 # gateway IP
然後重啟虛擬機之網路,一直到執行 ifconfig 可以看到本機之 IP 為 192.168.10.20。
接下作簡單驗證:
在實體機上執行:
ping 192.168.10.20
在虛擬機上執行:
ping 192.168.10.1
如果都可以 ping 得到機器的話,再在實體機上執行 iceweasel 看是否能打開 192.168.10.20 之網頁,如果可以的話表示設定沒問題。反之,請 debug !
沒有留言:
張貼留言