redsocks 将socks代理转换成全局代理
redsocks 需要手动下载编译。前置需求为libevent组件,当然gcc什么的肯定是必须的。
获取源码 git clone https://github.com/darkk/redsocks
安装 libevent 组件 centos 下 yum install libevent libevent-devel -y
编译完,拷贝到/sbin 目录下,修改配置文件
vim /etc/redsocks/redsocks.conf
base{ log_debug = on; log_info = on; // 日志文件地址 log = "file:/var/log/redsocks.log"; daemon = on; redirector = iptables; user = nobody; group = nobody; } redsocks { //本地redsocks要监听的地址和端口 地址可以为0.0.0.0 即监听本地所有网卡ip local_ip = 192.168.200.167; local_port = 31338; //socks地址和端口 ip = 192.168.200.167; port = 9988; type = socks5; }
启动:
/sbin/redsocks -c /etc/redsocks/redsocks.conf &
查看监听端口:
ss -lntp|more
配置iptables
这里提供两个配置,第一个是基于黑名单的配置,就是说除了指定的ip地址以外,所有数据包通过redsocks转发:
iptables -t nat -N REDSOCKS iptables -t nat -A REDSOCKS -o lo -j RETURN iptables -t nat -A REDSOCKS -d 169.254.0.0/16 -j RETURN iptables -t nat -A REDSOCKS -d 192.168.0.0/16 -j RETURN iptables -t nat -A REDSOCKS -p tcp -j REDIRECT --to-port 31338 iptables -t nat -I PREROUTING -p tcp -j REDSOCKS
第二个是基于白名单的配置,就是说指定的ip地址才会经过redsocks转发:
iptables -t nat -N REDSOCKS iptables -t nat -A REDSOCKS -p tcp -j REDIRECT --to-port 31338 iptables -t nat -I PREROUTING -p tcp -d 172.30.0.0/16 -j REDSOCKS
修改 iptables 时请注意配置
可以直接修改 iptables 配置文件 /etc/sysconfig/iptables
举例,添加以下nat表设置
*nat :PREROUTING ACCEPT [0:0] :POSTROUTING ACCEPT [0:0] -N REDSOCKS -A REDSOCKS -p tcp -j REDIRECT --to-port 31338 -I PREROUTING -p tcp -d 50.28.87.153/32 -j REDSOCKS COMMIT
重启 iptables 服务
将内核转发打开,再将其他机器通过路由将某 ip 或某 ip 段的流量通过该机器转发至 socks 代理。
ps: redsocks 只能转发 tcp 流量
本博文主要基于该贴,http://bbs.konotes.org/thread-5089-1-1.html