解決VPN路由設置不當導致外網無法訪問
當VPN技術被眾多的企業所選用時,VPN路由設置就成為了一項必要環節,在VPN路由設置過程中我們可能遇到很多種問題,其中無法訪問外網是VPN路由設置中比較常見并且十分嚴重的一個問題。其實探究原因,多數這種無法訪問外網的狀況是由VPN路由設置不當而引起的,本篇文章就通過逐步探究原因來解決公司無法訪問外網的問題。
(一)VPN客戶機不能訪問外網的原因初探
我們知道,VPN客戶機是通過Internet連接到VPN服務器的,就是說通過VPN對Internet的訪問物理意義上說是可以實現的。那么為什么會出現VPN連接建立后就不能訪問外網的現象呢?出現了這種問題,很多用戶都知道是路由表發生了變化,因此大家都通過在VPN連接的“高級TCP/IP設置”中取消“在遠程網絡上使用默認網關”選項來達到訪問外網的目的。這種方法雖然表面上看來可行,覺得解決了一個VPN路由設置問題,但有所不知可能會帶來新的路由問題,甚至給公司內網帶來嚴重的安全隱患。大家想一下,我們采用VPN的最初目標是為了保證安全,結果卻可能因為使用VPN而讓整個公司網絡面臨外界攻擊的境地,那么這樣就背離了我們的初衷。
那么怎樣才能更好并且安全的解決這個問題?以下我就先對VPN客戶端的路由做一個初探,使大家對這一個知識點有一個較為全面地了解。我們已經通過分析認為是VPN路由設置問題,現在我們從VPN連接前后的路由表變化情況來找出問題的癥結所在。大家可以邊根據我的說明邊進行實際操作,這樣在需要使用VPN遠程訪問的時候會留下更深刻的印象。在VPN沒有連接之前,輸入route?print命令,出現當前的路由表項,然后連接上VPN,再次運行route?print命令,比較前后兩次命令的區別。可以看到,在命令行窗口中連接后多出了幾條路由,比較重要的有兩條路由——在出現的結果ActiveRoutes下的第三行和第十行分別有一條(我稱為route1)0.0.0.0???0.0.0.0???150.0.1.226??150.0.1.226????1;另一條(我稱為route2)218.70.201.62??255.255.255.255??150.0.1.43??150.0.1.41??20,注意,各位網友的路由中部分IP也可能會略有不同。
這里route1的150.0.1.226是VPN客戶端從VPN服務器上獲得的IP地址,而route2的150.0.1.41是客戶機網卡的IP,218.70.201.62是VPN服務器的公網IP。你們還可以看出,最右側一列原來的路由metric值已經增加了,而且高于新的路由route1的metric值,這樣原來的路由就失效了,現在起作用的是route1,它的metric值更低。那么到目前為止到Internet的訪問就已經使用了新的路由route1,這條路由把數據包交給VPN的計劃程序端口,然后VPN端口的數據再發送到遠方的VPN服務器(route2),這個過程后會引起不能訪問Internet上的站點,這就是前面所說的VPN連接后不能訪問外網的原因。
(二)如何實現對VPN數據包的封裝加密并安全傳輸的過程
現在我們來看一下VPN客戶端的路由決策及數據包封裝的過程。眾所周知,VPN虛擬接口就是一個虛擬的點對點鏈路接口,當VPN虛擬接口收到數據包時,它把從網絡層得到的數據包封裝成PPP點對點數據幀并進行加密等操作,然后把它送到網關,這里的網關正是VPN客戶端自己,所以這個被封裝的PPP點對點數據幀又被返回給本機再次處理,這次處理其實就是再次封裝的過程。
那為什么要再次封裝?由于第一次封裝的幀只能通過虛擬的VPN接口,如果要把數據通過實際的接口進行傳輸,還必須在實際的鏈路層上進行再次封裝才行。而在最終封裝成鏈路層數據幀之前,需要對第一次封裝成的PPP數據幀進行其他的多級封裝。因為規范中是不能直接把PPP幀封裝在另一個鏈路層幀中的,需要在它們之間添加一些報頭,最簡單的PPTP封裝就是在PPP幀前添加了一個GRE頭和IP頭。
在封裝到網絡層比如IP報頭的時候,這里需要進行一次路由決策,這是由于數據包要明確地發送到遠方的VPN服務器,它將尋找一條到達遠方VPN服務器的路由。在VPN連接建立時就同時創建一條到達VPN服務器的路由(route2),再次封裝成PPTP格式或L2TP格式的IP數據包交給這條路由指定的接口進行處理。如果是以太網接口,這個數據包就加上以太網報頭;如果是點對點,就加上點對點鏈路報頭,發送到物理網絡上。在此處,route2指定的接口是150.0.1.41,即是網卡接口,所以它將加上以太網幀頭,然后發送到物理網絡上去。
(三)對于使用VPN不能訪問外網的解決方案
上面的三段我只想說明一點:使用VPN連接,必須讓通過VPN連接傳輸的數據包先到達VPN虛擬接口進行處理,如果繞過了VPN虛擬接口不處理的話,由于這個VPN連接的數據包沒有經過加密措施就直接發送到了Internet上,那么你的VPN安全就根本沒有保證。
現在我們來看一下,在VPN連接后此時VPN客戶端的路由表。默認路由沒有變,添加了一條VPN端口IP對應的分類網絡路由條目:150.0.0.0?????255.255.0.0????150.0.1.226????150.0.1.226????1。假設現在通過VPN連接訪問遠程公司內網的192.168.0.0/24子網,根據上面的路由表,匹配的路由只有第一條默認路由。默認VPN路由設置是通過本地網卡到達網關后直接發送到192.168.0.0/24去的,因為Internet上的路由器不會轉發到達私有網絡的數據包,這樣就可以達到外界不能訪問公司內網、保證內網安全的目的。因此選中了“在遠程網絡上使用默認網關”選項,采用了默認路由,就不會出現前面所說的路由問題和安全問題。
【編輯推薦】