背景是這樣的:
公司內的主機訪問外網需要通過一個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代理服務器。