在Shadowsocks上打開OpenVPN

SS

介紹

本文介紹如何通過Shadowsocks代理伺服器隧道傳輸OpenVPN連接。要學習本教程,您需要:

  • 運行Microsoft Windows 10的個人計算機(PC)
  • 運行Ubuntu Linux 18.04的虛擬專用伺服器(VPS)

我們的策略是:

  1. 讓Shadowsocks連接自行工作
  2. 添加通過Shadowsocks連接的OpenVPN連接

為了測試本教程,我們使用了具有1 GB RAM,10 GB存儲和64位Ubuntu 18.04的Amazon AWS t2.micro VPS。如果您的VPS在OpenVZ下運行,您的VPS提供商必須允許TUN / TAP。對於某些OpenVZ提供程序,您需要登錄VPS提供程序的控制面板以顯式啟用TUN / TAP。

無論如何,您需要在VPS上打開防火牆。根據您使用的防火牆,這可能意味著向安全組,iptables或ufw添加規則。需要在VPS上打開的埠是:

  • 用於PuTTY或SSH的TCP埠22
  • Shadowsocks的TCP埠6789
  • OpenVPN的TCP埠1194

埠號6789隻是一個示例,您應該將數字更改為其他內容。您還可以將OpenVPN埠號1194更改為您選擇的其他號碼。在這兩種情況下,您以後必須在配置文件中保持一致。嚴格來說,OpenVPN埠(在我們的示例中為TCP 1194)只需要對來自VPS本身的流量開放,而不是對來自世界其他任何地方的流量開放。

Shadowsocks Libev Ubuntu Server

讓您的系統保持最新:

sudo apt-get update
sudo apt-get升級

要在Ubuntu 18.04下安裝Shadowsocks Libev,你可以這樣做:

sudo apt-get install shadowsocks-libev

你會看到Shadowsocks Libev自動啟動:

sudo systemctl status shadowsocks-libev

編輯配置文件:

sudo vi / etc / shadowsocks-libev / config.json

要更改偵聽IP地址,埠,密碼和加密方法,請編輯默認配置文件:

sudo vi / etc / default / shadowsocks-libev

它開始看起來像這樣:

{
「伺服器」: 「127.0.0.1」,
「SERVER_PORT」:8388,
「LOCAL_PORT」:1080,
「密碼」:「DotNatwywi」
「超時」:60,
「方法」: 「chacha20-IETF-poly1305」
}

以下是如何更改它的示例:

{
「伺服器」: 「0.0.0.0」,
「SERVER_PORT」:6789,
「LOCAL_PORT」:1080,
「密碼」:「secret123」
「超時」:60,
「方法」: 「chacha20-IETF-poly1305」
}

將「server」參數設置為「0.0.0.0」使其可以偵聽所有介面。

完成更改後,將文件寫入磁碟,然後退出編輯器。然後重啟服務:

sudo systemctl重啟shadowsocks-libev

檢查它是否按預期運行:

sudo systemctl status shadowsocks-libev
q
sudo ss -tulpn | grep 6789

Shadowsocks Windows客戶端

在您的PC上,從https://github.com/shadowsocks/shadowsocks-windows/releases安裝適用於Windows的SS客戶端。現在它是4.1.1版本,要下載的文件名為shadowsocks-windows-4.1.1.zip。

從您下載的壓縮存檔文件中提取文件。這給出了一個名為Shadowsocks-4.1.1的新文件夾。在該文件夾中是Shadowsocks.exe應用程序。

雙擊Shadowsocks.exe文件以啟動Windows的Shadowsocks客戶端。

填寫客戶端參數以匹配伺服器參數。繼續上面的例子:

伺服器地址= YOUR.SERVER.IP.ADDRESS
伺服器埠= 6789
密碼= secret123
加密= chacha20-ietf-poly1305

其中YOUR.SERVER.IP.ADDRESS被您的VPS的公共IP地址替換。

一旦開始運行,Windows的Shadowsocks客戶端將偵聽本地主機埠1080(默認值)。您可以通過各種方式將瀏覽器流量代理到埠1080:

  • 在Firefox中,執行選項或首選項,然後選擇網路設置,然後選擇手動代理配置到127.0.0.1埠1080上的SOCKS主機,SOCKS v5,並在使用SOCKS v5時檢查代理DNS
  • 在Chrome中,安裝並配置Felis Catus的SwitchyOmega,並在上一個項目符號點的Firefox規範中設置SOCKS v5代理
  • 使用任何瀏覽器,在Shadowsocks客戶端中選擇啟用系統代理

要更改Shadowsocks客戶端配置,請在通知托盤中找到Shadowsocks圖標。它看起來像一架紙飛機。右鍵單擊圖標以顯示菜單。

我們現在有一個工作的SS伺服器和客戶端。測試瀏覽器的IP地址,例如訪問https://ipchicken.com/

現在我們將添加一個通過SS代理伺服器連接的OpenVPN連接。

OpenVPN Ubuntu伺服器

回到Ubuntu Linux 18.04伺服器的PuTTY會話。

如果您不知道伺服器的root密碼,請將其設置為您現在知道的密碼:

sudo passwd root

如果您還不是root用戶,請切換到root:

蘇 - 

安裝OpenVPN和Easy RSA公鑰基礎結構工具。

apt-get install openvpn easy-rsa

這將安裝OpenVPN版本2.4.4和Easy RSA版本2.2.2。

製作OpenVPN證書和密鑰如下。以root身份在伺服器上發出以下命令:

cp -r / usr / share / easy-rsa / etc / openvpn /
cd / etc / openvpn / easy-rsa
cp openssl-1.0.0.cnf openssl.cnf 
mkdir鍵

如果要個性化默認值,請編輯變數文件:

vi vars

您可能想要更改的默認值是:

出口KEY_COUNTRY =「美國」
export KEY_PROVINCE =「CA」
導出KEY_CITY =「SanFrancisco」
出口KEY_ORG =「Fort-Funston」
導出KEY_EMAIL =「[email protected]
export KEY_OU =「MyOrganizationalUnit」

將文件寫入磁碟,然後退出編輯器。然後繼續製作OpenVPN證書和密鑰。首先,證書頒發機構(CA):

來源./vars
./clean-all
./build-ca

在每個問題上按Enter鍵以接受vars文件中的默認建議。

構建Diffie-Hellman參數:

./build-dh

上述命令可能需要一段時間才能運行。

構建伺服器密鑰和證書:

./build-key-server server0

在每個問題上按Enter鍵接受默認建議。將質詢密碼留空,然後按Enter鍵。將可選公司名稱留空,然後按Enter鍵。當系統詢問您是否要簽署證書時,請輸入y並按Enter鍵。當系統詢問您是否要提交時,請輸入y並按Enter鍵。

構建客戶端密鑰和證書:

./build-key client1

在每個問題上按Enter鍵接受默認建議。將質詢密碼留空,然後按Enter鍵。將可選公司名稱留空,然後按Enter鍵。當系統詢問您是否要簽署證書時,請輸入y並按Enter鍵。當系統詢問您是否要提交時,請輸入y並按Enter鍵。

現在將所有內容複製到位:

cp鍵/ *。鍵..
cp鍵/ * .crt ..
cp鍵/ *。pem ..
cd ..

生成密鑰以加密控制通道通信:

openvpn --genkey --secret tls-crypt.key

現在我們製作OpenVPN伺服器配置文件。要從模型文件開始,請發出命令::

gunzip -c / usr / share / doc / openvpn / examples / sample-config-files / server.conf.gz > server0.conf

編輯文件/etc/openvpn/server0.conf

vi server0.conf

將內容更改為如下所示:

港口1194
原型tcp
開發
ca ca.crt
cert server0.crt
key server0.key
dh dh2048.pem
server 10.8.0.0 255.255.255.0
ifconfig-pool-persist ipp.txt
推送「redirect-gateway def1 bypass-dhcp」
推「dhcp-option DNS 1.1.1.1」
推「dhcp-option DNS 1.0.0.1」
keepalive 10 120
密碼AES-256-GCM
tls-crypt tls-crypt.key
用戶沒人
集團nogroup
堅持鍵
堅持-TUN
status openvpn-status.log 
動詞3

在KVM或Xen下,您可以控制Linux內核,並且可以自己打開數據包轉發。

編輯文件/etc/sysctl.conf

vi /etc/sysctl.conf

取消注釋該行:

把net.ipv4.ip_forward = 1

將文件寫入磁碟,然後退出編輯器。立即使此更改生效:

sysctl -p

在OpenVZ下,您無法控制內核。您的VPS提供商必須允許內核中的數據包轉發。你自己不能這樣做。

在KVM或Xen下,更改數據包的源IP地址,並在重新啟動後保持iptables更改,如下所示:

iptables -P FORWARD ACCEPT
iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -j MASQUERADE
apt-get install iptables-persistent

在OpenVZ下,您不能使用MASQUERADE。因此,您必須使用源網路地址轉換(SNAT)替換MASQUERADE規則。您的iptables規則更改將如下所示:

iptables -P FORWARD ACCEPT
iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -j SNAT  -  to-source YOUR.SERVER.IP.ADDRESS 
apt-get install iptables-persistent

其中YOUR.SERVER.IP.ADDRESS是您伺服器的實際公共IP地址。

在伺服器上啟動OpenVPN:

systemctl啟動openvpn @ server0
systemctl status openvpn @ server0
q
ss -tulpn | grep 1194

這些命令應顯示OpenVPN處於活動狀態並正在運行,並在埠1194上偵聽TCP流量。

現在創建一個客戶端配置文件:

vi client1.ovpn

使它看起來像以下。您可以在vi編輯器中使用:r命令讀入證書和密鑰ca.crt,client1.crt,client1.key和tls-crypt.key的內容。請注意,我們只需要其中一些文件的實際證書部分,而不是任何初步評論:

客戶
開發
原型tcp
遠程YOUR.SERVER.IP.ADDRESS 1194
resolv-retry無限
nobind
堅持鍵
堅持-TUN

-----開始證書-----
MIIF ...
-----結束證書-----


-----開始證書-----
MIIF ...


-----開始私鑰-----
MIIE ...
-----結束私鑰-----


-----開始OpenVPN靜態鍵V1 -----
1234 ...
----- END OpenVPN靜態鍵V1 -----

remote-cert-tls伺服器
密碼AES-256-GCM
動詞3
socks-proxy 127.0.0.1 1080
路由YOUR.SERVER.IP.ADDRESS 255.255.255.255 net_gateway

最後兩行迫使OpenVPN使用Shadowsocks代理伺服器,該伺服器將在PC的localhost埠1080上進行偵聽。

將文件寫入磁碟,然後退出編輯器。

現在您需要將文件client1.ovpn安全地傳輸到您的PC。您可以通過從PuTTY窗口複製和粘貼來完成此操作。您也可以使用PuTTY附帶的pscp.exe程序。要使用pscp.exe方法,請在PC上打開Windows命令提示符,然後發出命令:

cd C:\ Program Files \ PuTTY
pscp ubuntu @ YOUR.SERVER.IP.ADDRESS:/etc/openvpn/client1.ovpn C:\ Users \ Suzy \ Downloads

如果ubuntu被VPS上的用戶ID 替換,則YOUR.SERVER.IP.ADDRESS將替換為伺服器的主機名,並且Suzy將替換為PC上的用戶ID。

退出伺服器根會話,如有必要,還退出非root會話:

出口
出口

OpenVPN Windows客戶端

返回到您的PC,從以下位置下載OpenVPN Windows客戶端安裝程序:

https://openvpn.net/community-downloads/

它將具有諸如openvpn-install-2.4.6-I602.exe之類的名稱。

雙擊可執行文件以在Windows PC上安裝OpenVPN GUI。接受所有默認值。您不需要客戶端上的Easy RSA腳本,但您確實需要TAP-Windows 9.21.2驅動程序。

雙擊Windows桌面上的新OpenVPN GUI圖標以啟動OpenVPN garphical用戶界面(GUI)程序。最初,它報告沒有可讀的連接配置文件。單擊確定。

在Windows桌面右下角的系統托盤中找到OpenVPN圖標。右鍵單擊以顯示菜單。選擇導入文件。導入文件C:\ Users \ Suzy \ Downloads \ client1.ovpn,其中Suzy被Windows PC上的用戶ID替換。導入驗證配置文件並將其複製到C:\ Users \ Suzy \ OpenVPN \ config \ client1 \ client1.ovpn。

確保Shadowsocks客戶端仍在Windows PC上運行。

現在再次在Windows桌面右下角的系統托盤中找到OpenVPN GUI圖標。右鍵單擊圖標以顯示菜單。這一次,選擇Connect。出現如下通知:client1現已連接,分配IP:10.8.0.6。

通過打開 直接代理到localhost埠1080 的瀏覽器,證明您現在正在通過OpenVPN以及Shadowsocks 。例如,如果您手動將Firefox代理到localhost埠1080,那麼現在打開Chrome。再次通過https://ipchicken.com/查看您的公共IP地址

閉幕

完成OpenVPN和Shadowsocks會話後,如果手動更改了瀏覽器設置,則將設置從手動代理恢復為系統代理。

要結束OpenVPN會話,請右鍵單擊系統托盤中的OpenVPN圖標,然後選擇「斷開連接」。再次右鍵單擊,然後選擇「退出」。

要結束Shadowsocks會話,請右鍵單擊系統托盤中的SS圖標,然後選擇退出。

故障排除

在伺服器上:

sudo systemctl status shadowsocks-libev

sudo cat / var / log / syslog | grep Shadowsocks-libev

ss -tulpn | grep 6789

systemctl status openvpn @ server0

ss -tulpn | grep 1194

在客戶端:

Shadowsocks上下文菜單「幫助」>「顯示日誌」

查看C:\ Users \ Suzy \ Downloads \ Shadowsocks-4.1.1 \ ss_win_temp \ shadowsocks.log

OpenVPN上下文菜單查看日誌

查看C:\ Users \ Suzy \ OpenVPN \ log \ client1.log

支持

男人shadowsocks-libev

https://github.com/shadowsocks/shadowsocks/wiki

https://github.com/shadowsocks/shadowsocks-libev/issues

https://github.com/shadowsocks/shadowsocks-windows/issues

openvpn --help

https://openvpn.net/community-resources/reference-manual-for-openvpn-2-4/

https://forums.openvpn.net/