如何在SSH通道中隱藏OpenVPN流量?

責(zé)任編輯:editor005

作者:xiaix

2016-05-16 14:13:12

摘自:FreeBuf

傳統(tǒng)防火墻會(huì)根據(jù)目標(biāo) IP 地址和端口號(hào)來屏蔽連接,但更高級(jí)的防火墻會(huì)使用深度包檢測(cè)(DPI)技術(shù)或者狀態(tài)包檢測(cè)(SPI)技術(shù)來識(shí)別不同類型的加密算法和VPN協(xié)議。

傳統(tǒng)防火墻會(huì)根據(jù)目標(biāo) IP 地址和端口號(hào)來屏蔽連接,但更高級(jí)的防火墻會(huì)使用深度包檢測(cè)(DPI)技術(shù)或者狀態(tài)包檢測(cè)(SPI)技術(shù)來識(shí)別不同類型的加密算法和VPN協(xié)議。這就意味著它們能夠檢測(cè)出OpenVPN流量并將其標(biāo)識(shí)出來,以方便管理員決定是否屏蔽目標(biāo)服務(wù)器。

如何在SSH通道中隱藏OpenVPN流量?

有三種方法可以繞過這種檢測(cè):使用混淆(obfuscation)代理,使用 SSL 通道或者使用 SSH 通道。在本教程中,我們將討論最后一種方法。SSH 通道會(huì)將你已經(jīng)加密的鏈接封裝在另一層加密中,這樣防火墻就無法進(jìn)行識(shí)別。這種方法可以用在繞過部署有完備 DPI 和 SPI 防火墻的公司或像天朝這種具有重度審查機(jī)制的國(guó)家。

但基于 SSH 通道的 OpenVPN 也有幾個(gè)缺點(diǎn)。第一個(gè)就是雙重加密必然會(huì)導(dǎo)致效率的降低。其次是雖然 OpenVPN 的指紋不在會(huì)被防火墻檢出,但有些防火墻同樣也會(huì)屏蔽 SSH 流量。就像 Netflix(美國(guó)一家在線影片租賃提供商) 會(huì)禁止使用任何類型加密代理的連接,無論是 OpenVPN、SSH 還是其他方式。在這種情況下,我們建議你使用混淆代理,其會(huì)使加密流量呈現(xiàn)出正常和未加密流量的樣子。混淆代理非常強(qiáng)大,但為此付出的代價(jià)是,混淆代理難以的配置和運(yùn)行。

但不幸的是,據(jù)我所知,具有混淆功能的OpenVPN 只能工作在桌面端,而使用 SSH 通道則還可以用在安卓或 IOS 等移動(dòng)端。

本文假設(shè)你已經(jīng)擁有一臺(tái)配置好OpenVPN的服務(wù)器,并且能夠通過 OpenVPN GUI 或者 APP 連接上服務(wù)器。同樣的你也能夠通過 SSH 連接上服務(wù)器,無論是使用 Mac 的終端還是在 PC 上使用 PuTTy。本文會(huì)以 PuTTy 進(jìn)行演示。

通過SSH配置OpenVPN

打開 PuTTy 加載你的 VPN 服務(wù)器配置。在側(cè)欄中選擇 “Connection >SSH >Tunnels”,確保 D8080 包含在列表中。如果沒有,那么如下圖所示在 “Source port” 中輸入8080,并選擇 “Auto” 和 “Dynamic”,然后點(diǎn)擊添加(Add)按鈕。這樣你就有了一個(gè)運(yùn)行在 8080 端口的 SSH 代理了。如果你想保存設(shè)置,可以返回 “Session” 選項(xiàng)卡進(jìn)行保存。

如何在SSH通道中隱藏OpenVPN流量?

點(diǎn)擊 “Open” 按鈕登錄到你的服務(wù)器,定位到 openvpn.conf 文件并使用如下命令檢查配置:

cd /etc/openvpn

cat openvpn.conf

這會(huì)顯示你 OpenVPN 服務(wù)器的配置文件,像如下內(nèi)容:

port 1194

proto tcp-server

dev tun1

ifconfig 10.4.0.1 10.4.0.2

status server-tcp.log

verb 3

secret ovpn.keyxxxxxxxxxx

如何在SSH通道中隱藏OpenVPN流量?

最重要的事是,第二行設(shè)置為 TCP 而不是 UDP。如果你需要修改它,你可以使用以下命令:

sudo nano openvpn.conf

然后使用 CTRL+O (字母”o”不是數(shù)字零)保存文件,CTRL+X 退出編輯。

客戶端配置

在你的本地機(jī)器上,定位到 OpenVPN 客戶端的配置文件。如果你使用默認(rèn)的安裝目錄,那么應(yīng)該在 “C:/Program Files/OpenVPN/config”。

復(fù)制一份原先的配置文件當(dāng)備份,或者直接新建一個(gè)配置文件。使用記事本或者其他編輯器以管理員身份運(yùn)行,打開或創(chuàng)建一個(gè)新的配置文件,如下所示:

proto tcp-client

remote localhost 1194

port 1194

dev tun1

secret ovpn.key

redirect-gateway def1

ifconfig 10.4.0.2 10.4.0.1

socks-proxy-retry

socks-proxy 127.0.0.1 8080

注意第二行的 “remote” 使用 localhost 而不是遠(yuǎn)程 OpenVPN 服務(wù)器的 IP 地址,然后在末尾增加兩行配置 OpenVPN 使用代理。其余的配置跟以前一樣。

將新的配置文件保存到 OpenVPN 的目錄下面。

配置應(yīng)用程序

最后一步就是配置你的應(yīng)用程序使用 8080 端口的代理了。這跟配置基本的 SSH 代理步驟一樣。許多應(yīng)用又可以設(shè)置代理,有些甚至能夠自動(dòng)檢測(cè)代理。如果你需要手動(dòng)進(jìn)行設(shè)置,下面三部分信息是你需要的:

Host: 127.0.0.1

Port: 8080

Proxy type: SOCKS5 (或者 SOCKS v5)

下面以 Firefox 和 Chrome 為例來說:

Firefox 中:

選擇 “選項(xiàng) >高級(jí) >網(wǎng)絡(luò) >連接 >設(shè)置 >手動(dòng)設(shè)置代理”

設(shè)置 SOCKS 主機(jī)為 127.0.01 ,端口號(hào)設(shè)置為 8080 (或者你 PuTTy 里設(shè)置的端口號(hào))

點(diǎn)擊確定保存

Chrome Proxy Switchy 中:

點(diǎn)擊圖標(biāo)進(jìn)入配置界面

隨便命名一個(gè)新的模式,然后在人工配置下面,設(shè)置SOCKS 主機(jī)為 127.0.01 ,端口號(hào)設(shè)置為 8080 (或者你 PuTTy 里設(shè)置的端口號(hào))

點(diǎn)擊報(bào)錯(cuò),然后切換使用新建的模式

譯者注:Proxy Switchy已經(jīng)停止更新了,Chrome 下面可以使用 SwitchyOmega,還是跟上面一樣的配置。

如何在SSH通道中隱藏OpenVPN流量?

現(xiàn)在使用 PuTTy 連接到你的服務(wù)器,然后使用新的配置文件運(yùn)行 VPN。這樣你就可以使用基于 SSH 通道的 OpenVPN 上網(wǎng)了。

移動(dòng)端

下面我們開始講解如何在安卓上使用 OpenVPN+SSH,對(duì)于 IOS 端我們就不說了大同小異。

在開始前有幾個(gè)注意事項(xiàng)。首先,此方法僅適用于瀏覽 Web。這是因?yàn)椴幌褡烂娑?,在安卓?IOS 設(shè)備上你無法隨心所欲的打開端口,這意味著其他 Apps 無法直接使用 SSH 代理。為了解決這個(gè)問題,你可以選擇進(jìn)行 root 或越獄手機(jī),然后使用像 ProxyDroid 或 Cydia’s Unix apps 來配置代理。

本教程以在安卓上面運(yùn)行火狐瀏覽器為例,你需要安裝如下應(yīng)用:

OpenVPN for Android (注意不是OpenVPN Connect)

ConnectBot 或者同樣的 SSH 終端應(yīng)用(JuiceSSH 挺不錯(cuò)的,但在轉(zhuǎn)發(fā)端口上需要額外的開銷)

一個(gè)文件管理器,例如:File Commander

Firefox 或者其他能夠配置代理的瀏覽器

你還需要一些可以將文件從電腦傳輸?shù)绞謾C(jī)上的方法,一根 USB 傳輸線是必須的,我會(huì)選擇使用 IBackup 的同步文件夾。

找到電腦上的 ovpn.key 和 .ovpn 配置文件,將它們上傳到手機(jī)上。同樣的還有服務(wù)器主機(jī)的 .pem 密鑰文件,這個(gè)文件應(yīng)該位于與 .ppk 文件相同的文件夾下,用于 PuTTy 認(rèn)證使用的。如果丟失了這個(gè)文件,你必須重新創(chuàng)建一個(gè)。

(可選)你也可以使用標(biāo)準(zhǔn)的 .ovpn 配置文件而不使用 SSH。這樣你所有的 Apps 都就可以使用 VPN 連接上網(wǎng),而不僅僅只限于瀏覽器,另外這樣也可以用來進(jìn)行排錯(cuò)。

配置ConnectBot

在手機(jī)上運(yùn)行 ConnectBot,點(diǎn)擊右上角的三個(gè)點(diǎn)進(jìn)行管理公鑰。再次點(diǎn)擊第二頁(yè)上面的點(diǎn),然后點(diǎn)擊導(dǎo)入,這樣應(yīng)該會(huì)啟動(dòng)你安裝的文件管理器。找到上傳的 .pem 文件并選擇它,這樣它應(yīng)該會(huì)在公鑰列表中出現(xiàn)并帶有一個(gè)紅色鎖的標(biāo)識(shí)。點(diǎn)擊讓其圖標(biāo)變綠,然后返回到 ConnectBot 主界面。

如何在SSH通道中隱藏OpenVPN流量?

  在底部的 ssh 終端中輸入你的 ssh 信息,像如下所示:

user@:22

將上面替換為為你的 OpenVPN 服務(wù)器地址和用戶名,然后點(diǎn)擊登錄按鈕使用 SSH 登錄到服務(wù)器。這一切步驟都會(huì)被保存,所以之后就無需在重復(fù)進(jìn)行,但以后你可能會(huì)需要再次更換公鑰。

一旦你成功連接,再次點(diǎn)擊右上角的三個(gè)點(diǎn)并斷開連接。此時(shí)你的配置文件應(yīng)該已經(jīng)得以保存并顯示在 ConnectBot 的主頁(yè)上。長(zhǎng)按配置文件打開菜單,在點(diǎn)擊”編輯端口轉(zhuǎn)發(fā)(Edit port forwards)”,然后在點(diǎn)擊那三個(gè)點(diǎn)選擇”增加端口轉(zhuǎn)發(fā)(Add port forward)”。按你的喜好隨意取個(gè)名字,隨后選擇類型為動(dòng)態(tài)(SOCKS)端口為 8080,在點(diǎn)擊”創(chuàng)建端口轉(zhuǎn)發(fā)(create port forward)”。

這樣 ConnectBot 就配置好了,但我們還沒有創(chuàng)建連接,讓我們來先配置好 OpenVPN 吧。

配置OpenVPN for Android

運(yùn)行 OpenVPN for Android。點(diǎn)擊右上角帶有向下箭頭的方形按鈕進(jìn)行導(dǎo)入配置。找到你的 .ovpn 配置文件并選中它。

如何在SSH通道中隱藏OpenVPN流量?

這時(shí),在找到你的 ovpn.key 文件并選中,再點(diǎn)擊右下角黃色的保存按鈕。

這樣你的新配置文件就應(yīng)該出現(xiàn)在 App 的首頁(yè)上了。

在連接前,讓我們?cè)跈z查下服務(wù)器的防火墻,在用戶配置中贈(zèng)加自定義的 TCP 規(guī)則,允許端口 22,1194和8080。

現(xiàn)在是時(shí)候開始連接了。首先打開 ConnectBot,選擇我們剛才創(chuàng)建的 SSH 連接上服務(wù)器,確保公鑰已經(jīng)加載,不然會(huì)提示密碼錯(cuò)誤。在成功連接上后,切換到 OpenVPN App 選擇你的配置文件進(jìn)行連接。

如何在SSH通道中隱藏OpenVPN流量?

當(dāng)你連接上后,OpenVPN 日志末尾應(yīng)該會(huì)顯示為“CONNECTED,SUCCESS”。

請(qǐng)注意,因?yàn)槲覀兪褂昧送娔X相同的 .pem 和 .key 文件,在同一時(shí)刻內(nèi)你只能使用一臺(tái)設(shè)備進(jìn)行登錄。當(dāng)你想在移動(dòng)端進(jìn)行連接時(shí),請(qǐng)確保電腦沒有進(jìn)行連接。如果你想同時(shí)連接多臺(tái)設(shè)備,你需要為每一臺(tái)設(shè)備生成新的憑證(.key 和 .pem)。

配置 Firefox 使用代理

最后,我們需要配置 Firefox 使用代理。移動(dòng)端的 Chrome 和 Safari 瀏覽器沒有配置代理選項(xiàng),這也是為什么我們推薦使用 Firefox。你可以在 wi-fi 環(huán)境下設(shè)置代理,但當(dāng)你不再需要使用代理的時(shí)候要來回進(jìn)行切換。

如何在SSH通道中隱藏OpenVPN流量?

在 Firefox 的地址欄中,輸入 “about:config”,然后在搜索欄中輸入 “network.proxy”,這樣我們就可以進(jìn)行設(shè)置代理了,在相應(yīng)的位置輸入以下配置:

network.proxy.socks: 127.0.0.1

network.proxy.socks_port: 8080 (或者你 PuTTy 里設(shè)置的端口號(hào))

network.proxy.type: 1

這樣你的 Firefox 流量就會(huì)通過 OpenVPN 和 SSH 了,你也可以隨心所欲的使用 VPN 進(jìn)行上網(wǎng)而不用在擔(dān)心深度包檢測(cè)了。

如果你只想通過 SSH 代理而不使用 OpenVPN 進(jìn)行上網(wǎng),只需要使用 ConnectBot SSH 登錄服務(wù)器,同時(shí)不連接 OpenVPN 即可。同樣的,如果你只想使用 OpenVPN 而不使用 SSH,則可以只導(dǎo)入基本的 .ovpn 配置文件使用 OpenVPN 進(jìn)行連接,而不使用 SSH 通道。

鏈接已復(fù)制,快去分享吧

企業(yè)網(wǎng)版權(quán)所有?2010-2024 京ICP備09108050號(hào)-6京公網(wǎng)安備 11010502049343號(hào)