1、源linux
在學習鳥哥的linux私房菜NAT部分的時候爲了加深對postrouting和prerouting的理解,上網查了相關的一些資料。有一篇博文寫的很好,給了我不少的啓示:/jis1237/article/details/17676659(csdn),下面談談本身的所得。bash
2、關鍵詞連接服務器
訪問外網---發一個數據報---路由規則審覈一哈---snat( 源地址轉換)---postrouting(路由規則以後的動做)---從內網出post
外網訪問內網---發送一個數據報---dnat (目的地址轉換)---prerouting(路由規則以前的動做)---路由規則審覈一哈---進內網
細想一下上述過程:內網想要訪問外網網頁,發送一個數據報,首先路由規則要審覈一哈你能不能發,ok了,能了纔會繼續作snat,因此是路由規則以後的動做。外網想要訪問內網服務器,可是其目的ip確是公網的ip,必定要先通過dnat轉換成私有ip後,接下來路由規則再審覈你能不能進來,因此dnat是路由規則以前的動做。
接受路由規則審覈的是私有ip+外網ip的組合。
上述理解能夠知道snat爲何對應的是postrouting,dnat爲何對應的是prerouting。或者換句話說:snat(原地址轉換)在路由規則以後,dnat(目的地址轉換)在路由規則以前。也能夠說先路由規則,再源地址轉換;先目的地址轉換,再路由規則。學習
上述的內網和外網是相對的概念,有兩個局域網A和B,對於A內的主機,A是內網,B是外網;對於B內的主機,B是內網,A是外網。代理
3、透明代理code
透明代理的原理:你想要從內網訪問外網的網頁,透明代理會把你的請求重定向,轉發到內網的某一服務器,實際的過程至關於更改數據報的目的地址,因此說通過了dnat的過程,因此用的是prerouting。blog
雖然說上述的過程是你想訪問外網,即從內網出,有點postrouting的感受.....ip
因此切記不要用什麼內網出,內網進去理解prerouting和postrouting。路由
需求:用內網的192.168.1.110作訪問外網1.2.3.4的透明代理 具體的代碼是:
iptables -t nat -A PREROUTING -i eth0 -d 1.2.3.4 -j DNAT --to-destnation 192.168.1.110