shadowsocks透明代理的几种实现方式:ss-redir,privoxy,tproxy


测试环境:centos 7 x64

准备工作:首先安装shadowsocks-libev,参考此博文 (此方法已安装了ss-server,ss-local,ss-redir,ss-tunnel)

 shadowsocks-libev,是一个基于 libev 库开发的 shadowsocks 代理套件。包含ss-local,ss-redir,ss-tunnel,ss-server四部分。
1. ss-server是shadowsocks 的服务端程序。
2. ss-local是shadowsocks 客户端程序。
3. ss-redir是透明代理工具。
4. ss-tunnel是本地端口转发工具,通常用于解决 dns 污染问题。

一、ss-redir方式

1、启动ss-redir
nohup ss-redir -s 1.2.3.4 -p 8990 -m aes-256-gcm -k 'passwd' -u -b 0.0.0.0 -l 1080  & 
说明:
-s ss服务器ip
-p ss服务器端口
-m 加密方式
-k 密码
-u 启用udp转发
-b 本地监听ip
-l 本地监听端口
-f pid_file
-v verbose info

2、配置iptables

# 在 nat 表中创建新链
iptables -t nat -N SHADOWSOCKS
# 发往shadowsocks服务器的数据不走代理,否则陷入死循环
iptables -t nat -A SHADOWSOCKS -d 1.2.3.4 -j RETURN
# 保留地址、私有地址、回环地址 不走代理
iptables -t nat -A SHADOWSOCKS -d 0.0.0.0/8 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 10.0.0.0/8 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 127.0.0.0/8 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 169.254.0.0/16 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 172.16.0.0/12 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 192.168.0.0/16 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 224.0.0.0/4 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 240.0.0.0/4 -j RETURN
# 其余的全部重定向至ss-redir监听端口1080(端口号随意,统一就行)
iptables -t nat -A SHADOWSOCKS -p tcp -j REDIRECT --to-ports 1080
# OUTPUT链添加一条规则,重定向至shadowsocks链
iptables -t nat -A OUTPUT -p tcp -j SHADOWSOCKS
iptables -t nat -I PREROUTING -p tcp -j SHADOWSOCKS

3、启动ss-tunnel
nohup ss-tunnel -s '1.2.3.4' -p '8990' -m 'aes-256-gcm' -k 'passwd' -u -b 0.0.0.0 -l 53 -L 8.8.8.8:53  & 
4、然后修改本机dns服务器,指向127.0.0.1
/etc/resolv.conf

测试:
curl -sL ip.cn
curl -sL www.google.com
curl -sL www.facebook.com 
curl -sL www.baidu.com 

二、privoxy方式

 由于ss使用的是socks5协议,但有些应用仅支持http协议,使用privoxy 可将socks5代理转成http代理
1、安装privoxy
sudo yum install privoxy -y
编辑配置文件/etc/privoxy/config,在里面加入一行
 forward-socks5 / 127.0.0.1:1080 .
保存退出。启动 privoxy,默认监听 127.0.0.1:8118 端口。
说明:8118 是 privoxy 提供的 http 代理地址,而 1080 是 ss-local 提供的 socks5 代理地址,发往 8118 端口的数据会被 privoxy 处理并转发给 ss-local。
执行以下命令配置当前终端的 http 代理
export http_proxy=http://127.0.0.1:8118; export https_proxy=$http_proxy
上面这种方式是全局代理,可以修改配置文件,让指定的网站通过代理访问。
#配置文件
 
confdir /etc/privoxy
logdir /var/log/privoxy
 
actionsfile match-all.action # Actions that are applied to all sites and maybe overruled later on.
actionsfile default.action # Main actions file
actionsfile user.action # User customizations
 
filterfile default.filter
filterfile user.filter # User customizations
 
logfile privoxy.log
#下面这行的意思是监听来自任意地址的8118访问
listen-address :8118
toggle 1
 
enable-remote-toggle 0
enable-remote-http-toggle 0
enable-edit-actions 0
enforce-blocks 0
 
buffer-limit 4096
enable-proxy-authentication-forwarding 0
 
##下面一行表示将所有网址转发给本地1080端口,也就是本地的SS客户端所开放的端口。
#forward-socks5 / 127.0.0.1:1080 .


#启动这段只有部分网址走代理###############################
forward / .
#下面这一段表示需要走代理的规则
forward-socks5 .dropbox*.com 127.0.0.1:1080 .
forward-socks5 .*google*.* 127.0.0.1:1080 .
forward-socks5 .*facebook*.* 127.0.0.1:1080 .
forward-socks5 .*twitter*.* 127.0.0.1:1080 .
#forward-socks5 .*youtube*.* 127.0.0.1:1080 .
##########################################################
forwarded-connect-retries 0
 
accept-intercepted-requests 0
allow-cgi-request-crunching 0
split-large-forms 0
keep-alive-timeout 300
tolerate-pipelining 1
default-server-timeout 60
socket-timeout 300
 
#配置文件结束

三、tproxy方式,参考此

1、安装相关依赖
sudo yum -y install curl ipset iproute dnsmasq perl git
编译安装chinadns
wget https://github.com/shadowsocks/ChinaDNS/releases/download/1.3.2/chinadns-1.3.2.tar.gz
tar xf chinadns-1.3.2.tar.gz
cd chinadns-1.3.2/
./configure
make && make install
2、安装ss-tproxy脚本
git clone https://github.com/zfl9/ss-tproxy
cd ss-tproxy
chmod +x ss-tproxy
cp -af ss-tproxy /usr/local/bin
mkdir -p /etc/ss-tproxy
cp -af ss-tproxy.conf gfwlist.* chnroute.* /etc/ss-tproxy
3、脚本配置文件修改 /etc/ss-tproxy/ss-tproxy.conf
默认分流模式为 chnroute,这也是 v1 版本中的分流模式,根据你的需要修改
dns_remote 为远程 DNS 服务器(走代理),默认为 Google DNS,根据需要修改
dns_direct 为直连 DNS 服务器(走直连),默认为 114 公共DNS,根据需要修改
iptables_intranet 为要代理的内网的网段,默认为 192.168.0.0/16,根据需要修改

配置文件里的proxy_runcmd 是用来启动代理软件的命令;proxy_kilcmd 是用来停止代理软件的命令。
如proxy_runcmd ,实际上就是前述二点ss-redir的启动方式
ss-redir -s 1.2.3.4 -p 1080 -m aes-256-gcm -k passwd -b 0.0.0.0 -l 60080 -u --reuse-port --no-delay --fast-open </dev/null &>>/var/log/ss-redir.log &
和proxy_kilcmd
kill -9 $(pidof ss-redir)



评论

热门博文

Xray安装配置VLESS-XTLS-Vision及VLESS-XTLS-uTLS-REALITY

在VPS上轻松搭建L2TP/IPSec图文教程(通吃各种架构的VPS,包括KVM,OpenVZ等)

V2Ray安装配置VMESS-TLS及VMESS-TLS-WS