it-swarm-korea.com

resolv.conf를 덮어 쓸 때 DNS를 어떻게 설정합니까?

온라인에서 볼 수있는 대부분의 정보는 /etc/resolv.conf를 (를) 편집하라는 메시지를 표시하지만 변경 한 내용은 무시됩니다.

$ cat /etc/resolv.conf 
# Dynamic resolv.conf(5) file for glibc resolver(3) generated by resolvconf(8)
#     DO NOT EDIT THIS FILE BY HAND -- 
#     YOUR CHANGES WILL BE OVERWRITTEN
nameserver 127.0.1.1

127.0.1.1은 dnsmasq의 로컬 인스턴스 인 것 같습니다. dnsmasq 문서는 /etc/resolv.conf를 편집하라고 말합니다. /etc/resolv.conf.d/base에 커스텀 네임 서버를 넣으려고했지만 /etc/resolv.conf를 실행 한 후 Sudo resolvconf -u에 변경 사항이 표시되지 않았습니다.

참고로, 연결별로 DNS를 변경하고 싶지 않으며, 달리 지정되지 않은 경우 모든 연결에 사용할 기본 DNS 설정을 설정하고 싶습니다.

UPDATE :

이 질문에 스스로 대답했습니다 : https://unix.stackexchange.com/a/163506/67024

나는 그것이 이후 최고의 솔루션이라고 생각합니다.

  1. 효과가있다.
  2. 최소한의 변경이 필요합니다.
  3. 여전히 dnsmasq의 DNS 캐시와 우회하지 않고 작동합니다.
302
Seán Hayes

/etc/dnsmasq.conf에 다음 줄을 추가하여 dnsmasq에서 사용하는 네임 서버를 변경할 수 있음을 알았습니다.

server=8.8.8.8
server=8.8.4.4

Dnsmasq 패키지로 설치되었으므로 /etc/dnsmasq.conf 파일은 없지만 Ubuntu에는 dnsmasq-base 만 제공됩니다. Sudo apt-get install dnsmasq를 실행 한 다음 /etc/dnsmasq.conf, Sudo service dnsmasq restartSudo service network-manager restart를 편집했습니다.

Sudo tail -n 200 /var/log/syslog를 실행하여 syslog를 확인하고 dnsmasq이 (가) 지정한 이름 서버를 사용하고 있는지 확인했습니다.

Oct 21 23:00:54 mylaptop dnsmasq[8611]: using nameserver 8.8.8.8#53
Oct 21 23:00:54 mylaptop dnsmasq[8611]: using nameserver 8.8.4.4#53
60
Seán Hayes

DNS 네임 서버를 덮어 쓰려면 base 파일의 resolv.conf.d.

$ Sudo vim /etc/resolvconf/resolv.conf.d/base

그런 다음 네임 서버 목록을 다음과 같이 입력하십시오.

nameserver 8.8.8.8
nameserver 8.8.4.4

마지막으로 resolvconf를 업데이트하십시오.

$ Sudo resolvconf -u

resolvconf에 대한 매뉴얼 페이지를 보면 /etc/resolvconf/resolv.conf.d/.

   /etc/resolvconf/resolv.conf.d/base
          File  containing  basic  resolver  information.  The lines in this 
          file are included in the resolver configuration file even when no
          interfaces are configured.

   /etc/resolvconf/resolv.conf.d/head
          File to be prepended to the dynamically generated resolver 
          configuration file.  Normally this is just a comment line.

   /etc/resolvconf/resolv.conf.d/tail
          File to be appended to the dynamically generated resolver 
          configuration file.  To append nothing, make this  an  empty  
          file.   This file is a good place to put a resolver options line 
          if one is needed, e.g.,

              options inet6

head 파일의 맨 위에 경고가 있지만 :

$ cat /etc/resolvconf/resolv.conf.d/head
# Dynamic resolv.conf(5) file for glibc resolver(3) generated by resolvconf(8)
#     DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN

이 경고는 이러한 파일이 구성 될 때 결과적으로 resolv.conf이 파일들을 만드는 데 사용될 파일. 따라서 nameserver 파일에 대해 위에서 설명한 base 행을 head 파일에도 쉽게 추가 할 수 있습니다.

참고 문헌

262
slm

나는 또한이 질문에 관심이 있으며 @sim 제안 된 솔루션을 시도했습니다.

그것을 테스트하기 위해

nameserver 8.8.8.8

/etc/resolvconf/resolv.conf.d/base

nameserver 8.8.4.4

/etc/resolvconf/resolv.conf.d/head

그런 다음 네트워크를 다시 시작했습니다.

Sudo service network-manager restart

결과는 /etc/resolv.conf처럼 보입니다

# Dynamic resolv.conf(5) file for glibc resolver(3) generated by resolvconf(8)
#     DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN
nameserver 8.8.4.4
nameserver 127.0.1.1

nm-tool는 dnsserver가

DNS:             208.67.222.222
DNS:             208.67.220.220

내 라우터에서 제공하는 것입니다. 반면에 주소를 파면

;; Query time: 28 msec
;; SERVER: 8.8.4.4#53(8.8.4.4)

내가 옳다면, 나는이 모든 것에서

  1. resolvonf는 "head"부분 만 읽습니다. "base"부분은 어떻게 든 dnsmasq에 의해 제어됩니다
  2. dnsserver는 dhcp가 제공하는 서버에 관계없이 실제로 8.8.4.4로 강제되지만 요청은 항상 8.8.4.4로 전송되므로 dnsmasq가 제공하는 캐싱을 풉니 다.
  3. dnsmasq는 여전히 dhcp가 제공하는 dnsserver 만 사용하고 있습니다.

대체로 작동하지만 의도 한 결과라고 생각하지 않습니다. 더 가까운 해결책은 다음과 같습니다. 편집하다

Sudo vim /etc/dhcp/dhclient.conf

그런 다음 추가

supersede domain-name-servers 8.8.8.8;

결과는 다음과 같습니다. resolv.conf에는 127.0.0.1 만 포함되어 있습니다. 이는 dnsmasq 캐시가 호출되고 nm-tool이 말합니다.

DNS:             8.8.8.8

즉, 검색 한 이름이 캐시에 없으면 dhcp에서 제공 한 서버가 아니라 8.8.8.8에서 요청됩니다.

또 다른 (아마도 더 나은) 옵션은 "supersede"대신 "prepend"를 사용하는 것입니다. 이런 식으로 이름이 8.8.8.8에 의해 확인되지 않으면 요청이 다른 서버로 넘어갑니다. 실제로 nm-tool은

DNS:             8.8.8.8    
DNS:             208.67.222.222
DNS:             208.67.220.220
80
brad

정적 IP 상황에서 Ubuntu 서버 안내서는/etc/network/interfaces 파일을 변경하라는 메시지를 표시합니다.

iface eth0 inet static
address 192.168.3.3
netmask 255.255.255.0
gateway 192.168.3.1
dns-search example.com
dns-nameservers 192.168.3.45 192.168.8.10

8.8.8.8과 같이 원하는 IP의 192.168.3.45 192.168.8.10을 변경합니다.

https://help.ubuntu.com/14.04/serverguide/serverguide.pdf 38 페이지

23
Rodolpho
  1. '네트워크 연결'검색
  2. 열어 봐

    enter image description here

  3. 그런 다음 WiFi 또는 이더넷 또는 사용중인 것을 선택하고 편집을 클릭하십시오. 당신은 이것을 얻을 것입니다 :

    enter image description here

  4. 탭에서 ipv4를 선택하십시오

  5. 방법으로 만 주소를 선택하십시오
  6. 아래에 DNS 이름을 입력하고 저장하십시오

  7. 끝났어

17
pa1pal

아직 언급되지 않은 빠르고 더러운 해결 방법은 resolv.conf 파일을 수정 한 직후에.

$ Sudo nano /etc/resolv.conf

이것을 추가하고 저장하십시오 :

nameserver 8.8.8.8

그때:

$ Sudo chattr +i /etc/resolv.conf

그 트릭을해야합니다. 내 시스템 에서도이 작업을 수행합니다.

15
Younis Bensalah

Linux에서 DNS 구성

리눅스에서의 DNS 사용은 끝났습니다 인터넷 라이브러리 네임 시스템 (DNS)에 대한 액세스를 제공하는 C 라이브러리의 루틴 세트. 리졸버 구성 파일 (resolv.conf)에는 프로세스가 처음 호출 할 때 리졸버 루틴이 읽는 정보가 들어 있습니다. 간단히 말해 DNS를 요청하는 각 프로세스는 라이브러리를 통해 /etc/resolv.conf를 읽습니다. NSS는이 위에 쌓여 있으며 /etc/nsswitch.conf로 구성됩니다.

Linux DNS 구성 파일 /etc/resolv.conf에 있습니다. BUT 원하는 프로그램/서비스가 많이 있습니다 /etc/resolv.conf에서 DNS 구성 파일을 자동으로 관리하고 처리합니다. 경우에 따라이 파일을 직접 관리 할 수도 있습니다. DNS를 관리하는 각 프로그램/서비스에는 /etc/dnsmasq.conf (dnsmasq 서비스 용)와 같은 자체 구성 파일이 있으며 연결 변경 및/또는 다른 이벤트에서 DNS 구성을 추가합니다 ... 빠른 해결책은 DNS 구성 파일을 잠그는 것입니다 chattr +i /etc/resolv.conf를 사용하지만 특정 경우에는 권장하지 않습니다. 더 나은 솔루션은 (dnsmasq/network-manager/resolvconf/etc)와 같은 DNS를 사용하여 모든 프로그램/서비스를 올바르게 설정하는 것입니다.

DNS 제어권 회복

다음은 전체 설정 목록입니다. resolv.conf의 제어권을 다시 얻기 위해 덮어 쓰지 않도록하십시오 (resolv.conf 이외의 다른 위치에서 DNS를 비활성화/설정하는 방법) ) resolvconf는 resolv.conf와 독립적 인 프로그램이며 시스템/구성에 따라 여기에 나열된 프로그램이 하나 이상 없을 수도 있습니다.

1. Resolvconf :

구성 파일

cat /etc/resolvconf/resolv.conf.d/head
nameserver 8.8.4.4
cat /etc/resolvconf/resolv.conf.d/base
nameserver 8.8.4.4

설정 업데이트

Sudo resolvconf -u

resolvconf 비활성화

systemctl disable --now resolvconf.service 

2. Dnsmasq 서비스 :

구성 파일

cat /etc/dnsmasq.conf
server=1.1.1.1
server=8.8.4.4

설정 업데이트

Sudo systemctl restart dnsmasq.service

3. 네트워크 관리자 :

구성 파일

/etc/NetworkManager/*

DNS 비활성화

$ cat /etc/NetworkManager/conf.d/no-dns.conf
[main]
dns=none

DNS 사용

$ cat /etc/NetworkManager/conf.d/dns.conf
[main]
dns=default

[global-dns]
searches=example.com

[global-dns-domain-*]

해결 된 서비스 사용

$ cat /usr/lib/NetworkManager/conf.d/resolved.conf 
[main]
dns=systemd-resolved

resolvconf 사용

$ cat /usr/lib/NetworkManager/conf.d/resolvconf.conf 
[main]
rc-manager=resolvconf

설정 업데이트

systemctl restart NetworkManager.service

4. 네트워크 인터페이스 :

구성 파일

$ cat /etc/network/interfaces
#nameservers
# or dns-search like so
# dns-search x.y 
dns-nameservers 4.4.4.4 8.8.8.8

구성 업데이트

reboot

5. DHCP 클라이언트 :

구성 파일

$ cat /etc/dhcp3/dhclient.conf
supersede domain-name-servers <dns_ip_address1>,<dns_ip_address2>;

구성 업데이트

reboot

6. Rdnssd 서비스 :

rdnssd 비활성화

systemctl disable --now rdnssd.service

7. 해결 된 서비스 :

해제 비활성화

systemctl disable --now systemd-resolved.service

8. Netconfig :

구성 파일

/etc/sysconfig/network/config

netconfig 비활성화

cat /etc/sysconfig/network/config
NETCONFIG_DNS_POLICY=""

구성 업데이트

reboot

DNS 서버 설정

/etc/resolv.conf 구성의 예

#Cloudflare
nameserver 1.0.0.1

#Google
#nameserver 8.8.8.8
#nameserver 8.8.4.4

#Cloudflare 
#nameserver 1.1.1.1

#Classic Config
#nameserver 192.168.1.1
#search lan
14
intika

내 문제는 조금 달랐습니다. 라우터 DNS 서버를 무시하고 싶었습니다. 우분투 에서이 링크를 찾았습니다 : https://wiki.ubuntu.com/OverrideDNSServers

DHCP 서버에서 제공 한 DNS 설정을 무시하려면 다음을 수행하십시오.

/etc/dhcp3/dhclient.conf

다음 줄을 추가하십시오.

supersede domain-name-servers <dns_ip_address1>,<dns_ip_address2>;

<dns_ip_address*> 적절한 콘텐츠가있는 항목.

11
Ryan

어쩌면 내가 누락 된 것이지만 https://help.ubuntu.com/14.04/serverguide/network-configuration.html 의 구성 지침에 따르면 다음을 업데이트하기 만하면됩니다. 나는 프록시를 실행하지 않고 방화벽과 로컬 DNS 뒤에있는 컴퓨터 (예를 들어 Google을 보여 주지만 필요한 것으로 설정).

nano /etc/network/interfaces

기본값 :

# This file...
# and how to activate...

# The loopback...
auto local
iface lo inet loopback

# The primary network interface 
auto eth0
iface eth0 inet dhcp

업데이트 :

# This file...
# and how to activate...

# The loopback...
auto local
iface lo inet loopback

# The primary network interface 
#iface eth0 inet dhcp
iface eth0 inet static
address x.x.x.x
netmask 255.255.255.0
gateway x.x.x.x

#nameservers
# you may not need dns-search
# I use it because I'm running this on a Windows network 
# so its useful to have
# dns-search x.y 
dns-nameservers 4.4.4.4 8.8.8.8

가능하면 재부팅하십시오.

dns-nameservers XXX.XXX.XXX.X을 (를) /etc/networking/interfaces 파일.

3
Mike

편집 2016 년 5 월 6 일

/etc/Network-Manager/system-connections/ 디렉토리에서 시스템 연결에 대한 모든 설정을 업데이트하는 스크립트를 작성했습니다. 개별 연결을 편집하는 데 사용하는 GUI는 해당 디렉토리의 특정 파일을 편집합니다. 이 스크립트는 모든 파일을 업데이트합니다-grep으로 설정된 DNS가없는 사람들을 검색하고 awk로 설정합니다.

해당 파일에 액세스하려면 Sudo 액세스가 필요하므로 Sudo로이 스크립트를 실행 한 다음 네트워크 관리자를 다시 시작하십시오.

#!/bin/bash
# Author: Serg Kolo
# Date: May 6, 2015
# Description: this script checks all settings for connections in 
# /etc/NetworkManager/system-connections/ , and if there's no custom
# dns set , this script sets it;
# NOTE: run Sudo service network-manager restart after running this script

set -x

for file in /etc/NetworkManager/system-connections/* ; do
        grep 'dns=208.67.220.220;' "$file"  || ( awk '{print;if ($1=="[ipv4]"){getline; print "method=auto\ndns=208.67.220.
220;\nignore-auto-dns=true"}}' "$file" > .tmpfile && ( cat .tmpfile > "$file") )
done

작동중인 스크립트 :

enter image description here

ORIGINAL POST 여기서 일부 사용자는 DNS가 어떻게 든 dnsmasq에 의해 제어된다고 지적했습니다. 사실입니다. /etc/resolvconf/resolv.conf.d에서 head 또는 body을 어떻게 변경했는지에 관계없이 내 컴퓨터는 실제로 도메인 이름으로 인턴 액세스 할 수 없었습니다. IP 주소로.

내가 한 것은 /etc/NetworkManager/NetworkManager.conf 파일을 편집하는 것입니다. 원래는 dns=dnsmasq라고 말했지만 dns=208.67.222.222로 변경했습니다. 이 방법으로 nm-tool에 208.67.222.222는 언급되지 않았지만 IP 주소 만이 아니라 도메인 이름을 계속 사용할 수있었습니다.

NetworkManager.conf 파일의 모습은 다음과 같습니다.

[main]
plugins=ifupdown,keyfile,ofono
#dns=dnsmasq
dns=208.67.222.222

[ifupdown]
managed=false

NOTE : 내 문제와이 솔루션에 대한 자세한 내용은 askubuntu.com 에 대한 내 게시물을 참조하십시오.

업데이트 # 1

오늘 대학에서 집으로 돌아 왔을 때 집에 WiFi를 연결할 수 없다는 것을 알게되었습니다. man NetworkManager.conf를 조금 읽었으며 dns=[main]는 실제로 플러그인 행이므로 dns=dnsmasq 행입니다. 실제로 dnsmasq 플러그인을 NetworkManager에 추가하는 것 같습니다.

따라서 내 솔루션은 예상대로 작동하지 않았습니다. 매뉴얼 페이지에서 발췌 한 내용은 다음과 같습니다.

dns=plugin1,plugin2, ... List DNS plugin names separated by ','. 

DNS 플러그인은 로컬 캐싱 네임 서버 기능 (DNS 쿼리 속도 향상)을 제공하고이를 사용하는 응용 프로그램으로 DNS 데이터를 푸시하는 데 사용됩니다.

따라서 dns=208.67.222.222를 설정하면 기본적으로 NetworkManager가 해당 플러그인을 사용하지 못하게되어 로컬 DNS 서버를 사용하게됩니다 (작동하지 않는 것 같습니다).

1
Sergiy Kolodyazhnyy

두 가지 메소드가 있습니다

방법 1

resolv.conf.d 아래의 head 파일을 업데이트하여 사용할 DNS 서버를 변경할 수 있습니다.

$ echo 'nameserver 1.1.1.1' | Sudo tee /etc/resolvconf/resolv.conf.d/base

그런 다음 실행

$ Sudo resolvconf -u

위의 내용은 resolv.conf 디렉토리에 일반 /etc 파일을 생성합니다. 모든 확인 요청은 위에 언급 된 네임 서버로 전송됩니다. 해결됨

그러나 여기에는 의미가 있습니다. resolvconf를 사용하여 주소 확인을 위해 1.1.1.1를 직접 쿼리하면 dnsmasq에서 제공하는 캐싱 기능이 사라집니다. 모든 요청은 1.1.1.1로 이동합니다.

방법 2

위와 같은 일이 일어나지 않게하고 DNS 확인에 dnsmasq를 사용하려면 this answer를 참조하십시오. 대답은 여기에 간단히 설명되어 있습니다.

/etc/dnsmasq.conf 파일에 다음 내용을 추가하십시오.

server = 1.1.1.1

그런 다음 dnsmasq 서비스를 다시 시작하십시오.

$ Sudo systemctl restart dnsmasq.service

일이 잘 될 것입니다. 해결됨

1
Pragathees

DNS를 변경하는 쉬운 방법 :

$ Sudo nano /etc/network/interfaces

문제가 발생하면 nano를 설치하십시오.

$ Sudo apt-get install nano -y

..

  1. 이것을 찾으십시오 : dns-nameservers
  2. 그것을 찾지 못하면 거기에 입력하십시오
  3. 나는 이렇게했다 : dns-nameservers 199.85.126.10 199.85.127.10

이것이 최선의 방법이기를 바랍니다. VPS에서 이와 같이했습니다.

0
Saif Salim

NB : 대부분의 답변과 마찬가지로 NetworkManager를 사용한다고 가정합니다. 그러나 대부분의 다른 답변과 달리, resolvconf, dhclient 또는 다른 것을 사용한다고 가정하지 않습니다. 그러나 대신 할 수도 있습니다 (업데이트 참조).

이 질문에 대한 견해를 감안할 때,이 8 characters 솔루션이 아직 게시되지 않았다는 것은 믿기지 않습니다. man NetworkManager.conf에 따르면,

dns : […] 없음 : NetworkManager가 resolv.conf를 수정하지 않습니다. 이것은 rc-manager가 관리되지 않음을 의미합니다

따라서 추가

dns=none

[main]/etc/NetworkManager/NetworkManager.conf 섹션에서 NetworkManager를 다시 시작하면 /etc/resolv.conf가 더 이상 수정되지 않습니다.

rc-manager=unmanaged 설정은 dns=none와 동일해야하며, rc-manager=symlink를 기호 링크로 사용하는 것과 함께 /etc/resolv.conf를 설정하는 것이 더 좋습니다. 언급 된 맨 페이지).

업데이트 :

NetworkManager가 /etc/resolv.conf 덮어 쓰기를 중단 한 후 부팅 할 때 dhcpcd이 (가) 이미 쓸모없는 빈 파일로 /etc/resolv.conf를 대체하고 있다고 생각했습니다. dhcpcd.conf 맨 페이지가 도움이되었습니다. 추가하기에 충분합니다.

nohook resolv.conf

귀하의 dhcpcd.conf에 있습니다 (광산은 /etc/dhcpcd.conf에 있습니다).

루트에 :

  1. 댓글 dns=dnsmasq 의 위에 /etc/NetworkManager/NetworkManager.conf
  2. supersede domain-name-servers 4.2.2.1,4.2.2.3,4.2.2.5,4.2.2.4,4.2.2.1,4.2.2.2; 끝에 /etc/dhcp/dhclient.conf
  3. Sudo service network-manager restart

다음은 위에 표시된대로 변경합니다.

$ Sudo sed -i 's/dns\x3Ddnsmasq/\x23dns\x3Ddnsmasq/' \
   /etc/NetworkManager/NetworkManager.conf

$ echo 'supersede domain-name-servers 4.2.2.1,4.2.2.3,4.2.2.5,4.2.2.4,4.2.2.1,4.2.2.2;' | \
   Sudo tee --append /etc/dhcp/dhclient.conf

$ Sudo service network-manager restart

다시 시작 프로세스를 마치려면 7/10 초 정도 기다렸다가 "nslookup nist.gov"로 구성을 확인하십시오. Ubuntu LTS 14.04에서 잘 작동합니다.

0