UDP Hole Puching技術:穿透防火牆建立UDP連線(轉)
在防火牆上鑽孔【UDP Hole Puching】:穿透防火牆建立UDP連線
知道現在流行的P2P軟體和IM軟體是如何讓兩臺分處在不同防火牆後面的電腦直接對話的嗎?SIP當然是一種,還有一種被廣泛應用的就是本文介紹的UDP Hole Puching技術。
為了便於講述,我們假設有這樣一個網路拓撲結構:
IP=A.A.A.A IP=1.1.1.1
HostA----------FirewallA---------|
|
Server IP=S.S.S.S
|
HostB----------FirewallB---------|
IP=B.B.B.B IP=2.2.2.2
運用這個技術,必須滿足下面的條件:
1) HostA和HostB分別透過FirewallA和FirewallB經過NAT用UDP連線到了Server
2) FirewallA和FirewallB都滿足這樣的特性,即來自相同IP相同Port的資料包,不管目的地IP是多少, 都會NAT成相同的IP+Port,舉個例子吧:
HostA透過UDP Port 1234訪問主機S1時,防火牆會把資料包NAT成1.1.1.1:5668(舉例),那麼HostA透過UDP Port 1234訪問主機S2時,防火牆仍然會把資料包NAT成1.1.1.1:5668。好在現在的NAT基本上都具備這個特性。
現在,HostA用UDP埠1111連線到Server的5555埠,HostB用埠2222連線到Server的5555埠,在Server看來,HostA來自1.1.1.1:9676(FirewallA NAT過了嘛),HostB則來自2.2.2.2:6573。當HostA想直接連線HostB時,它這樣做:
1)用UDP埠1111發一個資料包給2.2.2.2:6573,注意一定要用埠1111哦,這個資料包一定會被FirewallA NAT成 1.1.1.1:9676 -> 2.2.2.2:5668(不要問為什麼,看看前面對防火牆的要求先); 千萬別期望HostB會收到這個資料包,因為當包到達FirewallB時,FirewallB被弄糊塗了,它根本不知道 1.1.1.1:9676 -> 2.2.2.2:6573的資料包應該轉給誰,當然這個包就會被丟棄並回一個ICMP包說Port不存在。但是,我們還是得到了我們想要的一些東西,那就是我們成功地告訴了FirewallA "如果有2.2.2.2:6573 -> 1.1.1.1:9676的資料包,請轉發到A.A.A.A:1111",這就是一個洞洞!!
2)接下來,和你想象的一樣,HostA透過Server中轉,告訴HostB,用埠2222發一個資料包到1.1.1.1:9676,HostB照辦了,而且這個包一定會被FirewallB NAT成 2.2.2.2:6573 -> 1.1.1.1:9676。這個回覆的資料包同樣在FirewallB上鑽了個孔,凡是1.1.1.1:9676 -> 2.2.2.2:6573的包都會被轉發到B.B.B.B:2222,當資料包到達FirewallA時,FirewallA很高興地把2.2.2.2:6573 -> 1.1.1.1:9676的資料包轉發給A.A.A.A:1111。
3)大功告成了,HostA和HostB開始愉快的交談起來。
很簡單吧?不過實施起來還要注意幾點,否則你都不知道為什麼總連不上:
1) 步驟1中那個Port不存在的ICMP是個殺手,至少對Linux上用iptables做的NAT來講是這樣,因為FirewallA收到這個ICMP會關閉剛鑽上的洞洞,想辦法不讓FirewallB發這個ICMP或者讓FirewallA丟掉這個ICMP吧;
2) 時間問題,步驟1在FirewallA上開的洞洞是有時間限制的,通常為30-60秒吧,如果超時了都沒收到2.2.2.2:6573 -> 1.1.1.1:9676的包,洞洞會自動關閉,同樣步驟2以後,HostA也應該及時在發個資料包給B,以保證FirewallB上的洞洞不會因為超時而關閉。值得提一下的是多數NAT防火牆會在看見進出雙向的資料包後延長關閉洞洞的時間,Linux預設設定時會延長到3分鐘。
3) HostA不能連到HostB,並不表示HostB一定連不到HostA,反一下方向試試也許會有意外驚喜。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10752019/viewspace-955474/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 輕輕鬆鬆穿透防火牆(轉)穿透防火牆
- FreeBSD防火牆技術(轉)防火牆
- 防火牆的併發連線數(轉)防火牆
- 透過流量限制防DDOS udp,ICMP攻擊防火牆配置UDP防火牆
- 12、Swoole 中 TCP、UDP 和長連線、短連線TCPUDP
- 從UDP的”連線性”說起–告知你不為人知的UDPUDP
- netcat 常用的幾個命令,可用於建立TCP/UDP連線TCPUDP
- 穿透防火牆的資料傳輸方法(轉)穿透防火牆
- 防火牆新技術剖析防火牆
- 防火牆技術詳解防火牆
- 化虹為橋 - Nginx 如何代理 UDP “連線”NginxUDP
- 13、利用 ICMP 隧道穿透防火牆穿透防火牆
- linux防火牆實現技術比較(轉)Linux防火牆
- 解讀分散式防火牆之――技術篇(轉)分散式防火牆
- 蜜罐技術:消除防火牆侷限和脆弱(轉)防火牆
- DNS隧道技術繞防火牆DNS防火牆
- 防火牆軟體Netfilter之NAT技術(轉)防火牆Filter
- linux防火牆實現技術比較(1)(轉)Linux防火牆
- UdpUDP
- 使用IP鏈建立Linux防火牆(轉)Linux防火牆
- UDP轉TCP隧道工具udptunnelUDPTCP
- 如何配置MTS以穿越防火牆連線oracle防火牆Oracle
- 如何穿過防火牆連線資料庫防火牆資料庫
- 理解 UDPUDP
- socket udpUDP
- 防火牆軟體Netfilter之包過濾技術(轉)防火牆Filter
- Python網路程式設計實現TCP和UDP連線Python程式設計TCPUDP
- 分散式防火牆技術及主要特點分散式防火牆
- 防火牆入侵於檢測——————3、思科 PIX 防火牆和 ASA 防火牆產品線防火牆
- 全面分析防火牆及防火牆的滲透(轉)防火牆
- TCP 和 UDPTCPUDP
- TCP和UDPTCPUDP
- TCP vs UDPTCPUDP
- UDP server CodeUDPServer
- UDP與TCPUDPTCP
- java Socket UdpJavaUDP
- TCP與UDPTCPUDP
- MQTT是TCP還是UDP?TCP與UDP區別MQQTTCPUDP