/etc/resolv.conf가 계속 변경되는 이유는 무엇입니까?

/etc/resolv.conf가 계속 변경되는 이유는 무엇입니까?

저는 virt-manager를 사용하여 두 개의 이더넷 인터페이스(하나는 NAT에 연결되고 다른 하나는 br0에 브리지)가 있는 Debian 기반 Linux 가상 머신을 실행하고 있습니다. /etc/network/interfaces구성은 다음과 같습니다.

auto lo
iface lo inet loopback

auto eth0
iface eth0 inet dhcp

br0에는 DHCP 서버가 있으며 스위치 외에는 아무것도 연결되어 있지 않습니다.

컴퓨터를 다시 시작하면 /etc/resolv.conf다음 항목이 있습니다.

nameserver 192.168.150.1

이것은 NAP에 의해 할당된 네트워크 주소입니다. 즉, 시도할 때 ping google.com오류가 발생하고 temporary name resolution failure다른 항목을 추가합니다.

nameserver 8.8.8.8

가상 머신이 제대로 작동하고 모든 웹 사이트에 액세스할 수 있지만 잠시 후에 확인하면 /etc/resolv.conf서비스를 시작하지 않거나 프로그램을 실행하지 않고 머신을 계속 실행해도 항목이 다시 나타납니다.

무엇이 재정의되고 있는지 알아낼 수 있는 방법이 있나요? 찾을 수 없다면 (bash 파일을 사용하지 않고 /etc/resolv.conf ) Wat를 추가할 수 있나요?nameserver 8.8.8.8/etc/resolv.conf

답변1

왜냐하면 그래야 하기 때문입니다. 예,/etc/resolv.conf~해야 한다끊임없이 바꾸는다른 서비스에서 업데이트해야 할 때마다.

여기에 질문이 있습니다. 어떤 서비스를 제공합니까? 더 많은 정보가 필요합니다.

문제에 대한 간단한 설명을 보면 인터페이스는 두 개뿐입니다. 하나는 lo변경할 필요가 없는 DHCP이고 /etc/resolv.conf, 다른 하나는 dhcp 서비스를 사용하는 eth0입니다. dhcp 서비스는 업스트림 라우터, 스위치 또는 대부분의 경우 libvirt 및 브리지 내부의 가상 dhcp 서버에서 임대를 갱신해야 합니다.

나는 설명을 가정두 개의 인터페이스구성을 보면~에게스트 구성이 아닌 VM입니다.

글쎄, 한 가지 옵션은 dhcpclient에 알리는 것입니다.DHCP 임대에 지정된 서버 재정의/etc/dhcp/dhclient.conf가상 머신 내부에 다음 줄을 추가합니다.

supersede domain-name-servers 1.1.1.1, 2.2.2.2, 3.3.3.3;

또는 접두사를 사용하여 즉,첫 번째 DNS 확인자로 추가, 다음 줄을 사용하십시오.

prepend domain-name-servers 8.8.8.8, 8.8.4.4;

빙산

문제는 위에서 제시한 "빙산의 일각"보다 훨씬 더 복잡합니다.

가상 네트워크 구성이 복잡합니다. 브리지(192.168.150.zz 주소(기본 xx.yy.122.zz 아님)를 제공한다고 가정함)가 올바르게 구성되었는지 확인해야 합니다. 읽어주세요https://wiki.libvirt.org/page/VirtualNetworking

이 파일을 업데이트할 수 있는 다른 대체 프로그램이 많이 있습니다 /etc/resolv.conf. 귀하의 설명에 따르면 이 경우에는 둘 중 하나도 문제가 되지 않는 것 같습니다. 하지만 아시다시피 /etc/resolv.conf지배권을 위한 경쟁은 수년에 걸쳐 오랫동안 진행되어 왔으며 오늘날에도 여전히 존재합니다. /etc/resolv.conf때때로 제어하고 변경할 수 있는 일부 프로그램은 다음과 같습니다.

  1. resolvconf. 절대적인 제어권을 갖고 /etc/resolv.conf다른 프로그램이 이를 변경할 수 없도록 설계된 프로그램입니다. 그것을 제거.
  2. Network Manager(당신이 그것을 사용하고 있다고보고하지 않습니다). 사용할 DNS 서버를 정의하는 여러 항목이 있습니다. 구성 파일을 이동하여 구성을 재설정하거나비활성화문제가 해결되는지 확인하세요.
  3. 문서/etc/network/interfaces DNS 구성 줄을 포함할 수 있음, 여기서는 그렇지 않은 것 같습니다.
  4. 서비스 systemd resolved가 로컬 서버 127.0.0.53을 설정 중일 수 있지만 이를 보고하지 않습니다.관련된.
  5. dnsmasq또는 유사한 DNS 서버를 제어하도록 구성할 수 있습니다 . 실행 중인 프로그램이 resolv.conf있는지 확인하세요 .dnsmasq
  6. 각각의 새로운 임대는 dhclient갱신될 수 있습니다(원하는 대로). dhcp.conf상술 한 바와 같이.

답변2

여기서 불평하겠습니다. 저도 그런 문제에 직면했습니다. 내가 겪고 있는 문제는 네트워크 관리자가 Resolv.conf를 통해 구성을 적용하고 있다는 것입니다. 이를 확인하고 싶을 수도 있습니다. 현재 직장이 지루해서 필요한 경우 집에 돌아가서 자세한 내용을 알아보겠습니다.

grep DNS /etc/sysconfig/network-scripts/ifcfg-*

DNS 서버 및/또는

sudo vim /etc/NetworkManager/NetworkManager.conf

그리고 이것을 [main] 섹션에 추가하세요:

dns=none
rc-manager=unmanaged

답변3

일반적으로 이것은 systemd 때문이지만(다른 답변 참조) 공급업체가 추가한 스크립트일 수도 있고 "breaking DNS" 기능을 비활성화하기 위해 더 모호한 다른 명령을 요구하도록 systemd를 수정할 수도 있으므로 포기했습니다. 어느 시점에서 파일을 변경할 수 없게 만듭니다. 예를 들면 다음과 같습니다.

set -e
cd /etc
TMPFILE=`mktemp -q resolv.XXXXXXXXXX`
echo "nameserver 8.8.8.8" > "$TMPFILE"
chmod 0644 "$TMPFILE"
chattr -i resolv.conf
mv "$TMPFILE" resolv.conf
chattr +i resolv.conf

그러나 공급업체 스크립트는 불변 플래그를 쉽게 설정 해제한 다음 DNS 구성을 손상시킬 수 있으며 심층적인 방어에는 systemd를 손상시키려는 시도도 포함됩니다. 여기에도 약간의 경쟁 조건이 있습니다. 또한 SELinux와 같은 보안 정책 프레임워크(비활성화하지 않은 경우)는 위에서 수행한 inode 변경에 대해 불만을 표시하고 다양한 절차(예: 비활성화)를 준수해야 할 수 있습니다.

관련 정보