前言:一般運營商寬帶分為“運營商公網寬帶”和“運營商內網寬帶”,企業或者家庭中用公網寬帶可以實現一些對外的服務器環境,但因為全球網絡設備的增多,ipv4無法給所有網絡設備分配地址,這時候便出現了“運營商內網寬帶”,通過NAT和內網(局域網)、公網的方法解決了ipv4地址緊張問題,目前家庭寬帶一般都是內網寬帶(電信、聯通個人可以申請公網IP,移動基本無法申請成功),也正是因為“運營商內網寬帶”,所以一般家用寬帶現在均無法實現在家建設對外服務器,不過可以通過內網穿透等技術實現,本文不做過多闡述。本文中的DMZ、端口映射、端口轉發、UPNP只有在“運營商公網寬帶”中用來做對外web服務器或遠程跳板機等才有意義,所以用它們之前,你得有個公網寬帶。
這里提供一種如何查看自己是否有公網IP的方法:打開百度輸入“IP”進行搜索,會跳出來一個IP地址,然后你打開路由器設置界面,查看WAN的IP地址,如果這兩個IP地址一模一樣,那么恭喜你,你擁有一個公網IP。如果不一樣就不是公網IP。
下面是簡單畫的倆張運營商寬帶網絡圖:
對比這倆張圖可以發現內網寬帶比公網寬帶在運營商那邊多了一個NAT,相當於保留地址實際就是運營商那邊的一個局域網IP,當然圖片只是示意,運營商那邊可能不止一個NAT(某動的寬帶就有大量這種行為,一層一層的NAT,這也是為什么某動寬帶有些網站打不開的原因之一),而這也是為什么內網寬帶無法做對外服務器的原因,左圖公網寬帶只要設置路由器中的NAT(靜態端口映射)內網IP+內網端口和公網IP+端口對應就能實現內網主機與公網主機的雙向訪問,而右圖中盡管路由設置了NAT(靜態端口映射),此時也只是實現了保留地址與局域網的對應關系,在運營商部分的NAT是PAT(動態端口映射),即一個公網IP,通過多個不同端口來映射內網設備,當沒有連接時,映射將會取消,再次連接時再自動分配一個映射端口,且個人無法進行設置對應關系,所以內網IP+端口映射到最后的公網IP+未知端口上,此時局域網中的主機只能訪問公網中其他主機,而公網中其他主機因為找不到局域網中映射的公網具體端口,不能訪問局域網主機,針對這種情況,我個人有個想法,就是通過掃描最后的公網IP開放端口,然后一個端口一個端口進行連接測試,最終應該會找到映射的那個端口,不過這種方法不夠現實。
注意:本文提到的所有技術僅針對ipv4,在ipv6網絡中理論不需要NAT之類的方法,因為ipv6不需要考慮全球地址資源不夠的問題,每一台設備都會分配一個公網ipv6地址,當然為了安全考慮,實際中運營商會做相關限制,比如定期更換ipv6地址並給ipv6網絡也做NAT。
名詞解釋:
NAT(網絡地址轉換方法):
允許一個整體機構以一個公用IP地址出現在Internet上。顧名思義,它是一種把內部私有網絡地址(IP地址)NAT轉發成合法公有網絡IP地址的技術。隨着接入Internet的計算機數量的不斷猛增,IP地址資源也就愈加顯得捉襟見肘,顯然,這樣少的IP地址根本無法滿足網絡用戶的需求,於是也就產生了NAT技術。雖然NAT可以借助於某些代理服務器來實現,但考慮到運算成本和網絡性能,很多時候都是在路由器上來實現的。NAT不僅能解決IPv4地址不足問題,還可以為私網提供了安全保障。
NAT包括:靜態NAT、動態NAT、ALG(應用程序級網關技術)、PAT(NAPT,即網絡地址端口轉換),這里着重解釋下PAT。
PAT(NAPT,即網絡地址端口轉換):
可將多個內部地址映射為一個合法公網地址,但以不同的協議端口號與不同的內部地址相對應,也就是<內部地址+內部端口>與<外部地址+外部端口>之間的轉換。NAPT普遍用於接入設備中,它可以將中小型的網絡隱藏在一個合法的IP地址后面。PAT(NAPT)也被稱為“多對一”的NAT。PAT(NAPT)的主要優勢在於,能夠使用一個全球有效IP地址獲得通用性。主要缺點在於其通信僅限於TCP或UDP。
DMZ(隔離區):
一般為外網提供服務的服務器(如公司的對外宣傳網站)很容易被黑客攻擊。所以,如果把對外提供服務的服務器放到企業內網,一旦被攻陷入侵,黑客就可以利用這台機器(肉機)做跳版,通過局域網的漏洞與共享等來攻克其他內網機器。因此有必要建立一個特殊的區域,把這個區域起名為DMZ,即隔離區,或者叫非軍事化區。如果把本文中的“端口映射”看完,你會發現DMZ實際就是“多個端口映射組合”。那為什么不把這些對外網提供服務的機器單獨弄一條線連到公網呢?因為一般中小企業都僅有一個出口。
DMZ區要求:
1.內網可以訪問外網: 內網的用戶顯然需要自由地訪問外網。在這一策略中,防火牆需要進行源地址轉換。
2.內網可以訪問DMZ: 此策略是為了方便內網用戶使用和管理DMZ中的服務器。
3.外網不能訪問內網: 很顯然,內網中存放的是公司內部數據,這些數據不允許外網的用戶進行訪問。
4.外網可以訪問DMZ: DMZ中的服務器本身就是要給外界提供服務的,所以外網必須可以訪問DMZ。同時,外網訪問DMZ需要由防火牆完成對外地址到服務器實際地址的轉換。
5.DMZ不能訪問內網: 很明顯,如果違背此策略,則當入侵者攻陷DMZ時,就可以進一步進攻到內網的重要數據。
6.DMZ不能訪問外網: 此條策略也有例外,比如DMZ中放置郵件服務器時,就需要訪問外網,否則將不能正常工作。
應用場景:
因為DMZ是將計算機全部公開顯露在互聯網上,也就是將一台內網機器所有端口全部映射出去,所以適合要映射的服務端口全部在一台內網機器上且數量較多的時候,一般用於企業服務器對外端口較多的場景。
端口映射(手動):
端口映射是NAT的一種,就是將內網中的主機的一個端口映射到外網主機的一個端口,提供相應的服務。當用戶訪問外網IP的這個端口時,服務器自動將請求映射到對應局域網內部的機器上。比如,我們在內網中有一台Web服務器,但是外網中的用戶是沒有辦法直接訪問該服務器的。> 於是我們可以在路由器上設置一個端口映射,只要外網用戶訪問路由器ip的80端口,那么路由器會把自動把流量轉到內網Web服務器的80端口上。並且,在路由器上還存在一個Session,當內網服務器返回數據給路由器時,路由器能准確的將消息發送給外網請求用戶的> 主機。在這過程中,路由器充當了一個反向代理的作用,他保護了內網中主機的安全。端口映射可以實現外網到內網和內網到外網雙向的通信。
動態端口映射:其實就是PAT網關的工作方式,即一個公網IP,通過多個不同端口來映射內網設備,當沒有連接時,映射將會取消,再次連接時再自動分配一個映射端口。
靜態端口映射: 就是在NAT網關上開放一個固定的端口,然后設定此端口收到的數據要轉發給內網哪個端口上,不管有沒有連接,這個映射關系都會一直存在。
應用場景:
1.動態端口映射最典型的場景就是運營商對家庭寬帶內網上網,有興趣可以百度NAT相關知識。
2.靜態端口映射可以映射內網中任意一台計算機的任意一個服務,適用於要映射的服務端口分散在幾個機器上,且數量不多的時候,一般用於企業或公網家庭寬帶中的web服務器或其他服務器對外端口較少的場景以及PT。這里要注意被映射端口所在主機做好與內網其他機器的通信防護,以防黑客入侵到此映射主機后繼而破壞內網其他主機。
端口轉發(手動):
有時被叫做隧道,是安全殼(SSH)為網絡安全通信使用的一種方法。比如,我們現在在內網中,是沒有辦法直接訪問外網的。但是我們可以通過路由器的NAT方式訪問外網。假如我們內網現在有100台主機,那么我們現在都是通過路由器的這一個公網IP和外網通信的。那么,當互聯網上的消息發送回來時,路由器是怎么知道這個消息是給他的,而另外消息是給你的呢?這就要我們的ip地址和路由器的端口進行綁定了,這時,在路由器中就會有一個內網ip和路由器端口對應的一張表。當路由器的10000端口收到消息時,就知道把消息發送給他,而當20000端口收到消息時,就知道把消息發送給你。這就是端口轉發,其轉發一個端口收到的流量,給另一個主機。映射轉發只能實現外網到內網的單向通信。
應用場景:
因為端口轉發只能實現外網到內網的單向通信,不能雙向通信,所以不作為服務器對外訪問,目前本人接觸到的使用場景是部分路由器(如Padavan固件、openwrt固件)只能設置端口轉發沒有端口映射,所以懷疑這部分路由器的端口轉發就是端口映射,一般用於PT。
UPNP(通用即插即用,簡單理解為自動端口映射):
通用即插即用,是一組協議的統稱,是一種基於TCP/IP、UDP和HTTP的分布式、開放體系,不能簡單理解為UPnP=“自動端口映射”。由操作系統和應用與路由器協商開放哪個端口,必須同時滿足支持UPnP,缺一不可,否則不能實現。UPnP包含了2層意思:
1、對於一台內網電腦,UPnP功能可以使網關或路由器的NAT模塊做自動端口映射,將監聽的端口從網關或路由器映射到內網電腦上。
2、網關或路由器的網絡防火牆模塊開始對Internet上其他電腦開放這個端口。
PS:官方說不能簡單理解為UPnP=“自動端口映射”,但我一般就理解為自動端口映射。
應用場景:
自動端口映射會映射內網所有開放端口,本人之前用於PT,由於安全因素以及穩定性,個人不建議使用,特別是企業環境中,適用的場景暫未深入研究。
如何實現(設置):
1.對於端口轉發、端口映射、UPNP的設置比較簡單,直接進路由器中找到對應的名詞進去設置即可,一般在“外部網路(WAN)”“防火牆”“轉發規則”中。這里就不做介紹了。
2.針對DMZ設置,部分路由器也很簡單,直接找到DMZ進去加上需要設置的主機IP即可(一般路由器只能設置一個DMZ,即設置一台主機IP);這里拿自用openwrt做個配置介紹,企業級硬件防火牆或者企業路由原理類似。
①開啟DMZ有倆種方法:
第一種:在/etc/config/firewall最下方加入DMZ配置信息,如:
config redirect
option src 'wan'
option proto 'all'
option dest_ip '192.168.123.158'
option name 'DMZ'
保存修改后的/etc/config/firewall文件,並輸入如下指令重啟firewall服務:
/etc/init.d/firewall restart
第二種:圖形界面設置,如:
②dmz開啟后防火牆設置dmz不能訪問內網,如:
補充知識:
有的人發現,即使自己有公網IP,但是仍然無法通過常規方法架設服務器,這是運營商為了防止個人隨意開設各種非法服務,也防止黑客通過掃描器進行抓雞和批量掃描,將一些常用端口進行了封禁,比如80,8080等端口封禁了。這樣封禁,雖然一定程度上保證了我們的網絡安全,比如今年前爆發的勒索病毒正因為國內大部分用戶沒有獨立的公網IP和445、135、139端口封禁,使得國內個人家庭電腦中招的概率小了很多;但是這也導致即使有公網IP,也無法使用常用端口向外網提供服務,只能更換到其他端口。這樣有什么不好呢?比較典型的問題就是WEB網站默認使用80端口,那么在輸入網址的時候可以不用帶上端口號,顯得比較美觀。