即将登场的高端教程: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&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&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了
至此教程完成。