web-dev-qa-db-ja.com

新しいresolv.confを作成するために、DHCPクライアントをリモートでリロードする方法は?

プライベートDHCPベースのネットワークのDebianGNU/Linuxシステムでdnsmasq(8)を構成しようとしています。ローカルの手動セットアップ中(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

ただし、特にconfiguration-managmentソフトウェアを使用している場合に、同じことをリモートで実行しようとすると、ネットワーク接続が失われます。目標はネットワークの再起動ではなく、_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
_

それはちょっと厄介です-そして私はまだより良い解決策を探しています。

3
mjhennig

Ansibleを介してdnsmasqを設定するときに同じ問題に直面しました。 Debian jessieでは、dhclient.confを更新して次のことを行うことができます。

/usr/bin/killall dhclient
dhclient INTERFACE

または、必要に応じて:

dhclient -x
dhclient INTERFACE

これにより、リースの有効期限が切れて別のIPアドレスを取得しない限り、接続が切断されることはありません。

あなたは構成管理について言及しています。 ansibleを使用している場合、これが私のプレイブックの関連部分です。

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;

したがって、ほとんどの場合、デフォルトのDebianのdhclient.confは、DNS関連のディレクティブを使用していません。

2
GnP