[ kvm ] 三种基础网络模型创建及分析

1. 前言

最近在模拟生产环境在做测试,本来准备用 vmware 直接来实现的,本着学以致用的道理,选择直接在linux 环境使用 kvm 来模拟测试,遇到的第一个问题就是,网络环境的模拟。这里对比vmware三种网络模式:桥接、nat、仅主机模式 来做一一对比说明。

 

2. 网络环境

 

2.1 桥接模式

[ kvm ] 三种基础网络模型创建及分析_第1张图片

 

桥接模式的定义:在该模式下,宿主机会虚拟出来一张虚拟网卡作为宿主机本身的通信网卡,而宿主机的物理网卡则成为桥设备(交换机),所以虚拟机相当于在宿主机所在局域网内的一个单独的主机,他的行为和宿主机是同等地位的,没有依存关系。

宿主机网段:192.168.118.0/24

 

(1)配置桥接设备

 

方法1:

# systemctl start NetworkManager ; systemctl start libvirtd
# virsh iface-bridge ens33 br0

其实不建议使用这种方式,因为使用这种方式不太稳定,如果出错,就无法连接到主机了,慎用!

方法2:

# cd /etc/sysconfig/network-scripts/
# cp -a ifcfg-ens33 ifcfg-br0

修改配置两个配置文件:

ifcfg-ens33:
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=none
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
NAME=ens33
DEVICE=ens33
ONBOOT=yes
BRIDGE=br0


ifcfg-br0:
 
TYPE=Bridge
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=none
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
NAME=br0
DEVICE=br0
ONBOOT=yes
IPADDR=192.168.118.11
NETMASK=255.255.255.0
GATEWAY=192.168.118.1
DNS1=61.134.1.4
DNS2=61.134.1.5


# systemctl restart network

# ifconfig br0
br0: flags=4163  mtu 1500
        inet 192.168.118.11  netmask 255.255.255.0  broadcast 192.168.118.255
        inet6 fe80::20c:29ff:fe1d:cfd9  prefixlen 64  scopeid 0x20
        ether 00:0c:29:1d:cf:d9  txqueuelen 1000  (Ethernet)
        RX packets 31  bytes 2696 (2.6 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 7  bytes 586 (586.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

# ifconfig ens33
ens33: flags=4163  mtu 1500
        ether 00:0c:29:1d:cf:d9  txqueuelen 1000  (Ethernet)
        RX packets 259364  bytes 150072812 (143.1 MiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 21622  bytes 1734123 (1.6 MiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0


# brctl show 
bridge name        bridge id                STP enabled        interfaces
br0                8000.000c291dcfd9        no                ens33

手动修改的方式很简单,但是一定要注意单词的拼写正确无误。到目前为止,已经为物理机创建了虚拟网桥设备。写来就是为 KVM 配置桥接网络。

 

(2)编写 桥接 XML 文件

# cd /etc/libvirt/qemu/networks/
# cat br0.xml 

    br0
    
    


将 br0.xml 导入 virsh管理

# virsh net-define br0.xml
# virsh net-start br0
# virsh net-autostart br0

 

(3)创建虚拟机选择 br0 网络测试

[ kvm ] 三种基础网络模型创建及分析_第2张图片

 

[ kvm ] 三种基础网络模型创建及分析_第3张图片

 

桥接网络配置成功。在桥接中,虚拟机的网络是直接通过桥接设备对外访问的,因此不需要 iptables 任何路由转发: 

查看 iptables

 

# iptables -L -nv 
Chain INPUT (policy ACCEPT 79143 packets, 69M bytes)
 pkts bytes target     prot opt in     out     source               destination         

Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination         

Chain OUTPUT (policy ACCEPT 43622 packets, 110M bytes)
 pkts bytes target     prot opt in     out     source               destination

 

2.2 nat模型

[ kvm ] 三种基础网络模型创建及分析_第4张图片

 

 

nat模型定义:

  该模式网桥要作为路由器对虚拟机地址进行转发,NAT模式则是将源地址ip改为物理网卡ip发送给目标地址,目标地址ip回传给物理网卡,再将报文发送至虚拟主机。

 

宿主机网络:192.168.118.0/24

(1)配置桥接设备

(在桥接模式中已经配置过,略过)

 

(2)编写nat  XML 文件

# vim nat.xml


    nat
    
        
    
    
    
        
            
        
    


# virsh net-define nat.xml
# virsh net-start nat
# virsh net-autostart nat
# virsh net-list 
 Name                 State      Autostart     Persistent
----------------------------------------------------------
 br0                  active     yes           yes
 nat                  active     yes           yes

 

在这个 XML 文件中,定义了一个 interface 名为:virt-nat 并配置为 192.168.100.1

# ifconfig vir-nat
vir-nat: flags=4099  mtu 1500
        inet 192.168.100.1  netmask 255.255.255.0  broadcast 192.168.100.255
        ether 52:54:00:24:b1:ac  txqueuelen 1000  (Ethernet)
        RX packets 0  bytes 0 (0.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 0  bytes 0 (0.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

# brctl show vir-nat 
bridge name        bridge id                STP enabled        interfaces
vir-nat                8000.52540024b1ac        yes                vir-nat-nic

简单来说,就是为虚拟机配置了一个网关接口,然后这个网关 192.168.100.1 可以和 宿主机的网络通信,这里就需要开通 ip_forward

# sysctl -a | egrep ip_forward
net.ipv4.ip_forward = 1

 

再次查看下 iptables 规则:

# iptables -L -nv -t nat 
Chain PREROUTING (policy ACCEPT 1056 packets, 184K bytes)
 pkts bytes target     prot opt in     out     source               destination         

Chain INPUT (policy ACCEPT 67 packets, 11740 bytes)
 pkts bytes target     prot opt in     out     source               destination         

Chain OUTPUT (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination         

Chain POSTROUTING (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination         
    0     0 RETURN     all  --  *      br0     192.168.100.0/24     224.0.0.0/24        
    0     0 RETURN     all  --  *      br0     192.168.100.0/24     255.255.255.255     
    0     0 MASQUERADE  tcp  --  *      br0     192.168.100.0/24    !192.168.100.0/24     masq ports: 1024-65535
    0     0 MASQUERADE  udp  --  *      br0     192.168.100.0/24    !192.168.100.0/24     masq ports: 1024-65535
    0     0 MASQUERADE  all  --  *      br0     192.168.100.0/24    !192.168.100.0/24

重点关注下 POSTROUTING 中最后三条规则:

  当 192.168.100.0/24 网段的主机访问非本网段的目标时,则转发到 br0 网卡出去。

这就是nat网络的实现,说白了nat网络就是借助了 iptables 规则来实现转发,iptables 是非常强大的。

 

(3)创建虚拟机测试nat网络模式

[ kvm ] 三种基础网络模型创建及分析_第5张图片

 

[ kvm ] 三种基础网络模型创建及分析_第6张图片

 

 

通过上面的测试 nat 网络模式能够访问外网,完成实现。

 

2.3 仅主机模式

[ kvm ] 三种基础网络模型创建及分析_第7张图片

 

 仅主机模式也叫隔离模式,仅仅在宿主机内部进行通信使用。宿主机、宿主机内的虚拟机网络相互连通,但是虚拟机无法访问外部网络。

 

(1)编写 host-only.xml 文件

# cat host-only.xml 

    host-only
    
    
        
            
        
    


# virsh net-define host-only.xml
# virsh net-start host-only
# virsh net-autostart host-only

在这个XML文件中,创建了一个网桥设备 vir-host 并配置 IP 为: 192.168.200.1 ,对比上面 nat 模式不难发现,host-only 网桥并没有和 br0 建立联系。

 

(2)创建虚拟机并测试

创建两台虚拟机,测试二者是否可以相互通信且能够与宿主机通信。

[ kvm ] 三种基础网络模型创建及分析_第8张图片

 

[ kvm ] 三种基础网络模型创建及分析_第9张图片

仅主机模式网络配置完成。

你可能感兴趣的:([ kvm ] 三种基础网络模型创建及分析)