새로운 resolv.conf를 작성하기 위해 DHCP 클라이언트를 원격으로 다시로드하는 방법은 무엇입니까?


3

dnsmasq(8)개인 DHCP기반 네트워크 의 데비안 GNU / 리눅스 시스템에서 구성하려고 합니다. 로컬, 수동 설정 dnsmasq중-istelf 설치 후 -간단하게 라인을 포함 할 수 있습니다

prepend domain-name-servers 127.0.0.1;

에서 /etc/dhcp/dhclient.conf다시 시작 네트워킹. 여기에는 로컬 호스트가 포함 /etc/resolv.conf되며 하나는 준비가 된 것입니다. (또한 참조 : http://wiki.debian.org/HowTo/dnsmasq#Local_Caching )

그러나 특히 구성 관리 소프트웨어로 작업 할 때 원격으로 동일한 작업을 수행 하면 네트워크 연결이 끊어 질 수 있습니다. 목표는 네트워크 재시작이 아니라 resolv.conf.. 업데이트입니다 .

어떻게 힘이 있습니다 dhclient(8)업데이트 resolv.conf까지 네트워크 연결을 유지하고 실행하는 동안?

[편집하다]

아래에서 나를 위해 일한 스크립트를 찾으십시오.

if grep '^\s*nameserver\>.\+\<127\.0\.0\.1\>' /etc/resolv.conf >/dev/null; then
    : # do nothing
else
    grep -v '^\s*nameserver\>' /etc/resolv.conf > /tmp/resolv.conf.new
    echo "nameserver 127.0.0.1" >> /tmp/resolv.conf.new
    grep '^\s*nameserver\>' /etc/resolv.conf >> /tmp/resolv.conf.new
    mv -f /tmp/resolv.conf.new /etc/resolv.conf
fi

그것은 어색합니다-나는 여전히 더 나은 해결책을 찾고 있습니다.


1
dhclient(8)매뉴얼 페이지는 원격 구성 할 수 있습니다 "Omapi"라는 일부 펑키 프로토콜을 지원하고,를 참조 알려줍니다 omshell클라이언트에서 / 해제 특정 매개 변수를 설정하고 업데이트뿐만 아니라 시스템을 종료하고 다시 시작하는 데 사용할 수있는 도구입니다. 이 길을 탐험 했습니까?
kostix

1
예, 그러나 업데이트 방법을 제공하지는 않습니다 resolv.conf. 여기서 DHCP 클라이언트 자체는 문제가 아니며 resolv.conf파일입니다. resolver(3)C-API 에서 고려 되어 다른 소프트웨어에서 사용됩니다. 일반적으로 업데이트는 dhclient(8)또는 중 하나에 의해 수행 resolvconf(8)되지만 첫 번째는 네트워크 연결을 재설정하고 후자는 기존 구성을 유지하지 못합니다.
mjhennig

답은 고객에 따라 달라집니다. ISC DHCP를 기반으로하는 OpenBSD의 클라이언트 (사용하는 것일 수도 있음)에는 /etc/dhclient.conf가 일반적으로 사용됩니다. "dhclient -c /etc/dhclient.conf"는 사용자 정의 파일을 지정할 수 있습니다. 이 파일은 서브넷 마스크, 라우터 (기본 게이트웨이) 및 DNS 항목 파악과 같은 작업을 수행하도록 지정합니다. 원하는 것을 꺼낼 수 있습니다. 그러나 IP 주소는 옵션 중 하나가 아닌 것 같습니다. 조회하지 않는 기본 내장 지원이 없을 수 있습니다. .conf의 "supersede"는 정보를 무시할 수 있습니다. 아마 참조 : man dhclient-script
TOOGAM

답변:


2

ansible을 통해 dnsmasq를 설정할 때도 같은 문제에 직면했습니다. debian jessie에서는 dhclient.conf를 업데이트하고 다음을 수행 할 수 있습니다.

/usr/bin/killall dhclient
dhclient INTERFACE

또는 원하는 경우 :

dhclient -x
dhclient INTERFACE

임대가 만료되고 다른 IP 주소를 얻지 않으면 연결이 끊어지지 않습니다.

구성 관리에 대해 언급했습니다. 사용 가능한 경우 내 플레이 북의 관련 부분은 다음과 같습니다.

tasks:
- name: Ensure a correct resolv.conf
  template: src=templates/resolv.conf.j2 dest=/etc/resolv.conf

- name: Ensure dhclient config wont mess up my resolv.conf
  template: src=dhclient.conf.j2 dest=/etc/dhcp/dhclient.conf
  notify: Kill dhclient

handlers:
- name: Kill dhclient
  command: /usr/bin/killall dhclient
  ignore_errors: yes
  changed_when: false

dhclient를 종료 한 후 다시 시작하지 않습니다. 이것은 내 환경에서 잘 작동하지만 YMMV입니다. dhclient 중지 / 시작을 처리하기 위해 스크립트를 복사하고 처리기에서 해당 작업을 호출하는 다른 작업을 추가 할 수 있습니다 (아마도 {{ansible_default_ipv4.interface}}인터페이스 이름을 얻는 데 사용 ).

dhclient.conf템플릿은 다음과 같습니다.

send host-name = gethostname();
request subnet-mask, broadcast-address, time-offset, routers, host-name, interface-mtu, rfc3442-classless-static-routes, ntp-servers, dhcp6.fqdn, dhcp6.sntp-servers;

따라서 대부분의 기본 데비안 dhclient.conf은 dns 관련 지시어를 사용합니다.


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