Linux本身只能通过/etc/resolv.conf设置全系统的DNS。这里有一种给特定进程单独设置DNS的方法,通过免root的mount namespace达成。使用脚本只需要一条简洁的命令就可以。

背景

例如,在各省各地布置了CDN,本地Linux系统用的DNS为114.114.114.114,这里想要使用某地某ISP的DNS5.5.5.5来测试CDN设置状况,却不想更改全系统设置。虽然dignslookup可指定DNS,但大部分程序没有这个功能。

方法

  1. Bubblewrap是一个非特权(免root)容器工具,使用bwrap命令以用它来创建一个mount namespace,使得在此namespace下的进程所看见的/etc/resolv.conf被覆盖为自己指定的内容。

  2. 有些程序会使用系统统一提供的DNS缓存(一般由nscd提供),因此mount namespace需要阻止DNS缓存被访问。阻止/var/run/nscd/被访问即可。

使用

移步Github仓库,有我整理好的脚本

proxc -d 5.5.5.5 -c nslookup http://my-website-with-cdn.com
proxc -d 5.5.5.5 -c firefox http://my-website-with-cdn.com
proxc -d 5.5.5.5 -c curl -v http://my-website-with-cdn.com

使用此脚本只需要一条简洁的命令就可以达到。将5.5.5.5分别替换成要测试的各省各ISP的DNS即可。

限制

由于Bubblewrap的限制,若在使用过程中,mount namespace之外的进程删除、重建或更改了/etc/resolv.conf,也会使namespace内所看见的/etc/resolv.conf被修改。

因此,NetworkManager切换网络后,可能会使此方法设置的DNS失效。可以通过禁止NetworkManager更改/etc/resolv.conf来避免。

最新文章

  1. java8-3 多态的好处和弊端以及多态的理解
  2. CentOS 下安装配置mongodb
  3. mysql 连接数的最大数
  4. Center OS mongodb安装
  5. 也用 Log4Net 之将日志记录到数据库的配置 (一)
  6. CCR源码分析-CCR架构
  7. Quartz 有状态的JobDataMap
  8. 必胜宅急送Web app设计背后的思考
  9. SQL Server存储过程和游标有关实例以及相关网址
  10. https原理及tomcat配置https方法
  11. C primer plus 第五版十二章习题
  12. Topshelf便捷创建Windows服务
  13. 重温MFC
  14. 深入浅出Git教程(转载)
  15. sqlplus导入数据
  16. Struts2.5学习笔记----org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter报错
  17. Visible Trees HDU - 2841(容斥)
  18. DSO windowed optimization 公式
  19. sublime断点调试
  20. 装饰器-wrapper

热门文章

  1. 企业网站还是要考虑兼容至少IE10
  2. Tomcat +Nginx+Redis实现session共享
  3. LeetCode.518 零钱兑换Ⅱ(记录)
  4. [剑指Offer]30-包含min函数的栈
  5. docker部署LAMP架构并部署上线wordpress博客系统
  6. 分布式文件系统之FastDFS安装部署
  7. Processing 高效控制管理图形方法(二)
  8. Tomcat 第四篇:请求处理流程(上)
  9. burp suite 之 Repeater(中继器)
  10. 主键生成器效率提升方案|基于雪花算法和Redis控制进程隔离