环境
宿主机vnet1接口IP为10.1.0.254/24
宿主机br0桥接网络的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
新建虚拟网桥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
激活虚拟网桥vnet1
[root@danran ~]# ip link set vnet1 up
配置vnet1的IP地址
[root@danran ~]# ifconfig vnet1 10.1.0.254/24
编辑虚拟网卡启动脚本
[root@danran ~]# vim /etc/qemu-ifup
#!/bin/bash
#
bridge=vnet1 定义网桥为vnet1,也可连接br0物理网桥
if [ -n "$1" ];then
ip link set $1 up
sleep 1
brctl addif $bridge $1 将网卡添加vnet1虚拟网桥上
[ $? -eq 0 ] && exit 0 || exit 1
else
echo "Error: no interface specified."
exit 1
fi
[root@danran ~]# chmod +x /etc/qemu-ifup 添加执行权限
[root@danran ~]# bash -n /etc/qemu-ifup
编辑虚拟网卡停止脚本
[root@danran ~]# vim /etc/qemu-ifdown
#!/bin/bash
#
bridge=vnet1 定义网桥为vnet1
if [ -n "$1" ];then
brctl delif $bridge $1 将网卡从vnet1虚拟网桥上删除
sleep 1
[ $? -eq 0 ] && exit 0 || exit 1
else
echo "Error: no interface specified."
exit 1
fi
[root@danran ~]# chmod +x /etc/qemu-ifdown 添加执行权限
[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创建一个网络接口,-net tap连接到网桥设备,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
虚拟机中配置路由网关
打开虚拟主机
[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 设置网关为vnet1网桥的IP,即可与宿主机的通信
# ping 172.16.100.120
查看宿主机br0网卡的数据包
打开IP转发
[root@danran ~]# sysctl -w net.ipv4.ip_forward=1
net.ipv4.ip_forward=1
[root@danran ~]# tcpdump -i br0 -nn icmp
配置虚拟主机与宿主机外部网络通信
宿主机添加vnet1虚拟接口源地址转换规则
将访问10.1.0.0/24网络的源地址都转换为宿主机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 设置网关为vnet1网桥的IP,即可与宿主机的通信
# ping 172.16.100.120
查看宿主机br0网卡的数据包
打开IP转发
[root@danran ~]# sysctl -w net.ipv4.ip_forward=1
net.ipv4.ip_forward=1
[root@danran ~]# tcpdump -i br0 -nn icmp
网友评论