centos7 && centos6.5 部KVM使用NAT聯網並為虛擬機配置firewalld && iptables防火牆端口轉發
一、准備工作:
1: 檢查kvm是否支持
a: grep '(vmx|svm)' /proc/cpuinfo
vmx是intel cpu支持的
svm是AMD cpu支持的
如果flags: 里有vmx 或者svm就說明支持VT;如果沒有任何的輸出,說明你的cpu不支持,將無法使用KVM虛擬機。
b: 確保BIOS里開啟VT: Intel(R) Virtualization Tech [Enabled]
c:lsmod | grep kvm
命令輸出中必須存在 kvm_intel (intel CPU的情況下)
如果沒有輸出 則運行 modprobe kvm-intel
d: 設置橋接網絡
yum install -y bridge-utils
復制ifcfg-eth0 為 ifcfg-br0,並將ifcfg-br0改為如下配置
NM_CONTROLLED=no DEVICE=br0 STP=yes TYPE=Bridge BOOTPROTO=static DEFROUTE=yes IPV4_FAILURE_FATAL=no NAME=br0 UUID=924f955d-4623-499c-8179-fc22420cb0d8 #可不寫 ONBOOT=yes IPADDR=192.168.169.92 NETMASK=255.255.255.0
修改ifcfg-eth0:
HWADDR=00:26:B9:36:54:FB
TYPE=Ethernet
BOOTPROTO=none
BRIDGE=br0
DEFROUTE=yes
PEERDNS=yes
PEERROUTES=yes
IPV4_FAILURE_FATAL=no
NAME=eth0
UUID=d20d1fd5-e3bc-43c2-ac37-c0c4a9484a71
ONBOOT=yes
NM_CONTROLLED=no
重啟網絡
service network restart
檢查橋接:
brctl show
e: 安裝kvm
yum -y install kvm python-virtinst libvirt virt-manager qemu-kvm-tools virt-viewer virt-v2v
執行 systemctl enable libvirtd && systemctl start libvirtd
virsh list --all
f: 安裝橋接網絡
創建br0.xml 配置文件(文件中uuid保證唯一即可
<network>
<name>br0</name>
<uuid>fb48b969-b9f4-e859-d957-50aedd850fb4</uuid>
<forward mode='bridge'>
<bridge name ='br0'/>
</forward>
</network>
執行命令 virsh net-define br0.xml virsh net-undefine br0 刪除橋接網絡 virsh net-list all 查看橋接網絡
virsh net-list --all
virsh net-start br0
二、安裝映像:
1: 創建磁盤文件
創建VM硬盤,使用如下命令:
qemu-img create -f qcow2 nat.img 200G 兩種格式或qemu-img create -f raw win2008.img 200G(虛擬機的硬盤一定要是 qcow2 格式,否則無法使用快照功能、nat聯網功能等)
2: 下載 centos7.iso或上傳到服務器 (虛擬機.iso)
Windows鏡像需下載 virtio for windows driver (https://launchpad.net/kvm-guest-drivers-windows/+download)
3: 啟動qemu-kvm安裝centos7(啟動創建虛擬機)
virt-install -n nat -r 2048 --vcpus=1 --os-type=linux --boot cdrom,menu=on -c centos7.iso --disk path=nat.img,format=qcow2,bus=ide --network network=default --vnc --vnclisten=0.0.0.0 --vncport=5901
4: 使用root執行firewall-cmd --add-port=5901/tcp 允許5901vnc端口被外網訪問
5: 在自己電腦上下載vnc客戶端,mac osx可以用Remote Desktop - VNC
windows電腦可以使用tightvnc
打開鏈接vnc://43.243.130.89:5901 進行一步步安裝
VM系統安裝完畢后,我們進入VM中。默認情況下VM此時使用的DHCP方式獲取IP地址,如果你在安裝系統時未進行網絡配置。我們現在修改VM使用靜態IP地址,如下:
vi /etc/sysconfig/network-scripts/ifcfg-eth0
網絡配置完畢后,我們來測試下網絡通信情況。如下
通過上圖我們發現,此時VM通過NAT網絡獲取的IP地址無法與其他網段的服務器進行通信。是不是我們的NAT配置出錯?還是其他原因?
這個其實不是我們NAT配置出錯,而是要是NAT網絡與其他服務器進行正常通信還需要做其他工作。
現在切換到KVM服務器,開啟KVM服務器的IP轉發功能。編輯/etc/stsctl.conf文件,把其中的net.ipv4.ip_forward = 0修為net.ipv4.ip_forward = 1,如下:
vi /etc/sysctl.conf
或者使用如下命令:
echo 1 >/proc/sys/net/ipv4/ip_forward
不過這種方法是暫時的,系統重啟后消失。要使其永久生效,建議使用直接修改/etc/stsctl.conf文件的方法。
/etc/stsctl.conf文件修該完畢后,我們要使用sysctl –p使其生效。如下
以上配置完畢后,我們還要開啟KVM服務器的IPtables的轉發功能,使用如下命令:
iptables -t nat -A POSTROUTING -o br0 -j MASQUERADE
centos7_firewalld配置方法,如下 :
firewall-cmd --permanent --direct --passthrough ipv4 -t nat -A POSTROUTING -o br0 -j MASQUERADE
firewall_cmd --reload
注意該命令中的網卡時br0,而不是eth0。
此時,我們再切換VM中測試的網絡通信情況。如下:如果還不通請加上DNS:8.8.8.8 等其他可用DNS。
通過上圖我們可以很明顯的看到,目前VM可以與服務器以及外網正常通信。
以上就是KVM為VM配置NAT網絡的整個過程。
到此就可以了,要想在深度配置繼續往下走
三、下面我們可以為VM配置端口。
為VM配置iptables端口轉發
為什么要為VM配置iptables端口轉發呢?這個是因為有些業務是在公網的,有時候為了資金考慮不得不盡量節省公網IP的個數。比如現在我想管理KVM中的VM,通過SSH方式。但是KVM服務器對外只有一個公網IP,而且KVM服務器是在IDC機房中。
如果要達到我上述的要求,只能在KVM服務器為VM配置IPtables端口轉發。
現在我們還以上述VM為例,目前該KVM的公網IP為192.168.1.102,VM的IP為192.168.122.173,現在我要求通過訪問KVM的8022端口訪問VM的22端口。
要想達到上述功能,我們需要在KVM服務器上設置如下IPtables規則:
iptables -t nat -A PREROUTING -d 192.168.1.102 -p tcp -m tcp –dport 8022 -j DNAT –to-destination 192.168.122.173:22
iptables -t nat -A POSTROUTING -s 192.168.122.0/255.255.255.0 -d 192.168.122.173 -p tcp -m tcp –dport 22 -j SNAT –to-source 192.168.122.1
注意這兩條IPtables規則:
第一條規則很好理解,就是把所有訪問192.168.1.102:8022的請求轉發到192.168.122.173:22的端口上。
第二條規則我的理解是,把所有來自192.168.122.0/255.255.255.0網段訪問192.168.122.173:22的數據全部通過192.168.122.1這個網關轉發出去。
現在我們來實際效果,如下:
ifconfig eth0|grep “inet addr”|awk ‘{print $2}’|cut -d: -f2
ssh -p 8022 root@192.168.1.102
通過上圖我們可以看出,我們通過192.168.1.213這台服務器使用ssh通過8022端口登錄到IP為192.168.122.173的VM。
很明顯這個已經達到我們的要求。
在這只是一個例子,其實我們也完全可以在VM192.168.122.173上搭建一個web,然后通過KVM的IPtables端口轉發下,公網就可以訪問了。下面再來個例子,如下:
iptables -t nat -A PREROUTING -d 192.168.1.102 -p tcp -m tcp –dport 8023 -j DNAT –to-destination 192.168.122.173:80
iptables -t nat -A POSTROUTING -s 192.168.122.0/255.255.255.0 -d 192.168.122.173 -p tcp -m tcp –dport 80 -j SNAT –to-source 192.168.122.1
以上這個例子是通過192.168.102:8023訪問VM92.168.122.173的web服務器。
為了在下次重啟KVM服務器后,這些IPtables規則繼續使用。我們要把這些規則保存下,使用如下命令:
/etc/init.d/iptables save
more /etc/sysconfig/iptables
至此我們有關KVM的NAT方式網絡連接以及為VM配置IPtables端口講解完畢。