[ kvm ] 三種基礎網絡模型創建及分析


1. 前言

最近在模擬生產環境在做測試,本來准備用 vmware 直接來實現的,本着學以致用的道理,選擇直接在linux 環境使用 kvm 來模擬測試,遇到的第一個問題就是,網絡環境的模擬。這里對比vmware三種網絡模式:橋接、nat、僅主機模式 來做一一對比說明。

 

2. 網絡環境

 

2.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<UP,BROADCAST,RUNNING,MULTICAST>  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<link>
        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<UP,BROADCAST,RUNNING,MULTICAST>  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 
<network>
    <name>br0</name>
    <forward mode='bridge' />
    <bridge name='br0' />
</network>

將 br0.xml 導入 virsh管理

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

 

(3)創建虛擬機選擇 br0 網絡測試

 

 

橋接網絡配置成功。在橋接中,虛擬機的網絡是直接通過橋接設備對外訪問的,因此不需要 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模型

 

 

nat模型定義:

  該模式網橋要作為路由器對虛擬機地址進行轉發,NAT模式則是將源地址ip改為物理網卡ip發送給目標地址,目標地址ip回傳給物理網卡,再將報文發送至虛擬主機。

 

宿主機網絡:192.168.118.0/24

(1)配置橋接設備

(在橋接模式中已經配置過,略過)

 

(2)編寫nat  XML 文件

# vim nat.xml

<network>
    <name>nat</name>
    <forward dev='br0' mode='nat'>
        <interface dev='br0'/>
    </forward>
    <bridge name='vir-nat' />
    <ip address='192.168.100.1' netmask='255.255.255.0'>
        <dhcp>
            <range start='192.168.100.2' end='192.168.100.253' />
        </dhcp>
    </ip>
</network>

# 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<UP,BROADCAST,MULTICAST>  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網絡模式

 

 

 

通過上面的測試 nat 網絡模式能夠訪問外網,完成實現。

 

2.3 僅主機模式

 

 僅主機模式也叫隔離模式,僅僅在宿主機內部進行通信使用。宿主機、宿主機內的虛擬機網絡相互連通,但是虛擬機無法訪問外部網絡。

 

(1)編寫 host-only.xml 文件

# cat host-only.xml 
<network>
    <name>host-only</name>
    <bridge name='vir-host' />
    <ip address='192.168.200.1' netmask='255.255.255.0'>
        <dhcp>
            <range start='192.168.200.2' end='192.168.200.253'/>
        </dhcp>
    </ip>
</network>

# 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)創建虛擬機並測試

創建兩台虛擬機,測試二者是否可以相互通信且能夠與宿主機通信。

 

僅主機模式網絡配置完成。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM