跳转至

linux

https://ihac.xyz/2018/07/01/Linux-Mac%E5%91%BD%E4%BB%A4%E8%A1%8C%E7%BF%BB%E5%A2%99/

Linux/Mac命令行翻墙

1. 配置ShadowSocks

ShadowSocks分为server端与client端,缺一不可。我的server端部署在Bandwagon的vps上,因此,还需要在自己机器上配置client 端。

  1. 安装ShadowSocks

最好看安装shadowsocks.md中的安装方法

Bash
   # 安装成功后查看安装版本
   sslocal --version查看版本
  1. 创建ShadowSocks启动配置文件/etc/shadowsocks.json
Python
   {
       "server":"192.119.64.82",
       "server_port":46788,
       "local_address": "127.0.0.1",
       "local_port":1080,
       "password":"233blog.com",
       "timeout":300,
       "method":"aes-256-gcm"
   }


   以下是目前的信息
   ---------- Shadowsocks 配置信息 -------------

    服务器地址 = 192.119.64.82

    服务器端口 = 46788

    密码 = 233blog.com

    加密协议 = aes-256-gcm

    SS 链接 = ss://YWVzLTI1Ni1nY206MjMzYmxvZy5jb21AMTkyLjExOS42NC44Mjo0Njc4OA==#233v2.com_ss_192.119.64.82

    备注:  Shadowsocks Win 4.0.6  客户端可能无法识别该 SS 链接

   提示: 输入  v2ray ssqr  可生成 Shadowsocks 二维码链接

   免被墙..推荐使用JMS: https://getjms.com

各个字段依照server端的配置来填写。

  1. 从上述配置文件启动client端:
Python
   sslocal -c ss.json

   ### 以下为输入信息
   INFO: loading config from ss.json
   2022-10-10 15:09:59 INFO     loading libcrypto from libcrypto.so.1.1
   2022-10-10 15:09:59 INFO     loading libsodium from libsodium.so.23
   2022-10-10 15:09:59 INFO     starting local at 127.0.0.1:1080

此时,ShadowSocks将监听本地的1080端口,将收到请求转发到server端的46788端口,从而实现代理的功能。

但这样还不能实现翻墙,因为ShadowSocks使用的是SOCKS5协议,只支持SOCKS5代理,不支持HTTPHTTPS代理,下面我们继续配置一个可以将SOCKS5代理转换为其他协议代理的工具——Privoxy

2. 配置Privoxy

  1. 安装Privoxy,这里不同操作系统的安装方式不一样。

Linux是最方便的,直接从源安装即可:

Bash
   sudo apt install privoxy # for Debian
   sudo yum install privoxy # for RedHat
  1. 修改配置文件。

对于Linux,配置文件的路径一般为/etc/privoxy/config,而Mac OS上路径稍微有些不同,为/usr/local/etc/privoxy/config。如果你找不到配置文件,建议直接全局搜索关键词privoxy+config

在配置文件中找到以下两行,进行修改。

Python
    # 修改为ShadowSocks配置中的local_port
   forward-socks5   /               127.0.0.1:1080 .
   listen-address  localhost:8118
  1. 启动Privoxy
Python
   sudo privoxy /etc/privoxy/config             # for Linux
   # sudo /Application/Privoxy/startPrivoxy.sh    # for Mac OS

现在Privoxy已经在后台运行,监听8118端口,将请求转发到1080端口,实现HTTPHTTPS代理与SOCKS5代理的转换。

Bash
systemctl status privoxy.service

systemctl stop privoxy.service

一些零碎的配置

安装完ShadowSocksPrivoxy后,我们已经可以命令行翻墙了。

Bash
sslocal -c /etc/shadowsocks.json 1>/dev/null 2>&1 &     # 后台运行ShadowSocks Client
sudo privoxy /etc/privoxy/config                        # 开启privoxy服务

# sudo /Application/Privoxy/startPrivoxy.sh for MacOS
export http_proxy=http://localhost:8118                 # 设置HTTP代理地址

效果如下图所示:

ss+privoxy

可以看到,本机的外网ip发生了变化,这说明代理配置成功,此时也可以试一试wget www.google.com

如果我们不想用代理该怎么办呢?很简单,直接把变量http_proxy给注销掉(unset http_proxy)即可。不过,这样的操作不够优雅,用户并不会关心(甚至讨厌)配置细节,他们要的仅仅是开启代理关闭代理两个操作而已。而且注意到ShadowSocks一直运行在后台,一旦这个shell被关闭,那么ShadowSocks进程也会被杀死,其他shell想用代理时只能重新运行ShadowSocks,这太糟糕了。

为了解决以上两个问题,我们可以做一下小配置。

  1. 使用nohupShadowSocks一直运行:
Bash
   nohup sslocal -c /etc/shadowsocks.json 1>/dev/null 2>&1 &
  1. 将所有命令操作封装一下。

在主目录下新建脚本文件ss.sh

Bash
   #! /bin/bash
   nohup sslocal -c /etc/shadowsocks.json >/dev/null 2>&1 &
   sudo privoxy /etc/privoxy/config # only for Linux
   # for Mac OS, sudo /Application/Privoxy/startPrivoxy.sh

在当前shell的profile(.bashrc.zshrc等等,也可以写在/etc/profile)里,实现两个函数,分别用于开启代理与关闭代理:

Bash
   function sson() {
       export http_proxy=http://localhost:8118;
       export https_proxy=http://localhost:8118;
       export ftp_proxy=http://localhost:8118;
   }
   function ssoff() {
       unset http_proxy https_proxy ftp_proxy
   }

现在,你可以运行一次脚本ss.sh,以后想用代理时,直接命令行输入命令sson即可,同理,关闭代理使用ssoff。如果你想实现开机自动运行ShadowSocksPrivoxy(即开机运行ss.sh脚本),直接在/etc/rc.local中添加运行ss.sh的命令即可。

配置Chrome

最后,我还需要为浏览器配置代理,这步就比较简单了,全部鼠标操作。

  1. 下载并安装插件SwitchyOmega,由于未翻墙不能访问chrome webstore,建议从github(link)下载,我这里提供2.3.21版本的下载(link)。

  2. 进入SwitchyOmegaoptions(选项)界面,在侧边栏中选择proxy(代理),按照下图填写:

proxy

  1. 在侧边栏中选择auto switch(自动切换),按照下图填写:

auto-switch

注意,填写完Rule List URL后,需要点击下方的Download Profile Now下载翻墙名单gfwlist.txt

  1. 填写完后,点击Apply changes(确认修改)。

现在可以使用Chrome翻墙啦。将插件设置为auto switch模式,此时,名单gfwlist.list内的所有网址会自动走代理,而不在名单的网址不走代理。

回顾最开始我提出来的四个问题,现在好像还剩一个没有解决——PAC列表修改起来很麻烦。其实不然,SwitchyOmega为我们提供了一个很优雅的操作方式。一旦有请求失败,SwitchyOmega会将它们记录下来,此时,我们可以为这些失败的请求设置规则:

add condition

如上所示,直接点击Add condition即可将*.atdmt.com设置为proxy模式,以后每次访问以.atdmt.com结尾的网址时,浏览器都会自动走代理。终于,我们不需要自己手动设置PAC名单啦。