resolv.conf를 덮어쓰는 경우 DNS를 어떻게 설정합니까?

resolv.conf를 덮어쓰는 경우 DNS를 어떻게 설정합니까?

온라인에서 보는 대부분의 정보에는 edit 라고 나와 있지만 /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에는 edit 이라고 나와 있습니다 /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 캐시를 우회하지 않고 여전히 함께 작동합니다.

답변1

DNS 이름 서버를 재정의하려면 파일 base아래 에 이와 유사한 줄을 추가하기만 하면 됩니다 resolv.conf.d.

메모:시작하기 전에 다음 패키지가 설치되어 있는지 확인하십시오 apt install resolvconf.

$ 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.

참고자료

답변2

저도 이 질문에 관심이 있어서 @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는 "헤드" 부분만 읽습니다. "기본" 부분은 어떻게든 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

답변3

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

server=8.8.8.8
server=8.8.4.4

/etc/dnsmasq.confdnsmasq 패키지로 설치되었기 때문에 파일이 없었지만 Ubuntu에는 dnsmasq-base만 함께 제공됩니다. 을 실행 sudo apt-get install dnsmasq한 다음 편집 /etc/dnsmasq.conf하고 sudo service dnsmasq restart을 실행했습니다 sudo 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

답변4

  1. '네트워크 연결'을 검색하세요.

  2. 열어 봐

                        여기에 이미지 설명을 입력하세요

  3. 그런 다음 WiFi나 이더넷 또는 사용 중인 항목을 선택하고 편집을 클릭하세요. 당신은 이것을 얻을 것이다 :

                  여기에 이미지 설명을 입력하세요

  4. 탭에서 ipv4를 선택하세요

  5. 메소드에서만 주소 선택

  6. 아래에 DNS 이름을 입력하고 저장하세요.

  7. 넌 끝났어

관련 정보