交流評論、關注點贊

  • Facebook Icon臉書專頁
  • telegram Icon翻牆交流電報群
  • telegram Icon電報頻道
  • RSS訂閱禁聞RSS/FEED訂閱

淺談vpn、vps、Proxy以及shadowsocks之間的聯繫和區別

2019年12月03日 6:59 PDF版 分享轉發

提到(現在應該說「科學上網」或者「愛國上網」),有幾個詞很常見,即vpn、vps、Proxy和。我剛接觸翻牆那會兒,對這個詞的意思非常混淆,傻傻分不清。想必不僅是我,不少新手應該都有過這樣的困惑。這裏,我們就在儘可能忽略那些晦澀難懂的技術細節的情況下,簡單地討論下這個問題。

翻牆原理

在討論vpn、Proxy這些之前,我覺得有必要先提一下目前主流翻牆手段的實現原理。

實現網路封鎖的手段主要有兩種:dns劫持和ip封鎖(除此之外,還有dns污染和關鍵詞過濾,這裏我們不討論)。

Dns劫持:ip是網路上各主機的「地址」,要想訪問「別人家」,當然得要有地址。但ip是一串數字,是給看的,人記起來太麻煩,所以就有了域名(也就是我們常說的網址)和 dns(網域名稱系統,Domain Name System)。域名是一串英文字元串,方便人記憶。dns將域名和ip關聯起來,形成映射。用戶訪問域名所在的目標網站前,將域名發給dns伺服器詢問這對映射關係,拿到對應的ip后就可以在茫茫網海中找到那個「她」了。而GFW所做的就是站在用戶和dns伺服器之間,破壞它們的正常通訊,並向用戶回傳一個假ip。用戶拿不到真正的ip,自然也就訪問不到本想訪問的網站了。

Dns劫持是GFW早期唯一的技術手段,所以那個時候的用戶通過修改Hosts文件的方式就可以零成本突破封鎖了。

ip封鎖:dns劫持之後,GFW引入了ip封鎖,直接鎖住了訪問目標網站的去路,用戶發往被封鎖ip的任何數據都會被牆截斷。這個時候,依靠類似於修改Hosts文件這種低成本方法突破封鎖就顯得有些天方夜譚了。那麼,解決辦法是什麼呢?答案是:在第三方架設翻牆伺服器,中轉與目標伺服器間的來往流量。目前為止,GFW採用的是黑名單模式,像Google、Facebook這種在黑名單上的網站的ip無法訪問,而不在黑名單上的第三方不記名ip可以。於是,一切就很明朗了,我們目前幾乎所有的翻牆手段都是基於上述原理實現的,vpn是,shadowsocks是,還有一些比較冷門的(比如v2ray)同樣如此,只不過它們的技術細節不同(這個我們不會深入)。

vpn

Vpn,全稱「虛擬私人網路(Virtual Private Network)」,是一種加密通訊技術。vpn是一個統稱,它有很多的具體實現,比如PPTP、L2TP、IPSec和openvpn。vpn出現遠早於GFW,所以它不是為了翻牆而生的。我上面說了,vpn是一種加密通訊技術,它被設計出來的目的是數據傳輸安全和網路匿名。

而既然不是為翻牆而生,那從翻牆的角度上講,vpn協議就存在諸多問題。最嚴重的一個就是流量特徵過於明顯。牆目前已經能夠精確識別絕大部分vpn協議的流量特徵並給予封鎖,所以,vpn這種翻牆方式基本已經廢了。

但即便如此,vpn作為過去很長一段時間最主流最熱門最常用最為人所知的翻牆手段,已然成為翻牆的代名詞。即便是vpn已不再常用的今天,當人們談及翻牆的時候,說得最多的仍是:「你有什麼好用的vpn嗎?」。

Proxy(代理)之反向代理

Proxy(代理)又分為正向代理和反向代理。翻牆所用的代理都是正向代理。反向代理的作用主要是為伺服器做緩存和負載均衡。這裏不做過多討論。

順帶一提,shadowsocks里也有負載均衡的概念,但shadowsocks的負載均衡和反向代理的負載均衡不是一個概念。反向代理的負載均衡是指:在多個真正的伺服器前架設一個,用戶所有的數據都發給代理伺服器,然後代理伺服器根據各個真實伺服器的狀態將數據轉發給一個任務較少的伺服器處理。這樣,服務商既可以架設多個伺服器分擔任務、減輕壓力,用戶也只要記一個域名或ip就可以了。而shadowsocks的負載均衡是指:每隔一段時間更改一次翻牆伺服器,將用戶的數據平均發給多個不同的翻牆伺服器,以避免發往某一個翻牆伺服器的流量過多。

Proxy(代理)之正向代理

正向代理主要有HTTP、HTTP over TLS(HTTPS)、Socks、Socks over TLS幾種。其中,HTTP和Socks無法用於翻牆,HTTPS和Socks over TLS可以用於翻牆。不過,Socks over TLS幾乎沒人用,我們這裏就不多說了。

Proxy的歷史同樣早於GFW,它最早被設計出來的目的當然也不是翻牆。正向代理最主要的目的和vpn差不多,都是用於匿名,但HTTP和Socks不能加密,只能匿名,HTTPS既可以匿名,也可以用於加密通信。

從理論上講,四種代理協議都可以通過「用戶先將數據發給代理伺服器,再由代理伺服器轉發給目的伺服器」的方法達到翻牆目的。但由於HTTP和Socks都是明文協議,GFW可以通過檢查數據包內的內容得知用戶的真實意圖,進而攔截數據包。所以,HTTP和Socks一般只用作本地代理。而HTTPS協議是加密通訊,GFW無法得知數據包內的真實內容,類似於關鍵詞過濾的手段無法施展。

不僅如此,HTTPS代理的流量特徵和我們平時訪問網站時所產生的HTTPS流量幾乎一模一樣,GFW無法分辨,穩定性爆表。

理論上講,HTTPS代理無論是安全性,還是在隱匿性,都要比目前最為流行的shadowsocks好。事實上,在所有已知的翻牆協議中,無論是vpn協議,還是代理協議,它應該都是最好的。v2ray的vmess over tls也許能和HTTPS代理媲美。但v2ray存在的時間較短、使用者較少、社區也沒有HTTPS代理活躍(從全球範圍上看),故而,相比于HTTPS代理,vmess協議潛在的安全漏洞可能要多。

當然,HTTPS代理也有它的缺點,其中最大的缺點就是配置複雜。即便能用默認參數就用默認參數,用戶自己只作最低限度的配置,對新手而言,這也是一個無比痛苦的過程。更別說,想要正常使用HTTPS代理,你還要購買域名和證書這些,非常麻煩。所以,即便是在shadowsocks出現之前,HTTPS代理也沒在大陸流行起來。這也是造成v2ray的小眾的主要原因之一(另一個是用戶沒有從shadowsocks遷移到v2ray的動力),它的配置同樣相當複雜。除此之外,HTTPS代理只能轉發tcp流量,對udp無能為力。

這裏推薦劉亞晨先生的一篇文章「各種加密代理協議的簡單對比」。

Ad:美好不容錯過,和家人朋友一起享受愉快時光,現在就訂票

vps

再來說說vps。

大家不妨想一個問題:我們平時上網瀏覽網頁,我們訪問的那些網頁都是哪來的?答案很簡單,從另一台電腦上下載下來的。無論是用戶平時所使用的個人pc,還是用於搭載網站的伺服器,本質上都是電腦。但與個人pc不同,被用作伺服器的電腦必須做到24小時開機在線,以確保能在任何時候回應用戶的請求。而vps,就是不會關機的電腦。

VPS(Virtual private server,虛擬專用伺服器)是由vps提供商維護,租用給站長使用的「不會關機的電腦」。vps不是一台台獨立的電腦,而是將一台巨型伺服器通過虛擬化技術分割成若干台看似獨立的伺服器。這台巨型伺服器不間斷運行,被分割出來的小伺服器也跟著不停的運作,站長租用其中一台小伺服器,搭載上自己的站點,就可以等著用戶訪問了。

那麼,個人電腦能不能做伺服器呢?當然可以!我上面說,「與個人pc不同,被用作伺服器的電腦必須做到24小時開機在線,以確保能在任何時候回應用戶的請求。」這句話反過來看,如果個人pc能做到24小時在線,它同樣也可以用作伺服器。事實上,有不少個人網站就是搭載在家中閑置的電腦上的。同時,還有人選擇用樹莓派、個人NAS建站。但是,由於大陸的ISP運營商面向普通網民提供的是動態ip,綁定域名很不方便,再加上寬頻上網上下行網速不對等、網路穩定性不高等問題,大部分人還是選擇使用vps建站。(除此之外,前一段時間,政府下達了新政令,要求運營商封禁個人寬頻網路的443埠和80埠,至此,個人pc建站幾無可能)。

那麼,vps和vpn、Proxy以及我們後面會說的shadowsocks有什麼關係呢?很簡單,vps可以用來搭建網站,當然也可以用來承載vpn伺服器、代理伺服器或是shadowsocks的伺服器啦。建站固然是vps最主要的作用,但絕對不是它唯一的作用,既然vps本質上也是電腦,那電腦能做的事它當然也能做。

shadowsocks

最後,就是我們的shadowsocks閃亮登場了。

介紹之前,我這裏先附上shadowsocks的官網鏈接。英文比較好的同學建議看看官網上對shadowsocks的介紹。

在shadowsocks之前,牆內網民主要依靠尋找現成的技術實現翻牆。比如vpn、HTTPS、tor的中繼網橋以及之後的meek插件等等,雖然也有自己的技術,比如一種依靠Google隱藏ip實現翻牆的技術(名字忘了),但畢竟難成大器,再加上GFW逐漸加大對VPN的干擾,人們迫切需要一種簡單可靠的技術來抵禦GFW的進攻。

於是,大概是在2013年吧(具體時間我也不太清楚),@clowwindy帶著他的shadowsocks橫空出世。

Shadowsocks同樣是一種代理協議,但是作為clowwindy為國人設計的專門用於翻牆的代理協議,相對於vpn,shadowsocks有著極強的隱匿性;相對於HTTP代理,shadowsocks提供了較為完善的加密方案,雖然比不上HTTPS代理和vpn,但使用的也是成熟的工業級的加密演算法,普通個人用戶完全不用顧慮;相對於HTTPS代理,shadowsocks的安裝配置更為簡單,中文社區更為活躍,中文文檔教程更完善,更符合中國國情。

Shdadowsocks最初的版本是由clowwindy使用Python(一種目前非常熱門的腳本編程語言)實現的。所以clowwindy的版本被稱為Python版。shadowsocks有點名氣之後,不同的開發者使用不同的編程語言為其寫了很多分支版本。比如,@cyfdecyf開發維護的Go版本,@madeye開發維護的libev版本(由純C語言編寫,基於libev庫開發),由@librehat開發維護的c++版,由@zhou0開發維護的Perl版。這些版本的安裝使用指南都可以在shadowsocks的官網上查閱。

2015年,clowwindy因喝茶事件被迫停止了shadowsocks的維護,並刪除了其開源在GitHub上的代碼,Python版就此停滯。但其它版本仍處於維護更新中。其中,更新最頻繁,新技術跟進最快的是由@madeye維護的libev版本。這裡有必要說明下,目前,shadowsocks協議(請區分「shadowsocks協議」和「shadowsocks協議的具體實現」這兩者的區別)是由shadowsocks社區內的成員共同維護,協議上任何新改進都是社區成員共同商討的結果。但對這些變化,不同的版本的shadowsocks跟進速度不同。而跟進速度最快的就是我上面說的libev版。無論是SIP007確認的ADEA Ciphers(一種同時進行認證和加密的演算法),還是SIP003引進的simple-obfs(tor開發的一種混淆插件),shadowsocks-libev都是最早引入自己軟體的。

上表是我從shadowsocks官網上直接搬下來的,顯示了目前各版本的shadowsocks對協議新特性的支持情況。

當然,這裏說的全是服務端的shadowsocks,客戶端的沒提,也沒法提,因為實在太多了,比如比較出名的兩個,surge和shadowrocket。這些客戶端有好有壞,良莠不齊,對shadowsocks協議的支持程度也不一樣,有的需要付費(iOS端基本都要付費,而安卓端則基本免費),費用也不一樣。而且,這些客戶端絕大部分都不是shadowsocks社區的「官方客戶端」,而是第三方開發者製作的客戶端。

以上,就是本文的全部內容了,希望對您有幫助。

本文轉載自Thomas Xu 博客

搬瓦工翻牆 Just My Socks

推薦安卓翻牆APP:SpeedUp VPN

Android版SpeedUp VPN,基於ShadowsocksRb,與SSR和Shadowsocks協議兼容,內置免費SSR伺服器。 如果您對內置SSR VPN伺服器不滿意,則可以自行添加或導入任何SSR和Shadowsocks伺服器使用。

喜歡、支持,請轉發分享↓Follow Us 責任編輯:葉華