Port Forwarding Port Triggering
2019獨角獸企業(yè)重金招聘Python工程師標準>>>
在使用NAT的網(wǎng)絡中,內(nèi)部終端的IP地址為私網(wǎng)地址,發(fā)出去的IP包在NAT網(wǎng)關(guān)處進行地址轉(zhuǎn)換,以公網(wǎng)地址與外部聯(lián)系。在轉(zhuǎn)換過程中,網(wǎng)關(guān)建立映射 表,并維護對應連接的狀態(tài)。當來自公網(wǎng)的包返回時,按照目的地址查找映射表,找到對應的私網(wǎng)地址,然后再次轉(zhuǎn)換后發(fā)送給內(nèi)部終端。這樣,映射表中條目的增 加是由內(nèi)部發(fā)往外部的數(shù)據(jù)流觸發(fā)的。因此,如果外部想直接訪問內(nèi)部是不可能的。
??? 在實際應用中,被NAT網(wǎng)關(guān)隱藏起來的內(nèi)網(wǎng)很可能架設FTP服務器、HTTP服務器、郵件服務器等等,那么如何從外部訪問這些服務器呢?Port Forwarding提供了這樣的機制。Port Forwarding根據(jù)來自公網(wǎng)的IP包的端口,將其轉(zhuǎn)發(fā)到指定的內(nèi)部IP地址上。例如,一個NAT網(wǎng)關(guān)的WAN側(cè)地址為123.4.5.6,內(nèi)部架設 了一臺FTP服務器,地址為192.168.0.8,端口21,及一臺HTTP服務器,地址為192.168.0.9,端口8080NAT網(wǎng)關(guān)(可能是路 由器)上設置Port Forwarding規(guī)則:
??? 若Inbound的IP包目的地址為123.4.5.6,端口21,則將其地址轉(zhuǎn)換為192.168.0.8,端口21,然后向內(nèi)網(wǎng)轉(zhuǎn)發(fā);若 Inbound的IP包目的地址為123.4.5.6,端口80,則將其地址轉(zhuǎn)換為192.168.0.9,端口8080,然后向內(nèi)網(wǎng)轉(zhuǎn)發(fā)。
??? 這樣,通過設置Port Forwarding,從外網(wǎng)可以直接訪問到內(nèi)網(wǎng)的服務器。這里還有一個好處,對于某些linux服務器,只有root權(quán)限才可開放端口號小于1024的 服務,而使用root帳號具有一定的風險,因此如上例,可設置內(nèi)網(wǎng)HTTP服務器端口為8080,當外部采用常規(guī)的HTTP 80端口訪問時,會映射到8080端口。??
路由器某一接口 inbound為 流入;outbound為流出。
? ? ?Port Triggering,是指當Outbound的流來自指定的內(nèi)網(wǎng)端口(triggered port),自動打開網(wǎng)關(guān)WAN側(cè)接口的指定端口(forwarded port),并將指向forwarded ports的流轉(zhuǎn)發(fā)到內(nèi)網(wǎng)觸發(fā)triggered ports的終端上。引用wiki上關(guān)于port triggering的一個例子,IRC(Internet Relay Chat)使用Ident協(xié)議(113端口)來驗證用戶。當連接IRC時,客戶電腦通常以端口6667與服務器建立連接,然后IRC服務器建立到客戶電腦 113端口的連接來驗證用戶。如果只有NAT,inbound到端口113的流將被丟棄,因為NAT網(wǎng)關(guān)無法知道是內(nèi)網(wǎng)哪臺機器發(fā)出的outbound 流。而Port Triggering則解決了這個問題。
??? 與靜態(tài)配置的Port Forwarding相比,Port Triggering提供更大的靈活性,因為無需指定具體的內(nèi)網(wǎng)終端地址,網(wǎng)關(guān)會在trigger時自動記錄。
??? Port Forwardig中的外網(wǎng)端口是一直開放的,而Port Triggering中外網(wǎng)端口是只在trigger后才開放。
??? 從配置的角度來說,Port Forwarding需要配置內(nèi)部服務器的IP地址和端口,以及外網(wǎng)地址的端口,Port Triggering只要配置Outbound流的端口(triggered port)和Inbound流的端口(forwarded port)。
???最后,順便說一下DMZ。設置Port?Forwarding實際相當于設置了一些virtual server。對于Inbound但不屬于Virtual Servers表中應用程序的報文,可以將其映射到一個固定的主機,即DMZ Host。DMZ將來自外網(wǎng)的未知流定向到一臺機器上,從而可以提供對內(nèi)網(wǎng)其他機器的安全保護。
經(jīng)常用到和說的是snat
端口轉(zhuǎn)發(fā)、負載均衡是dnat
閑話少敘,舉例為證:
某 網(wǎng)絡示意圖:
Internet --- 網(wǎng)關(guān) --- 私網(wǎng)服務器(內(nèi)IP1)
? ?? ?? ?? ?? ?? ?^? ?? ?^
? ?? ?? ?? ???外IP? ?? ?內(nèi)IP0
復制代碼
要想讓私網(wǎng)服務器的80口能夠通過外IP的8080口上訪問,在Linux網(wǎng)關(guān)上敲入:
iptables -A PREROUTING -t nat -d 外IP -t tcp --dport 8080 -j DNAT --to-destination 內(nèi)IP1:80
意思是:凡發(fā)往外IP:8080的所有tcp數(shù)據(jù)包,都把他們的目標變成內(nèi)IP1:80
配置完后,公網(wǎng)用戶就可以訪問http://外IP:8080來瀏覽私網(wǎng)服務器的網(wǎng)頁了。
轉(zhuǎn)載于:https://my.oschina.net/xxjbs001/blog/187319
總結(jié)
以上是生活随笔為你收集整理的Port Forwarding Port Triggering的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 小菜学习Lucene.Net(更新3.0
- 下一篇: Qt动态多语言的实现(VS2012开发)