究竟為什么內網不能用公網地址訪問內網服務器。不是任何設備都存在此問題,拿cisco的設備來說,不同版本的ios,有的就沒有這個問題,而有的版本就有問題,netscreen的防火墻也沒有這個問題,關鍵是開發者有沒有意識到這個問題,通過修改ios,完全可以避免。對于這個問題,解決方法是有,比如內網dns欺騙、pix上得alias等等,但是究竟為什么有些設備不支持呢?今天我斗膽發個貼,因為有些結論純粹靠想,也沒有設備進行試驗,所以希望大家跟貼討論,達到拋磚引玉的目的,謝謝了先!
以下所有內容均針對出口是以太網的情況,對于串口接入,不會出現這種問題。
本地出口地址是5.5.5.1,isp對端是5.5.5.2(掩碼沒寫,稍后會分別討論)。 1.1.1.1和1.1.1.2是內網兩臺服務器的內網地址,被靜態映射到公網上的5.5.5.4和5.5.5.5. 內網的pc全部被pat到出口上。本地路由器一條缺省路由到isp對端。
我想這個拓撲應該是非常普遍的了,我認為就是因為這個非常普遍的拓撲,造成了很多人所反應的“內網不能通過公網地址訪問內網服務器”這個問題。我認為這個問題的關鍵原因就在于掩碼,就是在3層上做文章。 //本文來自錯新站長站www.49028c.com轉載請注明
第一節
先來看看一般情況下,這個環境的掩碼的規劃。假設isp分配一段8地址子網給本地,這樣isp路由器接口和本地路由器接口共占用2個,網絡地址、廣播地址共占用2個,可用的一共4個,掩碼是248。對于圖示的拓撲,假設本地路由器出口掩碼是248(內網pc的pat地址相應的也就是掩碼為248),被映射的兩個地址掩碼也是248,這個最普遍的掩碼規劃,結果是:服務器、內網pc的 pat地址、本地出口地址全部處于同一個網段。我們分析一個包的來龍去脈,來看看到底內網pc通過公網地址可否訪問到內網服務器。
假設內網一臺pc1.1.1.111發出ping 5.5.5.4(服務器的公網地址)請求,包源地址1.1.1.111,目的地址5.5.5.4,路由器收到這個包后,檢查路由表,發現5.5.5.4就位于自己的出口網段(假設出口為以太口),所以直接通過arp廣播請求5.5.5.4的mac地址,問題出現了,誰會應答這個請求呢?沒有人,所以,這種情況下(所有公網地址在同網段)當然不會通。不但內網訪問服務器不行,服務器之間通過公網地址訪問也不會通。
結論一:只要出口地址和服務器映射的公網地址在同網段,就有問題。
第二節
基于上面的討論,我們知道了只要出口地址和服務器映射的公網地址在同網段,就會發生 “無人應答”的必然結果,所以我們這次改變掩碼規劃,將出口掩碼變長,變為252(isp掩碼也要相應改變)。在這里首先聲明一個要點,就是nat池的地址可以和出口不在同網段,以前有帖子也討論過,我自己一開始也迷惑,后來想明白了,只要isp路由器上有這些地址的路由就可以,下一條是本地路由器,這樣本地路由器便可以接受到這些包。
新聞熱點
疑難解答