부팅 할 때마다 /etc/resolv.conf를 덮어 쓰는 것은 무엇입니까?


23

나는 미니 linux부팅 용 파일을 받았다 firefox. 인터넷에 연결되어 있지 않은 경우에만 작동합니다.

네트워크에는 3 개의 DNS 서버가 있으며 모두 작동합니다. 나는 그들도 핑을 할 수있다. 그러나하려고 할 때 ping google.de또는 wget google.de내가 얻을 bad address오류입니다.

nslookup google.de 어떤 이유로 작동합니다.

resolv.conf부트 된 시스템 resolv.conf에서 .iso파일에 넣은 내용과 동일한 내용이없는 문제를 추적했습니다 .

나는 만들고 수정하는 데 필요한 모든 요소를 ​​이해하려고 노력했다 resolv.conf. 나는 그것을 모두 가지고 있는지 확실하지 않지만, 나는 거기에서 내 해결책을 찾지 못했습니다.

그래서 마지막 도랑 노력으로 resolv.conf파일을 불변으로 만들려고했습니다.

:~# chattr +i /etc/resolv.conf

놀랍게도 다시 빌드하고 부팅 할 때 내 파일 이름이 바뀌었고 resolv.conf~대신 그 표준 파일이 나를 괴롭 혔습니다.

파일 내용은 네트워크 자체에서 정보를 얻는다고 믿습니다. .iso인터넷에 액세스하지 않고 Virtualbox에서 시작하면 내 파일이 그대로 유지됩니다.

파일 의 일부를 /etc/dhcp/dhclient.conf삭제 domain-name-server하거나 삭제하여 인터넷에서 정보를 얻지 않도록 변경하려고했습니다 .domain-name-searchrequest

불행히도 작동하지 않았습니다.

NetworkManager가 설치되어 있지 않습니다. iso는 Ubuntu 14.04를 기반으로합니다.

중요한 정보가 누락되었을 수 있습니다. 기꺼이 제공해 드리겠습니다.

최신 정보:

삭제 된 파일을 찾은 것 같습니다 resolv.conf.

~ 인 것 같습니다 /usr/share/udhcpc/default.script

#!/bin/sh

# udhcpc script edited by Tim Riker <Tim@Rikers.org>

[ -z "$1" ] && echo "Error: should be called from udhcpc" && exit 1

RESOLV_CONF="/etc/resolv.conf"
[ - n "$broadcast" ] && BROADCAST="broadcast $broadcast"
[ -n "$subnet" ] && NETMASK="netmask $subnet"

case "$1" in
    deconfig)
        /bin/ifconfig $interface 0.0.0.0
        for i in /etc/ipdown.d/*; do
            [ -e $i ] && . $i $interface
        done
        ;;

    renew|bound)
        /bin/ifconfig $interface $ip $BROADCAST $NETMASK

        if [ -n "$router" ] ; then
            echo "deleting routers"
            while route del default gw 0.0.0.0 dev $interface ; do
                :
            done

            metric=0
            for i in $router ; do
                route add default gw $i dev $interface metric $((metric++))
            done
        fi

        echo -n > $RESOLV_CONF # Start ----------------  
        [ -n "$domain" ] && echo search $domain >> $RESOLV_CONF
        for i in $dns ; do
            echo adding dns $i
            echo nameserver $i >> $RESOLV_CONF
        done
        for i in /etc/ipup.d/*; do
            [ -e $i ] && . $i $interface $ip $dns 
        done # End ------------------
        ;;
esac

exit 0

프로그램의 일부입니다 udhcpc. 작은 DHCP 클라이언트는busybox

더 조사하겠습니다.


UPDATE2 및 솔루션 :

나는 /etc/resolv.conf파일을 덮어 쓰고 충분히 확신 하는 부분 (#Start to #End)을 주석 처리했습니다 . 그것은 범인이었습니다. 불분명 한 스크립트가이 모든 문제를 일으켰습니다.

문제를 반영하기 위해 질문을 변경했습니다. 실제로 문제를 해결하기 위해 알아야 할 사항이 있기 때문에 같은 문제를 가진 사람들을 찾기가 더 쉬워서 답변을받을 수있었습니다.

문제를 해결하는 데 도움을 주셔서 감사합니다.


1
파일이 변경되지 않았으므로 resolv.conf에서 불변 플래그를 설정해도 작동하지 않습니다. 파일 이름을 바꿀 때 / etc의 디렉토리 항목이 변경되었습니다. / etc를 불변으로 설정해야합니다. 정말로 원하지 않는 것입니다.
doneal24

@ DougO'Neal 알겠습니다. 고마워요
Minix

답변:


24

1) 로컬 DHCP 서버가 제공하는 데이터가 모든 변경 사항을 덮어 쓰므로 resolv.conf를 수동으로 업데이트해서는 안됩니다. 정적 sudo dpkg-reconfigure resolvconf업데이트 를 원하면 동적 업데이트에 대해 "아니오"로 실행 하고 응답하십시오. 여기에 새 항목을 추가하려면 편집 /etc/resolvconf/resolv.conf.d/base하고 실행 sudo resolvconf -u하면 항목과 DHCP 서버 항목이 추가됩니다.

2) / etc / network / interfaces를 편집하고 다음과 같이 항목을 추가하십시오.

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

다음 다시 시작 /etc/init.d/networking restart또는 sudo ifdown -asudo ifup -a

3) 시스템은 매우 작은 DHCP 클라이언트 프로그램 인 udhcp 를 사용 합니다. udhcp 클라이언트는 DHCP 서버와의 임대를 협상하고 임대를 얻거나 잃을 때 스크립트 세트에 알립니다. 여기 에서 사용법에 대해 읽거 나이 스크립트를 편집 할 수 있습니다 .


1
에 항목을 추가 /etc/resolvconf/resolv.conf.d/base하고 실행했습니다 resolvconf -u. 불행히도 작동하지 않았습니다.
Minix

sudo dpkg-reconfigure resolvconf를 실행하려고 했습니까? resolvconf -u를 실행 한 후 항목이 결과 파일에 없습니까? "nameserver 127.0.0.1"또는 "search google.com"과 같이 어떻게 추가 했습니까?
kirill-a

나는 달렸다 dpkg-reconfigure resolvconf. 항목이 없습니다. 그리고 모두가있는 항목이 nameserver ipsearch domain.
Minix

아니요, running dpkg-reconfigure resolvconf은 항목을 추가하지 않지만 자동 업데이트를 비활성화 할 수 있습니다. 업데이트를 비활성화하면 resolv.conf를 수동으로 편집 할 수 있으며 덮어 쓰지 않아야합니다.
kirill-a

서투르게 말해서 나쁘다, 나는 당신의 코멘트 문장을 문장으로 대답하고 있었다. 실행 resolvconf -u후 항목이 추가되지 않았습니다.
Minix

4

나도 이것에 부딪쳤다. 주석 처리해도 domain-name-server문제가 해결되지 않았습니다.

또한 나는 resolvconf평범 하지 않은을 사용 하고 있습니다 /etc/resolv.conf.

너무 해키처럼 보이기 때문에 chattr +i잠금을 사용하지 않았습니다 resolv.conf. 또한 resolv.conf필요한 경우 Puppet을 수정할 수 있기를 바랍니다 .

가장 좋은 방법은 내가의 기본 동작 재정의 발견 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에서 나를 위해 일했습니다.


Ubuntu 18.04에서 작동하지 않았습니다 /etc/resolv.conf. (재부팅 후 덮어 쓰기
Dan Dascalescu

3

Ubuntu 16.04 서버 인스턴스의 네트워크 인터페이스가 DHCP에 의해 제어되는 경우 dhclient 프로그램은 /etc/resolv.conf네트워킹 서비스가 다시 시작될 때마다 파일 을 덮어 씁니다 .

/etc/dhcp/dhclient.conf파일 을 편집하고 다음과 같이 domain-name , domain-searchdomain-name-servers에 “supersede”문을 추가 하여 문제를 해결할 수 있습니다 .

supersede domain-name "local.com";
supersede domain-search "local.com";
supersede domain-name-servers 192.168.56.103;

이 특정한 경우 이름 서버는 "192.168.56.103"에 있고 도메인 이름은 "local.com"입니다.

각 줄은 세미콜론으로 끝나고 도메인 이름은 큰 따옴표로 묶습니다.


불행히도 이것은 Ubuntu 18.04에서 작동하지 않았습니다. 재부팅 후 /etc/resolv.conf127.0.0.53으로 덮어 썼습니다.
Dan Dascalescu


또한 실행 중인지 확인dnsmasq
Sand1512

0

이 디렉토리로 이동하십시오 :

  cd /etc/resolvconf/resolv.conf.d

head라는 파일을 열고 거기에 DNS IP 또는 이름을 넣습니다. tail이라는 파일을 열고 거기에 도메인을 넣습니다. 재부팅하십시오.


해당 디렉토리는 기본적으로 Ubuntu 18.04에 존재하지 않습니다. 서비스를 생성하는 서비스를 설치해야합니까?
Dan Dascalescu

0

Azure VM에서 /etc/resolv.conf는 직접 편집 할 수 없습니다.

네트워크 구성 파일 / etc / sysconfig / network-scripts / ifcfg-eth0 등에 DNS 항목을 추가하십시오.

DOMAIN = example.com

DNS1 = 10. . . *
DNS2 = 10. . . *
DNS3 = 10. . . *

파일을 저장 한 후 네트워크 서비스를 다시 시작하십시오. 그러면 구성이 resolve.conf에 추가되는 것을 볼 수 있습니다.


0

DNS 관련 변경 사항을 resolv.conf영구적으로 적용하려면 이라는 DHCP 구성 파일을 변경해야합니다 dhclient.conf. 에서 파일을 찾을 수 있습니다 /etc/dhcp/dhclient.conf.

편집 할 파일을여십시오 (sudo를 사용하는 것을 잊지 마십시오). 다음과 같은 줄이 나타납니다.

#supersede domain-name "fugue.com home.vix.com";
#prepend domain-name-servers 127.0.0.1;

앞의 "#"을 제거하고 원하는 도메인 이름 및 / 또는 도메인 이름 서버를 사용하십시오. 저장해. 이제 DNS 관련 변경 사항이 영구적입니다.

크레딧은 https://itsfoss.com/resolvconf-permanent-ubuntu/ 로갑니다.


이 답변은 이미 2 년 전에 제공되었습니다 .
Dan Dascalescu

0

재부팅 후 resolv.conf 또는 파일을 덮어 쓰지 못하게하려면 아래 명령을 사용하십시오.

chattr -V + i 파일 이름 예 : chattr -V + i /etc/resolv.conf

변경 사항을 되돌리려면 다음 명령을 사용하십시오.

chattr -i filename-파일에 대한 삽입을 다시 활성화

chattr (속성 변경)은 루트 사용자로 로그인 한 경우에도 중요한 파일 및 폴더의 우발적 인 삭제 또는 수정을 보호하기 위해 Linux 시스템의 파일에 특정 속성을 설정 / 설정 해제하는 데 사용되는 명령 행 Linux 유틸리티입니다.


나는 질문의 사용자가 실제로 시도했지만 chattr, 이것이 효과가 없다는 것을 무시했다.
Kusalananda

이것은 확실히 작동합니다. 사용자가 시도한 옵션은 파일을 변경할 수없는 파일을 편집하는 것입니다
Ashish Jain

sudo chattr -V + i filename으로 명령을 실행하십시오. 예 : sudo chattr -V + i /etc/resolv.conf
Ashish Jain

-1

NetworkManager를 사용하는 우분투 18.04에서. 'resolv.conf'파일을 제거하고 NetworkManager가 파일을 생성하도록해야합니다.

터미널 유형에서 파일을 제거하려면 sudo rm -f /etc/resolv.conf; 파일이 삭제됩니다.

시스템을 재부팅하면 NetworkManager가 resolv.conf 파일을 생성합니다.

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