재부팅시 손실되지 않는 resolv.conf에 행을 어떻게 포함합니까?


172

마침내 7.10에서 12.04로 마이그레이션했습니다. 마지막으로 완성해야 할 부분이 하나 있는데, 나는 충격을 받았습니다. 각 서버에서 Puppet을 사용하고 있으며 과거에는 resolv.conf에 puppetmaster의 이름 서버 주소와 검색 도메인 이름을 포함 시켰습니다.

search puppetmaster.com
nameserver 192.168.1.XXX

12.04에서는 resolv.conf가 재부팅 될 때 덮어 씁니다. 정적 IP를 사용할 수 없으므로 / etc / network / interfaces를 사용하면 도움이됩니다.

# 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.0.1

머리, 꼬리 또는 바닥에서 resolvconf가 이것을 처리하는 방법이 있습니까? 있는 경우 서버를 조정할 때 사용할 수있는 예가 있습니까?

도움을 주시면 감사하겠습니다.


2
resolvconf는 나쁜 소프트웨어입니다. 그냥 삭제하고 이전 방식으로 /etc/resolv.conf를 관리하십시오.
청동 남자

답변:


133

DNS 서버가 올바른 주소로 '꼭두각시'를 해결하고 DHCP 서버가 DNS 이름 서버 주소 및 검색 목록을 나눠 주거나 (정적 IP 주소가있는 경우) 다음과 같은 것을 갖도록하는 것이 좋습니다. / 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

그러나 resolvconf 구성 파일을 통해 편집하려면 편집해야 /etc/resolvconf/resolv.conf.d/base합니다. 해당 파일에 정보를 입력하십시오 resolv.conf.

nameserver 192.168.1.XXX

그런 다음 resolvconf에 regenerate를 지시하십시오 resolv.conf.

sudo resolvconf -u

13
이 답변에는 투표권이 있으며 첫 번째 부분은 다소 정확하지만 두 번째 부분은 틀립니다. (1) 마 하지 /etc/resolvconf/resolv.conf.d/head에서 "검색"라인을 넣어. "검색"행을 넣으면 resolvconf에 resolv.conf 파일의 동적 부분에 "검색"행이 포함되어 있으면이 행은 무시됩니다. glibc 리졸버는 마지막 "검색"또는 "도메인"라인을 제외한 모든 것을 무시합니다. resolv.conf (5)를 참조하십시오. (2) resolvconf 구성이 변경되면 resolvconf 작업을 다시 시작하지 말고 "resolvconf -u"업데이트 만 실행하십시오.
jdthood

1
줄을 제거했습니다. 다른 옵션은 머리 대신 꼬리를 사용하는 것입니다.
tgm4883

6
@ tishma : 안녕. 첫째, 오해를 피하기 위해 :베이스, 헤드 또는 테일 파일에 아무것도 쓰지 않습니다. 런타임시 /etc/resolvconf/resolv.conf.d/에있는 파일에는 아무것도 쓰지 않습니다. 이 파일들은 resolvconf에 의해 읽혀지며, 그 내용은 --links / etc / resolv.conf가 가리키는 --- /run/resolvconf/resolv.conf --- 파일에 내용을 어셈블합니다. 둘째, / etc / network / interfaces의 dns- * 옵션이 변경된 후 수행 할 작업에 관한 것입니다. 마 하지 "다시 시작 /etc/init.d/networking"실행; 더 이상 사용되지 않습니다. 대신 문제의 인터페이스를 ifdown하고 다시 ifup하십시오.
jdthood

4
14.04 에서이 답변은 나를 위해 아무것도하지 않았습니다.
Jay Sullivan

2
다른 모든 방법이 실패하면 .. $ sudo resolveconf -u가 변경되지 않은 것으로 보이며 컴퓨터를 다시 시작했습니다.
MSpreij

35

대답은 귀하의 /etc/dhcp/dhclient.conf, 즉 dhcp 클라이언트 dns-nameservers에게 요청하지 않는 것 입니다.

그런 다음 업데이트 /etc/network/interfaces

auto eth0
iface eth0 inet dhcp
dns-search google.com
dns-nameservers dnsserverip

그런 다음 resolv.conf원하는 방식으로 자동 구성됩니다.

에 추가하고 dns-search실행하십시오 /etc/init.d/networking restart (이 스크립트는 더 이상 사용되지 않지만 여전히 작동합니다).


5
dhclient는 모든 resolvconf 설정을 지배하므로 이것이 최선의 대답이어야합니다.
Alex R

6
/etc/init.d/networking restart내 컴퓨터에서 작동하지 않았지만 sudo ifdown -a그 후에 작동했습니다 sudo ifup -a. (또한, 나는 dnsserverip무언가 를 대체해야한다는 것을 깨닫는 데 약간의 시간이 걸렸다 8.8.8.8. 약간 바보 같은 느낌이 든다.)
Jason Gross

trysystemctl restart networking.service
Pavel Sayekat

20

이것은 Ubuntu를 처음 설치할 때 DHCP 구성으로 인한 것일 수 있습니다. 이 3 단계 프로세스를 수행하여이 자동 구성 문제를 처리하십시오.

먼저

다음에있는 인터페이스 구성을 편집하십시오. /etc/network/interfaces

이 줄을 아래에 추가하십시오 iface lo inet loopback:

dns-nameservers yourdns youraltdns

Google DNS의 예로 다음을 사용할 수 있습니다.

dns-nameservers 8.8.8.8 8.8.4.4

둘째

다음 위치에있는 DHCP 구성 파일을 편집하십시오.

/etc/dhcp/dhclient.conf

#모든 줄 에서 구문을 주석으로 표시하거나 모든 요청 이름 서버를 제거하십시오. 16.04에서는 여기에서 변경하지 않아도됩니다.

제삼

이 명령을 사용하여 네트워킹을 다시 시작하십시오.

/etc/init.d/networking restart

16.04에서 :

sudo ifdown -a
sudo ifup -a

3
/etc/init.d/networking restart내 컴퓨터에서 작동하지 않았지만 sudo ifdown -a그 후에 작동했습니다 sudo ifup -a.
Jason Gross

이것은 간단하며 약간 해키이지만 작동합니다! 우분투와 같은 문제는 한 가지 방법으로 1000 가지가 있습니다!
Willa O Ng'wana

그런 다음 /etc/resolv.conf 에 첫 번째 유용한 줄에 2 개의 새로운 DNS 항목이 포함되어 있는지 확인할 수 있습니다 .
ROMANIA_engineer

8

제발 봐 resolvconf'의 매뉴얼 페이지를 참조하십시오. 다음을 생성하여 특정 DNS 설정을 강제로 포함시킬 수 있습니다 /etc/resolvconf/resolv.conf.d/base.

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

다른 특수 파일 (머리와 꼬리)이 있습니다.이 파일은 원하는 것을 달성하는 데 도움이 될 수 있습니다.


4
/etc/resolvconf/resolv.conf.d/base에 행을 추가 할 수 있지만 모든 네임 서버는 인터페이스를 통해 액세스 할 수 있고 해당 인터페이스가 작동 할 때만 액세스 할 수 있으므로 네임 서버 정보를 해당 인터페이스와 연결하는 것이 가장 좋습니다. 인터페이스가 ifup으로 구성된 경우 이는 / etc / network / interfaces 스탠자의 "dns-search"및 "dns-nameservers"행에 정보를 넣는 것을 의미합니다. 인터페이스가 DHCP를 통해 구성된 경우 다음을 의미합니다. 클라이언트에 검색 이름과 네임 서버 주소를 제공하도록 DHCP 서버를 구성합니다. "base"파일은 임시 해킹이나 최후의 수단으로 만 사용하십시오.
jdthood

네. 나는 /etc/resolvconf/resolv.conf.d/base에 "nameserver 1.2.3.4"를 추가했다
Bastion

8

다른 많은 답변에 따르면 resolvconf시스템에 설치하는 것과 관련이 있습니다.

따라서 resolv.conf재부팅시 손실되지 않는 무언가를 유지하는 가장 좋은 방법 은 다음과 같은 resolvconf 구성 파일에 포함시키는 것입니다.

/etc/resolvconf/resolv.conf.d/

거기에 head파일이 있습니다. 당신이 무엇을 넣든지 맨 위에 쓰여질 것입니다./etc/resolv.conf

따라서 모든 것이 다음과 같이 진행됩니다.

# echo nameserver 8.8.8.8 >> /etc/resolvconf/resolv.conf.d/head
# resolvconf --enable-updates
# resolvconf -u

이것이 실제 정답입니다! 드디어!
user77232

6

나에게 위의 답변은 다음과 같은 이유로 부적절합니다.

  • 나는 사용하지 않고 resolvconf그냥 평범하다 /etc/resolv.conf.
  • 사용 chattr +i잠그는 것은 resolv.conf너무 해키 보인다. 필요한 경우 Puppet을 자유롭게 변경할 수 있어야합니다.
  • AFAIK, 편집 /etc/network/interfacesresolv.conf덮어 쓰기를 방지하지 않습니다 . 단순히 작성해야 할 네임 서버를 지정합니다. 나에게 이름 서버를 지정하는 것이 중요하지 않았습니다. 내가 설정하기 위해 노력하고있어 options timeout:1options attempts:1내에서 resolv.conf파일.

최적의 솔루션 내가 찾은이의 기본 동작을 오버라이드 (override) dhclient의 문서화 된 후크를 사용합니다.

/etc/dhcp/dhclient-enter-hooks.d/nodnsupdate다음 내용 으로 새 파일을 만듭니다 .

#!/bin/sh
make_resolv_conf() {
    :
}

그런 다음 파일을 실행 가능하게 만드십시오.

chmod +x /etc/dhcp/dhclient-enter-hooks.d/nodnsupdate

다시 부팅하거나 수동으로 실행할 때 dhclient가 실행되면 sudo ifdown -a ; sudo ifup -a이 스크립트가로드됩니다 nodnsupdate. 이 스크립트 make_resolv_conf()는 일반적으로 덮어 쓰고 resolv.conf대신 아무것도하지 않는 내부 함수를 재정의합니다 .

이것은 우분투 12.04에서 나를 위해 일했습니다.


1
데비안 8에서 잘 작동합니다. 우아한 솔루션!
Artur Bodera

1
dhclient-script 맨 페이지 에는 위의 답변을 언급 한 DHCP 클라이언트 네트워크 구성 스크립트에 대한 정보가 들어 있습니다.
hecke

이것은 16.04에서 작동하지 않았으며 /etc/network/interfaces.d에도 항목을 추가했지만 아무런 영향을 미치지 않고 여기에 권장되는 make_resolv_conf의 빈 재정의를 추가했습니다. 효과는 없습니다 .... / etc / dhcp / dhclient.conf-이 문제를 해결하려면 정적 설정 파일을 수정해야합니까?
silverjam

3

이것은 내 컴퓨터의 이상한 기묘한 것일 수도 있지만 다른 사람이 같은 코너 케이스를 가질 수도 있습니다.

ISP 이름 서버를 /etc/resolv.conf에 포함시키는 데 여러 가지 방법으로 성공하지 못했습니다.

  • 나는 그것들을 포함시키고 /etc/network/interfaces네트워킹을 다시 시작했다. 에 표시되지 않았습니다 /etc/resolv.conf.

  • 나는 그것들을 /etc/resolv.conf명시 적으로 넣었 지만 물론 그들은 덮어 썼다 . 그들은에 나타 /run/resolvconf/interface/eth0.inet났지만 결코 그것을 만들지 않았다 /etc/resolv.conf.

  • 동적 업데이트를위한 resolvconf 구성을 시도했습니다. 변경 없음.

마지막으로 로컬 컴퓨터 (127.0.0.1)가 /etc/resolv.conf다른 네임 서버 에 표시되면 포함되지 않은 곳을 읽었습니다 .

필사적으로 필자는 편집 한 /run/resolvconf/interface/lo.named행에서 행을 삭제하고 ( nameserver 127.0.0.1) 다시 시작했습니다 ifdown eth0 && ifup eth0.

그런 다음 /etc/resolv.conf에 ISP 이름 서버가 처음으로 포함되었습니다! 나는 실행 service network-manager restart이 안정 있는지 확인하고 /etc/resolv.conf여전히 내 ISP의 네임 서버가 포함되어 있습니다. 확인하기 위해 재부팅했으며 여전히 거기에 있지만 /run/resolvconf/interface/lo.named 재설정되었습니다 nameserver 127.0.0.1.

흥미롭게도 네트워크를 다시 시작해도 여전히 작동합니다. /etc/resolv.conf여전히 ISP 이름 서버가 포함되어 있습니다. 나는 이것을 설명 할 수 없지만 (누군가는 가능합니까?) 그러나 누군가가 같은 자리에 갇히는 데 도움이 될 수 있습니다.


이 원인 일 수 dnsmasq있습니다. apt-get remove dnsmasq에서 config 또는 update config를 사용하여 간단히 제거 할 수 있습니다 /etc/dnsmasq.conf.
Tombart

2

네임 서버를 /etc/resolvconf/resolv.conf.d/head 파일에 추가하십시오. 파일에는 다음과 같은 메시지가 포함되어 있습니다.

8.8.8.8을 추가 한 후 해당 파일은 다음과 같아야합니다.

root@hvnatvcc: ~ # 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
nameserver 8.8.8.8

3
/etc/resolvconf/resolv.conf.d/head에 행을 추가하는 것은 /etc/resolvconf/resolv.conf.d/base에 행을 추가하는 것보다 나쁜 해결책입니다. ifup을 사용하여 구성된 인터페이스에 대한 올바른 솔루션은 / dn / network / interfaces의 스탠자에 "dns-search"및 "dns-nameservers"행을 추가하는 것입니다. 다른 답변에 대한 내 의견도 참조하십시오.
jdthood 2009 년

3
그것은 실제로 나를 위해 일한 유일한 것입니다 ... 왜 "올바른"솔루션이 작동하지 않는지 알기가 어렵습니다.
silverjam

1

마지막 줄에 추가하십시오.

nameserver 8.8.8.8

터미널을 열고 입력

sudo chattr +i /etc/resolv.conf

+ i는 부팅시 파일이 재설정되지 않도록주의합니다.

위를 취소하려면

sudo chattr -i /etc/resolv.conf

이상

man chattr

1

다른 솔루션은 Fedora 20 시스템에서 작동하지 않았습니다. 내 특별한 문제는 /etc/resolv.conf의 "search"줄을 덮어 쓰는 것이 었습니다. 여기에 그 문제가 해결되었습니다. (이것은 NetworkManager가 라인을 생산하고 있다고 가정 search rn.yourcompany.com 합니다 search rn.yourcompany.com yourcompany.com intnet.yourcompany.com.

1. "ifconfig"명령을 사용하여 관심있는 인터페이스를 찾으십시오.

$ ifconfig
  :
  :

em2:  <this was the one which was connected>

2. 루트가되어 시스템 구성 네트워크 장치 디렉토리로 변경하십시오.

$ sudo su -[sudo] 
password for youruser:
# cd /etc/sysconfig/networking/devices`
  1. 선호하는 편집기를 사용하여 Domain검색 할 추가 도메인이 있는 행 을 추가하십시오 .

DOMAIN="yourcompany.com intnet.yourcompany.com"

저장, 로그 아웃 및 다시 로그인하십시오. NetworkManager의 행은 \etc\resolve.conf다음 과 같습니다.

search rn.yourcompany.com yourcompany.com intnet.yourcompany.com

3
퍼레이드에는 비가 내리지 않지만 Ask Ubuntu이므로 Fedora는 주제가 맞지 않습니다.
Flimm

1

에 항목 추가 /etc/resolvconf/resolv.conf.d/head

echo 'search puppetmaster.com' | sudo tee -a /etc/resolvconf/resolv.conf.d/head
echo 'nameserver 192.168.1.XXX' | sudo tee -a /etc/resolvconf/resolv.conf.d/head

다음 명령을 실행하십시오.

sudo resolvconf -u

1

Ubuntu Server 18의 경우 Netplan은 네트워킹 구성을위한 새로운 유틸리티입니다.

# cd /etc/netplan

그런 다음 yaml 파일에서 네임 서버 주소 항목을 편집하십시오 (올바른 들여 쓰기 사용). 예를 들어 Google의 DNS 서버를 사용하는 경우 :

nameservers:
    addresses: [8.8.8.8,8.8.4.4]

서비스를 다시 시작하려면

# netplan apply

보다 https://netplan.io/를 하십시오

https://www.techrepublic.com/article/how-to-set-dns-nameservers-in-ubuntu-server-18-04/


0

DHCP를 사용하는 경우 /etc/dhcp/dhclient.conf추가 DNS 서버를 추가하도록 편집 하십시오.

prepend domain-name-servers 12.34.56.78, 12.34.56.79;

DHCP 클라이언트 dns-nameserversetc/network/interfaces 나는 생각 /etc/resolvconf/resolv.conf.d/base도.

이것은 우분투 서버 14.04.3에서 나를 위해 일했습니다.

자세한 내용은 데비안 네트워크 설정 위키 를 참조하십시오.


0

resolve.conf를 백업하고 resolvconf 패키지를 삭제하고 /etc/resolv.conf 파일을 원하는대로 편집하십시오.

apt-get remove -y resolvconf
echo 'nameserver 8.8.8.8' > /etc/resolv.conf

우리는 resolvconf와 같은 나쁜 소프트웨어를 사용하지 않도록 선택할 권리가 있습니다.

그건 그렇고, /etc/resolv.conf의 검색 필드는 쓸모가 없습니다.


0

사용 resolvconf및 비활성화 systemd-resolved.service(이 기능은 우분투 19.04에서 작동합니다) :

  1. 설치 resolvconf

    sudo apt install resolvconf
    
  2. 네임 서버 추가

    /etc/resolvconf/resolv.conf.d/base당신의 텍스트 편집기로 열고 , 나는 사용 vim합니다.

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

    그런 다음 열린 파일 안에 네임 서버를 추가하십시오 (예 :

    nameserver 1.1.1.1
    nameserver 1.0.0.1
    
  3. 업데이트 중 resolv.conf

    sudo resolvconf -u
    
  4. 비활성화 systemd-resolved.service하고 재부팅하십시오. nameserver 127.0.0.53에 쓰지 않았습니다 /etc/resolv.conf.

    sudo systemctl disable systemd-resolved.service
    sudo reboot
    

끝난!

출처


이 작업을 수행 한 Ubuntu 버전을 지정할 수 있습니까? 원래의 질문은 오랫동안 사용되지 않아 우분투 12.04에 관한 것입니다.
마크 반 후미 센

0

나는 이것이 가장 간단한 해결책이라고 생각했다. 가지고 resolv.conf있고 resolvconf파일 이 있으면 서로 밟을 것입니다. resolv.conf재부팅 할 때마다 가져 와서 덮어 쓰는 파일 을 제거해야합니다 .

를 붙이 nameserver 1.1.1.1 1.0.0.1다음을 실행 resolvconf 파일의 하단에와

sudo rm /etc/resolv.conf

파일을 제거하려면 그런 다음 다시 시작하면 모든 것이 작동합니다.


0

12.04의 Mi 솔루션 :

이름 확인 서버를 사용하지 않는 인터페이스에 dns-nameserver를 추가하면

resolvconf 매뉴얼 페이지

터미널에서 수동으로 편집 할 때 resolv.conf가 변경되지 않도록하려면 다음을 수행하십시오.

sudo resolvconf –disable-updates

후:

sudo resolvconf -a eth0 # or your network interface

그런 다음 /run/resolvconf/resolv.conf최대 두 개의 DNS 서버를 추가하여 수동으로 편집하십시오 .

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

sudo /etc/init.d/networking restart

4
이것은 매우 많이 하지 문제를 해결하는 올바른 방법.
jdthood

1
@ jdthood 누군가가 이것을 탐색 할 때 왜 이것이 올바른 방법이 아닌지 자세히 설명 할 수 있습니까? 그것은 논리적으로 보이지만, 나는 이것에 대해 아무것도 모른다.
ErikPerik

-1

그냥 넣어

dns-search google.com && dns-nameservers (sample: 8.8.8.8)

/etc/network/interfaces구성 에서 명령 . 그런 다음 네트워크를 다시 시작하십시오.

작동해야합니다.


-2

해당 구성은 /etc/default/bind9

RESOLVCONF=no|yes

아니오 = 조건을 적용하지 않습니다init.d bind9

또는 다른 값 = 재정의resolv.conf

이 문제는 설치할 때 발생하며 bind9모든 conf를 확인하지 않아도됩니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.