編者按:在建設VPN網路時,當你的VPN串連成功後,雖然能訪問總部公司的內部網,這時卻不能訪問外網了,這是怎麼一回事呢?
VPN虛擬私人網路技術,對於實現遠端存取公司的資訊資源而言,相比撥號連線服務具有被廣大使用者認可的優勢,目前在實際運用中正在逐漸取代撥號連線服務。VPN能夠提供進階別的遠端存取服務,為使用者和基礎設施提供一個安全的通訊機制。這篇文章我主要對在使用VPN過程中經常出現的一類問題進行詳盡的分析。
相信通過VPN?客戶機遠端存取公司內部網的網友都曾經碰到過這種問題,即當你的VPN串連成功後,雖然能訪問總部公司的內部網這時卻不能訪問外網了,看了下面我的詳細介紹之後,大家就可以瞭解到這是由於路由上的設定引起的。
(一) VPN客戶機不能訪問外網的原因初探
我們知道,VPN?客戶機是通過Internet串連到VPN伺服器的,就是說通過VPN對Internet的訪問物理意義上說是可以實現的。那麼為什麼會出現VPN串連建立後就不能訪問外網的現象呢?出現了這種問題,很多使用者都知道是路由表發生了變化,因此大家都通過在VPN串連的“進階TCP/IP設定”中取消“在遠程網路上使用預設閘道”選項來達到訪問外網的目的。這種方法雖然表面上看來可行,覺得解決了一個路由問題,但有所不知可能會帶來新的路由問題,甚至給公司內網帶來嚴重的安全隱患。大家想一下,我們採用VPN的最初目標是為了保證安全,結果卻可能因為使用VPN而讓整個公司網路面臨外界攻擊的境地,那麼這樣就背離了我們的初衷。
那麼怎樣才能更好並且安全的解決這個問題?以下我就先對 VPN?用戶端的路由做一個初探,使大家對這一個知識點有一個較為全面地瞭解。我們已經通過分析認為是路由問題,現在我們從VPN串連前後的路由表變化情況來找出問題的癥結所在。大家可以邊根據我的說明邊進行實際操作(見圖1),這樣在需要使用VPN遠端存取的時候會留下更深刻的印象。在VPN沒有串連之前,輸入route print命令,出現當前的路由表項,然後串連上VPN,再次運行route print命令,比較前後兩次命令的區別。可以看到,在命令列視窗中串連後多出了幾條路由,比較重要的有兩條路由——在出現的結果Active Routes下的第三行和第十行分別有一條(我稱為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也可能會略有不同。
圖1:串連VPN的前後路由變化情況
這裡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,(見圖2 Active Routes下第四行)。假設現在通過VPN串連訪問遠程公司內網的192.168.0.0/24子網,根據上面的路由表,匹配的路由只有第一條預設路由。預設路由是通過本地網卡到達網關後直接發送到192.168.0.0/24去的,因為Internet上的路由器不會轉寄到達私人網路的資料包,這樣就可以達到外界不能訪問公司內網、保證內網安全的目的。因此選中了“在遠程網路上使用預設閘道”選項,採用了預設路由,就不會出現前面所說的路由問題和安全問題。
圖2:不取消“在遠程網路上使用預設閘道”才能安全使用VPN
而像很多使用者取消“在遠程網路上使用預設閘道”選項,雖然遠程子網能通過Internet到達,但由於繞過了VPN虛擬連接埠,資料是沒有加密的,不能保證資料的安全性。這並不是真正的VPN,因此取消這個選項是不可取的。退一步來說,即使給VPN用戶端分配192.168.0.0/24子網的IP,如果取消“在遠程網路上使用預設閘道”選項,也會出現路由問題,因為所有發送到本地子網的資料包將被路由到遠程子網中。為了避免用戶端的這種路由問題,我們為VPN用戶端分配IP範圍時不要與用戶端所處的網路範圍相同。
看了這麼多,文章開頭我說了如果取消了“在遠程網路上使用預設閘道”選項,就會帶來新的路由問題甚至安全隱患。那麼怎樣來解決這個問題呢?不取消這個選項就不能同時訪問內網和外網。這確實是一個兩難,針對這個問題沒有一個統一的設定,不同的網路環境只能用不同的解決方案。目前來說,取消“在遠程網路上使用預設閘道”的選項肯定會導致安全問題。我們只能盡量不要取消它,對於那些既想通過VPN串連訪問公司內網而且還需要訪問外網的使用者,我建議可以採用這樣一種方法——配置它們使用代理訪問Internet,比如設定它們使用HTTP代理,這個功能是大多數Proxy 伺服器都提供的。另外,如果 VPN用戶端的IP與VPN伺服器的網卡位於同一個邏輯子網,並且只訪問這個邏輯子網,對於這種情況可以取消“在遠程網路上使用預設閘道”選項。
結語
以上說了這麼多,我都寫累了,大家對其中的實現步驟肯定也會有些不是很清楚。這並沒有關係,只要大概瞭解VPN資料包需要經過封裝加密,才能進行傳輸並安全訪問外網這些基本原理,我寫這篇文章的目的就達到了。
綜上所述,只有使用Proxy 伺服器、VPN用戶端IP與VPN伺服器網卡位於同一個邏輯子網這兩種情況例外,可以取消“在遠程網路上使用預設閘道”的選項。至於一般情況,還是謹慎使用VPN為好,我想我們訪問網路的目的都是一樣的——保證公司網路的安全放在第一位。希望廣大網友在使用VPN虛擬私人網路的過程中一切順利。