環(huán)境
宿主機vnet1接口IP為10.1.0.254/24
宿主機br0橋接網(wǎng)絡的IP為172.16.100.120
虛擬主機c2 IP為10.1.0.1/24
虛擬主機c3 IP為10.1.0.2/24
安裝虛擬化程序
判斷CPU是否支持硬件虛擬化:
[root@kvm ~]# grep -i -E '(vmx|svm|lm)' /proc/cpuinfo
vmx:Intel VT-x
svm:AMD AMD-v
[root@kvm ~]# yum install libvirt-daemon-kvm qemu-kvm virt-manager
[root@kvm ~]# modprobe kvm
[root@kvm ~]# systemctl start libvirtd.service
新建虛擬網(wǎng)橋vnet1
[root@danran ~]# brctl addbr vnet1
[root@danran ~]# brctl show
bridge name bridge id STP enabled interfaces
br0 8000.000c290e479b no ens38
vnet1 8000.000000000000 no
激活虛擬網(wǎng)橋vnet1
[root@danran ~]# ip link set vnet1 up
配置vnet1的IP地址
[root@danran ~]# ifconfig vnet1 10.1.0.254/24
編輯虛擬網(wǎng)卡啟動腳本
[root@danran ~]# vim /etc/qemu-ifup
#!/bin/bash
#
bridge=vnet1 定義網(wǎng)橋為vnet1,也可連接br0物理網(wǎng)橋
if [ -n "$1" ];then
ip link set $1 up
sleep 1
brctl addif $bridge $1 將網(wǎng)卡添加vnet1虛擬網(wǎng)橋上
[ $? -eq 0 ] && exit 0 || exit 1
else
echo "Error: no interface specified."
exit 1
fi
[root@danran ~]# chmod +x /etc/qemu-ifup 添加執(zhí)行權限
[root@danran ~]# bash -n /etc/qemu-ifup
編輯虛擬網(wǎng)卡停止腳本
[root@danran ~]# vim /etc/qemu-ifdown
#!/bin/bash
#
bridge=vnet1 定義網(wǎng)橋為vnet1
if [ -n "$1" ];then
brctl delif $bridge $1 將網(wǎng)卡從vnet1虛擬網(wǎng)橋上刪除
sleep 1
[ $? -eq 0 ] && exit 0 || exit 1
else
echo "Error: no interface specified."
exit 1
fi
[root@danran ~]# chmod +x /etc/qemu-ifdown 添加執(zhí)行權限
[root@danran ~]# bash -n /etc/qemu-ifdown
啟動虛擬主機
啟動兩臺虛擬主機
[root@danran ~]# qemu-kvm -name c2 -m 64 -smp 4,sockets=2,cores=2 -drive file=/vm/images/c2.img,if=virtio,media=disk -vnc :0 -daemonize -net nic,model=e1000,macaddr=52:54:00:00:00:01 -net tap,script=/etc/qemu-ifup \\-vnc :0指定連接本機vnc的0號端口,即5900端口括儒,-daemonize為運行在后臺,-net創(chuàng)建一個網(wǎng)絡接口,-net tap連接到網(wǎng)橋設備,script=/etc/qemu-ifup指定啟動腳本
[root@danran ~]# qemu-kvm -name c2 -m 64 -smp 4,sockets=2,cores=2 -drive file=/vm/images/c3.img,if=virtio,media=disk -vnc :1 -daemonize -net nic,model=e1000,macaddr=52:54:00:00:00:02 -net tap,script=/etc/qemu-ifup
虛擬機中配置路由網(wǎng)關
打開虛擬主機
[root@danran ~]# vncviewer :0 & 后臺打開vnc :0端口的主機锐想,即c2主機
$ sudo su - 切換到root用戶
# ifconfig eth0 10.1.0.1/24 配置主機c2的IP地址
# route add default gw 10.1.0.254 設置網(wǎng)關為vnet1網(wǎng)橋的IP赠摇,即可與宿主機的通信
# ping 172.16.100.120
查看宿主機br0網(wǎng)卡的數(shù)據(jù)包
打開IP轉發(fā)
[root@danran ~]# sysctl -w net.ipv4.ip_forward=1
net.ipv4.ip_forward=1
[root@danran ~]# tcpdump -i br0 -nn icmp
配置虛擬主機與宿主機外部網(wǎng)絡通信
宿主機添加vnet1虛擬接口源地址轉換規(guī)則
將訪問10.1.0.0/24網(wǎng)絡的源地址都轉換為宿主機IP172.16.100.120
[root@danran ~]# iptables -t nat -A POSTROUTING -s 10.1.0.0/24 -j SNAT --to-source 172.16.100.120
測試虛擬主機是否可以與宿主機172.16.100.120通信
[root@danran ~]# vncviewer :0 & 后臺打開vnc :0端口的主機藕帜,即c2主機
$ sudo su - 切換到root用戶
# ifconfig eth0 10.1.0.1/24 配置主機c2的IP地址
# route add default gw 10.1.0.254 設置網(wǎng)關為vnet1網(wǎng)橋的IP,即可與宿主機的通信
# ping 172.16.100.120
查看宿主機br0網(wǎng)卡的數(shù)據(jù)包
打開IP轉發(fā)
[root@danran ~]# sysctl -w net.ipv4.ip_forward=1
net.ipv4.ip_forward=1
[root@danran ~]# tcpdump -i br0 -nn icmp