在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/