介绍
本文介绍如何通过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/