本贴有两个目的
一是想求教 dns 的问题。 二是前一段时间发了个帖子, https://www.v2ex.com/t/331170 尝试在 vps 上过滤广告,但是不成功。
不甘心,断断续续尝试了一段时间,现将经验分享如下。
按照时间顺序整理如下。
vps:vultr kvm
ubuntu:16.04
apt get install privoxy
service privoxy start
privoxy 配置文件 /etc/privoxy/config
前一帖使用该命令
iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-port 8118
但是实践有问题,看起来是 http 请求通过$$后并未将请求正确转到 privoxy,所以怀疑命令有问题。
google 之,得到
iptables -t nat -A OUTPUT -p tcp --dport 80 -j REDIRECT --to-ports 8118
我的理解因为 http 请求在 vps 上是当作本地请求发出的,所以应该在 OUTPUT 处理,因此前一条命令不适用,其应该是使用在路由器上的,原因是 privoxy 在路由器上是前置(相对$$),在 vps 上是后置(相对$$)。
在成功出现报错信息之后,继续摸索
Invalid header received from client.
修复该错误需要将配置文件中
accept-intercepted-requests 0 修改为 1
接着报错
maximum number of open connections reached.
根据搜索到的信息,做了如下修改,不记得具体哪一项起了作用,:(
终端下 ulimit -s 8192 配置文件内 max-client-connections 256 改为 4096
下面戏肉来了
500 Internal Privoxy Error
Privoxy encountered an error while processing your request:
Could not load template file no-such-domain or one of its included components.
根据 /var/log/privoxy/下的日志记录, privoxy 无法打开 no-such-domain 是因为打开太多文件(此条根据记忆回忆,具体日志 rebuild os 后丢失)
google 后,有文章猜测是因为 vps 将 privoxy 发出去的请求又转给了 privoxy ,死循环了。
想到个解决方案,修改 iptables 命令,因为 privoxy 运行用户是 privoxy,$$用的 root ,所以只将 root 用户发出的请求转发到 privoxy 。
iptables -t nat -A OUTPUT -p tcp --dport 80 -m owner --uid-owner root -j REDIRECT --to-ports 8118
这样成功打开网页。但是比较麻烦的是, privoxy 内置规则比较多,需要逐一的梳理并调教,另外不支持 https 过滤,所以想换一个省心点的方案,然后补漏由 adblock 完成。
安装很简单,官方首页提供命令
curl -sSL https://install.pi-hole.net | bash
之前的版本 web 界面任何人都可以访问,现在新版加了个口令,比较保护隐私。也可以选择不安装 web ,不过建议熟悉配置文件后再这样做。
下面问题来了, ssh 在 vps 上 ping 或者 dig ,都可以在 pi-hole 中看到 dns 请求记录( pi-hole 貌似将 dns 指向了本地),而 Firefox 使用 SOCKS v5 代理 DNS 后,能够得到正确的解析,但是 pi-hole 中看不到请求记录,可能哪里有问题?