iptables后,外網訪問網站可以,內網無法訪問【已解決】


  1. 最近,到處看到有人問這個問題,怎么以前沒人問,現在這么多人問呢?前兩天我還在華為的論壇上仔細的說了這個問題,現在復制到這邊來。希望能幫助大家理解這個問題。    
  2.             這是個理論問題,我們先從NAT講起:NAT有兩種基本類型,一種是SNAT(Source   NAT),一種是DNAT(Dest.   NAT).SNAT即源NAT是改變數據包的IP層中的源IP地址,一般是用來將不合法的IP外出請求轉換成合法的IP的外出請求,就是普通的用一個或者幾個合法IP來帶動一整個非法IP段接入。   DNAT即目的NAT,就是改變數據包的目標IP地址,使得能對數據包重新定向,可以用做負載均衡或者用於將外部的服務請求重定向到內網的非法IP的服務器上。      
  3.               好了,羅嗦了一通,大致就是這樣了。   那么之所以會出現無法在DNAT的內部網絡通過DNAT服務的外部IP地址來訪問的情況,是因為,如果服務從內部請求,那么經過DNAT轉換后,將目標 IP改寫成內網的IP地址,譬如172.16.10.254,而請求的機器的IP是   172.16.10.100,數據包被網關172.16.10.1順利的重定向到172.16.10.254的服務端口,然后,192.16.10.254根據請求發送回應給目的IP地址,就是172.16.10.100,但是,問題出現了,因為172.16.10.100請求的地址是外部IP   假設是221.232.34.56,所以他等待着221.232.34.56的回應,而172.16.10.254的回應請求被看做是非法的,被丟棄了。這就是問題的所在了。    
  4.               呵呵,寫的有點混亂,不好意思。不知道大家明白沒有.那么如何解決這個問題,我說個用iptables實現的例子,    
  5.           #我們先把發向外網IP221.232.34.56   80號端口的數據重定向到172.16.10.254   理論上來講,如果只要從外網訪問,這就完成了。    
  6.           iptables   -t   nat   -A   PREROUTING   -p   tcp   -d   221.232.34.56   --dport   80   -j   DNAT   --to-destination   172.16.10.254      
  7.           #解決內網通過外網IP訪問的情況    
  8.           iptables   -t   nat   -A   POSTROUTING   -p   tcp   -d   172.16.10.254   --dport   80   -j   SNAT   --to-source   172.16.10.1    
  9.           我們將內網的請求強行送回到網關172.16.10.1,依靠網關在內核建立的狀態表再轉發到真實的請求地址172.16.10.100.    
  10.           當然,這並不是最好的解決方法,最好的解決方法是將服務器放在另外一個網段,也就是說所謂的DMZ(解除武裝區),這樣就不會出現上面所說的問題了。    
  11.           如果大家還不清楚,給個參考文檔:    
  12.           http://iptables-tutorial.frozentux.net/iptables-tutorial.html#DNATTARGET   


免責聲明!

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



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