sniproxy+dns搭建另类代理

google已经很久不正常了,利用传统的代理方法有些不足,比如有些是全局的(如vpn),有些需要配合些软件,且有不稳定因素。我用sniproxy+dnsmasq组合有几个月了,感觉很好用。上次有人说要根据我在v2ex的一篇帖子整理出方法发布,但是没下文了,那么我也来整理下吧。

原理简介:

sniproxy类似于一个反向代理软件,可根据域名转发,且https使用的原始证书。在vps上搭建sniproxy,按需添加域名;再搭建一个dns服务,将域名解析到该sniproxy上;然后将需要上网的设备的dns设置成安装了dns服务的ip,这样就实现了按需代理。

该方法适用于以下情况:

1.被dns污染的网站(如推特等,如有关键词,需https)

2.被干扰连接的网站(如google等)

3.加速或代理任何网站(该网站不能在gfw关键词内,如果在,支持https的话可通过https访问)

优点:

1.一次搭建好后一劳永逸,无需额外软件。

2.按需代理,可按自己喜好添加需代理的网站,没设置的直接连接。

3.相比nginx的反向代理,https无需自制证书。

缺点:

1.如需dns泛解析需要在路由器或国内服务器安装dns软件。

2.有些网站喜欢一个页面多域名,可能需要自行抓包确定哪些域名需添加。

3.如果代理google,手机上的大部分google apps运行不正常,原因不明,如果知道,欢迎反馈。

4.如果被其他人发现自己的代理,可能会造成流量损失。

方法如下。

1.安装sniproxy。

sniproxy项目地址:https://github.com/dlundquist/sniproxy/

如果你非centos系统,可按项目里的说明安装。如果是centos,可参考此篇文章,在此不再详述。注意如需代理国外网站,需在国外vps上安装。

2.配置sniproxy。

编辑/etc/sniproxy.conf,比较简单的方法就是转发所有的80和443端口流量,配置如下:

user nobody
listen 80 {
proto http
table http_hosts
}
listen 443 {
proto tls
table https_hosts
}
table http_hosts {
.* *:80
}
table https_hosts {
.* *:443
}

但此方法有个隐患,就是被其他人扫描到后可能会被滥用,甚至作为发垃圾邮件的代理,可能会被vps提供商惩罚。因此建议按需配置,可参考sniproxy项目中配置文件的写法,我也在本文后面贴上我的配置文件。

3.安装dns服务软件。

dns服务软件很多,我使用的是dnsmasq,安装在路由器上,另外我还在国内某vps上也安装了一个,方便在外和给朋友使用。

如果你想在国外vps上安装dns软件,那么不适用于被dns污染的网站,因为从国外任何ip的dns请求均会被污染。如果你没有条件安装dns软件,那么只有用最传统的hosts方法了,因为hosts不能泛解析,编写和维护较为麻烦。

dns软件的安装和配置不再详述,可自行查找相关资料。装好后把指定域名解析到安装了sniproxy的ip上即可。

4.最后的步骤

将sniproxy和dns服务软件启动,并建议设置成开机启动。如果你是在路由器上安装的dnsmasq那么连上路由器就ok了(设备的dns用的路由器的ip)。如果你是在外搭建了dns,那么把要上网的设备的dns改成该dns的ip即可。好好享受吧!

一些问题:

1.如何防止被他人滥用?

首先不建议sniproxy转发所有域名,而应该按需添加,这样可以大大降低各种风险。另外建议多配置一个vps,如果发现一个vps上的流量和连接数不正常,可将该vps的sniproxy关闭,使用另一台的,一段时间后可切换回来,这样也可以在一台vps线路慢时切换到另一台。

2.sniproxy如何不与其他软件冲突?

因为sniproxy需要监听web端口,如果你安装了其他web服务器,会造成冲突。比较简单的方法是给你的vps加一个ip,该ip用来传输sniproxy,在sniproxy的配置文件里listen ip:端口,在如nginx里的配置文件里listen另一个ip。

如果没法加ip,那么你的web服务器如果没有https的话,可以使用你的web服务器(如nginx)反向代理80端口,而443端口交给sniproxy,也可以使用下一条方法。

如果没法加ip且web服务器已经把80和443都用了,那么可以把web服务器的端口改成非80和443,sniproxy监听80和443,然后在sniproxy配置文件里添加规则,把本机域名的流量转发到本机的web服务器对应端口。但该方法有缺点,由于sniproxy是匿名代理,原来web服务器将无法获取到原始访问者ip。

ps:现在vps白菜价了,直接买个新的吧!

3.我的sniproxy配置文件:(建议访问使用https,防止关键词重置)

user nobody
listen 80 {
proto http
table all_hosts
}
listen 443 {
proto tls
table all_hosts
}
table all_hosts {
.*\.google\.com$ *
.*\.google\.com\.hk$ *
google.com google.com
google.com.hk google.com.hk
.*\.gstatic\.com$ *
.*\.googleapis.com$ *
.*\.googleusercontent.com$ *
.*\.googlecode.com$ *
.*\.google-analytics.com$ *
.*\.ggpht.com$ *
.*\.googlevideo.com$ *
.*\.youtube.com$ *
youtube.com youtube.com
.*\.ytimg.com$ *
.*\.appspot.com$ *
.*\.blogger.com$ *
blogger.com blogger.com
.*\.twitter.com$ *
twitter.com twitter.com
.*\.twimg.com$ *
.*\.facebook.com$ *
facebook.com facebook.com
.*\.fbcdn.net$ *
}

在dns服务器上按此规则泛解析过去,如果是hosts,可在网上找找对应的hosts完整域名文件。

《sniproxy+dns搭建另类代理》上有2条评论

发表评论

电子邮件地址不会被公开。 必填项已用*标注