注冊網站域名多少錢一年搜索引擎優(yōu)化特點
【Linux】【網絡】不同子網下的客戶端和服務器通信其它方式
那么,在 NAT 環(huán)境下,應該如何讓內網設備做為服務器,使內網設備被外部連接?
1 多撥
部分運營商,支持在多個設備上,通過 PPPoE 登錄同一個寬帶賬號。每個設備都能獲取到一個獨立的公網 IP4。
如果想讓游戲主機等設備獲取獨立的公網 IP,供外部連接,可以在光貓之后連接交換機。游戲主機連接交換機,直接進行 PPPoE 撥號。無線路由器也連接交換機,家中的其他網絡設備經過無線路由器訪問 Internet。
多撥的局限性:
- 僅部分運營商支持多撥
- 一些運營商已不再為用戶分配公網 IP,即使通過多撥,也獲取不到公網 IP
- 越來越多的設備不再支持 PPPoE。例如Xbox 360 支持 PPPoE,但 Xbox One 之后的版本已不再支持
- 設備直接獲取公網IP,暴露在公網上,安全性較差??赡苄枰獑为氃O置防火墻
- 需要額外購買交換機,連接在光貓和路由器之間。會改變家庭網絡拓撲,操作比較復雜
所以,這種方式不太常用。
2 端口轉發(fā)、DMZ
上文中介紹的 NAT,路由器會根據(jù)內網設備發(fā)出的報文,自動形成 NAT 表項。實際上,用戶還可以在路由器上手動配置端口映射關系,讓內網設備可被外部訪問。
其中,DMZ 功能,可以指定一臺內網設備為 DMZ 主機。到達路由器上的報文,如果沒有匹配 NAT 表項,就會轉發(fā)到 DMZ 主機。從而使 DMZ 主機可被外部訪問。
DMZ 功能能讓一臺內網設備上的所有端口,都能被公網訪問。但這樣做也影響了內網設備的安全性,如果沒有特殊需要,不建議打開這一功能。
而 端口轉發(fā) 功能,可以手動設置端口映射關系,讓指定內網設備的指定端口,能夠被公網訪問:
3 UPnP IGD、NAT-PMP
上文中的端口轉發(fā)功能,需要手動配置端口轉發(fā)規(guī)則,操作起來比較麻煩。而 UPnP IGD 和 NAT-PMP 協(xié)議,則能實現(xiàn)自動配置端口轉發(fā)規(guī)則。
UPnP IGD(互聯(lián)網網關設備協(xié)議)和 NAT-PMP(NAT 端口映射協(xié)議)分別由微軟和 Apple 提出,功能類似,都可以讓應用程序告訴路由器需要打開的端口,讓路由器自動設置端口轉發(fā)規(guī)則。
UPnP IGD 和 NAT-PMP 的工作,需要應用程序和路由器的配合。首先需要在路由器上打開 UPnP 或 NAT-PMP 功能:
還需要使用支持的應用程序。目前 eMule、BitTorrent 等常見的 P2P 文件共享工具,以及 Synology DiskStation 等 NAS 設備,以及 Xbox 等游戲主機,都已經支持相關協(xié)議:
4 光貓改為橋接模式,使用路由器撥號
安裝寬帶時,運營商附送的光貓,一般會默認打開路由功能。這時光貓同時能作為路由器使用。
但光貓的功能和性能有限,一部分型號的光貓不支持 UPnP IGD 等協(xié)議,或者不能手動配置端口轉發(fā)規(guī)則。
所以,可以考慮將光貓修改為橋接模式,通過自己的無線路由器撥號,充分利用路由器上端口轉發(fā)、UPnP IGD、DMZ 等功能。
正常情況下,光貓改橋接,最簡單的方式是撥打運營商的電腦,讓運營商遠程下發(fā)配置。也可以登錄光貓的管理頁面,自行進行修改,具體需要上網搜索運營商名和光貓型號來查找教程。
5 向運營商申請獲取公網 IP
由于 IPv4 地址資源不足,不少運營商已經不再分配公網 IP。
但是,由于 IPv4 地址資源本身已經不足,不一定能夠成功申請到公網 IP。另外,擁有公網 IP,家中的路由器能直接被公網訪問,如果沒有配置好,可能會帶來更多安全問題。所以,需要根據(jù)自己的實際需要,來決定是否申請公網 IP。
6 PCP
對于運行 NAT 的家庭路由器,通過 UPnP IGD 或 NAT-PMP 協(xié)議,可以方便地將端口映射到公網。
但是,由于 IPv4 地址的不足,電信運營商也開始使用 NAT,不再為用戶分配公網 IP。那么是否有一種類似 UPnP IGD 或者 NAT-PMP 的協(xié)議,運行在運營商的路由器上,能直接在運營商路由器上創(chuàng)建端口轉發(fā)規(guī)則?
PCP 就是這樣一種協(xié)議:
Port Control Protocol (PCP) - RFC6887
該協(xié)議由 NAT-PMP 發(fā)展而來,運行在運營商的路由器上。用戶的應用程序可通過 PCP 協(xié)議,申請在運營商路由器上打開端口。
PCP 需要運營商的配合,選用支持的網絡設備,并打開 PCP 功能,才能正常工作。根據(jù) V2EX 網友的測試,國內已有運營商支持該協(xié)議,能通過 PCP 使 eMule 獲得 High ID:
介紹一個可能有助于 CGN NAT 端口映射的工具 - V2EX
7 服務器中轉
通過第三方服務器中轉的方式,讓內網設備供外部訪問。
這種方式雖然需要第三方服務器的參與,浪費資源,但成功率最高,所以應用范圍也很普遍。例如常見的游戲加速器,就可以通過第三方服務器中轉的方式,為游戲主機提供更高的 NAT 類型:
網易UU加速盒
也有不少開源的反向代理工具,可以搭建在自己的服務器上,使內網服務可在公網訪問:
fatedier/frp
ehang-io/nps
服務器中轉需要額外的服務器,且需要消耗服務器上的流量。所以這種方式往往需要用戶額外付費,例如購買游戲加速器會員,或者自行購買虛擬服務器,并在服務器上搭建反向代理應用。
而對于微信語音、視頻通話等應用,默認也會使用其他 NAT 穿透技術,來節(jié)省微信服務器的流量費用,降低成本。當其他 NAT 穿透方式不可用時,則采用服務器中轉的方式,保證能夠正常通話。
8 NAT 打洞
NAT 打洞的工作過程
NAT 打洞,就可以 使兩臺內網設備能夠直接通信,不需要第三方服務器的中轉、不需要對路由器進行特殊設置、也不需要運營商的配置。微信語音、騰訊會議、Skype 通信等消耗流量較大的應用,都會利用 NAT 打洞實現(xiàn)內網設備間的直接通信。
我們以 PC 1、PC 2 兩臺主機的通信為例。兩臺主機均位于 NAT 路由器之后,各自的 IP 地址都是內網地址,無法互相通信:
1 在兩臺主機能夠直接通信之前,需要一臺第三方服務器:
2 PC 1、PC 2 首先需要給服務器發(fā)送一個報文。經過 NAT 路由器后,報文的源 IP 和源端口號被轉換,同時在路由器上形成 NAT 表項:
3 報文到達服務器后,服務器記錄下 PC 1、PC 2 兩側報文的源 IP 和源端口號,也就是 PC 1、PC 2 兩側的公網 IP 和外部端口號。然后,服務器將兩臺設備的公網 IP、外部端口號發(fā)送給對方。
4 這樣,PC 1、PC 2 都能相互知道對方的公網 IP 和外部端口號
5 經歷了上述步驟,NAT 打洞成功,兩臺設備就可以不依賴第三方路由器,直接進行通信。
當然,上述過程只是一個簡化的描述,不完全描述。如果想要進一步詳細了解 NAT 打洞的過程,建議參考文末的 RFC 文檔鏈接。
可以看出,NAT 打洞可以在無需路由器特殊配置、無需運營商配合的情況下,實現(xiàn)兩個內網設備的相互通信。另外,對于多層 NAT 的網絡環(huán)境(例如運營商和家庭路由器各進行一級 NAT),NAT 打洞也能正常處理。
這個NAT打洞我有嘗試實現(xiàn) ,完成了1,2,3,4 步驟 但是5 兩臺主機還是無法互相訪問,抓包發(fā)現(xiàn)雙方數(shù)據(jù)都發(fā)送出去了 但是對端收不到,懷疑我這邊
- 環(huán)境以及互聯(lián)網直接太過復雜 路由器轉發(fā)或者發(fā)送時路線可能不同
- 分配的IP和端口一直在變化 無法進行ping
- 路由表和NAT表我沒有權限去修改
- 可能存在別的問題
目前暫時無法解決,下一篇文章大概寫一下我的做法 希望有大佬指點一下
文章轉自:
https://sspai.com/post/68037