KVM NAT(網絡地址轉換模式)


NAT(網絡地址轉換模式)

使用NAT模式,就是讓虛擬系統借助NAT(網絡地址轉換)功能,通過宿主機器所在的網絡來訪問公網。也就是說,使用NAT模式可以實現在虛擬系統里訪問互聯網。很顯然,如果你只有一個外網地址,此種方式很合適。
KVM虛擬機Nat方式上網:
virsh net-list

 

查看當前活躍的網絡,可以看到一個default網絡,這個就是一個默認的Nat網絡了。
virsh net-dumpxml default

 

可以查看該網絡的詳細配置如下:
    <network>
      <name>default</name>
      <uuid>75dbebde-fc15-4350-8a06-f1432f9e6d30</uuid>
      <forward mode='nat'>
        <nat>
          <port start='1024' end='65535'/>
        </nat>
      </forward>
      <bridge name='virbr0' stp='on' delay='0' />
      <mac address='52:54:00:bc:f2:65'/>
      <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>

 

可以看到該網絡搭建在一個網橋virbr0上,這個網橋在安裝並啟動libvirt的時候自動生成。然后在客戶機的XML配置文件中添加標簽interface內容如下:
    <interface type='network'>
       <mac address='52:54:00:c7:18:b5'/>
       <source network='default'/>
       <model type='virtio'/>
       <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>
    </interface>

 

 
則可以讓客戶機用nat方式來上網了,經驗證,客戶機可以獲取到122網段,2到254之間的一個ip地址。
我們可以直接編輯修改default網絡的配置:
virsh net-edit default

 

也可以直接將default網絡干掉,然后再重新定義:
virsh net-undefine default

 

重新創建一個default.xml文件,自定義其中的內容,可以指定某個mac地址對應某個ip,指定某個ip段。例如下面的內容,name對應的是客戶機的名字。
 
    <network>
      <name>default</name>
      <uuid>dc69ff61-6445-4376-b940-8714a3922bf7</uuid>
      <forward mode='nat'/>
      <bridge name='virbr0' stp='on' delay='0' />
      <mac address='52:54:00:81:14:18'/>
      <ip address='192.168.122.1' netmask='255.255.255.0'>
        <dhcp>
          <range start='192.168.122.2' end='192.168.122.254' />
          <host mac='00:25:90:eb:4b:bb' name='guest1' ip='192.168.5.13' />
          <host mac='00:25:90:eb:34:2c' name='guest2' ip='192.168.7.206' />
          <host mac='00:25:90:eb:e5:de' name='guest3' ip='192.168.7.207' />
          <host mac='00:25:90:eb:7e:11' name='guest4' ip='192.168.7.208' />
          <host mac='00:25:90:eb:b2:11' name='guest5' ip='192.168.7.209' />
        </dhcp>
      </ip>
    </network>

 

 
然后用命令:
virsh net-define default.xml
virsh net-start default

 

 
啟用一個客戶機,檢查網絡時候可用。
 
 

端口轉發

下面均為介紹iptables相關內容,如果願意使用rinetd或者其他的工具,或者使用橋接模式的,可以不用看了。
 
如果需要遠程管理我們可以使用自帶的vnc,但如果認為vnc不如系統自帶的3389或ssh方便,我們可將NAT網絡內的端口轉發出來。
 
操作完上面第三步內開啟轉發的功能后,進行如下操作。
 
注:第四步已經將防火牆關閉,現在是在關閉防火牆的環境下操作,如果要開啟防火牆,請自行檢查iptables規則是否與防火牆沖突。
 
下面兩條規則為將宿主機的2009端口,自動轉發到虛機的3389端口。
 
iptables -t nat -A PREROUTING -p tcp --dport 2009 -j DNAT --to-destination 192.168.122.101:3389
iptables -t nat -A POSTROUTING -p tcp --dport 2009 -d 192.168.122.101 -j SNAT --to 192.168.122.1

 

開啟轉發后一直不通,因為對iptables不熟,這個坑了我2天,網上查詢資料后,終於解決。因為默有兩條拒絕規則,刪除即可。
首先將規則列出:
iptables -nL -v --line-numbers -t filter

 

會有兩條如下規則:
4        7   420 REJECT     all  —  *      virbr0  0.0.0.0/0            0.0.0.0/0            reject-with icmp-port-unreachable
5        0     0 REJECT     all  —  virbr0 *       0.0.0.0/0            0.0.0.0/0            reject-with icmp-port-unreachable

 

然后刪除這兩條規則,刪除兩次第四條即可,因為刪除第四條后,第五條又變成第四條了。
iptables -D FORWARD 4 -t filter   #刪除編號為4的FORWARD規則

 

然后進行保存並重啟iptables服務:
service iptables save #保存規則
service iptables resart #重啟服務

 

轉發端口即可工作了。
 
 
 
下面要有一個大坑介紹。
 
我們上面已經了“save”保存了,但宿主機重啟后,iptables自行恢復,屏蔽規則也恢復了,端口轉發又無法工作了。
 
因為在centos7下,需要把配置寫入文件,然后開機后再從配置文件讀取才可以。目前只找到這個方法。
 
iptables-save > /etc/sysconfig/iptables #文件路徑可自行指定。
在 /etc/rc.local內加入如下內容;
iptables-restore < /etc/sysconfig/iptables
service iptables save
service iptables restart

 

好了,現在全部搞定了!!
 
另外由於宿主機映射到外網的端口是由網管分配,附一條轉發本地ssh端口的iptables規則。
 
-A PREROUTING -p tcp -m tcp --dport 3000 -j REDIRECT --to-ports 22

 


免責聲明!

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



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