上次咱們已經對iptables做了一個瞭解,並且後面也舉了很多常用的例子。也許大家覺得很難,特別是那四張表和五個鏈。其實真正用的時侯沒哪麼複雜,等一下你們看完下面兩個應用就會覺得確實不難。
每個人學技術的目的都是爲客戶解決問題,給客戶拿出一套解決方案來。這樣纔算是做的有用功。Iptables有很多功能,咱們不用好高騖遠。學兩招真正用的上技術是比較現實的。說這番話的目的是爲了緩解大家面對iptables的壓力。
NAT就不用說了吧,相信大家也不會陌生。不管哪個企業哪個機構都會用到它,想上網除了走代理就是走NAT,所以咱們必須要把這個技術吃透。不但要掌握在路由、windows上的配置還要掌握在Linux系統上的配置。下面來看一下SNAT和DNAT的應用。
拓撲圖如下:
現在大家看到拓撲了,我們的目的是讓內網用戶安全的上網,另外就是把內網中的一臺主機名爲www.zpp.com的web服務器發佈出去。這些應用只要是個公司肯定都會有的,前面雖然已給出了用CISCO路由、windows、ISA等設備的解決方案,但就性能和成本來說用Linux肯定是最划算的,現在大部分網吧、小型企業都用的是iptables.
這裏爲了大家閱讀方便我簡單羅列一下拓撲上的信息:
1>.網關服務器iptables有兩塊網卡,TCP/IP參數如下:
Eth0(LAN接口)IP:192.168.1.1/24
Eth1(WAN接口)IP:61.134.1.4/24
2>.內網Web服務器的IP爲:192.168.1.10/24網關:192.168.1.1 主機名:www.zpp.com
還是一樣分兩部分來說,先讓內網中的用戶上了網再說。然後再讓Internet用戶訪問咱們的Web服務器。
第一部分:利用SNAT技術使內網用戶安全上網。
SNAT(Source Network Address Translation)源網絡地址轉換,咱們用這個技術既可以化解四版本的地址危機,又可以起到隱藏局域網信息的功能。下面來看看如何使用SNAT技術使用內網用戶安全上網。
1. 確認兩塊網卡的TCP/IP參數設置.如圖:
2. 開啓網關服務器的路由轉發功能。
1>.到/etc目錄下找到文件sysctl.conf將文件中的net.ipv4.ip_forward = 0,改爲net.ipv4.ip_forward = 1.如圖:
2>.執行命令sysctl –p使咱們的修改生效。如圖:
3. 爲局域網訪問Internet的數據包採用SNAT策略,將源地址更改爲服務器的公網IP地址。
我這兒內網是192.168.1.0/24網段,所以源地址是192.168.1.0/24.
這時大家可能會問,如果我用的是ADSL撥號上網IP地址不是固定的而是動態的,如何設置這個策略?此時我們可以使用MASQUERADE(僞裝)策略。MASQUERADE是一種特殊的SNAT技術,它照樣可完成修改(僞裝)數據包源IP地址的工作,只不過它會自動獲取外網接口的IP地址。下面是MASQUERADE策略的用法:
說明:使用iptables命令設置MASQUERADE策略時,只需要去掉SNAT策略中的“—to-source IP地址”,改爲“-j MASQUERADE”指定數據包處理方式即可。ADSL通常使用PPPoE技術,在Linux系統中,對應的連接名稱爲ppp0、ppp1等,如果沒不確定編號可以用ppp+代替。
現在來測試一下:
在內網的客戶機上使用命令nslookup,可以成功解析出外網google網站的IP說明DNS請求可以通過SNAT正常進行。如圖:
從下圖可以看到我們利用SNAT我們可以成功的訪問外部站。
第二部分:利用DNAT技術將位於咱們局域網內部的web服務器發佈出去。
DNAT(Destination Network Address Translation)目標網絡地址轉換。和SNAT剛好相反,DNAT更靈活一點它可以用在nat表的PREROUTING鏈和OUTPUT鏈或被它調用的鏈。咱們用DNAT技術可以將內網或DMZ區中的服務器發佈出去,
只需要一部搞定如下。在網關服務器上添加DNAT映射,將外網用戶訪問網關主機公網IP(地址爲:61.134.1.4)80端口的數據包更改爲網站主機的IP(地址爲:192.168.1.2).如圖:
現在我們到外網主機上去測試一下,可以看到可以成功訪問內網的web主機。
(注:我這裏開了一臺啓動了httpd服務的Linux主機用於模擬內網web主機www.zpp.com)
通過命令nslookup可以測試出,主機www.zpp.com所對應的IP是網關服務器的外網口地址。
OK!現在我們iptables中的兩個關鍵技術——SNAT、DNAT解決了兩個關鍵的問題——用戶安全上網的問題和發佈內網服務器的問題。大家也可以發現雖然是關鍵的東西,但做起來並不難,幾乎都只是一條命令搞定。這也正順應了一句話——Linux是一種高起點低應用的技術,往往我們再學的時侯感覺很困難,但真真用的時侯就不哪樣認爲了。