高端教程:Linux局部代理转全局代理教程(无需VPN)

2,699 views
Skip to first unread message

Gary12

unread,
Feb 15, 2016, 7:15:14 AM2/15/16
to fq...@googlegroups.com
即将登场的高端教程:Linux局部代理转全局代理教程(无需VPN),这是dnsforwardr+redsocks+iptables+ss强强联合产生的奇迹,我亲测成功,可以把socks代理转换为全局代理,等同VPN的效果。
我过去也尝试过,但是都失败了,昨天突然领悟到可能是DNS污染的问题,后来一试,果然如此。
原来抗DNS污染才是redsocks+iptables成功的关键,dnsforwarder堪称神器。
本周我会找时间发布这一我有史以来最有份量的翻墙教程。
最后的结果就是,只要你有SS,人人都可以拥有VPN!


现在教程开始:


1.  安装编译dnsforwarder:


https://github.com/holmium/dnsforwarder/archive/5.zip


下载解压以后,把dnsforwarder放到home主目录:


cd dnsforwarder-5
apt-get install libcurl4-nss-dev libssl-dev
./configure && make &&make install

cp default.config ../config
cd ..
gedit config
做如下修改:
PrimaryServer TCP 

即TCP解析优先


2. 将本机DNS彻底指向127.0.0.1


为什么说是彻底指向127.0.0.1,因为仅仅修改/etc/resolv.conf是不够的,重启即失效,必须永久生效才行。
方法如下:


gedit /etc/resolvconf/resolv.conf.d/head     

添加 :nameserver 127.0.0.1


sudo /etc/init.d/resolvconf reload


gedit /etc/NetworkManager/NetworkManager.conf

把dnsmasq注释掉改成:#dnsmasq



gedit /etc/network/interfaces  


添加 :nameserver 127.0.0.1



gedit /etc/dhcp/dhclient.conf  



把这一行的注释去掉:#prepend domain-name-servers 127.0.0.1;
改成prepend domain-name-servers 127.0.0.1;

 sudo service network-manager restart

至此,本机DNS彻底指向了127.0.0.1了





3. 安装配置redsocks:
apt-get install redsocks
gedit /etc/redsocks.conf
把里面的内容删光,把下面的内容粘贴进去:


base {
        log_debug = off;
        log_info = on;
        log = "file:/tmp/reddi.log";

        daemon = on;
        redirector = iptables;
}

redsocks {
        local_ip = 127.0.0.1;
        local_port = 12345;

        ip = 127.0.0.1;
        port = 1080;
        type = socks5;}


存盘退出。
运行 redsocks


:~$ ps -ef|grep redsocks
root       736     1  0 19:43 ?        00:00:10 /usr/sbin/redsocks -c /etc/redsocks.conf
gary      4067  3997  0 20:38 pts/19   00:00:00 grep --color=auto redsocks



后台进程已经运行





4.创建iptables规则:


在主目录下新建一个iptables.sh文档:
gedit iptables.sh
把下面的内容粘贴进去:
sudo iptables -t nat -A OUTPUT -d 0.0.0.0/8 -j RETURN
sudo iptables -t nat -A OUTPUT -d 10.0.0.0/8 -j RETURN
sudo iptables -t nat -A OUTPUT -d 127.0.0.0/8 -j RETURN
sudo iptables -t nat -A OUTPUT -d 169.254.0.0/16 -j RETURN
sudo iptables -t nat -A OUTPUT -d 172.16.0.0/12 -j RETURN
sudo iptables -t nat -A OUTPUT -d 172.17.0.0/12 -j RETURN
sudo iptables -t nat -A OUTPUT -d 192.168.0.0/16 -j RETURN
sudo iptables -t nat -A OUTPUT -d 224.0.0.0/4 -j RETURN
sudo iptables -t nat -A OUTPUT -d 240.0.0.0/4 -j RETURN
sudo iptables -t nat -A OUTPUT -d VPS IP -j RETURN
sudo iptables -t nat -A OUTPUT -p tcp -j REDIRECT --to-ports 12345


把里面的VPSIP替换成你自己的SS的VPSIP地址(域名不行)



chmod +x iptables.sh


5. 验证redsocks+iptables+dnsforwarder+ss全局代理的方法是否能生效:
我总结的口诀就是SDI, 即启动顺序是:SS=>dnsforwarder=>iptables
为什么没有redsocks?因为redsocks开机就能自启了,不需要单独设置了。


开始验证:
依次运行:
sslocal -c ss配置文件名.json -d start (以dameon后台运行方式)
dnsforwarder -d -f config
./iptables.sh


验证:


curl google.com
<HTML><HEAD><meta http-equiv="content-type" content="text/html;charset=utf-8">
<TITLE>302 Moved</TITLE></HEAD><BODY>
<H1>302 Moved</H1>
The document has moved
<A HREF="http://www.google.co.jp/?gfe_rd=cr&amp;ei=QF7IVtjgG-b98wfwtZSwDg">here</A>.
</BODY></HTML>



打开chrome,采用直连方式访问google,youtube, 都可以正常访问。


然后在终端直接运行tor,发现tor瞬间就能boot strap到100%! 连前置都不用!





验证成功!


为了让操作简单,建立一个批处理:
gedit vpn.sh

内容如下:

sslocal -c SS配置文件名.json -d start
dnsforwarder -d -f config
./iptables.sh


chmod +x vpn.sh


每次开机只要运行./vpn.sh,全局代理就开启了:


/gary# ./vpn.sh
INFO: loading config from vultr.json
2016-02-20 19:44:07 INFO     loading libsodium from libsodium.so.18
started
DNSforwarder mainly by holmium. Version 5.0.29 . License : GPL v3.
Time of compilation : Feb 20 2016 12:59:24.

Please run `dnsforwarder -p' if something goes wrong.

Configure File : config

deamon process pid : 1849
root@gary-GA-MA770T-UD3P:/home/gary# curl google.com
<HTML><HEAD><meta http-equiv="content-type" content="text/html;charset=utf-8">
<TITLE>302 Moved</TITLE></HEAD><BODY>
<H1>302 Moved</H1>
The document has moved
<A HREF="http://www.google.co.jp/?gfe_rd=cr&amp;ei=jFHIVrm9M-P98weLtZH4Ag">here</A>.
</BODY></HTML>





另一种方法是用dnscrypt-proxy


下载 https://download.dnscrypt.org/dnscrypt-proxy/dnscrypt-proxy-1.6.1.tar.gz
解压以后,用./configure && make && make install 安装


使用方法:dnscrypt-proxy -d -R dnsserver-name


在/usr/local/share/dnscrypt-proxy/dnscrypt-resolvers.csv文件的第一列就是
dnsserver-name的列表:






同样可以建立一个批处理:
gedit vpn2.sh

内容如下:

sslocal -c SS配置文件名.json -d start
dnscrypt-proxy -d -R dnsserver-name
./iptables.sh


chmod +x vpn2.sh


每次开机只要运行./vpn2.sh,全局代理就开启了:




为什么抗DNS污染是本教程的关键:


因为:在redsocks+iptables的端口转发的配置下,这种环境是透明的,即浏览器并不知道会调用代理。而是通过直连UDP协议发起DNS查询请求,这样问题就来了,这正好就直接掉入了DNS污染的陷阱。


原因也在于redsocks不能支持UDP协议的转发。这样解决方法只有两个:


1. 采用TCP协议解析DNS
2. DNS加密


第三种方法:有人说是UDP转发,我没试过,至少前端代理:SS或者其他VPS隧道客户端软件支持UDP转发才能实现


这种方案对于软件的要求太高,可靠性值得怀疑,不推荐。




最后多说一句,这种方法并不是真的VPN,因为没有tun-tap的NAT虚拟网关,无法匿名,要匿名需要使用tor


好处: 可以方便无法调用代理的程序使用: 比如docker,bash终端等,如今搭建蓝灯编译环境,易如反掌!
另外更新ubuntu的软件源也变得非常容易了,直接快速就能更新下载源了。
其他像git clone 都非常快,再也不用proxychains了



至此教程完成。
Auto Generated Inline Image 1
Auto Generated Inline Image 1

鼓浪听涛

unread,
Feb 15, 2016, 7:25:23 AM2/15/16
to 翻墙论坛
太期待啦!!!!!搬小板凳,坐等哈!

在 2016年2月15日星期一 UTC+8下午8:15:14,Gary12写道:

真心猪猪

unread,
Feb 15, 2016, 8:48:06 AM2/15/16
to 翻墙论坛
跪等!!!

ydw84...@gmail.com

unread,
Feb 16, 2016, 7:53:37 PM2/16/16
to 翻墙论坛
弱弱的问一下大神,局部代理转全局代理不是可以用神器Proxifier吗?

真心猪猪

unread,
Feb 17, 2016, 8:12:13 AM2/17/16
to 翻墙论坛
楼主是说的 LInux 不是 Windows

2333

unread,
Feb 17, 2016, 9:34:35 AM2/17/16
to 翻墙论坛, ydw84...@gmail.com
不支持udp

在 2016年2月17日星期三 UTC+8上午8:53:37,ydw84...@gmail.com写道:
弱弱的问一下大神,局部代理转全局代理不是可以用神器Proxifier吗?

Zhang Yun

unread,
Feb 18, 2016, 12:42:04 AM2/18/16
to 翻墙论坛
听课来了


在 2016年2月15日星期一 UTC+8下午8:15:14,Gary12写道:
即将登场的高端教程:Linux局部代理转全局代理教程(无需VPN),这是dnsforwardr+redsocks+iptables+ss强强联合产生的奇迹,我亲测成功,可以把socks代理转换为全局代理,等同VPN的效果。

Malthae

unread,
Feb 18, 2016, 8:48:23 PM2/18/16
to 翻墙论坛
前排强势围观学习

Gary12

unread,
Feb 18, 2016, 8:59:23 PM2/18/16
to fq...@googlegroups.com
经过测试,除了dnsforwarder, dnsncrypt也可以使用:

 dnscrypt-proxy --d -R cisco

gary # dnscrypt-proxy  -R cisco
[INFO] - [cisco] does not support DNS Security Extensions
[WARNING] - [cisco] logs your activity - a different provider might be better a choice if privacy is a concern
[NOTICE] Starting dnscrypt-proxy 1.6.1
[INFO] Generating a new session key pair
[INFO] Done
[INFO] Server certificate #1435874751 received
[INFO] This certificate is valid
[INFO] Chosen certificate #1435874751 is valid from [2015-07-03] to [2016-07-02]
[INFO] Server key fingerprint is ED19:BFBA:FAFC:9257:DFDC:68C7:69BF:AC24:94CD:743F:3C1D:4966:134D:FE2C:4BDC:F315
[NOTICE] Proxying from 127.0.0.1:53 to 208.67.220.220:443

在使用了dnscrypt以后,全局代理的DNS也能正确解析。

所以,如果是这样,理论上:支持dns over TCP或者dns加密的工具的其他软件比如: unbound,bind,pcap_dnsproxy等也应该可以使用。我今天之内会发布完整的教程。

鼓浪听涛

unread,
Feb 18, 2016, 9:34:49 PM2/18/16
to 翻墙论坛
可以在WINDOWS下使用吗?

在 2016年2月19日星期五 UTC+8上午9:59:23,Gary12写道:

Gary12

unread,
Feb 19, 2016, 2:10:10 AM2/19/16
to fq...@googlegroups.com
win下可以用dnscrypt (有win32版本的),但我这里讲的局部代理转全局代理方法说的是linux平台,windows平台不适用

在 2016年2月19日星期五 UTC+8上午10:34:49,鼓浪听涛写道:

鼓浪听涛

unread,
Feb 19, 2016, 2:43:36 AM2/19/16
to 翻墙论坛
dnscrypt 总是掉线。

在 2016年2月19日星期五 UTC+8下午3:10:10,Gary12写道:

Gary12

unread,
Feb 20, 2016, 7:48:02 AM2/20/16
to 翻墙论坛
帖子已更新,教程已发布!

鼓浪听涛

unread,
Feb 20, 2016, 8:27:31 AM2/20/16
to 翻墙论坛
感谢G大,辛苦了。虽然我是用WINDOWS的用户,不能使用它,仍然点赞!

在 2016年2月20日星期六 UTC+8下午8:48:02,Gary12写道:
帖子已更新,教程已发布!

skywi...@gmail.com

unread,
Feb 21, 2016, 11:04:59 AM2/21/16
to 翻墙论坛
跪拜,小白不懂linux啊,能不能出个win版本啊,最好做个教学视频发布到youtube就更好了。期待啊!


在 2016年2月15日星期一 UTC+8下午8:15:14,Gary12写道:
即将登场的高端教程:Linux局部代理转全局代理教程(无需VPN),这是dnsforwardr+redsocks+iptables+ss强强联合产生的奇迹,我亲测成功,可以把socks代理转换为全局代理,等同VPN的效果。

brit...@gmail.com

unread,
Feb 23, 2016, 10:41:18 AM2/23/16
to 翻墙论坛
教程在哪?网址是什么?

Gary12

unread,
Feb 25, 2016, 6:17:55 AM2/25/16
to 翻墙论坛, brit...@gmail.com
增加UDP转发的全局代理方法: 经过反复测试,SS原生支持UDP转发,因此不需要第三方抗DNS污染软件也能通过SS的UDP转发功能实现正确解析DNS。

方法如下: 

redsocks.conf:


base {
        log_debug = off;
        log_info = on;
        log = "file:/tmp/reddi.log";

        daemon = on;
        redirector = iptables;
}

redsocks {
        local_ip = 127.0.0.1;
        local_port = 12345;

        ip = 127.0.0.1;
        port = 1080;
        type = socks5;}


redudp {
    local_ip = 127.0.0.1;
    local_port = 58;


    ip = 127.0.0.1;
    port = 1080;

    dest_ip = 8.8.8.8;
    dest_port = 53;

    udp_timeout = 30;
    udp_timeout_stream = 180;
}

iptables:

iptables -t nat -A OUTPUT -d 127.0.0.1 -j RETURN

iptables -t nat -A OUTPUT -d 10.0.0.0/8 -j RETURN
iptables -t nat -A OUTPUT -d 172.16.0.0/16 -j RETURN

iptables -t nat -A OUTPUT -d 192.168.0.0/16 -j RETURN
iptables -t nat -A OUTPUT -d 127.0.0.0/8 -j RETURN
iptables -t nat -A OUTPUT -d VPSIP -j RETURN

iptables -t nat -A OUTPUT -p tcp -j REDIRECT --to-ports 12345
iptables -t nat -A OUTPUT -p udp --dport 53 -j DNAT --to 127.0.0.1:58

/etc/resolv.conf 改为 nameserver 8.8.8.8

重启redsocks. service redsocks restart
启动 ss:  sslocal -c SS JSON配置文件 -d start
启动新iptables:   ./iptables.sh


dong

unread,
Jul 4, 2017, 12:10:58 PM7/4/17
to 翻墙论坛
@Gary12 你这个iptables脚本是不是缺少什么?怎么我一运行这个脚本,dnsforwarder 就无法连接服务器?
[INFO] Connecting to TCP server timed out.


在 2016年2月15日星期一 UTC+8下午8:15:14,Gary12写道:
即将登场的高端教程:Linux局部代理转全局代理教程(无需VPN),这是dnsforwardr+redsocks+iptables+ss强强联合产生的奇迹,我亲测成功,可以把socks代理转换为全局代理,等同VPN的效果。
Reply all
Reply to author
Forward
0 new messages