上次我們已經對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是一種高起點低應用的技術,每每咱們再學的時侯感受很困難,但真真用的時侯就不哪樣認爲了。