需求:因工作需要,需要配置一个科学上网服务器 以前搭建过一个,后来由于某种原因不能用了。所以重新搭建一个 此文档做个记录
服务器:Centos7.x
1、安装配置Shadowsocks客户端
安装Shadowsocks客户端
1
2
3
4
|
$ yum install -y epel-release
$ yum install -y python-pip
$ pip install shadowsocks
# pip 是 Python 的包管理工具,这里我们用 pip 安装 shadowsocks。
|
配置Shadowsocks客户端
注意 Shadowsocks的配置文件自己创建
1
2
|
mkdir /etc/shadowsocks
vim /etc/shadowsocks/shadowsocks.json
|
添加一下配置:
1
2
3
4
5
6
7
8
9
10
11
12
|
{
"server":"x.x.x.x", #你的 ss 服务器 地址
"server_port":14131, #你的 ss 服务器端口
"local_address": "127.0.0.1", #本地ip
"local_port":1080, #本地端口
"password":"password", #连接 ss 密码
"timeout":300, #等待超时
"method":"aes-256-cfb", #加密方式
"fast_open": false, #fast_open:true或false。开启fast_open以降低延迟,但要求Linux内核在3.7+。
"workers": 1 #工作线程数
}
|
设置成自启动
为了方便启动和关闭 这里设置成自启动
vim /etc/systemd/system/shadowsocks.service
1
2
3
4
5
6
7
8
9
|
[Unit]
Description=Shadowsocks
[Service]
TimeoutStartSec=0
ExecStart=/usr/bin/sslocal -c /etc/shadowsocks/shadowsocks.json
[Install]
WantedBy=multi-user.target
|
启动Shadowsocks客户端
1
2
3
|
systemctl enable shadowsocks.service
systemctl start shadowsocks.service
systemctl status shadowsocks.service
|
我的ss服务器的加密方式是chacha20-ietf-poly1305
在启动Shadowsocks时 启动失败 显示一下内容:
1
2
3
4
5
6
7
8
9
10
11
12
13
|
[root@k8s-77-71 ~]# systemctl status shadowsocks.service
● shadowsocks.service - Shadowsocks
Loaded: loaded (/etc/systemd/system/shadowsocks.service; disabled; vendor preset: disabled)
Active: failed (Result: exit-code) since 三 2019-05-15 13:01:08 CST; 12s ago
Process: 13171 ExecStart=/usr/bin/sslocal -c /etc/shadowsocks/shadowsocks.json (code=exited, status=1/FAILURE)
Main PID: 13171 (code=exited, status=1/FAILURE)
5月 15 13:01:08 k8s-77-71 systemd[1]: Started Shadowsocks.
5月 15 13:01:08 k8s-77-71 sslocal[13171]: INFO: loading config from /etc/shadowsocks/shadowsocks.json
5月 15 13:01:08 k8s-77-71 sslocal[13171]: 2019-05-15 13:01:08 ERROR method chacha20-ietf-poly1305 not supported
5月 15 13:01:08 k8s-77-71 systemd[1]: shadowsocks.service: main process exited, code=exited, status=1/FAILURE
5月 15 13:01:08 k8s-77-71 systemd[1]: Unit shadowsocks.service entered failed state.
5月 15 13:01:08 k8s-77-71 systemd[1]: shadowsocks.service failed.
|
可以看出 method chacha20-ietf-poly1305 not supported 不支持chacha20-ietf-poly1305加密方式
填坑操作
经过一顿谷歌、百度。找到了以下解决办法(当然你也可以找其他解决办法)
安装libsodium:
1
|
yum install libsodium -y
|
然后再启动,发现还是上面的问题。没有启动起来
执行以下操作
1
2
3
4
5
6
7
8
9
10
11
12
|
[root@k8s-77-71 ~]# pip install https://github.com/shadowsocks/shadowsocks/archive/master.zip -U
Collecting https://github.com/shadowsocks/shadowsocks/archive/master.zip
Downloading https://github.com/shadowsocks/shadowsocks/archive/master.zip (115kB)
100% |████████████████████████████████| 122kB 871kB/s
Installing collected packages: shadowsocks
Found existing installation: shadowsocks 2.8.2
Uninstalling shadowsocks-2.8.2:
Successfully uninstalled shadowsocks-2.8.2
Running setup.py install for shadowsocks ... done
Successfully installed shadowsocks-3.0.0
You are using pip version 8.1.2, however version 19.1.1 is available.
You should consider upgrading via the 'pip install --upgrade pip' command.
|
然后重启一下Shadowsocks再查看状态,可以看到已经正常启动了:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
[root@k8s-77-71 ~]# systemctl status shadowsocks.service
● shadowsocks.service - Shadowsocks
Loaded: loaded (/etc/systemd/system/shadowsocks.service; disabled; vendor preset: disabled)
Active: active (running) since 三 2019-05-15 13:07:00 CST; 1s ago
Main PID: 13249 (sslocal)
Tasks: 1
Memory: 9.3M
CGroup: /system.slice/shadowsocks.service
└─13249 /usr/bin/python2 /usr/bin/sslocal -c /etc/shadowsocks/shadowsocks.json
5月 15 13:07:00 k8s-77-71 systemd[1]: Started Shadowsocks.
5月 15 13:07:00 k8s-77-71 sslocal[13249]: INFO: loading config from /etc/shadowsocks/shadowsocks.json
5月 15 13:07:01 k8s-77-71 sslocal[13249]: 2019-05-15 13:07:01 INFO loading libsodium from libsodium.so.23
5月 15 13:07:01 k8s-77-71 sslocal[13249]: 2019-05-15 13:07:01 INFO starting local at 127.0.0.1:1080
|
验证Shadowsocks客户端是都正常运行
1
|
curl --socks5 127.0.0.1:1080 http://httpbin.org/ip
|
如果Shadowsocks客户端已经正常运行,则结果如下:
1
2
3
|
{
"origin": "x.x.x.x" #你的Shadowsock服务器IP
}
|
2、安装配置Privoxy
Shadowsocks是一个 socket5 服务,我们需要使用 Privoxy 把流量转到 http/https 上。
虽然socks代理起来了,但是还不能直接用,需要privoxy转发一下
安装Privoxy
安装Privoxy
启动Privoxy
1
2
3
|
systemctl enable privoxy
systemctl start privoxy
systemctl status privoxy
|
配置Privoxy
修改配置文件 /etc/privoxy/config
1
|
[root@k8s-77-71 ~]# vim /etc/privoxy/config
|
确保以下内容没有被注释掉 这两行不在一起
1
2
|
listen-address 127.0.0.1:8118 # 8118 是默认端口,不用改
forward-socks5t / 127.0.0.1:1080 . #转发到本地端口,注意别忘了最后的.
|
注意:上面listen-address一行。
如果想让其他机器也通过这台机器连接代理就需要设置成ip:端口
设置http/https代理
修改配置文件/etc/profile
添加以下内容:
1
2
|
export http_proxy=http://127.0.0.1:8118
export https_proxy=http://127.0.0.1:8118
|
保存好执行一下:source /etc/profile
注意:端口和Privoxy中监听端口保持一致
3、验证及优化
验证是否可用
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
[root@k8s-77-71 ~]# curl -I www.google.com
HTTP/1.1 200 OK
Date: Wed, 15 May 2019 07:08:30 GMT
Expires: -1
Cache-Control: private, max-age=0
Content-Type: text/html; charset=ISO-8859-1
P3P: CP="This is not a P3P policy! See g.co/p3phelp for more info."
Server: gws
X-XSS-Protection: 0
X-Frame-Options: SAMEORIGIN
Set-Cookie: 1P_JAR=2019-05-15-07; expires=Fri, 14-Jun-2019 07:08:30 GMT; path=/; domain=.google.com
Set-Cookie: NID=183=Bpl52R_n_4pib3A-dmbDsxeXYP0qnw0HFqfGpDIrBELfCum44Cbh8VtwrFdKZwJWvTxidcrCDEwnQZf9qgpijF8DoCPHwKuBteNPqwzWIDdhV5ieOvxFQBaZqtBNslmiuoANoQlxkxiQKnCWxilUWM30NtUnGVGux0uQ2DPMFio; expires=Thu, 14-Nov-2019 07:08:30 GMT; path=/; domain=.google.com; HttpOnly
Transfer-Encoding: chunked
Accept-Ranges: none
Vary: Accept-Encoding
Proxy-Connection: keep-alive
[root@k8s-77-71 ~]#
|
- 方法三、
也是最简单的方法 如果你有桌面环境 直接用浏览器访问Google
优化
在windows或mac下用过Shadowsocks的都知道,Shadowsocks有PAC模式和全局模式
- PAC模式:也就是智能分流模式,只有被墙的才会走代理。
- 全局模式:在全局模式下,所有网站默认走代理。
上面的默认配置是全局模式
配置好Shadowsocks和Privoxy后 服务器访问公司内网服务:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
[root@k8s-77-71 ~]# curl 172.16.77.221:10021
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<title>502 - No server or forwarder data received (Privoxy@k8s-77-71)</title>
<meta http-equiv="Content-Style-Type" content="text/css">
<meta http-equiv="Content-Script-Type" content="text/javascript">
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta name="robots" content="noindex,nofollow">
<link rel="shortcut icon" href="http://config.privoxy.org/error-favicon.ico">
<style type="text/css">
......
|
发现无法访问内网服务,显然访问内网服务时也默认走了代理导致。 这显然不符合我们的要求
解决内网不走代理问题
- 方法一、
设置/etc/privoxy/config
加入以下内容:
重启Privoxy
1
|
systemctl restart privoxy
|
再访问内网服务:
1
2
3
|
[root@k8s-77-71 ~]# curl 172.16.77.221:10021
<html><body>You are being <a href="http://172.16.77.221:10021/users/sign_in">redirected</a>.</body></html>
[root@k8s-77-71 ~]#
|
可以正常访问了
此方法有个缺点,就是需要一个一个的添加地址 也可以添加域名
配置 /etc/profile
加入以下内容
1
|
export no_proxy="172.16.77.221"
|
保存后执行 source /etc/profile
再访问内网服务:
1
2
3
|
[root@k8s-77-71 ~]# curl 172.16.77.221:10021
<html><body>You are being <a href="http://172.16.77.221:10021/users/sign_in">redirected</a>.</body></html>
[root@k8s-77-71 ~]#
|
也可以达到预期效果。
4、配置PAC模式
由于前面已经配置好全局模式了。先为了验证PAC模式 需要将全局模式的一些配置恢复一下
恢复配置:vi /etc/privoxy/config 将前面添加的这两行配置注释掉
1
2
3
|
forward-socks5t / 127.0.0.1:1080 . #转发到本地端口,注意别忘了最后的.
forward 172.16.*.*/ .
|
下载生成Privoxy-action配置的脚本
此脚本是在github上找到的 有兴趣的可以去github上看看 链接
1
|
curl -skL https://raw.github.com/zfl9/gfwlist2privoxy/master/gfwlist2privoxy -o gfwlist2privoxy
|
生成配置启动
1
2
3
4
5
6
7
8
9
10
11
|
[root@k8s-77-71 ~]# bash gfwlist2privoxy '127.0.0.1:1080' #注意‘127.0.0.1:1080’为你的sock5代理地址
Generated file: 'gfwlist.action'. Please put it in privoxy config directory.
Usually, the directory is '/etc/privoxy'. If yes, then exec following command:
mv -f gfwlist.action /etc/privoxy
echo 'actionsfile gfwlist.action' >>/etc/privoxy/config
service privoxy restart (via SysVinit)
systemctl restart privoxy.service (via Systemd)
Enjoy it!
[root@k8s-77-71 ~]#
|
根据提示操作:
1
2
3
|
[root@k8s-77-71 ~]# cp -af gfwlist.action /etc/privoxy/
[root@k8s-77-71 ~]# echo 'actionsfile gfwlist.action' >> /etc/privoxy/config
[root@k8s-77-71 ~]# systemctl restart privoxy.service
|
测试PAC是否正常
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
[root@k8s-77-71 ~]# curl -I www.google.com
HTTP/1.1 200 OK
Date: Wed, 15 May 2019 09:51:58 GMT
Expires: -1
Cache-Control: private, max-age=0
Content-Type: text/html; charset=ISO-8859-1
P3P: CP="This is not a P3P policy! See g.co/p3phelp for more info."
Server: gws
X-XSS-Protection: 0
X-Frame-Options: SAMEORIGIN
Set-Cookie: 1P_JAR=2019-05-15-09; expires=Fri, 14-Jun-2019 09:51:58 GMT; path=/; domain=.google.com
Set-Cookie: NID=183=r2vRw0LzqNXglFgwyEeMifKKSLNuP-lQuzmF5QQXjCsVjRqrur9ka8eUom7SF7poH9V3pfajnLx8paBNgDTcX0YTbxqfd49bW-i0aep8KMXuGTq6x2N-mnjHqU8IAaTokKPOtdv5YNBA3idCSh5HQLkw0Tiv7efmtLBwdyYnJgI; expires=Thu, 14-Nov-2019 09:51:58 GMT; path=/; domain=.google.com; HttpOnly
Transfer-Encoding: chunked
Accept-Ranges: none
Vary: Accept-Encoding
Proxy-Connection: keep-alive
[root@k8s-77-71 ~]#
|
1
2
3
|
[root@k8s-77-71 ~]# curl 172.16.77.221:10021
<html><body>You are being <a href="http://172.16.77.221:10021/users/sign_in">redirected</a>.</body></html>
[root@k8s-77-71 ~]#
|
5、小技巧
- 如果别的机器需要连接此机器的代理只需要在/etc/profile加入代理信息即可
1
2
|
export http_proxy=http://127.0.0.1:8118
export https_proxy=http://127.0.0.1:8118
|
保存后 source /etc/profile
vim /etc/profile
1
2
|
alias proxy='export all_proxy=http://127.0.0.1:8118'
alias unproxy='unset all_proxy'
|
保存后 source /etc/profile
执行proxy来打开代理
执行unproxy来关闭代理
对于是使用PAC模式还是全局模式,可根据自己的需求来决定
Author
dylan
LastMod
2019-05-15
License
如需转载请注明文章作者和出处。谢谢!