之前我写过一篇文章《WiFi热点分享ShadowSocks流量实现全局透明代理》里面详细解释了如何使用SSH(或Shadowsocks等其他socks5代理)+redsocks+iptables实现Ubuntu笔记本电脑分享一个Wifi,然后让所有连接这个wifi的客户端都实现透明代理(科学上网),但是这样做受限于redsocks的稳定性问题,因为当时的redsocks是通过Ubuntu的apt-get安装的,版本很旧而且已经停止更新,bug主要表现在。
1、不能关闭已建立的连接,一旦超越linux的最大限制,就会报“Too many open files”异常,导致服务瘫痪,需要每隔一段时间进行重启
2、在我的使用还发现这种方式经常会让NetworkManager对无线网卡的管理崩溃,导致无线网卡停止工作,搜索不到wifi信号,需要经常重启NetworkManager。
3、redsocks1的-p参数有bug,不能生成对应的pid文件。
目前国内带有代理功能的Openwrt路由器普遍使用semigodking 改写的redsocks2,而且redsocks2更新很频繁,经常会有bug修复和新功能出现,所以最好的方式是我们自己去编译github上的源码然后安装使用,编译过程很简单,两分钟即可搞定,从此摆脱redsocks1的bug。
redsocks2的作者应该是个恩山的大神,原贴地址:http://www.right.com.cn/FORUM/forum.php?mod=viewthread&tid=163936,在此要非常感谢大神提供的优秀的透明代理工具
首先找个没有权限限制的目录,比如用户目录下的Downloads,然后克隆github上的c代码
git clone https://github.com/semigodking/redsocks
然后cd到项目根目录
cd ./redsocks
然后安装一个依赖库
libevent2才能编译,否则会报错