2014年9月26日星期五

Dnsmasq + DNSCrypt + SNI Proxy 顺畅访问 Google 配置教程

随着技术的发展,国外的大型网站几乎都支持全站 SSL,所以在这里我们推荐一个神器 SNI Proxy 作为科学上网的跳板。

SNI Proxy 可以直接代理 https 网站,并且 SSL 证书也是可信的,这极大的方便了用户直接浏览支持全站 SSL 的网站。所需要的准备工作,一台国外的 VPS / 云主机 / 服务器,生产环境系统为 Ubuntu 12.04 64 bit

一、安装 SNI Proxy

首先导入 PPA,然后直接 apt-get 安装即可
apt-get install python-software-properties
add-apt-repository ppa:dlundquist/sniproxy
apt-get update && apt-get install sniproxy
接着修改 /etc/sniproxy.conf
比如我这边访问 Google 有点慢,所以我需要把所有的 Google 域名都加入到代理列表:
table https_hosts {
    # Google
    (.*.|)googleapis.com$ *
    (.*.|)google.com$ *
    (.*.|)google.com.hk$ *
    (.*.|)google.co.jp$ *
    (.*.|)googlehosted.com$ *
    (.*.|)googleusercontent.com$ *
    (.*.|)ggpht.com$ *
    (.*.|)gstatic.com$ *
    (.*.|)googlemail.com$ *
    (.*.|)googlecode.com$ *
    (.*.|)blogspot.com$ *
    (.*.|)gmail.com$ *
    (.*.|)appspot.com$ *

}

table xmpp_imap_smtp {
    (.*.|)google.com$ *
    (.*.|)googlemail.com$ *
    (.*.|)gmail.com$ *
}
然后重启 SNI Proxy 即可生效
killall sniproxy && sniproxy -c /etc/sniproxy.conf
接着你可以在本地修改 hosts ,比如 VPS 的 IP 是 192.0.2.2 试试是否可以流畅地使用 https 访问 Gmail 了:
192.0.2.2 www.google.com
192.0.2.2 accounts.google.com
192.0.2.2 mail.google.com
但是直接访问 http 的时候会出错,所以我们可以装一个 Nginx 实现 http 跳转到 https
首先,安装 Nginx:
apt-get install nginx
然后修改默认的配置文件,修改 /etc/nginx/sites-available/default
server {
        listen   80; ## listen for ipv4; this line is default and implied
        #listen   [::]:80 default ipv6only=on; ## listen for ipv6

        # Make site accessible from http://localhost/
        server_name _;

        location / {
                rewrite ^ https://$host$request_uri permanent;
        }
}
然后启动 Nginx 即可
service nginx start
这样你本地访问 http://www.google.com/ ,就会自动跳转到 https://www.google.com/

二、安装 Dnsmasq + DNSCrypt

但是修改 hosts 这一步骤毕竟麻烦,而且在手机上修改更麻烦并且不安全,我们可以搭建一台 Dnsmasq + DNSCrypt 的 DNS 服务器,直接解析 Google 的所有域名到你 VPS 的 IP。假设你人在国内,那么你就需要一台国内的 VPS / 云主机 / 服务器,并且最好和你所使用的 ISP 一个线路,比如都在电信机房。或者你整天开着电脑,直接在虚拟机里装也行,某些支持 OpenWRT 的路由器也默认集成了 Dnsmasq。
增加 PPA 并使用 apt-get 安装 Dnsmasq 和 DNSCrypt
apt-get install python-software-properties
add-apt-repository ppa:shnatsel/dnscrypt
apt-get update && apt-get install dnsmasq && apt-get install dnscrypt-proxy
修改 DNSCrypt 配置文件 /etc/default/dnscrypt-proxy local-address 的端口改成 5301
默认的 DNSCrypt 服务器使用 OpenDNS 默认的即可, 毕竟这货是他们发明的,嘿嘿
local-address=127.0.0.1:5301
重启 DNSCrypt
service dnscrypt-proxy restart
增加猫猫同学配置的国内网站 Dnsmasq 配置文件,这是为了保证国内的网站域名不需要通过国外的 DNS 服务器进行解析
apt-get install git
git clone https://github.com/felixonmars/dnsmasq-china-list.git
cd dnsmasq-china-list
ln -s /root/dnsmasq-china-list/accelerated-domains.china.conf /etc/dnsmasq.d/
ln -s /root/dnsmasq-china-list/bogus-nxdomain.china.conf /etc/dnsmasq.d/
小提醒,使用苹果硬件设备的同学,可以用 V2EX 提供的 DNS 对 Apple.com 进行加速,直接增加一个配置文件即可,比如新建一个/etc/dnsmasq.d/apple.conf 增加
server=/.apple.com/199.91.73.222
然后新建一个配置文件,让 google.com 用上刚才搭建的 SNI Proxy,比如新建个 /etc/dnsmasq.d/sni.conf
address=/google.com/192.0.2.2
address=/google.com.hk/192.0.2.2
address=/google.co.jp/192.0.2.2
address=/gmail.com/192.0.2.2
address=/googleusercontent.com/192.0.2.2
address=/gstatic.com/192.0.2.2
address=/googleapis.com/192.0.2.2
address=/googlehosted.com/192.0.2.2
address=/ggpht.com/192.0.2.2
address=/googlecode.com/192.0.2.2
address=/appspot.com/192.0.2.2
address=/android.clients.google.com/192.0.2.2
再修改一下默认的 Dnsmasq 配置文件 /etc/dnsmasq.conf
# 不读取 /etc/resolv.conf ,取消注释即可
no-resolv
no-poll
# 添加上游服务器为 DNSCrypt,如果还有其他的 server= 记得取消注释。
server=127.0.0.1#5301
# 在所有网卡上关闭 DHCP,用不着这个功能。如果有多个网卡那么一行一个。
no-dhcp-interface=eth0
no-dhcp-interface=eth1
# 添加自定义 hosts 文件
addn-hosts=/etc/dns/hosts
如果需要单独对某个域名进行 hosts 修改,可以直接放在 /etc/dns/hosts 里
然后重启 Dnsmasq
service dnsmasq restart
然后在 VPS 里用 nslookup google.com 测试一下,看看是否解析到了你国外的 VPS 上。
测试没问题以后,接着就是修改你本地电脑或者路由器里的 DNS 了,大功告成!

没有评论:

发表评论