Openwrt 路由器通过全局HTTP代理上网的怪异解决方案

由于某些网络要求必须通过http代理认证才能上网,而目前市面上还没找到支持全局wan口代理上网的路由器,只能另辟蹊径。

一开始想到用linux全局http代理,修改/etc/profile增加http-proxy,ftp-proxy,https-proxy,但发现这种情况不支持全协议(例如DNS/UDP之类),而且只能让路由本身用上代理,所以这个方案pass。

后来想到用squid,折腾发现由于squid支持的协议虽然很多,但是如果作为transparent透明代理的话,需要配置iptable,使之将80等端口重定向到squid端口上才行,这样也很麻烦,由于不支持socket代理,所以仍然不可以用,这个方案也pass。

最后还是采用了openvpn over http proxy的解决方案。

先说说这个方案的缺点:
1.配置复杂,需要对端openvpn服务器支持。
2.出口带宽受限,不超过对端openvpn服务器的上行带宽。

优点是:
1.所有流量通过HTTP代理出去,兼容所有协议
2.可以实现HTTP代理认证
3.可以使用多个openvpn服务器做冗余。

下面是详细配置:
1.先贴一个对端openvpn服务器(也是基于openwrt路由)的配置:

对端openvpn服务器上的防火墙和网络配置可以参考本站
《Openwrt路由上的Openvpn Server Tun模式配置和firewall配置》

2.openwrt的openvpn客户端配置:

注意在里面使用了代理服务器:10.0.2.2:8000 并通过/etc/config/pw.txt 文本文件实现了认证,文本第一行是用户名,第二行是密码。

防火墙配置,涉及vpn的部分:

增加:

网络接口配置:

增加:

原本以为代理服务器10.0.x.x网段与10.8.x.x/128.0.0.0网段会有路由冲突,后来发现居然没有问题。。。
用以下命令可以看看是否服务器端路由push到客户端了:

发表评论

电子邮件地址不会被公开。 必填项已用*标注