KVM实战之虚拟主机使用虚拟网桥vnet1通信

环境

宿主机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  

你可能感兴趣的:(KVM实战之虚拟主机使用虚拟网桥vnet1通信)