背景是这样的:

公司内的主机访问外网需要通过一个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代理服务器。

01-05 09:28