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


3

私はdnsmasq(8)プライベートDHCPベースのネットワークのDebian GNU / Linuxシステムで設定しようとしています。ローカルの手動セットアップ中dnsmasq-istelfのインストール後-単純に次の行を含めることができます

prepend domain-name-servers 127.0.0.1;

/etc/dhcp/dhclient.confネットワークを再起動します。これにはローカルホストが含まれ/etc/resolv.conf、1つは準備ができています。(参照: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アドレスは選択肢の1つではないようです。照会しないデフォルトの組み込みサポートがない場合があります。ただし、.confの「置換」は情報を無視できます。多分参照してください:man dhclient-script
TOOGAM

回答:


2

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関連のディレクティブがありません。


1
また、私はこの質問がServerFaultのために適切であったと主張
GNP
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.