我們都知道可以使用 nginx 反代功能來實現跨境訪問外網,不過,這種方式有很多的制約,比如說很難實現登錄驗證,比如說需要針對轉發模組單獨做編譯,比如說需要你有一個有效的 ssl 簽章憑證等等。

這次,我們來介紹另外一款神器 SNI Proxy,是用 dnsmasq 配合 sniproxy 可以實現無證書任意網站反代。它使用SNI 技術將 TLS 連接通過 TCP 代理到目標網站,這樣就避免了對代理伺服器的證書需求,而且訪問到的網站證書也是原原本本的證書。

當然了,既然是基於 sni 技術,那 http 頁面是肯定不能代理的,如果目標網站不支持 https,就不行了。

編譯 SNI Proxy(可以跳過)

示例環境為 Ubuntu 14.04

從git上克隆 sni的原始檔案: HTTPS://github.com/dlundquist/sniproxy.git

準備環境

安裝配置 SNI Proxy

 

編輯 /etc/sniproxy.conf來開啟反代:

像上邊這樣開啟針對某個功能變數名稱的反代,但是這樣太麻煩了,每次新增加一個網站,都需要對這個清單增加——為此,我們為了方便稍微犧牲一點安全性——且我不需要對郵件進行反代(容易被濫用,國外對垃圾郵件伺服器是深惡痛絕的。),那麼我可以直接這樣寫:

注意:對於 IPv4 來講,你需要明確地寫出要監聽的外網地址(將代碼中的 127.0.0.1 替換),否則就會只監聽 IPv6 了。

這樣就只打開了 HTTPs 反代,而且是只要被解析到這個伺服器的功能變數名稱都會被反代,這樣一來,我們就可以只通過 的dnsmasq 的解析來控制哪個功能變數名稱反代了。(有那麼一點安全隱患就是一旦被別人發現,你可能你伺服器的流量會意外流失咯~記得監控你的伺服器頻寬?)

運行 sniproxy

直接使用命令sniproxy 即可運行,預設設定檔就是「/etc/sniproxy.conf」它會自動載入,如果你使用了其他路徑或者設定檔名,那麼你需要使用「-C」選項來指定路徑:

埠重定向

那麼,一般我們訪問網站不喜歡輸入埠號或者協定名稱,那麼預設訪問的是80埠怎麼辦? 作為輔助,我們安裝一個羽量級的 nginx,讓它把所有訪問80埠的流量轉移到443上邊去,使用301重定向即可。

注意,針對 Google 等特殊域名,可能即使你做了端口重定向也無法跳轉解析,是因為 GFW 能夠解包 HTTP 流量,所以你懂的。

我們編輯 nginx 的設定檔「/etc/nginx/sites-available/default

改為如下內容:

 

功能變數名稱解析

sniproxy 搭建成功,但是它是不能被直接存取的,你需要將功能變數名稱解析過去,這樣它才能根據功能變數名稱來代理你的 ssl 連結,那麼你可能就需要在自己的 hosts 上修改解析啦。不過,另外一個更簡便的辦法是使用 的dnsmasq,在我寫的一篇文章當中介紹了如何在國內搭建一個自己私有的 dns 伺服器來避免 dns 污染,那麼,你只需要在這個伺服器當中增加 dnsmasq 的解析配置即可。

比如說新增一個 /etc/dnsmasq.d/sni.conf ,往裡邊寫入需要解析到你 sniproxy 伺服器的功能變數名稱即可。為此,我在 github 上新建了一個專案,這裡加入了常用網站的解析,你只需要將它下載並且替換裡邊的 IP 為你 sniproxy 伺服器的 IP 即可!

記得修改裡邊的 IP 位址!

------

這樣,你的 dns 就增加了常見認證網站的自動反代功能! ☺️

本文由 落格博客 原創撰寫:落格博客 » 部署 SNI Proxy 加速網頁訪問 反代 無需證書

轉載請保留出處和原文鏈接:https://www.logcg.com/archives/984.html

由...出版 落格博客

如非聲明,本人所著文章均為原創手打,轉載請註明本頁面鏈接和我的名字。

加入對話

6 註釋

您的電子郵件地址不會被公開. 必填字段標 *

    1. 是的,http協議在傳輸時會將數據封包為tcp,讀取的時候將tcp數據包解包合併為明文數據,我這里特地用了“解包”而非“解密”,我認為這麼描述是合理的。

    1. 臥槽!!!! 麻痹的 WordPress 的後臺回復不能再混蛋一點了啊啊啊啊啊啊!!!
      老子寫了三遍啊整整三遍!!!!!

      =。=算了,我不想寫了,氣死我了,這個能用,我就用這個,需要兩台 vps,國外一個國內一個,絕逼好使。