1. KVM虚拟化的四种简单网络模型介绍
-
四种简单网络模型
1、隔离模型:虚拟机之间组建网络,该模式无法与宿主机通信,无法与其他网络通信,相当于虚拟机只是连接到一台交换机上。 2、路由模型:相当于虚拟机连接到一台路由器上,由路由器(物理网卡),统一转发,但是不会改变源地址。 3、NAT模型:在路由模式中,会出现虚拟机可以访问其他主机,但是其他主机的报文无法到达虚拟机,而NAT模式则将源地址转换为路由器(物理网卡)地址,这样其他主机也知道报文来自那个主机,在docker环境中经常被使用。 4、桥接模型:在宿主机中创建一张虚拟网卡作为宿主机的网卡,而物理网卡则作为交换机。
2. 网桥配置方法
-
方法
-
nmcli
# 增加两块网卡 $ nmcli conn show $ nmcli conn delete '有线连接 1' $ nmcli conn delete '有线连接 2' # 增加连接配置 # $ nmcli conn add con-name ens37 ifname ens37 type ethernet ipv4.method auto # 添加网桥 $ nmcli connection add con-name br2 type bridge ifname br2 # 桥接物理网卡 $ nmcli conn add type bridge-slave con-name br2-ens37 ifname ens37 master br2 $ nmcli conn up br2-ens37 # 查看桥接信息 $ brctl show # 指定网桥ip地址 $ nmcli conn modify br2 ipv4.method manual ipv4.addresses 10.1.1.10/24 $ nmcli conn up br2
-
brctl (需要安装bridge-utils包)
-
1.添加网桥
# 建立一个逻辑网段,名称为br0 brctl addbr br0 # 让ens33成为br0的一个端口 brctl addif br0 ens33
-
2.brctl命令对网桥的配置需要以文件形式保存下来,这样系统再次启动后所有配置仍能生效。
[root@localhost ~]# cat /etc/sysconfig/network-scripts/ifcfg-ens33 TYPE="Ethernet" PROXY_METHOD="none" BROWSER_ONLY="no" BOOTPROTO="static" #不需要ip DEFROUTE="yes" IPV4_FAILURE_FATAL="no" IPV6INIT="yes" IPV6_AUTOCONF="yes" IPV6_DEFROUTE="yes" IPV6_FAILURE_FATAL="no" IPV6_ADDR_GEN_MODE="stable-privacy" NAME="ens33" UUID="b6666e18-1f7d-43ed-9287-d7996b945cef" DEVICE="ens33" ONBOOT="yes" BRIDGE=br0 #设置网桥 #网桥配置文件 [root@localhost ~]# cat /etc/sysconfig/network-scripts/ifcfg-br0 DEVICE=br5 TYPE=Bridge BOOTPROTO=static NAME=br5 ONBOOT=yes IPADDR=192.168.119.140 NETMASK=255.255.255.0 GATEWAY=192.168.119.2
-
3. qemu-kvm支持的网络
1.基于NAT(NetworkAddressTranslation)的虚拟网络
2.基于网桥(Bridge)的虚拟网络
3.用户自定义的隔离的虚拟网络
4.直接分配网络设备(包括VT-d和SR-IOV)
4. 虚拟机的网卡:
1.RTL8139、e1000、.....
2.virtio
# 命令查看
$ /usr/libexec/qemu-kvm --net nic,model=?
qemu: Supported NIC models: ne2k_pci,i82551,i82557b,i82559er,rtl8139,e1000,pcnet,virtio
5. iptables
# -t 表名
# -n 以数字形式显示规则。如果没有-n,规则中可能会出现anywhere,有了-n,它会变成0.0.0.0/0
# -A 在指定链的末尾添加(append)一条新的规则
# -D 删除(delete)指定链中的某一条规则,可以按规则序号和内容删除
# -I 在指定链中插入(insert)一条新的规则,默认在第一行添加
# -R 修改、替换(replace)指定链中的某一条规则,可以按规则序号和内容替换
# -L 列出(list)指定链中所有的规则进行查看
# -E 重命名用户定义的链,不改变链本身
# -F 清空(flush)
# -N 新建(new-chain)一条用户自己定义的规则链
# -X 删除指定表中用户自定义的规则链(delete-chain)
# -P 设置指定链的默认策略(policy)
# -Z 将所有表的所有链的字节和数据包计数器清零
# -v 查看规则表详细信息(verbose)的信息
# -V 查看版本(version)
# -h 获取帮助(help)
$ iptables -t nat -L
6. 用户自定义的隔离的虚拟网络
隔离模型:虚拟机之间组建网络,该模式无法与宿主机通信,无法与其他网络通信,相当于虚拟机只是连接到一台交换机上。
6.1 实现方式:
1、创建虚拟网桥br0
$ yum -y install bridge-utils
$ brctl addbr br0
$ ifconfig br0 up
$ brctl show
bridge name bridge id STP enabled interfaces
br0 8000.000000000000 no
2、编写一个网卡启动脚本
$ vi /opt/tools/qemu-ifup
$ cat /opt/tools/qemu-ifup
#!/bin/bash
BRIDGE=br0
if [ -n $1 ];then
ip link set $1 up
sleep 2
brctl addif $BRIDGE $1
[ $? -eq 0 ] && exit 0 || exit 1
else
echo -e "\033[1;31mYou must give an interface.\033[0m"
exit 3
fi
3、使用qumu-kvm创建2台虚拟机
# 创建第一台名为centos5-1的kvm虚拟机:
$ qemu-kvm -name "centos5-1" -smp 1 -m 512 -drive file=/images/kvm/centos5.img,if=virtio,media=disk,cache=writeback -net nic,model=virtio,macaddr=00:0c:29:86:4e:1a -net tap,ifname=vnet0.0,script=/opt/tools/qemu-ifup
# 创建第二台名为centos5-2的kvm虚拟机:
$ qemu-kvm -name "centos5-2" -smp 1 -m 512 -drive file=/images/kvm/centos5_2.img,if=virtio,media=disk,cache=writeback -net nic,model=virtio,macaddr=00:0c:29:86:4e:6a -net tap,ifname=vnet0.1,script=/opt/tools/qemu-ifup