|
https://github.com/semigodking/red---socks
是改版的red---socks, 不用设置一大堆的 iptables了。自动判断,能连接上的直接连接,连接不上的,自动转向socks5代理(比如用 TOR提供的代理) 出去。
red---socks是个透明代理软件,通过将它安装到路由上并适当配置后,子网下所有机器发起的到被配置的端口的连接都将由red---socks透明代理。这个改版与其它版本不同之处是:它会首先尝试使用无代理的方式直接连接你要访问的目标,如果发现被墙,则立即自动通过设定的代理连接出去。这个重试过程对用户是透明的,所以,用户体验相当不错。配置也很方便,不需要象gae等为了访问合规网站速度快而维护并配置一大堆的IP地址到iptables里。
使用方法:
1. 你要有个干净的DNS系统,推荐使用dnscrypt解决,这步我就不多说了,现在很多ROM都默认启用。如果没有 的话,请google之。
2. 确保你的wrt已经安装了libevent2 - 2.0.19-1 这个包
3. 确保你的fan wall代理,比如gae,正常工作。
4. red---socks所用的配置文件。将这配置文件放到 /etc/config/red---socks.conf 中- root@OpenWrt:~# cat /etc/config/red---socks.conf
- base {
- log_debug = off;
- log_info = off;
- daemon = on;
- redirector= iptables;
- }
- red---socks {
- local_ip = 192.168.1.1;
- local_port = 1081;
- ip = 192.168.1.1;
- port = 9050;
- type = autosocks5;
- }
复制代码 上面 192.168.1.1:1081 是你red---socks要监听的地址和端口(后面一步将会把向外发出的TCP连接重定向到这个这个端口),而192.168.1.1:9050是 SOCKS5代理的地址和端口,我用 TOR。根据你使用的fan wall代理设置具体值
5. 将red---socks放到/root/目录下,并确保可执行。运行red---socks- 3083 root 1156 S /root/red---socks2 -c /etc/config/red---socks.conf
- 3085 root 1760 S /root/red---socks2 -c /etc/config/red---socks.conf
复制代码 注意,运行后会有两个进程,第一进程是保护进程,如果第二个真正提供服务的进程死掉了,它会立即再创建一个新的进程来提供服务。没有办法,有个未知bug有时会导致这个进程死掉,这是暂时的解决办法。
6. 配置iptables进程REDIRECT,将向外发出的到 80/443两端口的TCP连接重定向到red---socks,由red---socks进行处理. 在这之前,请确保你安装了 iptables-mod-nat-extra 这个包。- iptables -t nat -N red---socks
- iptables -t nat -A PREROUTING -i br-lan -p tcp -j red---socks
- # Do not redirect traffic to the followign address ranges
- iptables -t nat -A red---socks -d 127.0.0.0/8 -j RETURN
- iptables -t nat -A red---socks -d 192.168.0.0/16 -j RETURN
- iptables -t nat -A red---socks -d 10.8.0.0/16 -j RETURN
- iptables -t nat -A red---socks -d 224.0.0.0/4 -j RETURN
- iptables -t nat -A red---socks -d 240.0.0.0/4 -j RETURN
- # Redirect normal HTTP and HTTPS traffic
- iptables -t nat -A red---socks -p tcp --dport 80 -j REDIRECT --to-ports 1081
- iptables -t nat -A red---socks -p tcp --dport 443 -j REDIRECT --to-ports 1081
复制代码 根据本人经验,透明代理80 和443两个端口就足够了,上推,看YouTube都没有问题。
如果想每次重启后都生效,你可以将上面这段内容加上下面这句一起放入 /etc/rc.local 中。注意根据你的情况修改路径。- /root/red---socks2 -c /etc/config/red---socks.conf
复制代码 如果你上面都做好了的话,那么你所有在192.168.1.1/24子网下的到web的连接都会自动连接,该走代理的走代理,该直接连接的直接连接.
0321更新:
1. 这次编译的版本支持全部原版的功能
2. 新增autohttp-connect方法,方便大家配合gae使用。注意,此方法经过仅通过简单测试,可与gae配合工作,效果不错。
在red---socks.conf配置中像 下面这样去写。- red---socks {
- local_ip = 192.168.1.1;
- local_port = 1083;
- ip = 192.168.1.1;
- port = 8080;
- type = autohttp-connect;
- login = gaeproxy;
- password = gaeproxy;
- }
复制代码 0324更新:
找了个时间针对gae做了个简单测试,http/https都可以正常工作,喜欢用gae的兄弟可以放心用了。比用.pac或iptables效果应该会好很多。
0325更新:
修改了一下说明,尽量说得更明了一些。
【20131024更新】最新版改名为red---socks2,比之前版本更稳定更可靠,支持更多种代理出口。新版本目前没有再出现程序仍在运行但罢工的现象。
注意:配置文件与旧版不再兼容。
以下为新版配置文件样版:- red---socks {
- local_ip = 192.168.1.1;
- local_port = 1081;
- ip = 192.168.1.1;
- port = 9050;
- type = socks5; // 不再支持autosocks5和autohttp-connect两种类型。请在socks4, socks5, http-connect, http-relay和direct中选择。
- autoproxy = 1; // 当此参数不指定或为0时,自动代理功能关闭,所有连接都通过前面设置的代理出去。
- // 当此参数为1时,自动代理功能打开,所有连接先尝试直接连接,当直接连接失败时才尝试通过前面设置的代理出去。
- // 不建议和direct 方式共同使用,没意义。
- //login = username;
- //password = passwd;
- }
复制代码 【20131026更新】说下编译方法,方便其它机型网友自己编译
前提条件:
你已经有一套配置好的完成了基本编译工作的openwrt toolchain,并且你安装并编译过libevent2。
分4步:
1. 下载源码并解压
2. 设置编译环境变量,根据你自己实际情况修改路径名- export PATH=$PATH:/home/user1/openwrt/staging_dir/toolchain-mipsel_dsp_gcc-4.6-linaro_uClibc-0.9.33.2/bin/
- export STAGING_DIR=/home/user1/openwrt/staging_dir/toolchain-mipsel_dsp_gcc-4.6-linaro_uClibc-0.9.33.2/
复制代码 3. 修改red---socks2的Makefile,将其中的include和lib路径指向openwrt中的正确位置- CFLAGS +=-fPIC -O2 -g \
- -I ~/openwrt/staging_dir/target-mipsel_dsp_uClibc-0.9.33.2/usr/include/ \
- -L ~/openwrt/staging_dir/target-mipsel_dsp_uClibc-0.9.33.2/usr/lib/
复制代码 4. 编译。 下面make后面的两个参数该用什么?看一下你的/home/user1/openwrt/staging_dir/toolchain-mipsel_dsp_gcc-4.6-linaro_uClibc-0.9.33.2/bin/ 目录中的文件就明白了,取前缀。- make CC=mipsel-openwrt-linux-gcc LD=mipsel-openwrt-linux-ld
复制代码
【20131104更新】关于red---socks2 和gae
不知道是我以前测试没做好的问题,还是什么原因,最近有人反应red---socks2和gae不能正常工作,表现为被墙网站不能访问。经过仔细调查,我才发现http-connect方法和gae是不能正常工作的。原因是gae对HTTP的CONNECT方法进来的请求要进行HTTPS协商。但是,由于这是透明代理,真正的WEB客户端并不会进行HTTPS协商,因为它不知道被代理了。所以,HTTP-CONNECT仅对HTTPS连接有效。为使red---socks2能对非HTTPS连接有效,需要你针对HTTP与HTTPS分别进行REDIRECT。
- red---socks {
- local_ip = 192.168.1.1;
- local_port = 1081; // 将HTTP 连接重定向到这个端口
- ip = 192.168.1.1;
- type = http-relay;
- port = 8080;
- autoproxy=1;
- }
- red---socks {
- local_ip = 192.168.1.1;
- local_port = 1082; // 将HTTPS 连接重定向到这个端口
- ip = 192.168.1.1;
- type = http-connect;
- port = 8080;
- autoproxy=1;
- }
复制代码
相应地,iptables的重定向命令也要改一下。- # Redirect normal HTTP and HTTPS traffic
- iptables -t nat -A red---socks -p tcp --dport 80 -j REDIRECT --to-ports 1081
- iptables -t nat -A red---socks -p tcp --dport 443 -j REDIRECT --to-ports 1082
复制代码
【20131112更新】注意事项
最近很多朋友反应按教程设置后出现问题。我这里先指出一个比较常见的设置错误。现象:设置好后,普通网站可以访问,但被墙网站不能访问,代理又正常。
原因之一:local_ip被设置为了0.0.0.0 。下面就是一个local_ip设置为0时,TOR给出的提示
- Nov 12 19:26:13.000 [warn] Rejecting SOCKS request for anonymous connection to private address [scrubbed].
复制代码 出现这种提示的原因可能和某些设置有关,具体原因我暂时未深入调查。
解决方法:local_ip 一定不要设置为 0.0.0.0 或 127.0.0.1等 ,应设置成你的局域网IP。
- red---socks {
- local_ip = 192.168.1.1; // 这里一定不能是0.0.0.0
- local_port = 1082;
- ip = 192.168.1.1;
- type = socks5;
- port = 9050;
- }
复制代码
【20131116更新】修复与gae配合时的问题有人反映各种配置正常,但就是不能正常运行或不能正常访问被墙网站。经过检查,发现这种问题只在与gae一起工作时出现。
另外,修复者了内部被墙IP的缓存机制,fan wall应该会更流畅。
如果你之前使用过程中遇到任何问题,都建议你更新后再试一试,这个版本应该是目前来说最可靠的一版。
【20140404更新】直接连接更可靠
这次更新主要是通过牺牲少数连接超时的目标的连接速度来换取绝大部分正常能连接的目标及被connection reset等目标的连接性能,同时避免因为正常目标因为某尔的误判导致正常目标也被转发到proxy的情况。换句话来说,绝大部分连接会很顺畅,但那种timeout的IP会变慢,至少2秒才能连接上;不过这种IP应该是很少的数的且它们的IP通常是固定的,因此可以通过iptables把这些IP直接转到未开autoproxy设置的代理端口。总体来说,用户体验应该会稳定可靠很多,建议升级。我还是只能放出HG255D可用的版本。
附上我HG255D可用的版本。
为了让更多人看到,回贴可下载
旧版red---socks
旧版red---socks2
旧版red---socks2
新版red---socks2-0.51
|
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?立即注册
×
评分
-
查看全部评分
|