web-dev-qa-db-ja.com

複数のDHCPアップリンク-1つを除くすべてのDNSとデフォルトルートを無視する方法は?

マルチホームボックスでは、DHCP用に複数のアップリンクを構成する必要があります。 1つを除くすべてのDHCPアップリンクのデフォルトルートとDNSを無視する必要があります。

ここにも同様の質問があります[ Debianインターフェイスファイル-dhcpからのゲートウェイとDNSエントリを無視します ]が、そこでの答えは私の問題を解決しません:

  • グローバルDHCPクライアント構成(/etc/dhcp[3]/dhclient.conf)を編集すると、allDHCPでデフォルトルートとDNSが無視されます。アップリンク。
  • ifmetric提案は、DNSではなく、ルートのみを扱います。

また、2009年から状況が変わったことを願っています。

私はヘッドレス組み込みシステムについて話していることに注意してください。 NetworkManagerはオプションではありません。

推奨されるソリューションは、/ etc/network/interfaces {.d /}のみです。私はこのようなものを探しています:

auto  eth0
iface eth0 inet dhcp

auto  eth1
iface eth1 inet dhcp
    ignore-dhcp-option routers domain-name-servers domain-name

補遺:

これらのボックスは、さまざまな環境に数十個インストールされています。ネットワークは私たちの管理下にありません。場合によっては、ボックスは複数のインターフェイスでDHCPを実行する必要があります。デフォルトルートとDNSは通常、事前にわかっていません。たとえあったとしても、予告なしに時間の経過とともに変更される可能性があります。したがって、静的に設定することはできませんが、「メイン」DHCPクライアントを介して構成する必要があります。

1
Nils Toedtmann

(私はまだ/etc/network/interfaces{,.d/}にのみ触れるソリューションに興味があり、/etc/dhcp/には触れません。そのようなソリューションがない場合は、これを使用します。)

/etc/dhcp*/dhclient.confで、オプションrouters, domain-name-servers, domain-name, domain-searchをグローバルrequestステートメントから削除します。次に、これを追加します(eth0がデフォルトルートとDNSがnot無視されるデバイスであると仮定します):

interface "eth0" {
    also request routers, domain-name-servers, domain-name, domain-search;
}

このソリューションは、Debian 7に同梱されているため、少なくともisc-dhcp-clientバージョン4.2.2.dfsg.1-5 + deb70u8で機能します。それ以降のバージョンでも機能すると思います。


編集:

  • 元のアイデアが小さな変更で機能することを確認しました(eth0を引用する必要があり、requestではなくrequiredにする必要があります)
  • これが機能するdlclientバージョンを指定しました
0
Nils Toedtmann

inet dhcpを使用する代わりに、inet manualを使用して、カスタムdhclient.confファイルを渡すことができる独自のdhclient呼び出しを指定できます(-cf <file>引数に注意してください) )::

iface eth0 inet manual
    up /sbin/dhclient -4 -v -pf /run/dhclient.${IFACE}.pid \
        -lf /var/lib/dhcp/dhclient.${IFACE}.leases -I \
        -df /var/lib/dhcp/dhclient6.${IFACE}.leases \
        -cf /etc/dhcp/dhclient_no_routers.conf ${IFACE}
    down /sbin/dhclient -4 -v -r -pf /run/dhclient.${IFACE}.pid \
        -lf /var/lib/dhcp/dhclient.${IFACE}.leases -I \
        -df /var/lib/dhcp/dhclient6.${IFACE}.leases \
        -cf /etc/dhcp/dhclient_no_routers.conf ${IFACE}

カスタムdhclient.conf(この場合は/etc/dhcp/dhclient_no_routers.conf)で、必要なDHCPオプションを設定できます。

inet dhcpメソッドが他に何をするかを確認するには、ソースコードの inet.defn ファイルを参照してください(ここから、上からdhclient呼び出しの一部を取得しました)。

2
ben4ever

/etc/dhcp/dhcliet.confに追加することで、同じ問題が解決します。

interface "eth0" {
    prepend domain-search "my.domain";
    prepend domain-name-servers 127.0.0.1; # for using dnsmasq without -r option
    request subnet-mask, broadcast-address, time-offset, 
            routers, domain-name-servers, domain-name, domain-search, Host-name,
            dhcp6.name-servers, dhcp6.domain-search,
            netbios-name-servers, netbios-scope, interface-mtu,
            rfc3442-classless-static-routes, ntp-servers,
            dhcp6.fqdn, dhcp6.sntp-servers;
    require routers, domain-name-servers, domain-name, domain-search, Host-name;

}

グローバルパラメータrequestを設定から削除します

0
dimcha

(私の以前のコメントを答えに変える)

更新:

以下に提案するようにスクリプトを追加すると、初期状態が機能します。ただし、dhclientがデフォルトルートを喜んで再追加し、スクリプトが実行されないために再度削除されないシナリオ(たとえば、ケーブルを切断してから接続する)があります。その結果、2つのデフォルトルートがあります。

短編小説:このアプローチは(残念ながら)機能しません。

古い答え-これを無視してください

Dhclient.confをいじくり回すと、2つの欠点があります。

  • デフォルトを無視するインターフェイスを指定するのではなく、「通常の」動作が必要な各インターフェイスを指定する必要があります
  • isc dhclient(4.3.3を試しました)は、「認識している」各インターフェイスのアドレスを取得しようとします。dhclient.confでインターフェイスを指定すると、そのインターフェイスが「認識」されます(の「interface」キーワードのドキュメントを参照してください)。 dhclient.confのマンページ)。ネットワークマネージャーとifup/downは、dhclientがコマンドラインで指定されたインターフェイスのアドレスのみを取得することを期待しているため、混乱を招く動作になります。

したがって、私は/etc/network/if-up.dのスクリプトを選択しました。

#!/bin/sh

if [ x"$IFACE" = x"enp7s4" ]
then
    route del default enp7s4
fi

欠点:これはインターフェイスが実際に起動した後に実行されるため、パケットが間違った方向に進む可能性がある場合、(短い)期間があります。適切に設計されたアプリケーションは、失われたパケットを処理できる必要があるため、問題にはなりません:-)。パケットが間違ったネットワークに漏れないようにする場合は、パケットをブロックするためのファイアウォールルールが必要です。

0
Kees-Jan