ICode9

精准搜索请尝试: 精确搜索
首页 > 系统相关> 文章详细

Linux给特定进程单独指定DNS

2020-10-17 18:00:38  阅读:261  来源: 互联网

标签:5.5 conf etc namespace resolv 单独 DNS Linux


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来避免。

标签:5.5,conf,etc,namespace,resolv,单独,DNS,Linux
来源: https://www.cnblogs.com/garyw/p/13832029.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有