KVM虛擬機網絡配置NAT方式


NAT方式

問題

客戶機安裝完成后,需要為其設置網絡接口,以便和主機網絡,客戶機之間的網絡通信。事實上,如果要在安裝時使用網絡通信,需要提前設置客戶機的網絡連接。

KVM 客戶機網絡連接有兩種方式:

  • 用戶網絡(User Networking):讓虛擬機訪問主機、互聯網或本地網絡上的資源的簡單方法,但是不能從網絡或其他的客戶機訪問客戶機,性能上也需要大的調整。NAT方式。
  • 虛擬網橋(Virtual Bridge):這種方式要比用戶網絡復雜一些,但是設置好后客戶機與互聯網,客戶機與主機之間的通信都很容易。Bridge方式。

本文主要解釋NAT方式的配置。

NAT方式原理

NAT方式是kvm安裝后的默認方式。它支持主機與虛擬機的互訪,同時也支持虛擬機訪問互聯網,但不支持外界訪問虛擬機。

檢查當前的網絡設置:

#virsh net-list --all
Name State Autostart
-----------------------------------------
default active yes

default是宿主機安裝虛擬機支持模塊的時候自動安裝的。

檢查當前的網絡接口:

#ifconfig
eth0      Link encap:Ethernet  HWaddr 44:37:E6:4A:62:AD  
          inet6 addr: fe80::4637:e6ff:fe4a:62ad/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:987782 errors:0 dropped:0 overruns:0 frame:0
          TX packets:84155 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:109919111 (104.8 MiB)  TX bytes:12695454 (12.1 MiB)
          Interrupt:17 

lo        Link encap:Local Loopback  
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:16436  Metric:1
          RX packets:4 errors:0 dropped:0 overruns:0 frame:0
          TX packets:4 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:240 (240.0 b)  TX bytes:240 (240.0 b)

virbr0    Link encap:Ethernet  HWaddr 52:54:00:B9:B0:96  
          inet addr:192.168.122.1  Bcast:192.168.122.255  Mask:255.255.255.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:2126 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:0 (0.0 b)  TX bytes:100387 (98.0 KiB)

virbr0-nic Link encap:Ethernet  HWaddr 52:54:00:B9:B0:96  
          BROADCAST MULTICAST  MTU:1500  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:500 
          RX bytes:0 (0.0 b)  TX bytes:0 (0.0 b)

其中virbr0是由宿主機虛擬機支持模塊安裝時產生的虛擬網絡接口,也是一個switch和bridge,負責把內容分發到各虛擬機。

幾個虛擬機管理模塊產生的接口關系如下圖:

從圖上可以看出,虛擬接口和物理接口之間沒有連接關系,所以虛擬機只能在通過虛擬的網絡訪問外部世界,無法從網絡上定位和訪問虛擬主機。

virbr0是一個橋接器,接收所有到網絡192.168.122.*的內容。從下面命令可以驗證:

# brctl show
bridge name     bridge id               STP enabled     interfaces
virbr0          8000.525400b9b096       yes             virbr0-nic

# route
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
192.168.122.0   *               255.255.255.0   U     0      0        0 virbr0

同時,虛擬機支持模塊會修改iptables規則,通過命令可以查看:

 

# iptables -t nat -L -nv
Chain PREROUTING (policy ACCEPT 16924 packets, 2759K bytes)
pkts bytes target     prot opt in     out     source               destination
Chain POSTROUTING (policy ACCEPT 2009 packets, 125K bytes)
pkts bytes target     prot opt in     out     source               destination        
 421 31847 MASQUERADE  all  --  *      *       192.168.122.0/24    !192.168.122.0/24   ----------->這條是關鍵,它配置了NAT功能。
Chain OUTPUT (policy ACCEPT 2011 packets, 125K bytes)
pkts bytes target     prot opt in     out     source               destination        

    
# iptables -t filter -L -nv
Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target     prot opt in     out     source               destination        
 1    74 ACCEPT     udp  --  virbr0 *       0.0.0.0/0            0.0.0.0/0           udp dpt:53    ---->由libvirt腳本自動寫入
 0     0 ACCEPT     tcp  --  virbr0 *       0.0.0.0/0            0.0.0.0/0           tcp dpt:53    ---->由libvirt腳本自動寫入
 3   984 ACCEPT     udp  --  virbr0 *       0.0.0.0/0            0.0.0.0/0           udp dpt:67    ---->由libvirt腳本自動寫入
 0     0 ACCEPT     tcp  --  virbr0 *       0.0.0.0/0            0.0.0.0/0           tcp dpt:67    ---->由libvirt腳本自動寫入
178K  195M ACCEPT     all  --  *      *       0.0.0.0/0            0.0.0.0/0           state RELATED,ESTABLISHED    ---->iptables的系統預設
 2   168 ACCEPT     icmp --  *      *       0.0.0.0/0            0.0.0.0/0                ---->iptables的系統預設
1148  216K ACCEPT     all  --  lo     *       0.0.0.0/0            0.0.0.0/0                ---->iptables的系統預設
 1    60 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0           state NEW tcp dpt:22  ---->iptables的系統預設
16564 2721K REJECT     all  --  *      *       0.0.0.0/0            0.0.0.0/0           reject-with icmp-host-prohibited ---->iptables的系統預設
Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target     prot opt in     out     source               destination        
3726 3485K ACCEPT     all  --  *      virbr0  0.0.0.0/0            192.168.122.0/24    state RELATED,ESTABLISHED  ---->由libvirt腳本自動寫入
3491  399K ACCEPT     all  --  virbr0 *       192.168.122.0/24     0.0.0.0/0                ---->由libvirt腳本自動寫入
 0     0 ACCEPT     all  --  virbr0 virbr0  0.0.0.0/0            0.0.0.0/0                ---->由libvirt腳本自動寫入
 0     0 REJECT     all  --  *      virbr0  0.0.0.0/0            0.0.0.0/0           reject-with icmp-port-unreachable  ---->由libvirt腳本自動寫入
 0     0 REJECT     all  --  virbr0 *       0.0.0.0/0            0.0.0.0/0           reject-with icmp-port-unreachable  ---->由libvirt腳本自動寫入
 0     0 REJECT     all  --  *      *       0.0.0.0/0            0.0.0.0/0           reject-with icmp-host-prohibited  ---->iptables的系統預設
Chain OUTPUT (policy ACCEPT 181K packets, 138M bytes)
pkts bytes target     prot opt in     out     source               destination

 

如果沒有default的話,或者需要擴展自己的虛擬網絡,可以使用命令重新安裝NAT。

NAT方式的適用范圍

桌面主機虛擬化。

創建步驟

#virsh net-define /usr/share/libvirt/networks/default.xml

此命令定義一個虛擬網絡,default.xml的內容:

<network>
  <name>default</name>
  <bridge name="virbr0" />
  <forward/>
  <ip address="192.168.122.1" netmask="255.255.255.0">
    <dhcp>
      <range start="192.168.122.2" end="192.168.122.254" />
    </dhcp>
  </ip>
</network>

也可以修改xml,創建自己的虛擬網絡。

標記為自動啟動:

#virsh net-autostart default
Network default marked as autostarted

啟動網絡:

#virsh net-start default
Network default started

網絡啟動后可以用命令brctl show 查看和驗證。

修改/etc/sysctl.conf中參數,允許ip轉發:

net.ipv4.ip_forward=1


免責聲明!

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



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