2021年06月16日 返回>>
大家好,現(xiàn)在是人靜時(shí)分,我公司人員都已溜光,只有我還在面對(duì)computer, 在經(jīng)過(guò)不解、迷惑、結(jié)論之后,現(xiàn)與大家分享結(jié)果,感謝朋友Zyliday,見(jiàn)賢思齊的實(shí)驗(yàn)幫助。
在研究技術(shù)原理之前,讓我們先了解幾個(gè)基本的概念。我們要了解NAT技術(shù),這個(gè)就不用多說(shuō)了吧!我們的主機(jī)大部分存在于一個(gè)內(nèi)部網(wǎng)絡(luò)中,有一個(gè)私有ip地址,所以所有去往Internet的數(shù)據(jù)包,都要將其源ip與端口轉(zhuǎn)換,來(lái)實(shí)現(xiàn)數(shù)據(jù)通信。讓我們感到幸運(yùn)的是,我們對(duì)于互聯(lián)網(wǎng)的服務(wù)應(yīng)用,大部分用tcp與udp協(xié)議來(lái)傳輸,由于tcp與udp協(xié)議中含有端口,所以往返的數(shù)據(jù)包很容易找到歸宿。但難免會(huì)有特殊出現(xiàn),pptp協(xié)議,l2tp協(xié)議,ftp 協(xié)議,ipsec 協(xié)議等,根據(jù)其各自協(xié)議特殊原因,均無(wú)法順利通過(guò)nat,俗話說(shuō)兵來(lái)將擋水來(lái)土掩,nat該怎么辦?
今天重點(diǎn)我們放到pptp協(xié)議身上。pptp是什么?pptp是其vpn隧道協(xié)議中的一種,加以其它協(xié)議的配合,成功實(shí)現(xiàn)了身份驗(yàn)證、加密數(shù)據(jù)和協(xié)議配置等問(wèn)題,為遠(yuǎn)程用戶創(chuàng)建了一條穿越公網(wǎng)的安全連接,下面讓我們?nèi)チ私?span style="font-family: Calibri;">PPTP協(xié)議。
PPTP流量由兩條連接產(chǎn)生:
? PPTP控制連接
這是一個(gè)邏輯連接,表示必須通過(guò)一系列PPTP消息創(chuàng)建、維持和終止的PPTP隧道。 PPTP控制連接流量使用PPTP客戶端上動(dòng)態(tài)分配的TCP端口,以及PPTP服務(wù)器上由IANA保留的TCP端口1723。
? PPTP數(shù)據(jù)連接
當(dāng)數(shù)據(jù)通過(guò)PPTP連接發(fā)送時(shí),PPP幀將使用通用路由封裝(Generic Routing Encapsulation,GRE)報(bào)頭進(jìn)行封裝,報(bào)頭包含用于識(shí)別該數(shù)據(jù)包的特定PPTP隧道的信息。
現(xiàn)在來(lái)分析下,由于控制連接用了端口1723,所以這條連接我們就大可放心了,根據(jù)nat發(fā)送原則,會(huì)成功將數(shù)據(jù)包轉(zhuǎn)發(fā)到pptp 服務(wù)器,如果你的vpn 服務(wù)器建立于內(nèi)網(wǎng)中,在路由上映射其1723端口到服務(wù)器就OK.
讓我們看下數(shù)據(jù)連接,我們發(fā)現(xiàn)以經(jīng)沒(méi)有了tcp協(xié)議參與,反而成了GRE協(xié)議包與PPP協(xié)議包,為什么它無(wú)法通過(guò)nat呢?來(lái)看下GRE協(xié)議格式:
每個(gè)字段的詳解:
我們發(fā)現(xiàn)根本沒(méi)有發(fā)現(xiàn)有端口這個(gè)字段,怎么映射?沒(méi)有就不做端口映射唄~~~就轉(zhuǎn)換ip不就得了。哈哈其實(shí)遠(yuǎn)遠(yuǎn)不是這樣的,這種非常理的數(shù)據(jù)包格式,對(duì)于nat是個(gè)問(wèn)題,對(duì)于防火墻也是個(gè)問(wèn)題。今天我們先論nat:先來(lái)分析如果一個(gè)位于內(nèi)部網(wǎng)絡(luò)中( 公網(wǎng)IP 2.2.2.2)的主機(jī)A 192.168.1.2與pptp服務(wù)器5.5.5.5建立連接,控制連接成功建立,數(shù)據(jù)連接于由沒(méi)有端口,nat只做其ip的轉(zhuǎn)換,于是在2.2.2.2這個(gè)網(wǎng)絡(luò)的nat設(shè)備上有這樣的一個(gè)nat表:
源ip | 源port | 協(xié)議 | 公網(wǎng)ip | 公網(wǎng)port | 目標(biāo)ip | 目標(biāo)port |
192.168.1.2 | GRE | 2.2.2.2 | 5.5.5.5 | |||
192.168.1.3 | GRE | 2.2.2.2 | 5.5.5.5 |
當(dāng)2.2.2.2這個(gè)網(wǎng)絡(luò)收到來(lái)自于pptp服務(wù)器的數(shù)據(jù)流包時(shí),2.2.2.2網(wǎng)絡(luò)的nat設(shè)備發(fā)現(xiàn)來(lái)自于網(wǎng)絡(luò)5.5.5.5的gre協(xié)議數(shù)據(jù)包,是給內(nèi)部主機(jī)192.168.1.2的,所以成功通信。分析如果位于2.2.2.2這個(gè)網(wǎng)絡(luò)中的主機(jī)B 192.168.1.3 也與5.5.5.5網(wǎng)絡(luò)中的pptp服務(wù)器通信,結(jié)果就不太理想了~~如果在nat表中還有一條到達(dá)主機(jī)192.168.1.3的gre通信,到收到一個(gè)gre協(xié)議數(shù)據(jù)包時(shí),2.2.2.2網(wǎng)絡(luò)中的nat設(shè)備猶豫了,這個(gè)包給誰(shuí)呢?192.168.1.2?還是192.168.1.3呢?在此大家也不要忘了,我們的實(shí)驗(yàn)環(huán)境是只有一個(gè)公網(wǎng)ip,內(nèi)部主機(jī)A與B出去的時(shí)候,源ip都轉(zhuǎn)換成了公網(wǎng)的ip 2.2.2.2,所以收到的數(shù)據(jù)包都是目標(biāo)ip為2.2.2.2,然后nat設(shè)備根據(jù)端口的不同轉(zhuǎn)發(fā)到不同的主機(jī)。有兩個(gè)客戶端就無(wú)法通信,這就是網(wǎng)上說(shuō)的位于內(nèi)部的主機(jī)只能與同一服務(wù)器之間建立一個(gè)會(huì)話,不能有第二個(gè)客戶端。
vpn技術(shù)的流行,但技術(shù)上有約束,人們想辦法開(kāi)發(fā)能穿透nat的設(shè)備,實(shí)現(xiàn)多路復(fù)用。在細(xì)分析gre協(xié)議后,人們發(fā)現(xiàn)gre協(xié)議中有一個(gè)字段,可以拿來(lái)利用,那就是這個(gè)call id值,這個(gè)值并不固定,可以改變。這個(gè)值是怎么回事呢?用來(lái)標(biāo)識(shí)唯一會(huì)話的。這個(gè)值最早出現(xiàn)在控制連接中,客戶端與服務(wù)器互相通告彼此的call id值,然后在其數(shù)據(jù)連接中,服務(wù)器call id值寫上客戶端的,客戶端寫上服務(wù)器的call id值。nat引入了一種技術(shù)nat編輯器,大家可以去看下我們的路由器,大部分自動(dòng)開(kāi)啟了對(duì)ipsec隧道與pptp隧道協(xié)議的支持。路由器對(duì)pptp隧道的建立實(shí)施全程監(jiān)控,并在每一臺(tái)PPTP客戶機(jī)的私有IP地址、CALL ID和公共IP地址以及PPTP服務(wù)器接收的CALL ID之間建立單獨(dú)的映射關(guān)系。我可以把call id值當(dāng)做端口來(lái)看,然后添加到nat表中。
讓大家看一個(gè)今天做的一個(gè)實(shí)例圖(pptp客戶端路由器NAT表):pptp數(shù)據(jù)連接我們可以認(rèn)為它有兩條nat映射記錄,一個(gè)用于數(shù)據(jù)包的發(fā)送,一個(gè)用于數(shù)據(jù)包的接收。
源ip | 源port | 協(xié)議 | 公網(wǎng)ip | 公網(wǎng)port | 目標(biāo)ip | 目標(biāo)port |
192.168.1.10 | 5000 | TCP | 59.173.163.119 | 50001 | 221.217.151.68 | 1723 |
192.168.1.10 | 30061 | GRE | 59.173.163.119 | 32769 | 221.217.151.68 | 進(jìn) |
192.168.1.10 | 256 | GRE | 59.173.163.119 | 256 | 221.217.151.68 | 出 |
192.168.1.11 | 10000 | TCP | 59.173.163.119 | 50002 | 221.217.151.68 | 1723 |
192.168.1.11 | 5868 | GRE | 59.173.163.119 | 32770 | 221.217.151.68 | 進(jìn) |
192.168.1.11 | 512 | GRE | 59.173.163.119 | 512 | 221.217.151.68 | 出 |
nat把客戶端的call id值當(dāng)做源端口,然后告訴服務(wù)器一個(gè)假的call id(應(yīng)該叫轉(zhuǎn)換后的call id,客戶端跟端口轉(zhuǎn)換一樣)來(lái)充當(dāng)轉(zhuǎn)換后的端口。這個(gè)修改是在控制連接中修改的,然后做nat記錄后發(fā)送給服務(wù)器。(說(shuō)到此我說(shuō)下,前兩天在彎曲評(píng)論上看到了一文章,作者寫到nat對(duì)其服務(wù)器的call id也轉(zhuǎn)換)我認(rèn)為不轉(zhuǎn)換服務(wù)器的call id值。
在我們實(shí)驗(yàn)的時(shí)候,一開(kāi)始我讓多個(gè)不同外網(wǎng)的朋友建立vpn連接,連接我這邊內(nèi)部vpn服務(wù)器主機(jī),抓包發(fā)現(xiàn)服務(wù)器通告的call id都一樣,不解?如果在同一個(gè)內(nèi)部網(wǎng)絡(luò)中,有兩個(gè)客戶端連接進(jìn)來(lái),服務(wù)器通告的call id不改變,通信將出故障?今天又與見(jiàn)賢思齊做了一個(gè)同一內(nèi)部網(wǎng)絡(luò)中,多個(gè)客戶端連接情況,抓包發(fā)現(xiàn)服務(wù)器對(duì)于同一個(gè)ip多個(gè)客戶機(jī)的連接分配了不同的call id值,所以直接修改其客戶端call id便可實(shí)現(xiàn)流量多路復(fù)用,vpn服務(wù)器自動(dòng)解決了這個(gè)同一ip不同call id值問(wèn)題。
客戶端192.168.1.10的連接:
服務(wù)器方抓包分析如下:
上圖:客戶端在控制連接中,告訴服務(wù)器它的call id值為32769。
上圖:服務(wù)器控制連接中告訴客戶端它的call id值為256。
客戶端抓包分析如下:
上面客戶端告訴服務(wù)器它的call id為30061。
服務(wù)器告訴客戶端它的call id值為256。
看了以后大家知道nat做數(shù)據(jù)包做了什么處理了吧,客戶端12的連接我就不貼圖了,道理一樣。這樣的端口改變還可以避免不同的客戶端告訴服務(wù)器相同的call id,因?yàn)樗鼰o(wú)法意識(shí)到另一個(gè)主機(jī)也用了此call id ,如果nat不加轉(zhuǎn)換,將出現(xiàn)問(wèn)題。
聯(lián)系人:朱
電話:18570559852
QQ:813700068
工作時(shí)間 9:00-24:00