如何在Ubuntu上设置Shadowsocks-libev代理服务器

本教程将向您展示如何在Ubuntu上设置Shadowsocks代理服务器。 Shadowsocks是一个轻便,快速且安全的Socks5代理,可绕过Internet审查。 我们将学习如何在Ubuntu上设置服务器端以及如何配置桌面客户端。 Shadowsocks的实现有很多,本教程向您展示如何使用Shadowsocks-libev,因为

  • 它是用C编写的,即使在低端计算机上也非常快。
  • 维护良好。
  • 这是功能最丰富的实现。 支持TCP快速打开,多用户,管理API,重定向模式,隧道模式,UDP中继,AEAD密码和插件。

先决条件

要完成本教程,您将需要:

  • VPS(虚拟专用服务器)。 我推荐Vultr。 他们以每月2.5美元的价格提供512M内存的高性能VPS,非常适合您的私有代理服务器。
  • 然后在您的VPS上安装Ubuntu。

步骤1:在Ubuntu上安装Shadowsocks-libev Server

SSH到您的远程Ubuntu服务器。 Shadowsocks-libev 从17.04开始就包含在Ubuntu存储库中,因此您可以使用以下命令进行安装:

sudo apt update

sudo apt install shadowsocks-libev

Ubuntu 16.04用户可以通过运行以下命令从PPA安装它。 software-properties-common 如果要从PPA安装软件,则需要。 它可能在您的Ubuntu服务器上丢失。

sudo apt install software-properties-common -y

sudo add-apt-repository ppa:max-c-lv/shadowsocks-libev -y

sudo apt update

sudo apt install shadowsocks-libev

钠密码库(libsodium)将与shadowsocks-libev一起安装。 如果要使用安全快速的ChaCha20-Poly1305加密方法,这是必需的。 安装完成后,编辑配置文件。

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

文件的默认内容如下。

{
    "server":["::1", "127.0.0.1"],
    "mode":"tcp_and_udp",
    "server_port":8388,
    "local_port":1080,
    "password":"ACRrobo9ymXb",
    "timeout":60,
    "method":"chacha20-ietf-poly1305"
}

我们需要改变 127.0.0.10.0.0.0,因此Shadowsocks-libev服务器将侦听公共IP地址。 然后改变 server_port 到其他端口号(例如8888)。密码是随机生成的,因此您可以保持原样。

保存并关闭文件。 然后重新启动shadowsocks-libev服务以使更改生效。

sudo systemctl restart shadowsocks-libev.service

在启动时启用自动启动。

sudo systemctl enable shadowsocks-libev.service

检查其状态。 确保它正在运行。

systemctl status shadowsocks-libev.service

如果看到以下错误。

This system doesn't provide enough entropy to quickly generate high-quality random numbers. The service will not start until enough entropy has been collected.

您可以通过安装来解决此错误 rng-tools

sudo apt-get install rng-tools

然后跑

sudo rngd -r /dev/urandom

现在,您可以启动Shadowsocks-libev服务。

步骤2:配置防火墙

如果您在服务器上使用iptables防火墙,则需要允许Shadowsocks正在侦听TCP和UDP端口的流量。 例如,如果Shadowsocks使用端口8888,则运行以下命令:

sudo iptables -I INPUT -p tcp --dport 8888 -j ACCEPT

sudo iptables -I INPUT -p udp --dport 8888 -j ACCEPT

如果使用UFW防火墙,请运行以下命令:

sudo ufw allow 8888

如果您使用的是AWS或Google Cloud,则需要在基于Web的控制面板上配置防火墙。

步骤3:安装和配置Shadowsocks-libev客户端

Ubuntu桌面

shadowsocks-libev 软件包同时包含服务器软件和客户端软件。 在Ubuntu 20.04、18.04桌面上,运行以下命令以安装Shadowsocks-libev。

sudo apt update

sudo apt install shadowsocks-libev

在Ubuntu 16.04桌面上,运行以下命令以安装Shadowsocks-libev。

sudo add-apt-repository ppa:max-c-lv/shadowsocks-libev -y

sudo apt update

sudo apt install shadowsocks-libev

Shadowsocks-libev(服务器)将在安装后自动启动。 您需要在Ubuntu桌面上停止Shadowsocks服务器。

sudo systemctl stop shadowsocks-libev

另外,在引导时禁用自动启动。

sudo systemctl disable shadowsocks-libev

Shadowsocks客户端二进制文件名为 ss-local。 有一个模板系统服务单元: /lib/systemd/system/[email protected]。 在启动客户端之前,我们需要创建客户端配置文件。 我们可以将Shadowsocks-libev服务器配置复制到客户端配置文件。

sudo cp /etc/shadowsocks-libev/config.json /etc/shadowsocks-libev/location-of-your-server.json

您可以更换 location-of-your-server 使用SFO,LAX之类的东西。 然后编辑客户端配置文件。

sudo nano /etc/shadowsocks-libev/location-of-your-server.json

将服务器地址更改为服务器的公共IP地址,并添加以下行以告诉客户端侦听127.0.0.1。

"local_address":"127.0.0.1",

因此客户端配置文件将如下所示:

{
 "server":"your-server-ip-address",
 "mode":"tcp_and_udp",
 "server_port":8888,
 "local_address":"127.0.0.1",
 "local_port":1080,
 "password":"ACRrobo9ymXb",
 "timeout":60,
 "method":"chacha20-ietf-poly1305"
}

保存并关闭文件。 然后,我们可以通过以下方式启动客户端:

sudo systemctl start [email protected]

并在引导时启用自动启动。

sudo systemctl enable [email protected]

检查其状态。 确保它正在运行。

systemctl status [email protected]

现在,ss-local进程在Ubuntu桌面上监听127.0.0.1:1080,并将其连接到Shadowsocks服务器。

Windows桌面

Windows用户可以下载此Shadowsocks客户端。 安装完成后,您可以在客户端软件中添加新服务器。 指定服务器IP地址,端口和密码。 请点击 Apply 纽扣

如果您有多个代理服务器,则可以单击 Add 按钮添加更多代理服务器。 请注意,一次仅使用一个代理服务器。

步骤4:配置Web浏览器以使用Socks代理

要使您的程序使用袜子代理,该程序必须支持袜子代理。 诸如Firefox,Google Chrome和Dropbox之类的程序允许用户使用代理。 我将向您展示如何配置Firefox和Google Chrome。

火狐浏览器

在Firefox中,转到 编辑 > 优先 > 一般 (要么 工具类 -> 选件 -> 一般)。 然后向下滚动到底部并单击 设定值网络代理。 在里面 连接设定 窗口中,选择 手动代理配置。 然后选择 袜子v5 因为Shadowsocks是Socks5代理。 输入 127.0.0.1 在“ SOCKS主机”字段中, 1080 在端口字段中。 确保 使用SOCKS v5时的代理DNS 已启用。 请点击 应用这些修改。

shadowsocks-libev Ubuntu 16.04

谷歌浏览器

虽然您可以从命令行配置Google Chrome和Chromium浏览器的代理,但我建议安装Proxy SwitchyOmega扩展来管理代理。

谷歌浏览器chrome代理SwitchyOmega

在Google Chrome浏览器中安装扩展程序后,请按以下步骤配置代理服务器:

  • 选择 SOCKS5 协议。
  • 127.0.0.1 作为服务器地址。
  • 1080 作为端口号。

谷歌浏览器chrome命令行

应用更改。 然后单击右上角的扩展程序图标,然后单击 Proxy SwithyOmega

代理swithy omega shadowsocks-libev

默认情况下,SwithyOmega使用操作系统的代理设置。 我们需要从 system proxyproxy

switchyomega默认代理

现在您的代理应该可以正常工作了。

步骤5:DNS泄漏测试

转到dnsleaktest.com。 您将看到Shadowsocks服务器的IP地址,表明您的代理正在工作。

shadowsocks-libev Ubuntu安装

单击标准测试。 确保您的本地ISP不在测试结果中。

shadowsocks-libev Ubuntu 17.10

命令行中的代理

要让您的命令行程序使用代理,您可以安装 tsocks

sudo apt install tsocks

然后编辑配置文件。

sudo nano /etc/tsocks.conf

找到以下行:

server = 192.168.0.1

更改为

server = 127.0.0.1

保存并关闭文件。 现在,您可以允许您的命令行程序使用Shadowsocks代理,如下所示:

sudo tsocks apt update

还有一个类似的程序称为proxychains。

启用TCP快速打开

您可以通过启用TCP快速打开来加快Shadowsocks的速度。 TCP是面向连接的协议,这意味着只能在建立连接后才能交换数据,这是通过三向握手完成的。 换句话说,传统上,数据只能在三向握手完成后才能交换。 TCP快速开放(TFO)是一种机制,它允许在三向握手完成之前交换数据,从而节省多达1个往返时间(RTT)。

从3.7版开始,TCP快速打开支持已合并到Linux内核,从3.13版开始默认启用。 您可以通过运行以下命令检查内核版本:

uname -r

要检查Ubuntu服务器上的TCP快速打开配置,请运行

cat /proc/sys/net/ipv4/tcp_fastopen

它可以返回4个值。

  • 0表示禁用。
  • 1表示已启用传出连接(作为客户端)。
  • 2表示已启用传入连接(作为服务器)。
  • 3表示已启用传出和传入连接。

我所有的Ubuntu VPS(虚拟专用服务器)已退回 1 运行以上命令后。 我们希望在服务器上将tcp_fastopen设置为3。 为此,我们可以编辑sysctl配置文件。

sudo nano /etc/sysctl.conf

然后将以下行粘贴到文件末尾。

net.ipv4.tcp_fastopen=3

重新加载sysctl设置以使更改生效。

sudo sysctl -p

然后,您还需要在Shadowsocks配置文件中启用TCP快速打开。

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

添加以下行。

"fast_open": true

因此,您的Shadowsocks服务器配置文件将如下所示:

{
 "server":"your-server-ip-address",
 "server_port":8388,
 "local_port":1080,
 "password":"focobguph",
 "timeout":60,
 "method":"chacha20-ietf-poly1305",
 "fast_open": true
}

请注意,最后一个配置行没有逗号。 保存并关闭文件。 然后重新启动Shadowsocks服务器。

sudo systemctl restart shadowsocks-libev

检查它是否正在运行。 (配置文件中的错误可以阻止其重新启动。)

systemctl status shadowsocks-libev

您还需要编辑Shadowsocks客户端配置文件并重新启动它,以在Ubuntu桌面上启用TCP快速打开。

启用TCP BBR

TCP BBR是一种TCP拥塞控制算法,可以大大提高连接速度。 查看以下教程。

  • 如何通过启用TCP BBR轻松提升Ubuntu网络性能

有关Shadowsocks的更多用法,请查看手册。

man shadowsocks-libev

故障排除

不时地,我的Shadowsocks-libev代理停止工作,并且当我使用以下命令检查状态时,在服务器端显示以下错误: systemctl

ERROR: server recv: Connection reset by peer

在客户端,错误返回 systemctl 是:

ERROR: remote_recv_cb_recv: Connection reset by peer

我不知道为什么会发生,但是重新启动 shadowsocks-libev 服务器上的服务可以解决此问题。

sudo systemctl restart shadowsocks-libev

我不想每次都手动重新启动服务,因此我添加了一个cron作业来定期为我执行该服务。

sudo crontab -e

将以下行放在文件末尾。

0 */3 * * * /bin/systemctl restart shadowsocks-libev

这将每3个小时重新启动一次服务。 也就是说,重启发生在12 am、3am、6am、9am等。 请注意,时间由cron确定。 无法通过计算服务运行多长时间来确定。

如果您在Shadowsocks-libev日志中看到以下错误。

ERROR: unable to resolve www.youtube.com

这意味着Shadowsocks-libev服务器无法成功解析DNS。 在 /etc/shadowsocks-libev/config.json 文件。 只需在文件中添加以下行,然后重新启动shadowsocks-libev服务即可。

"name_server":"1.1.1.1",

如果您在Shadowsocks服务器上运行自己的DNS解析器,则可以将127.0.0.1指定为名称服务器。

"name_server":"127.0.0.1",

请记住,在JSON文件中,最后一行不以逗号结尾。

而已! 我希望本教程可以帮助您在Ubuntu上安装Shadowsocks-libev代理。 与往常一样,如果您发现此帖子有用,请订阅我们的免费新闻简报以获取更多提示和技巧。

Sidebar