因為工作需要,在師傅的帶領下實現了一個虛擬機的SNAT IP轉發功能,該功能實現的效果大概就是將虛擬機當做電腦的路由器,主機的請求通過虛擬機轉發出去,接收到的回應也通過虛擬機解析回來,以便在虛擬機上開發防火牆功能。
先介紹一下設備的情況,一台很久的台式機(大概就是學校機房那種,內存3G左右,處理器i3幾代不清楚)裝載Windows7系統(OK,這樣的配置也是可以運行虛擬機的,台式機還是比筆記本強得多),虛擬機裝載Centos6.5系統,內存分配1G,磁盤空間40G。OK話不多說,我們直接開干吧。
我們要實現的目標大概如下圖所示:
我們知道虛擬機要聯網是需要一個網絡適配器的,對於目標虛擬機來說需要兩個網絡適配器,一個用於連接外網(Internet),另一個用於連接內網(Windows7),兩個網卡使用不同網段的IP,在虛擬機中實現路由轉發功能。
首先為虛擬機新建一個網絡適配器,右鍵自己的虛擬機--->設置--->底部add”--->網絡適配器
進入Centos系統,所有關於網絡的配置文件都在:
/etc/sysconfig/network-script/
其中ifcfg-eth0就是網絡適配器的配置文件,在這里,我們使用虛擬網卡的方式完成虛擬機路由器的配置,所以不需要為第二個適配器設置配置文件,它將處於混雜模式,沒有IP地址,我們想讓第一個網絡適配器連接到外網,第二個適配器連接到內網(連接Windows),就需要進行一系列設置。
假設外網的IP為192.168.111.9,網關為192.168.111.1,在ifcfg-eth0中將IP地址設置為外網IP,網關設置為外網網關。假設內網IP(WindowsIP)為192.168.133.5,那么需要將內網的網關設置為第二個適配器的IP地址,然而第二個適配器處於混雜模式,沒有IP,需要新建一個虛擬網卡,為其設置IP並且將其綁定到第二個適配器上。
新建虛擬網卡
brctl addbr br0
將其綁定到適配器上
brctl addif br0 eth1
為虛擬網卡設置IP地址(作為內網的網關使用)
ifconfig br0 192.168.133.4
將Windows系統的網關設置為br0的IP地址
重啟網絡服務(注意上面虛擬網卡的創建和設置是不會自動保存的,下次開機之后就沒有了,建議寫一個腳本文件將上面的內容寫進去,每次開機都運行腳本)
service network restart
這個時候兩個適配器都各自連接到了該連接的地方,現在需要對兩張適配器進行IP請求的轉發將Windows的請求由第二個適配器eth1轉發到eth0上去,通過eth0與外界溝通。
首先開啟系統的IPv4的轉發功能,配置文件如下
/etc/sysctl.conf
找到下面屬性
net.ipv4.ip_forward
將其值改為1,代表允許IPv4轉發
在轉發的部分使用了iptables工具進行IP的轉發,iptables是對數據包進行檢測的一款簡易訪問工具,將規則組成一張表,實現了絕對詳細的訪問控制功能,使用下面命令進行IP轉發
iptables -t nat -A POSTROUTING -s 192.168.133.0/24 -o eth0 -j SNAT --to-source 192.168.111.9
代表將192.168.133.0/24網段上所有的IP請求都由192.168.111.9轉發。
iptables設置的內容保存有兩種方法,第一種將配置文件存放到一個目錄
iptables-save >/var/log/iptables.backup
需要讀取配置時
iptables-restore </var/log/iptables.backup
第二種方式是使用下面命令自動存儲
service iptables save
當然還是要重啟服務
service iptables restart
service network restart
如此一來就完成了虛擬機充當路由器轉發IP的功能