背景是这样的:
公司内的主机访问外网需要通过一个HTTP代理服务器,主机ubuntu共享wifi给手机使用的时候需要在手机上配置一个代理才能访问互联网。
我觉得这样比较麻烦,所以想在主机上直接把共享wifi数据转发到HTTP代理,不用在手机上配置代理了。
解决方案:
安装一个redsocks,这个是在tcp层的代理,我把wifi的数据转发给它,再由它转给代理服务器privoxy
iptables -t nat -N REDSOCKS iptables -t nat -A PREROUTING -i wlp3s0 -p tcp -j REDSOCKS iptables -t nat -A REDSOCKS -d 0.0.0.0/8 -j RETURN iptables -t nat -A REDSOCKS -d 10.0.0.0/8 -j RETURN iptables -t nat -A REDSOCKS -d 127.0.0.0/8 -j RETURN iptables -t nat -A REDSOCKS -d 169.254.0.0/16 -j RETURN iptables -t nat -A REDSOCKS -d 172.16.0.0/12 -j RETURN iptables -t nat -A REDSOCKS -d 192.168.0.0/16 -j RETURN iptables -t nat -A REDSOCKS -d 224.0.0.0/4 -j RETURN iptables -t nat -A REDSOCKS -d 240.0.0.0/4 -j RETURN iptables -t nat -A REDSOCKS -p tcp -j REDIRECT --to-port 2001
这个iptables的设置表需要解释一下,如果你本机的地址不是192.168.0.0/16,比如你的地址是11.2.3.33,你需要再添加一条语句,不加你本机上不了网。
iptables -t nat -A REDSOCKS -d 11.2.0.0/16 -j RETURN
redsocks的配置如下:
base { log_info = on; log = "file:/var/log/redsocks.log"; daemon = on; redirector = iptables; } redsocks { local_ip = 0.0.0.0; local_port = 12345; ip = 127.0.0.1; port = 1080; type = socks5; }
我其实是通过socks5代理跑出去的,socks5代理外面再包一个proxychain,用于穿过公司的http代理服务器。