翻墙代理设置

最近从同事手中借了一个ShadowSocks的账号, 用来翻墙使用, Windows和Mac使用的时候都比较简单, 因为有图形化的页面, 但是在Ubuntu上遇到不大不小的问题, 特意记录一下.

安装客户端

1
2
3
4
# 如果没有安装过pip, 请先安装
sudo apt install python-pip
sudo pip install shadowsocks
sudo vim ~/shadowsocks.json

填入你服务端的配置项:

1
2
3
4
5
6
7
8
{
"server":"远端ip",
"server_port":2443,
"local_port":1080,
"password":"密码",
"timeout":30,
"method":"aes-256-cfb"
}

启动客户端

1
sslocal -c ~/shadowsocks.json

这个时候, 如果你的shadowsocks版本是2.8.2的话, 就会出现以下的异常信息:

1
undefined symbol EVP_CIPHER_CTX_cleanup

找到安装目录

1
2
3
pip list -v|grep shadowsocks
# shadowsocks 2.8.2 /home/wiiliam/miniconda3/lib/python3.6/site-packages pip
cd /home/wiiliam/miniconda3/lib/python3.6/site-packages/shadowsocks

进入到安装后执行以下命令替换py的源码

1
sed -i "s/cleanup/reset/g"  crypto/openssl.py

重新之后, 看到端口绑定日志

1
2
3
019-08-03 23:01:59 WARNING  warning: your timeout 30 seems too short
2019-08-03 23:01:59 INFO loading libcrypto from libcrypto.so.1.1
2019-08-03 23:01:59 INFO starting local at 127.0.0.1:1080

注意: 在linux上1080端口监听的类型是socks5, 而如果使用windows版本, 1080监听的是http类型. 这个时候使用lsof -i:1080是看不到socks5监听进程的.

Chrome代理设置

Chrome有比较好的插件: SwitchyOmega

在配置页面直接导入配置项:

然后修改FWWed的代理端口已经被正确设置

最后在Chrome的插件按钮上切换地址的时候, 使用自动切换即可

Socks5代理转HTTP代理

国产的浏览器一般是不支持socks代理的, 所以需要讲sock5代理转为http代理

1
2
sudo apt install privoxy
sudo vi /etc/privoxy/config

修改以下的配置项:

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

重启服务

1
sudo /etc/init.d/privoxy restart

开机启动

ubuntu18.04不再使用initd管理系统,改用systemd,为了像以前一样,在/etc/rc.local中设置开机启动程序,需要以下几步:systemd默认读取/etc/systemd/system下的配置文件,该目录下的文件会链接/lib/systemd/system/下的文件。一般系统安装完/lib/systemd/system/下会有rc-local.service文件,即我们需要的配置文件

链接服务并修改服务

1
2
3
4
sudo ln -fs /lib/systemd/system/rc-local.service /etc/systemd/system/rc-local.service

cd /etc/systemd/system/
sudo vim rc-local.service

加入部分设置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
#  SPDX-License-Identifier: LGPL-2.1+
#
# This file is part of systemd.
#
# systemd is free software; you can redistribute it and/or modify it
# under the terms of the GNU Lesser General Public License as published by
# the Free Software Foundation; either version 2.1 of the License, or
# (at your option) any later version.

# This unit gets pulled automatically into multi-user.target by
# systemd-rc-local-generator if /etc/rc.local is executable.
[Unit]
Description=/etc/rc.local Compatibility
Documentation=man:systemd-rc-local-generator(8)
ConditionFileIsExecutable=/etc/rc.local
After=network.target

[Service]
Type=forking
ExecStart=/etc/rc.local start
TimeoutSec=0
RemainAfterExit=yes
GuessMainPID=no

## 这部分要新添加
[Install]
WantedBy=multi-user.target
Alias=rc-local.service

创建/etc/rc.local文件

1
sudo vim /etc/rc.local

填入以下内容

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#!/bin/sh -e
#
# rc.local
#
# This script is executed at the end of each multiuser runlevel.
# Make sure that the script will "exit 0" on success or any other
# value on error.
#
# In order to enable or disable this script just change the execution
# bits.
#
# By default this script does nothing.

### 填写脚本区域
echo "test" > /var/log/ss.log
/home/wiiliam/miniconda3/bin/python /home/wiiliam/miniconda3/bin/sslocal -c /home/wiiliam/shadowsocks.json > /home/wiiliam/shadowsocks.log 2>&1 &
### 脚本区域结束
exit 0

注意这个脚本是以root用户启动的, 所以一定要确保root一定能访问相应的文件

添加执行权限

1
sudo chown 755 /etc/rc.local

参考文章

SS客户端异常

HTTP代理

Chrome设置SwitchyOmega

开机启动设置