/ etc / network / interfaces를 변경 한 후 resolvconf를 resolv.conf를 재생성하려면 어떻게합니까?


92

/etc/network/interfaces아래와 매우 유사한 것으로 업데이트 한 후 어떻게 /etc/resolv.conf업데이트합니까? 나는 (루트로) 시도 resolver -u, service networking restart하지만 그들은 작동하지 않았다. 나는 또한 심볼릭 링크를 수정하고 다시 resolv.conf시도 resolver -u했다. 마지막으로 좌절감에 나는 다시 부팅하여 문제를 해결했습니다 /etc/resolv.conf.

Ubuntu 12.04, 64 비트 서버, 모든 최신 패치가 설치되었습니다.

/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


resolv.conf가 무엇을하려고합니까?
kingmilo

답변:


106

service networking restart 항상 모든 인터페이스를 다운받는 안정적인 방법은 아닙니다.

resolvconf -u명령 resolv.conf은 resolvconf의 자체 데이터베이스 에서만 업데이트 됩니다. 데이터베이스를 업데이트해야합니다.

데이터베이스를 업데이트하려면 -a또는 -d옵션을 사용하여 resolvconf를 호출해야합니다 . ifup 또는 ifdown을 실행할 때 뒤에서 발생합니다. 따라서 일반적으로로 /etc/network/interfaces변경하면 dns- * 옵션의 변경 사항을 활성화하려면 해당 인터페이스를 ifdown하고 다시 작성해야합니다. 또는 재부팅 할 수 있습니다.

ifdownup하지 않고 인터페이스를 변경하려는 경우 (아마도 기계를 원격으로 관리하고 해당 인터페이스를 통해 연결되어 있기 때문에 natch) 명령 행에서 resolvconf를 직접 실행하여 동일한 결과를 얻을 수 있습니다. 이것은 resolvconf의 의미에 대해 조금 더 많은 지식이 필요합니다. 관련 / e / n / i 스탠자가 있다고 가정하십시오.

iface IIII FFFF static
    address ...
    ...
    dns-nameservers X.X.X.X Y.Y.Y.Y
    dns-search SSSS

여기서 FFFF는 주소 패밀리 ( "inet"또는 "inet6")입니다.

이러한 dns- * 옵션을 활성화하려면 다음과 같이 resolvconf를 실행합니다 (예, 문자열의 줄 바꿈이 resolvconf로 파이프 됨).

echo "nameserver X.X.X.X
nameserver Y.Y.Y.Y
search SSSS" | sudo resolvconf -a IIII.FFFF

질문에 주어진 스탠자의 경우 다음과 같습니다.

echo "nameserver 192.168.3.45
nameserver 192.168.8.10
search example.com" | sudo resolvconf -a eth0.inet

자세한 내용은 resolvconf (8) 매뉴얼 페이지와 resolvconf 패키지 README 파일 (/usr/share/doc/resolvconf/README.gz)을 참조하십시오.


"서비스 네트워킹 재시작"을 수행하지 마십시오. 모든 인터페이스를 안정적으로 다운 업하는 방법은 아닙니다. " 나를 위해 잘 작동합니다. 그래도 깨끗한 방법을 아는 것이 좋습니다.
Aki

11
"서비스 네트워킹 재시작"을하지 말아야 할 경우이 질문의 첫 번째 줄에 넣지 말라고 제안 할 수 있습니까? 서둘러 해결책을 찾을 때 내가 한 첫 번째 일은 내가 본 첫 번째 명령을 복사하여 붙여 넣는 것입니다.
Robin Winslow

4
@RobinWinslow +1 하루 종일
Pete

8
이 답변은 개발 본인부터입니다 resolvconf :)
heemayl

2
다시 시작 / 다시 읽으려면 /etc/network/interfaces다음을 수행하십시오 ifdown eth0 && ifup eth0. 원격 ssh 세션에서도 작동합니다.
Pierre-Damien


5

서버를 원격으로 관리하는 사용자는 다음을 수행 할 수 있습니다.

  1. dns-nameservers라인을 업데이트/etc/network/interfaces
  2. # ifdown eth01; ifup eth01

이것은 한 줄로 나뉘어 야합니다. (리눅스 명령 줄 구분 기호). 현재 연결이 끊어지지 않아야합니다. 인터페이스 파일에서 오타는 예외입니다. 이 경우 ifup실패하고 물리적 액세스 또는 다른 ethxx연결 이 있어야 합니다.


2

service resolvconf restart/etc/resolv.conf많은 소란없이 파일을 재생성 합니다.


2
나는 얻는다Failed to restart resolvconf.service: Unit resolvconf.service not found.
Mobigital

그러나 완성 된 명령은 재생되지 /etc/resolv.conf우분투 서버 14.04에
Jossef Harush에게

1

이 답변은 위의 답변과 비슷하지만 질문 예제 구성을 사용하여 질문에 답변합니다. 또한 두 명령이 모두 필요한 이유를 설명합니다.

편집 /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-nameserver 192.168.3.45
    dns-nameserver 192.168.8.10

구성 파일을 재부팅하거나 다시로드하지 않으면 이러한 변경 사항이 적용되지 않습니다.

인터페이스 파일을 실시간으로 업데이트하려면 다음 명령을 실행해야합니다.

echo "nameserver 192.168.3.45
nameserver 192.168.8.10
search example.com" | sudo resolvconf -a eth0.inet

이를 통해 재부팅하거나 다시로드하지 않고도 인터페이스를 업데이트 할 수 있습니다.

그러나 변경 사항이 없으면 재부팅 후 위의 명령 변경 내용이 손실됩니다 /etc/network/interfaces.

그런데이 목록의 BDenis의 마지막 대답은 실제로 /etc/network/interfaces파일 을 구문 분석하고 해당 줄을 명령으로 파이프 하여 마지막 명령 대신 작동합니다. sudo resolvconf -a eth0 실제로 절반의 답변이며 인라인 sed 구문 분석의 좋은 예입니다. 이것이 어떻게 수행되는지 보려면 명령의 첫 번째 부분을 실행하고 /etc/network/interfaces파일을 구문 분석 하고 sudo resolvconf -a eth0명령 을 실행하는 데 필요한 모든 정보를 뱉어내는 것을 지켜보십시오 .

sed 's/#.*$//' /etc/network/interfaces | grep dns- | sed 's/dns-//g'

이것은 명령과 동일한 출력을 생성합니다.

echo "nameserver 192.168.3.45
nameserver 192.168.8.10
search example.com"

이 제공 /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-nameserver 192.168.3.45 
    dns-nameserver 192.168.8.10

슬프게도 그것을 사용할 수 없습니다. 내 인터페이스는 네트워크 관리자와 DHCP에 의해 관리되므로 추가하는 /etc/network/interfaces것은 유효한 옵션이 아닙니다. (우분투 14.04)
Tino

1

간단한 답변 :

resolvconf를 설치하십시오. apt install resolvconf

그런 다음의 행에 따라 ifup eth0의 dns를 업데이트합니다 .etc/resolv.confdns-nameservers/etc/network/interfaces


알 수없는 인터페이스. 모든 사람들은 여기에서 세부 사항을 난독 화하는 방법을 정말로 알고 있습니다 ... 우리는 모든 명령을 컨테이너화하는 것을 목표로해야한다고 생각합니다. 각각에 대한 전체 스크립트, 산문 없음.
mathtick

1

18.04에서 다음이 안정적으로 작동합니다 (루트로 실행).

systemctl stop networking
ip address flush dev <device> # just to be safe
systemctl start networking

중요 : 패키지가 resolvconf설치되어 있는지 확인하십시오 .
기본적으로 보이지 않는 것 같습니다.이 설정이 없으면 (!)의 일부 변경 사항 /etc/network/interfaces이 자동으로 무시됩니다 (예 :) dns-*.


0

이것은 나를 위해 일했다 :

sed -re '/nameservers|dns-search/ !d' -e 's/dns-nameservers/nameserver/' -e 's/dns-search/search/' /etc/network/interfaces  | resolvconf -a eth0.inet && resolvconf -u

그에 따라 조정하십시오.


0

거기에는 서비스 없습니다 우분투 18.04의 데스크톱 버전에 networking, 그리고 resolvconf기본적으로 설치되지 않습니다, 나는 재생에 성공했습니다 resolv.conf다시 시작 network-manager:

sudo service network-manager restart

-3

또한이 명령을 시도 할 수 있습니다 :

cat /etc/network/interfaces |sed 's/#.*$//'|grep dns-|sed 's/dns-//g'|sudo resolvconf -a eth0.inet

3
이 명령이 왜 작동해야하는지 설명 할 수 있습니까?
αғsнιη

1
회선에 둘 이상의 네임 서버 IP가 있으면 올바르게 작동하지 않습니다 dns-nameserver IP1 IP2. 그런 다음 줄은에서 반복해야 resolv.conf하지만 그렇지 않습니다.
Tino

또한을 /etc/network/interfaces사용 하는 동안 (끝에 dns-nameservers통지 s)을 resolvconf사용합니다 nameserver. 명령이 처리하지 않습니다. 그리고 모든 것이 정확하더라도 파이프 라인 sed | grep | sed이 가장 효율적인 방법은 아닙니다.
Melebius
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.