br0 の作成
# nmcli con add type bridge con-name br0 ifname br0 # nmcli con mod bridge.stp no # nmcli con mod br0 bridge.stp no # nmcli con mod br0 ipv4.method manual ipv4.address "202.26.150.50/24" ipv4.gateway "202.26.150.254" ipv4.dns "202.26.144.11" # nmcli con mod br0 autoconnect yes # nmcli con add type bridge-slave ifname ens10f0 master br0 # nmcli con down ens10f0 # vi /etc/sysconfig/network-scripts/ifcfg-ens10f0 NBOOT=no
Install
# export VM_NAME=rocky-8.5 # virt-install \ --name ${VM_NAME} \ --hvm \ --arch x86_64 \ --os-type linux \ --os-variant centos7.0 \ --vcpus 2 \ --ram 2048 \ --disk path=/opt/vm/images/${VM_NAME}.img,format=qcow2,size=50 \ --network bridge=br0 \ --graphics vnc,keymap=ja \ --noautoconsole \ --location /opt/iso/Rocky-8.5-x86_64-boot.iso
Create
# qemu-img create -f qcow2 /data/websystem-0.img 30G # qemu-kvm -hda /data/websystem-0.img -m 1024 -boot d -cdrom /root/CentOS-6.4-x86_64-bin-DVD1.iso -k ja -vnc :0
- -vnc :0 がリモートコントロール接続用ポート番号を示す. オフセットは 5900 (-vnc :1 なら 5901)
リモートコントロール用クライアント
- Ultra Vnc: http://www.uvnc.com/
- Real Vnc: http://www.realvnc.com/products/vnc/ (Windows7で起動せず 2015/2/6)
ネットワーク
- Guest OS(eth0) => Host OS(tap# → br0 → eth0) => external
- Host OS の tap インターフェイスは Guest OS 毎に必要
tap インターフェイスの起動と停止スクリプト (ホスト側)
- /etc/qemu-ifup
#!/bin/sh /sbin/ifconfig $1 0.0.0.0 promisc up /usr/sbin/brctl addif br0 $1
- /etc/qemu-ifdown
/usr/sbin/brctl delif br0 $1 /sbin/ifconfig $1 down
- $1 には tap# が入る
Macアドレスが変化しても,ネットワークインターフェイスを見失わない方法 (ゲスト側)
- 最近のディストリビューションは NICのMacアドレスが変化すると,別のインターフェイスを作って対応させる.その結果,インターフェイスを見失う
- 対策
- /etc/udev/rules.d/70-persistent-net.rules を削除して,/dev/null にシンボリックリンクを張る.(起動時にワーニングがでる)
- /etc/sysconfig/network-scripts/ifcfg-eth# の HWADDR を削除する.
起動例
# /usr/libexec/qemu-kvm -hda /data/centos-base-1.img -m 1024 -k ja -vnc none -net nic,macaddr=52:54:00:12:34:00 -net tap,ifname=tap0,script=/etc/qemu-ifup
- macaddr は Guest OS のMACアドレスになる.
設定し直すと /etc/udev/rules.d/70-persistent-net.rules で eth の名前が変わるので,合わせる必要がある.また /etc/sysconfig/network-scripts/ifcfg-eth# の HWADDR は削除した方が面倒くさくない.(上記参照)
起動用スクリプト (kvm-start)
- kvm-start xxxx.img 512
#!/bin/sh # function get_interface_num() { TAPLST=`/sbin/ifconfig | grep '^tap[0-9]' | awk -F" " '{print $1}'` NUM=0 while [ $NUM -lt 100 ]; do FLG=1 for TAP in $TAPLST ; do if [ "tap$NUM" = "$TAP" ]; then FLG=0 break fi done if [ $FLG = 1 ]; then echo $NUM return 0 fi NUM=`expr $NUM + 1` done return 0 } if [ ! -f "$1" ]; then echo "Not found image file $1 !!" exit 1 fi IFNUM=`get_interface_num` if [ "$IFNUM" = "" ]; then echo "Can not get Interface Number!!" exit 1 fi HWADDR=`/usr/local/bin/macgen.py` if [ "$HWADDR" = "" ]; then MACNUM=`printf "%02d" $IFNUM` HWADDR="00:16:3e:00:00:$MACNUM" fi MEM=$2 if [ "$MEM" = "" ]; then MEM=1024 fi echo "macaddr = $HWADDR" echo "interface = tap$IFNUM" echo "vnc num = $IFNUM" echo "memory = ${MEM}M" echo "start qemu-kvm" /usr/libexec/qemu-kvm -hda $1 -m $MEM -k ja -vnc :${IFNUM} -net nic,macaddr=$HWADDR -net tap,ifname=tap${IFNUM},script=/etc/qemu-ifup
MACアドレスの自動生成 by RedHat カスタマーポータル
- /usr/local/bin/macgen.py
#!/usr/bin/python # macgen.py script to generate a MAC address for virtualized guests on Xen # import random # def randomMAC(): mac = [ 0x00, 0x16, 0x3e, random.randint(0x00, 0x7f), random.randint(0x00, 0xff), random.randint(0x00, 0xff) ] return ':'.join(map(lambda x: "%02x" % x, mac)) # print randomMAC()
Counter: 3270,
today: 1,
yesterday: 0
最終更新: 2022-02-18 (金) 15:49:43 (JST) (795d) by iseki