Ubuntu下用shadowsocks和Privoxy实现终端代理

安装Shadowsocks

Debian / Ubuntu:

1
2
# apt-get install python-pip
# pip install shadowsocks

编辑文件/etc/shadowsocks.json,填写代理信息:

1
2
3
4
5
6
7
8
9
10
{
"server":"shadowsocks的IP",
"server_port":8388,
"local_address": "0.0.0.0",
"local_port":1080,
"password":"fuuuuuuuuuuuuckgfw",
"timeout":300,
"method":"rc4-md5",
"fast_open": false
}

其中local_address是本地绑定的IP。

method是加密码算法,这个必须跟shadowsocks的服务端的一致。
其它参数不解释,很容易理解。

接下来启动shadowsocks客户端。
$ sudo sslocal -c /etc/shadowsocks.json -d start
要停止它,请用下面的命令:
$ sudo sslocal -c /etc/shadowsocks.json -d stop

推荐使用Shadowsocks-qt5的方式,【Ubuntu使用Shadowsocks-qt5科学上网】。

安装Privoxy

Shadowsocks是一个使用SOCKS5(或者SOCK4之类)协议的代理,它只接受SOCKS5协议的流量,不接受HTTP或者HTTPS的流量。所以当你在Chrome上能穿墙的时候,是Proxy SwitchyOmega插件把HTTP和HTTPS流量转换成了SOCKS协议的流量,才实现了Shadowsocks的代理。而终端是没有这样的协议转换的,所以没法直接使用Shadowsock进行代理。
在linux下可以使用privoxy来实现这个转换。

$ sudo apt-get install privoxy
编辑配置文件/etc/privoxy/config,加入下面两行内容。

1
2
forward-socks5t   /               127.0.0.1:1080 .
listen-address localhost:8118

需要注意:
127.0.0.1:1080是shadowsocks的客户端的IP和端口,要与上面shadowsocks里的配置相符。
请不要忽略这行配置后面的.,这可不是句号的意思,这个必须有。
启动服务:
$ sudo service privoxy restart
这样就配置好了。

配置http proxy

方法一:
配置全局http proxy, sudo vi /etc/environment, 加入下面的代码

1
2
export http_proxy=http://127.0.0.1:8118
export https_proxy=http://127.0.0.1:8118

重启机器sudo shutdown -r now后生效。

/etc/environment 中不能包含命令,即直接通过 VAR="..." 的方式设置,不使用 export 。
使用 source /etc/environment 可以使变量设置在当前窗口立即生效,需注销/重启之后,才能对每个新终端窗口都生效。


方法二:
1.配置转发
sudo vim ~/.bashrc,zsh的文件是.zshrc
2.在最后添加如下代码:

1
2
export http_proxy="http://127.0.0.1:8118"
export https_proxy="http://127.0.0.1:8118"

3.重载配置
source ~/.bashrc


方法三:
只对当前终端设置http_proxy, 在当前窗口执行:

1
2
export http_proxy="http://127.0.0.1:8118"
export https_proxy="http://127.0.0.1:8118"

这么做只对当前终端设置代理有效,新打开的终端代理失效。另外执行sudo apt-get update时,如果是国外的源,或者被墙的源,只能走全局代理才能更新成功。


方法四【推荐】:
在【系统设置】-【网络】-【网络代理】中选择【手动】,设置HTTP/HTTPS代理。
这么设置的话,chrome中不需要任何配置,也实现了匿名访问。
对于telegram这类软件,它的源会被大陆墙掉,apt install会卡住,只能使用方法一配置全局代理。

测试代理是否成功:
$ curl ip.cn

参考:
Linux下用shadowsocks和Privoxy实现翻墙
ubuntu下, 使用shadowsock和Privoxy帮助你在命令行中, 无障碍进行go get
Ubuntu配置Shadowsocks实现终端代理
Ubuntu 使用 ShadowSocks + Privoxy 代理
设置Linux环境变量的方法和区别_Ubuntu