[unix] 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.confsudo resolvconf -u

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

최신 정보:

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

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

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


답변

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있습니다.

참고 문헌


답변

나는 또한이 질문에 관심이 있으며 @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-tooldnsserver는

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


답변

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

server=8.8.8.8
server=8.8.4.4

나는하지 않았다 /etc/dnsmasq.conf그것이하는 dnsmasq 패키지가 설치되어 있기 때문에,하지만 파일을하지만, 우분투 만하는 dnsmasq베이스와 함께 제공됩니다. 나는 실행 sudo apt-get install dnsmasq한 후 편집 /etc/dnsmasq.conf한 후, sudo service dnsmasq restartsudo service network-manager restart.

나는 도망 sudo tail -n 200 /var/log/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


답변

정적 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 페이지


답변

  1. ‘네트워크 연결’검색
  2. 열어 봐

                        여기에 이미지 설명을 입력하십시오

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

                  여기에 이미지 설명을 입력하십시오

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

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

  7. 끝났어


답변

아직 언급되지 않은 빠르고 더러운 해결 방법은 resolv.conf파일을 편집 한 직후 파일 에서 변경할 수없는 플래그를 설정하는 것입니다.

$ sudo nano /etc/resolv.conf

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

nameserver 8.8.8.8

그때:

$ sudo chattr +i /etc/resolv.conf

그 트릭을해야합니다. 나는 내 시스템에서도 이것을한다.


답변

Linux에서 DNS 구성

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

Linux DNS 구성 은 파일에 /etc/resolv.conf 있지만 에서 DNS 구성 파일을 자동으로 관리하고 처리하려는 많은 프로그램 / 서비스가 /etc/resolv.conf있습니다. 경우에 따라이 파일을 직접 관리 할 수도 있습니다. 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