介紹
本文介紹如何通過Shadowsocks代理伺服器隧道傳輸OpenVPN連接。要學習本教程,您需要:
- 運行Microsoft Windows 10的個人計算機(PC)
- 運行Ubuntu Linux 18.04的虛擬專用伺服器(VPS)
我們的策略是:
- 讓Shadowsocks連接自行工作
- 添加通過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/