PPTP ***服務器問題之一

背景:***服務器是在Linux搭建的PPTP ***服務,***服務器在防火牆前端。

 問題:在外需要辦公時,通過***撥入對辦公網資源進行訪問,但是無法訪問防火牆後端服務器(WEB服務),不通過***撥入在辦公室時進行訪問正常。將服務器移至防火牆前端,***撥入訪問也正常。
 
解決過程:這個問題也比較怪,要是全不能訪問那問題還好處理。首先在防火牆查看日誌,***撥入訪問時防火牆是否丟棄了某些包,但是沒有。最後防火牆都設置成允許所有IP包和PPTP(二層)包都通過還是不能訪問。接下來在服務器上進行抓包:
09:21:16.394505 IP 172.20.4.226.3038 > 172.20.4.144.80: S 2073250562:2073250562(0) win 8192 <mss 1360,nop,nop,sackOK>
09:21:16.394628 IP 172.20.4.144.80 > 172.20.4.226.3038: S 4245157382:4245157382(0) ack 2073250563 win 5840 <mss 1460,nop,nop,sackOK>
09:21:16.733163 IP 172.20.4.226.3038 > 172.20.4.144.80: . ack 1 win 9520
09:21:16.853327 IP 172.20.4.226.3038 > 172.20.4.144.80: P 1:560(559) ack 1 win 9520
發現三次握手已成功,已經開始傳輸數據,但是爲什麼顯示不了呢?經過諮詢前輩最終確認是MTU的問題。
這是一個比較複雜的問題。首頁撥入***後,在***服務器上能看到最PPP0的MTU是1396,通過上面的抓包能看到mms 最小的是1360(三次握手中協商小的mms爲傳輸mms)。
ppp0接口的路徑MTU爲1396字節,也就是說如果一個數據包想要通過這個接口的話,一定不能大於1396字節,如果大於這個值,會出現兩種結果:
1、如果這個數據包的IP頭部沒有設置不能分片(DF)的標誌,那麼***主機就把這個數據包分片,使其數據包大小小於1396字節,然後允許其通過。
2、反之,如果這個數據包的IP頭部設置不能分片(DF)的標誌,那麼***主機就會返回一個ICMP不可達的差錯報文。同時丟棄這個數據包。
你可能會說1396大於1360,數據包應該能通過的呀,但是還是20字節的tcp頭部和20字節的IP報頭這樣數據包就會被丟棄了。
 
以下提供2種解決方法。
1、    修改防火牆的inside接口的MTU,將MTU設置成小於1396-20-20=1356 ,但是這種方法有一個缺點,需要在每一個防火牆上修改並且內部機器訪問時MTU較小。
2、    直接在***服務器上修改,因爲mss是在TCP連接建立開始時,通過帶有syn標誌的IP數據包進行傳輸的,所以我們在iptables裏面規定,在轉發數據時,只要發現帶有 syn標誌並且源地址***撥入分配的IP數據包時,將其mss設定爲1356字節,這樣就與ppp0接口的路徑MTU向匹配了,數據自然就可以暢通無阻啦。

iptables -A FORWARD -p tcp --syn -s 10.1.107.0/24 -j TCPMSS --set-mss 1356

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章