Linux全局代理
一般用Linux的话都是用全局代理都是用http_proxy
以及https_proxy
这两个环境环境变量来实现的, 但是缺点是这种方式并不是真正的全局代理, 即使设置了代理的话,对于某些应用还是无效的,比如w3m,而且这种方式并不支持socks协议.
我在实验室环境使用shadowsocks作为代理用来访问外网, 没有用来翻墙,原因是个人感觉shadosocks比其他socks软件好部署,虽然加密损失点性能,但是table加密那点计算量也不算什么.在windows环境的话用proxifity就可以很好得解决全局代理的问题,在Linux上,上面也说了,确实是一件比较麻烦的事情.
shadowsocks的服务器端就不介绍了, 推荐安装C with libev版本, 这个版本包含了ss-server ss-redir ss-local ss-tunnel,其他版本貌似没有实现本文功能的ss-redir. 除了ss-server是作为服务端的,其余三个都是做作为客户端的.ss-redir是用来做透明代理的, ss-local是做本地socks5代理的, ss-tunnel是做隧道的(这个目前还不知道实际的用途). 本文要说的就是用ss-redir配合Linux强大的iptable来实现全局代理.
下面以ubuntu14.04的环境来介绍
#创建一个叫SOCKS的链
iptables -t nat -N SOCKS
#忽略服务器的地址,如果不属于内网IP的话一定要注意加上.
#其实下面这句可以省略的, 因为它属于172.16.0.0/12
iptables -t nat -A SOCKS -d 172.23.45.19 -j RETURN
# 忽略本地地址
iptables -t nat -A SOCKS -d 0.0.0.0/8 -j RETURN
iptables -t nat -A SOCKS -d 10.0.0.0/8 -j RETURN
iptables -t nat -A SOCKS -d 127.0.0.0/8 -j RETURN
iptables -t nat -A SOCKS -d 169.254.0.0/16 -j RETURN
iptables -t nat -A SOCKS -d 172.16.0.0/12 -j RETURN
iptables -t nat -A SOCKS -d 192.168.0.0/16 -j RETURN
iptables -t nat -A SOCKS -d 224.0.0.0/4 -j RETURN
iptables -t nat -A SOCKS -d 240.0.0.0/4 -j RETURN
# Anything else should be redirected to shadowsocks‘s local port
#除上面之外的所有流量都跳转到socks的本地端口(local_port),这里使用shadosock默认端口1080
iptables -t nat -A SOCKS -p tcp -j REDIRECT --to-ports 1080
# 最后是应用上面的规则,将OUTPUT出去的tcp流量全部经过SOCKS链
#如果是在openwrt上实现透明代理的话,使用下面被注释了的规则
#iptables -t nat -A PREROUTING -p tcp -j SOCKS
iptables -t nat -A OUTPUT -p tcp -j SOCKS
可以将这段脚本保存为一个sh,加入开机自启
将防火墙规则加入系统后,启动ss-redir,其实两者顺序调换了也无所谓
#ss-redir -c /etc/shadosocks.json
shadosocks.json的内容和设置ss-local是一致的.shadosocks的好处是server/client共用一套配置.shadosocks官网即使对客户端服务器有分类, 但是客户端只是服务器端的一个子集,所以推荐用服务器的版本.
经过这样一番设置的话, 本机的所有tcp流量都会经过代理机器出去了,目前ss-redir不知处udp转发.
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。