1. 程式人生 > >vpn簡介以及國內外分流設定

vpn簡介以及國內外分流設定

為了維護共產主義的純潔性,為了阻擋資本主義萬惡勢力的入侵,我大中華區域網平地拔起,多少網際網路使用者搜尋是用百度,看新聞是用新浪、QQ,社交是用人人微博之流,但總有一份不安分子想要使用Google、Facebook等一些不純淨的網站,以窺探資本主義的罪惡,為了滿足這些使用者的好奇心,VPN服務營運而生

vpn簡介

在沒有使用VPN的時候,我們訪問網站的資料線路大致是這樣的,我們以百度舉例

  • 你在瀏覽器輸入www.baidu.com,DNS伺服器給你解析出對應的ip
  • 你的路由器將你的請求轉給下一個路由器,下一個路由器再轉給下下個路由器,一直到百度的伺服器
  • 百度伺服器接收到請求,將百度的網頁打包傳給你,並帶上你的ip
  • 再經過一層層路由器的轉發,百度返回的資料包回到你電腦上,由瀏覽器展示成網頁的形式

如果你想知道你訪問百度經過了哪些路由跳轉,可以通過如下命令檢視到

  • Linux:

    $ traceroute www.baidu.com
  • windows(Dos介面下):

    $ tracert www.baidu.com

同樣,你訪問國外的網站比如Google的時候也是通過以上的線路,只不過在你的請求資料到達Google伺服器之前,要經過國內的統一出口,這個出口檢測到你要訪問Google,它可能會給你攔截下來,至於為什麼,開篇已經說了,大家都懂的。這種攔截可能是根據ip攔截(比如facebook),也可能是根據你訪問的資料內容攔截(比如Google),要知道HTTP請求是沒有加密的,如果別人截獲了你的HTTP請求,是可以知道你訪問的具體內容的

但是並不是所有訪問國外的請求都會被攔截,比如訪問who.is就沒事,於是VPN就有了用武之地。VPN主機可以理解為國外沒有被攔截的伺服器,當你連上VPN再訪問國外網站比如google時,它的資料線路大致是這樣的

  • 你的請求通過國內出口到達VPN主機,這時你的資料是經過加密的,所以無法通過內容來過濾你的請求
  • VPN主機從資料裡解密,知道你要訪問Google,VPN主機再向Google發起請求,這時由於VPN主機和Google伺服器都在國外,不會被攔截
  • Google伺服器將資料返回給VPN主機,VPN主機將資料加密,再返回給你的電腦

所以我們有了VPN,就可以去一窺萬惡的資本主義網路世界到底是個什麼樣子了。要連VPN,得知道VPN主機地址,有免費的也有收費的,為了用的心安理得我一直都是用收費的,我是在

vpnso.com這個網站買的服務,支援Mac、windows、Android、IOS等裝置,經濟又實惠

VPN分流

但是有了VPN問題又來了,上面說到我們的所有請求都會通過VPN主機,也就是說我們如果連上VPN之後再訪問百度,也要繞那麼一大圈,這樣既耗流量又浪費時間。但是聰明的程式設計師也想到了解決的辦法,那就是設定路由表來分流

執行

大致的原理就是通過一些命令設定電腦的路由表,每次訪問時系統會先去路由表查一下,如果在路由表裡則不通過VPN訪問,不在才走VPN,這樣就可以實現訪問國內國外網站的分流了。github上有一個專案專幹這事兒,地址在https://github.com/jimmyxu/chnroutes。下面我簡要列出主要操作

  • 首先下載chnroute.py
  • Mac下執行python chnroutes.py -p mac,生成ip-up和ip-down兩個檔案,將檔案cp到/etc/ppp目錄下,如果目錄不存在則新建一個
  • windows下執行python chnroutes.py -p win,生成vpnup.bat和vpndown.bat,由於很多windows電腦沒有裝Python,可以直接去下載vpnup.bat和vpndown.bat兩個檔案,然後執行vpnup.bat。vpndown.bat其實沒什麼用,它是用來清除路由表的,但是電腦關機後自動清除
  • 完成上面操作後再連上VPN,就可以實現分流了

測試

通過訪問網站
分別訪問www.123cha.comwho.is,如果顯示你的ip不同,那麼就成功了。前者顯示的是你國內的ip,後者顯示的是你VPN主機的ip

通過命令列
通過前面介紹的traceroute和tracert命令,我們以windows下的tracert命令舉例
在DOS下執行tracert www.baidu.com,第一跳ip地址應該是192.168.xx.xx
執行tracert www.google.com,第一跳地址應該是10.10.xx.xx

可能遇到的問題

這裡列舉一個我遇到的問題

在公司內部大家都在一個局域網裡,有時候為了方便共享會在自己機器上搭建Apache服務,然後把地址給別人訪問,比如我的區域網ip是192.168.32.91,別人的是192.168.7.35,別好奇為什麼最後兩個域值不一樣,那是因為我們不是連在同一個路由器上,這時候如果我連上了VPN,就無法訪問到對方的主機,甚至ping都會失敗。為什麼呢,很簡單,因為請求都是走VPN的,而VPN主機是無法訪問公司內部區域網的ip的,所以就會失敗

解決辦法
在前面提到的路由表裡新增一行記錄,我們以windows平臺為例,開啟vpnup.bat檔案,建議不要用記事本,可以裝一個editplus,編輯文字檔案很方便。在最後按照他的格式新增一行記錄,路由地址配192.168.0.0,子網掩碼配255.255.0.0。斷開VPN,重新執行vpnup.bat(注意這時候可能會顯示路由表已新增,因為你前面已經執行過一次vpnup.bat,不要管它,一直讓它執行到最後一條),再連上VPN,看看是不是可以訪問了

本文為作者原創,轉載請註明出處,多謝!