Ubuntu 安装shadowsocks

主要跟大家说下如何在Ubuntu18.04上安装shadowsocks,实现科学上网

并详细说明如何在 Ubuntu 18.04 下安装使用 shadowsocks 客户端

同时给大家提供了让系统使用 PAC 模式或全局模式的配置方法。

本文使用的是 shadowsocks 的 python 实现版本,没有 GUI,此外只涉及客户端配置,服务端可参考 官方文档

Github 主页:shadowsocks

官网:https://shadowsocks.org/en/index.html

使用 shadowsocks 的前提

  • 一台在防火墙之外的服务器
  • 墙内主机需要安装 shadowsocks 本地端
  • 墙外服务器需要安装 shadowsocks 服务端

shadowsocks 基本原理

hadowsocks 是一个基于 SOCKS5 的安全拆分代理,由两部分组成,客户端和服务端。

client <---> ss-local <--[encrypted]--> ss-remote <---> target

Shadowsocks 本地组件(ss-local)就像传统的 SOCKS5 服务器,为客户端提供代理服务。它将数据流和数据包从客户端加密并转发到 Shadowsocks 远程组件(ss-remote),后者解密并转发到目标。来自目标的回复同样被加密并由 ss-remote 中继回 ss-local,后者解密并最终返回到原始客户端。

安装 shadowsocks

使用的是阿里的镜像源,执行安装命令

sudo apt install shadowsocks

查看版本号

执行以下命令查看 shadowsocks 的版本

sslocal --version

sslocal-version

配置 shadowsocks 客户端

Configuration via Config File 通过配置文件进行配置

修改 /etc/shadowsocks/config.json 配置(客户端配置),例如:

{
    "server":"my_server_ip",
    "server_port":8388,
    "local_address": "127.0.0.1",
    "local_port":1080,
    "password":"mypassword",
    "timeout":300,
    "method":"aes-256-cfb",
    "fast_open": false
}

字段说明:

Name Explanation
server the address your server listens 服务端IP
server_port server port 服务端端口
local_address the address your local listens 本地代理监听地址
local_port local port 本地代理监听端口
password password used for encryption 服务端设置的密码
timeout in seconds 超时设置 与服务端保持一致
method default: “aes-256-cfb”, see Encryption 加密算法, 与服务端保持一致
fast_open use TCP_FASTOPEN, true / false
workers number of workers, available on Unix/Linux

运行

前台运行

sslocal -c /etc/shadowsocks.json

后台运行

sslocal -c /etc/shadowsocks.json -d start
sslocal -c /etc/shadowsocks.json -d stop

是否使用 sudo 权限根据具体情况而定

run-ss

shadowsocks 代理模式

启动后还不能直接翻墙,因为上面只是启动了代理服务器,但是网络请求并没有经过代理服务器,所以还需要配置代理服务,代理服务可分为部分代理和全局代理。

特别说明:这里所说的是 shadowsocks 的 PAC 模式和全局模式,另外 shadowsocks 的全局模式并不是整个系统所有软件都进行代理,而只是针对所有浏览器进行的全局代理。

  • PAC 模式PAC 也即代理自动配置 Proxy auto-config,是一种网页浏览器技术,用于定义浏览器该如何自动选择适当的代理服务器来访问一个网址。PAC-modePAC 模式会在连接网站的时候读取 PAC 文件的规则,来确定所访问的网站有没有被墙,如果被墙了或者符合规则,那就会使用代理服务器连接网站,而 PAC 列表一般都是从 GFWList 更新的。GFWList 定期会更新被墙的网站,不过一般比较慢。
  • 全局模式Shadowsocks 的全局模式,是设置系统的代理服务器,使所有的 Http Proxy/Socks5 请求都由代理服务器转发。
  • 区别简单地说,在全局模式下,所有网站默认走代理。而 PAC 模式是只有被墙的才会走代理,推荐使用 PAC 模式,如果 PAC 模式无法访问一些网站,就换全局模式试试,一般是因为 PAC 更新不及时(也就是 GFWList 更新不及时)导致的。

配置 Ubuntu 使用 PAC 模式

配置 PAC 模式需要 pac 文件,这个 pac 文件可以自己编写也可以用工具生成,这里直接使用工具 GenPAC 来生成。

Github 主页: GenPAC

GenPAC:基于 gfwlist 的多种代理软件配置文件生成工具,支持自定义规则,目前可生成的格式有 pac, dnsmasq, wingy

  1. 安装 GenPAC
sudo pip install genpac
sudo pip install --upgrade genpac
  1. 生成 autoproxy.pac

进入终端,cd 到你希望存放配置文件的目录,例如:

cd /home/wylu/.config/GenPAC

执行以下命令生成 pac 配置文件:

sudo genpac –pac-proxy=”SOCKS5 127.0.0.1:1080″ -o autoproxy.pac –gfwlist-url=”https://raw.githubusercontent.com/gfwlist/gfwlist/master/gfwlist.txt”

关于命令参数说明,详见官方文档 GenPAC

  1. 设置系统网络代理

进入设置:Settings –> Network –> Network Proxy

方法选择 Automatic

Configuration URL 填写刚刚生成的 pac 文件路径 /home/wylu/.config/GenPAC/autoproxy.pac

  1. 测试

浏览器访问 Google 验证代理是否配置成功

一般的浏览器都是默认使用系统代理,所以这里只配置了系统代理,如果浏览器没有走 Socks5 代理服务器,需要自行设置浏览器的代理

  1. 关于 privoxy

以上只是针对浏览器的代理,而使用 privoxy 代理能把电脑上所有 http 请求都转发给 ss,这意味着在终端下也能使用 wget、curl 等命令访问墙外资源。

配置手动代理可以参考:

https://www.serverlab.ca/tutorials/linux/administration-linux/how-to-configure-proxy-on-ubuntu-18-04/

shell 终端里执行的命令,发起的网络请求现在还不支持 socks5 代理,只支持 http/https 代理。使用 privoxy 代理,可以将 shell 发起的网络请求转发给 shadowsocks

autoproxy.pac 文件分析

var proxy = 'SOCKS5 127.0.0.1:1080';
var rules = [
    /*
    用于添加自定义规则
    分析以下的js代码,可以知道rules元素,越靠前的优先级越高;
    即如果在rules[0]中匹配成功,则不再匹配,直接返回选择"直连"或者"走代理"
    */
    [
        [],
        []
    ],
    [
        /*
        以rules[1]为例进行分析,其它类似;
        同样,在rules[1]中的元素也是越靠前的优先级越高;
        如果在rules[1][0]中匹配成功,则不再匹配,直接返回;
        分析代码可知,当匹配成功时:
            --如果该元素的索引为偶数,则返回字面值'DIRECT',即选择直连
            --如果该元素的索引为奇数,则返回proxy变量的值,即选择使用代理
        */
        [],
        []
    ]
    /*
    以上规则如果没有一个匹配成功,根据代码分析,最终将返回字面值'DIRECT',
    也就是选择直连;这也意味着如果某些URL被墙,而又没有加入到pac规则中,
    最终会以直连的方式访问,因为被墙所以肯定是访问不到的, 这时应该使用全局模式,
    或者在pac中添加规则。
    */
]

var lastRule = '';

function FindProxyForURL(url, host) {
    /*
    个人认为,如果这里直接返回proxy,应该就等同于全局模式了,
    此时,不管是什么URL,都会走代理
    */
    for (var i = 0; i < rules.length; i++) {
        ret = testHost(host, i);
        if (ret != undefined)
            return ret;
    }
    return 'DIRECT';
}

function testHost(host, index) {
    for (var i = 0; i < rules[index].length; i++) {
        for (var j = 0; j < rules[index][i].length; j++) {
            lastRule = rules[index][i][j];
            if (host == lastRule || host.endsWith('.' + lastRule))
                return i % 2 == 0 ? 'DIRECT' : proxy;
        }
    }
    lastRule = '';
}

// REF: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/endsWith
if (!String.prototype.endsWith) {
    String.prototype.endsWith = function(searchString, position) {
        var subjectString = this.toString();
        if (typeof position !== 'number' || !isFinite(position) || Math.floor(position) !== position || position > subjectString.length) {
            position = subjectString.length;
        }
        position -= searchString.length;
        var lastIndex = subjectString.indexOf(searchString, position);
        return lastIndex !== -1 && lastIndex === position;
  };
}

理解 pac 文件 rules 的含义后,就可以自行添加一些规则了。比如 PAC 模式下访问不了 Jetbrains 的插件网址 https://plugins.jetbrains.com,因为在该 pac 文件中并没有与此 URL 匹配的规则,所以最后会以直连的方式访问,但是该网址已被墙,最终是无法访问的,我们可以把该域名添加到 pac 文件的规则列表中,该规则列表应是一个使用代理的列表,在添加规则后会以走代理的方式访问 Jetbrains 的插件网址。

pac-file-rules

配置 Ubuntu 使用 Global 模式

要实现 Global 模式,需要使用 privoxy,并且配置系统网络代理使用手动模式。

privoxy 能够实现不同代理之间的切换,使用它可以作为 SOCKS 代理和 HTTP、HTTPS 代理连接的桥梁,它能把所有的 http 请求(包括终端执行的命令,浏览器)转发给 shadowsocks,它就像是一个适配器,将 SOCKS 代理转为 HTTP 代理。

安装配置 privoxy

  1. 安装 privoxy
sudo apt install privoxy
  1. 配置 privoxy
sudo vim /etc/privoxy/config

找到 #listen-address 127.0.0.1:8118,取消注释,表示 privoxy 监听本机 8118 端口

privoxy-listen-address

找到 #forward-socks5t / 127.0.0.1:9050 .,在下方添加一行 forward-socks5t / 127.0.0.1:1080 .,表示转发请求到本地 1080 端口,而 1080 端口是 shadowsocks 监听的端口

privoxy-forward-socks5t

  1. 修改完后,重启 privoxy
systemctl restart privoxy
  1. 配置请求转发

在 ~/.bashrc 中添加如下内容,如果使用的是 zsh,则在 ~/.zshrc 中添加

# set proxy
export http_proxy="127.0.0.1:8118"
export https_proxy="127.0.0.1:8118"
export ftp_proxy="127.0.0.1:8118"

不建议在 shell 的配置文件下设置代理,这种方式下所有的 shell 命令都会走代理,如果你突然不想终端命令走代理,那么又需要修改配置文件,注释掉代理相关配置,反复修改配置文件是一件挺麻烦的事。推荐使用下面”配置系统网络代理”的方式,该配置手动模式下就能使终端命令走代理,不需要配置 .bashrc 或 .zshrc,当禁用系统网络代理时,终端命令就不会走代理了。

  1. 测试

Global-mode-shell-test

配置系统网络代理

配置完 privoxy 后,终端发起的网络请求也能走 SOCKS5 代理了,但浏览器要使用全局模式还需要配置系统网络代理。

默认浏览器默认使用系统代理,所以只需配置系统网络代理即可,具体配置过程如下:

  1. 进入设置:Settings –> Network –> Network Proxy
  2. 方法选择 Manual
  3. 设置 HTTP、HTTPS 请求由 privoxy 来代理

manual-mode-setting

  1. Pac 和 Global 模式切换

系统网络代理的自动 (Automatic) 模式和手动 (Manual) 模式都配置完成后,当选用 Automatic 则使用 Pac 模式,当选用 Manual 则使用 Global 模式。

THE END
喜欢就支持一下吧
点赞652 分享
为什么订酒店、机票的时候应该使用 VPN?-零度博客

为什么订酒店、机票的时候应该使用 VPN?

只需使用 VPN 即可节省酒店费用 照片:GaudiLab ( Shutterstock ) VPN 或虚拟专用网络可以帮助您观看国际 Netflix、向雇主隐藏您的活动并保护您的在线隐私。科技作家 Brendan Heese 之前曾解...
admin的头像-零度博客admin
1.7W+1683
Stable Video Diffusion :GPT4 后的下一个曝款AI视频项目-零度博客

Stable Video Diffusion :GPT4 后的下一个曝款AI视频项目

  加入等候名单:【点击前往】开源项目:【链接地址】现在,你可以基于原有的静止图像来生成一段几秒钟的视频。基于 Stability AI 原有的 Stable Diffusion 文生图模型,Stable Video Diff...
admin的头像-零度博客admin
1.7W+1682
ChatGPT 正式推出iOS官方客户端! 目前仅支持iPhone ,安卓版会在后续推出-零度博客

ChatGPT 正式推出iOS官方客户端! 目前仅支持iPhone ,安卓版会在后续推出

周四,OpenAI在美国发布了一款适用于 iPhone 的免费ChatGPT 应用程序,其中包括通过其Whisper AI 语音识别模型提供的语音输入支持;它还可以与网页版AI助手同步聊天记录。此举首次将 ChatGPT 引...
admin的头像-零度博客admin
1.3W+6539
刷短视频为什么会上瘾?一直停不下来,零度亲自给你示范下.......  | 零度解说-零度博客
Google Play 安装进电脑,速度提升 100%!超级流畅,秒杀一众安卓模拟器!从此告别卡顿,真爽!!| 零度解说-零度博客

Google Play 安装进电脑,速度提升 100%!超级流畅,秒杀一众安卓模拟器!从此告别卡顿,真爽!!| 零度解说

https://youtu.be/D-VUcwd2kII Google play 电脑桌面版下载:https://www.freedidi.com/12738.html   当然如果你需要安装其它的 Google 应用程序,可以看这个教程: https://youtu.be/KOwv...
admin的头像-零度博客admin
2.1W+2178
Stable Diffusion 3.5  美图生成提示词大全-零度博客

Stable Diffusion 3.5 美图生成提示词大全

 NSFW, front angle, (8k, best quality, masterpiece:1.2), (realistic, photo-realistic:1.37), ultra-detailed, 1 girl, looking at viewer, beautiful detailed sky, detailed cafe street...
admin的头像-零度博客admin
2.6W+2589
Deepseek R1 越狱版!无内容限制,无思想钢印,无道德制高点....-零度博客

Deepseek R1 越狱版!无内容限制,无思想钢印,无道德制高点….

本地部署 deepseek 无限制版本! 也就是DeepSeek R1的越狱版!deepseek-r1-abliterated :无内容审查,无限制,无思想钢印,无道德....?越狱版的DeepSeek R1现已托管在Hugging face上,支持8B...
admin的头像-零度博客admin
22.6W+1985
DeepMind 使用 AI 打破了 50 年的数学记录;一周后新纪录下降-零度博客

DeepMind 使用 AI 打破了 50 年的数学记录;一周后新纪录下降

AlphaTensor 发现了更好的矩阵数学算法,从远处激发了另一项改进。     矩阵乘法是许多机器学习突破的核心,而且它变得更快——两倍。上周,DeepMind宣布它发现了一种更有效的矩阵乘...
admin的头像-零度博客admin
1.6W+2250
随着仇恨泛滥,大量大广告商在 Twitter 上大打出手-零度博客

随着仇恨泛滥,大量大广告商在 Twitter 上大打出手

一份新报告称,超过三分之一的 Twitter 最大广告商现在已经从该平台撤下了他们的广告,因为新所有者不稳定和不可预测的性质,加上他对仇恨的含蓄鼓励,使得该网站越来越不欢迎有钱花的品牌。 根...
admin的头像-零度博客admin
1.6W+1091