当前位置:   article > 正文

使用 dnscrypt-proxy 防止 dns 污染

dnscrypt-proxy.exe

今天发现上不了中文维基百科(zh.wikipedia.org),用了 VPN 也上不了。ping 了一下,发现得到的 IP 和世界各地的不一样。应该是 DNS 污染的问题。

几年前有个叫 DNSCrypt 的工具,可以加密 DNS 查询,就是解决这种问题的。但已经好久不更新了,于是找找有没有新的继承者。顺着 github 的源码库找到一个叫做 dnscrypt-proxy 的项目一直在更新。试试用一下。

项目地址:https://github.com/jedisct1/dnscrypt-proxy

使用方法挺简单,下载了压缩包之后执行如下命令:

dnscrypt-proxy -R <name> --install

然后把自己的 DNS 改成 127.0.0.1 就行。

但比较麻烦的是找到合适自己的 DNS 服务器,也就是命令里的 name 参数。这个项目的 DNS 服务器需要特殊的服务器程序才可以运作,因此要么自己搭,要么从公共的服务里找。

公共的 name 可以在压缩包里的 dnscrypt-resolvers.csv 找到。

列表里提供的 DNS 服务器不一定好用,因此写了一个 node.js 脚本找最快的。

  1. var csv = require('csv');
  2. var fs = require('fs');
  3. var url = require('url');
  4. var ping = require('ping');
  5. var Promise = require('bluebird');
  6. var data = fs.readFileSync('dnscrypt-resolvers.csv').toString();
  7. csv.parse(data, function(err, data) {
  8. var filtered = [];
  9. data.forEach(function(record) {
  10. var name = record[0];
  11. if (name === 'Name') {
  12. return;
  13. }
  14. var address = url.parse('http://' + record[10]).hostname;
  15. if (address.match(':')) {
  16. console.log('ipv6:', address);
  17. return;
  18. }
  19. console.log('ping:', name);
  20. filtered.push({
  21. name: name,
  22. host: address
  23. });
  24. });
  25. var result = [];
  26. filtered.reduce(function(cur, next) {
  27. return cur.then(function() {
  28. return new Promise(function(resolve, reject) {
  29. // console.log('ping:', next.name);
  30. ping.promise.probe(next.host, {
  31. timeout: 1
  32. }).then(function(res) {
  33. var output = res.output;
  34. var time = output.match(/time=(\d+)ms/i)[1];
  35. console.log('name: %s, address: %s, time: %s', next.name, next.host, time);
  36. // console.log(res);
  37. result.push({name: next.name, host: next.host, time: time});
  38. resolve();
  39. }).catch(function() {
  40. console.log('timeout');
  41. resolve();
  42. });;
  43. });
  44. });
  45. }, Promise.resolve()).then(function() {
  46. result.sort(function(a, b) {
  47. return a.time - b.time;
  48. });
  49. console.log(result);
  50. });
  51. });

找到最快的之后,用这个命令检查一下服务器支持的功能:

dnscrypt-proxy -R <name> --test=0

根据自己的情况选合适的。

  • 如果注重隐私要选服务器不记录日志的

  • 讨厌被审查的要选有加密功能的

全部设置完成后,清下 DNS 缓存:

ipconfig /flushdns

之后就能上中文维基百科了,也不用 VPN,速度还可以。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/神奇cpp/article/detail/740218
推荐阅读
相关标签
  

闽ICP备14008679号