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

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

파일의 미니 버전을 얻었고 linux그 파일로 직접 부팅할 수 있습니다 firefox. 이 파일은 해야 할 모든 작업을 수행하지만 인터넷에 연결되어 있지 않습니다.

우리 네트워크에는 3개의 DNS 서버가 있으며 모두 잘 작동합니다. 나는 또한 그들에게 ping을 보낼 수도 있다. 하지만 이렇게 하려고 하면 오류가 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~나를 괴롭혔던 동일한 표준 파일로 대체되었습니다.

파일의 내용을 보면 네트워크 자체에서 정보를 얻는다고 믿게 됩니다. 인터넷 접속 없이 Virtualbox에서 실행하면 .iso파일이 그대로 유지됩니다.

파일의 일부를 삭제하여 /etc/dhcp/dhclient.conf네트워크에서 정보를 가져오지 않도록 변경해 보았습니다.domain-name-serverdomain-name-searchrequest

불행히도 일이 없습니다.

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

중요한 정보가 누락되었을 수 있습니다. 제공하게 되어 기쁘게 생각합니다.

고쳐 쓰다:

지울 수 있는 파일을 찾은 것 같아요 resolv.conf.

것 같다/usr/share/udhcpc/default.script

#!/bin/sh

# udhcpc script edited by Tim Riker <[email protected]>

[ -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

추가로 조사할 예정입니다.


업데이트 2 및 해결 방법:

해당 섹션(#Start ~ #End)을 주석 처리했는데 이것이 파일을 덮어쓰는 것처럼 보였고 /etc/resolv.conf, 확실히 그랬습니다. 이것이 범인입니다. 그래서 모호한 스크립트가 이 모든 문제를 일으켰습니다.

내 문제를 해결하기 위해 실제로 무엇을 알아야 하는지를 반영하도록 질문을 변경했습니다. 그러면 동일한 문제를 가진 사람들이 더 쉽게 찾을 수 있으므로 답변을 받아들일 수 있습니다.

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

답변1

  1. resolv.conf로컬 DHCP 서버에서 제공한 데이터가 변경 사항을 덮어쓰게 되므로 DHCP를 수동으로 업데이트하면 안 됩니다 . 정적으로 적용하려면 실행 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

  1. 귀하의 시스템이 사용하는우즈베키스탄이것은 매우 작은 DHCP 클라이언트 프로그램입니다. udhcp 클라이언트는 DHCP 서버와 임대를 협상하고 임대가 이루어지거나 손실될 때 스크립트 세트에 알립니다. 사용법을 읽을 수 있습니다.여기아니면 (원래 그랬던 것처럼) 이 스크립트를 편집하세요.

답변2

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

/etc/dhcp/dhclient.conf파일을 편집하고 "교체" 문을 추가하여 문제를 해결할 수 있습니다.도메인 이름,도메인 이름 검색그리고도메인 이름 서버다음과 같이:

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

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

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

답변3

나는 또한 이것을 만났다. 의견 domain-name-server도 내 문제를 해결하지 못했습니다.

또한 저는 그것을 사용하지 않고 resolvconf그냥 평범합니다 /etc/resolv.conf.

너무 구식인 것 같아서 chattr +i잠금 기능을 사용하지 않았습니다 . 또한 Puppet이 필요할 때 수정할 resolv.conf수 있기를 바랍니다 .resolv.conf

이것최고의 솔루션나는 그것으로 기록된 후크의 기본 동작을 무시한다는 것을 발견했습니다 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아무 작업도 수행하지 않는 내부 함수를 재정의합니다.

이것은 Ubuntu 12.04에서 저에게 효과적이었습니다.

답변4

내 OVH 우분투 18.04에는 이 파일이 제공되지 않습니다 /etc/network/interface. Netplan을 사용하여 IP 및 이름 서버를 관리합니다. 문서:/etc/netplan/50-cloud-init.yaml

# This file is generated from information provided by the datasource.  Changes
# to it will not persist across an instance reboot.  To disable cloud-init's
# network configuration capabilities, write a file
# /etc/cloud/cloud.cfg.d/99-disable-network-config.cfg with the following:
# network: {config: disabled}
network:
    ethernets:
        ens3:
            dhcp4: true
            match:
                macaddress: fa:16:3e:d8:f7:7b
            set-name: ens3
    version: 2

그래서 나는 말한 대로 하고 파일을 만들었습니다. /etc/cloud/cloud.cfg.d/99-disable-network-config.cfg

# network: {config: disabled}
network:
    ethernets:
        ens3:
            dhcp4: true
            match:
                macaddress: fa:16:3e:d8:f7:7b
            set-name: ens3
            nameservers:
                addresses:
                  - 1.1.1.1
                  - 1.0.0.1
                search: [mydomain.com]
    version: 2

그런 다음 설정을 적용하고 netplan apply재부팅했는데 이전 설정이 그대로 유지되었습니다. 그런 다음 확인한 결과 ls -la /etc/resolv.conf다음과 소프트 링크되어 있음을 발견했습니다.

/etc/resolv.conf -> ../run/systemd/resolve/stub-resolv.conf.

그래서 해당 파일을 삭제하고 새 파일을 만들었습니다.

rm -f /etc/resolv.conf  
{ echo "nameserver 1.1.1.1";
echo "nameserver 1.0.0.1;
echo "search mydomain.com"; } >  /etc/resolv.conf
chattr +i  /etc/resolv.conf
reboot  

다시 시작한 후에도 모든 것이 제대로 작동했으며 내 파일은 여전히 ​​그대로 유지되고 연결이 해제되었습니다. chattr +i /etc/resolv.conf소프트 링크인 경우에는 이 작업을 수행하지 마세요. 먼저 삭제하세요.

관련 정보