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 端。
- 安装
ShadowSocks:
最好看安装shadowsocks.md中的安装方法
- 创建
ShadowSocks启动配置文件/etc/shadowsocks.json:
{
"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端的配置来填写。
- 从上述配置文件启动client端:
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代理,不支持HTTP、HTTPS代理,下面我们继续配置一个可以将SOCKS5代理转换为其他协议代理的工具——Privoxy。
2. 配置Privoxy¶
- 安装
Privoxy,这里不同操作系统的安装方式不一样。
Linux是最方便的,直接从源安装即可:
- 修改配置文件。
对于Linux,配置文件的路径一般为/etc/privoxy/config,而Mac OS上路径稍微有些不同,为/usr/local/etc/privoxy/config。如果你找不到配置文件,建议直接全局搜索关键词privoxy+config。
在配置文件中找到以下两行,进行修改。
# 修改为ShadowSocks配置中的local_port
forward-socks5 / 127.0.0.1:1080 .
listen-address localhost:8118
- 启动
Privoxy:
sudo privoxy /etc/privoxy/config # for Linux
# sudo /Application/Privoxy/startPrivoxy.sh # for Mac OS
现在Privoxy已经在后台运行,监听8118端口,将请求转发到1080端口,实现HTTP、HTTPS代理与SOCKS5代理的转换。
一些零碎的配置¶
安装完ShadowSocks与Privoxy后,我们已经可以命令行翻墙了。
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代理地址
效果如下图所示:
可以看到,本机的外网ip发生了变化,这说明代理配置成功,此时也可以试一试wget www.google.com。
如果我们不想用代理该怎么办呢?很简单,直接把变量http_proxy给注销掉(unset http_proxy)即可。不过,这样的操作不够优雅,用户并不会关心(甚至讨厌)配置细节,他们要的仅仅是开启代理、关闭代理两个操作而已。而且注意到ShadowSocks一直运行在后台,一旦这个shell被关闭,那么ShadowSocks进程也会被杀死,其他shell想用代理时只能重新运行ShadowSocks,这太糟糕了。
为了解决以上两个问题,我们可以做一下小配置。
- 使用
nohup让ShadowSocks一直运行:
- 将所有命令操作封装一下。
在主目录下新建脚本文件ss.sh:
#! /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)里,实现两个函数,分别用于开启代理与关闭代理:
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。如果你想实现开机自动运行ShadowSocks和Privoxy(即开机运行ss.sh脚本),直接在/etc/rc.local中添加运行ss.sh的命令即可。
配置Chrome¶
最后,我还需要为浏览器配置代理,这步就比较简单了,全部鼠标操作。
-
下载并安装插件
SwitchyOmega,由于未翻墙不能访问chrome webstore,建议从github(link)下载,我这里提供2.3.21版本的下载(link)。 -
进入
SwitchyOmega的options(选项)界面,在侧边栏中选择proxy(代理),按照下图填写:
- 在侧边栏中选择
auto switch(自动切换),按照下图填写:
注意,填写完Rule List URL后,需要点击下方的Download Profile Now下载翻墙名单gfwlist.txt。
- 填写完后,点击
Apply changes(确认修改)。
现在可以使用Chrome翻墙啦。将插件设置为auto switch模式,此时,名单gfwlist.list内的所有网址会自动走代理,而不在名单的网址不走代理。
回顾最开始我提出来的四个问题,现在好像还剩一个没有解决——PAC列表修改起来很麻烦。其实不然,SwitchyOmega为我们提供了一个很优雅的操作方式。一旦有请求失败,SwitchyOmega会将它们记录下来,此时,我们可以为这些失败的请求设置规则:
如上所示,直接点击Add condition即可将*.atdmt.com设置为proxy模式,以后每次访问以.atdmt.com结尾的网址时,浏览器都会自动走代理。终于,我们不需要自己手动设置PAC名单啦。



