web-dev-qa-db-ja.com

特定のネットワークインターフェースの「systemd-resolve」構成を永続化するにはどうすればよいですか?

UbuntuデスクトップをBionic Beaverにアップグレードし、systemd-resolveに切り替えました。その変更により、LXD DNS解決が機能しなくなりました。

LXDコンテナーを検出可能にするために、以下のコマンドを実行できます。 IP10.78.38.1は、lxdbr0ブリッジ。

$ Sudo systemd-resolve --interface lxdbr0 --set-dns 10.78.38.1 --set-domain lxd

これで、LXDコンテナーを名前で見つけることができ、構成は次のようになります。

$ systemd-resolve --status
.
.
.
Link 10 (lxdbr0)
      Current Scopes: DNS
       LLMNR setting: yes
MulticastDNS setting: no
      DNSSEC setting: no
    DNSSEC supported: no
         DNS Servers: 10.78.38.1
          DNS Domain: lxd
.
.
.

ただし、システムを再起動すると、この構成は失われます。

$ systemd-resolve --status
.
.
.
Link 10 (lxdbr0)
      Current Scopes: none
       LLMNR setting: yes
MulticastDNS setting: no
      DNSSEC setting: no
    DNSSEC supported: no
.
.
.

上記を永続化するために、systemd-resolveのマンページ http://manpages.ubuntu.com/manpages/を確認しましたbionic/man8/systemd-resolved.service.8.html/ etc/systemd/resolved.conf.d/lxd.confファイルを作成することをお勧めしますただし、このような構成を特定のNICに固有にできるパラメーターはありません。

5
quat

この質問が2か月前に出てきたと思いますが、まだ回答が必要ですか?

1)systemd-networkdは、ネットワーク構成を(少なくとも)3つのディレクトリに保存します。あなたに最も関連すると思われるのは:

/etc/systemd/network/ 

(他の2、つまり/ lib/s/nと/ run/s/nをオーバーライドします。

次のようなテキストファイルを作成します。

[Match]
Name=enp0s4

[Network]
DHCP=yes
DNS=192.168.1.1

そのディレクトリにある限り、好きなように名前を付けることができます。私の名前はenp0s4.networkで、コンテンツを正しく取得するのはcritical、それを間違えると、ネットワークが機能しなくなるなど、少なくともそのインターフェイスでは、機能している構成を復元するまで、悪いことが起こります。それは簡単ではありません、私は私を台無しにして、それを整理するのに1時間ほどかかりました。私の「サーバー」は、リモートデータセンターではなく、隣の部屋にあります。

ブリッジを設定する方法の例については、以下からお読みください。

man systemd.network |grep -A 42 "Example 3"

そこに示されている例と私のコードスニペットで設定できます。

Current Scopes: DNS
       LLMNR setting: yes
MulticastDNS setting: no
      DNSSEC setting: no
    DNSSEC supported: no
         DNS Servers: 10.78.38.1

DNSドメインの構文がわからない場合は、可能です。manページは30ページの長さです。可能であれば、スキップして、「ドメイン=」がシステムを台無しにしてみてください。それが、私が間違っていることを知るのは悪い、個人的な経験です。 :-)正しい構文を見つけるか、回復できない場合は入れないでください。

回復は別の投稿ですが、私は疲れています。

ここに私が使用した参照があります:

ネットワークが実行されているかどうかを確認する方法: https://superuser.com/questions/1187633/how-to-debug-systemd-networkd?rq=1#comment1807294_11876

無効になっている場合に有効にする方法: https://askubuntu.com/posts/681768/revisions

再起動せずにsystemd-resolverを再起動します。

Sudo systemctl restart systemd-resolved

参考:systemdにNetwork-Managerにインターフェースを処理させ、「非管理」のままにして、/ etc/resolv.confのようなフラットファイル構成で実行するように指示する方法があります。でも、私があなたの立場にいるように、私はそれをそのまま機能させます。そして、私は別の目的のために異なるインターフェイスを構成しようとしているだけですが、そのすべての情報が必要でした。上記の自分自身を助けるため、私は共有したいと思いました。一時的に変更する方法を共有したので、これも便利です。 :-)

HTH

4
Lubo Diakov

これはもっともらしいようですが、効果がないようです:

リンクされたマンページ man 8 systemd-resolved.service によると、/etc/systemd/networkのリンクごとの構成ファイルを使用する必要があります:

接続されるDNSサーバーは、/etc/systemd/resolved.confのグローバル設定、/etc/systemd/network/*.networkファイルのリンクごとの静的設定、DHCPを介して受信されたリンクごとの動的設定、および他のシステムによって提供されるDNSサーバー情報から決定されますサービス。

構成を永続化するには、ファイル/etc/systemd/network/lxdbr0.confを作成する必要があります。

[Match]
Name=lxdbr0

[Resolve]
DNS=10.78.38.1
Domains=lxd
2
ctx

Ubuntuユーザー向け(18.04、18.10、19.04、19.10)

私は何時間にもわたって助言を求めて周り、上、下、中、そして後ろを含めてsystemd-resolveいくつかの陽気なジグが私に不平を言ったので、その上に。

最終的に私のために働いたのは

1)systemd-resolveをそのままにします。それを変更したり、無効にしたり、アンインストールしたり、リンクを解除したりしないでください。そうしないと...無限の悲惨さは常に付き添うことになります。 「でも、スペースを節約したい...」信じて、追加のキロバイトを受け入れて、前進してください...

2)次に、resolvconf Sudo apt install resolvconfを(再)インストールします。彼らはお互いのために意図されたようにそれはsystemd-resolveで踊ります。

3)再起動後、必要に応じて変更を行います/etc/resolv.conf.d/にコンテンツを追加するなど、resolvconfのメカニズムを使用していたようにresolv.conf/head、またはその他。

これら2つのシステムが一緒に作る音楽は、参加する必要がないなしであることがわかりました...リラックス。

次に、おそらくifupdownの出身で、/ etc/network/interfacesで他のIP設定とともにDNSサーバーを宣言し、実際に機能させることができました。しかし今、netplansystemd-resolveによって破壊されたので、新しい魔法の輪を飛ばそうとして、貴重な数分、数時間を無駄にし、新しい魔法のシーケンスを探してネットワークを再び機能させようとしています...

その場合は、もう一度、数キロバイトを追加してください(ばかげて、私は知っています!!)。 ifupdown **Sudo apt install ifupdown**を(再)インストールして、/ etc/network/interfacesをもう一度操作します。

両方のレガシーシステムは、完全にシームレスに新しいシステムに統合されますが、それらはあなたや他の多くの人々にとっては機能しません。すべて数キロバイトの追加料金で(そしてそれだけの価値があります)。

Uber-Powersが、新しいシステムがインストールされている間(およびその直前)に、新しいサブシステムの性質について教育的な解説を投稿し、ユーザーに問題が発生していることを知らせるのではなく、本当に感謝しています。ソリューションの長期的な検索を開始します。 (なぜマイクロソフトが思い浮かぶのか...?)

0
Hypocritus

この質問にはまだ承認された回答がありません。また、ホスト上のコンテナー名を解決するのに大きな問題があったため、解決策を提供する必要があると思いました。このページはsytemd-resolved.serviceへの永続的な変更を検索するときの最初のGoogle結果であるため、私もこれを行っています。最後に、この問題はUbuntu >= 18.04に固有の問題であり、systemd-resolved.serviceのバージョンであることに言及したいと思います。

したがって、マンページ systemd-resolved.service についてはすでに言及しています。ただし、LXDの場合、誤解を招くような結論が導き出されています。 LXDインターフェイスは/etc/systemd/network/<iface>.{conf|network}で定義する必要はありません。インターフェースはすでに機能しているため、systemdのネットワークマネージャー用に定義する必要はありません。デフォルトでは、LXDには、ネットワークの最初のホストアドレスをリッスンするDNSサーバーがすでに動作しています。達成する必要があるのは、systemd-resolved.serviceにこのサーバーを認識させることだけです。

マンページ(上記にリンク)は/etc/systemd/resolved.confについてこれについて言及しています:

デフォルトの構成はコンパイル時に定義されるため、構成ファイルは、これらのデフォルトから逸脱する必要がある場合にのみ必要です。デフォルトでは、/ etc/systemd /の設定ファイルには、管理者へのガイドとしてデフォルトを示すコメント化されたエントリが含まれています。このファイルを編集して、ローカルオーバーライドを作成できます。

強調表示したいこのファイルを編集して、ローカルオーバーライドを作成できます。 @quat実際には、実際の質問でもこれを参照します。

上記を永続化するために、systemd-resolveのマンページ http://manpages.ubuntu.com/manpages/bionic/man8/systemd-resolved.service.8.html を確認しました。 /etc/systemd/resolved.conf.d/lxd.confファイルを作成することをお勧めしますが、そのような構成を1つの特定のNICに固有にすることができるパラメーターはありません。

1。 lxdのdnsmasqサービスをsystemd-resolved.serviceグローバルDNS設定に追加する:
しかし、あなたの最後の文を理解していません。 NICを指定する必要はありません。 LXD DNSサーバーのアドレスを指定するだけです。ネットワーク情報を使用すると、/etc/systemd/resolved.confの作業構成は次のようになります(デフォルトを変更するにはコメントを外します)。

[Resolve]
DNS=10.78.38.1
#OBFallbackDNS=
Domains=LXD
#LLMNR=no
#MulticastDNS=no
#DNSSEC=no
#Cache=yes
#DNSStubListener=yes

ファイルを保存した後、サーバーを再起動するか、systemctl restart systemd-resolved.serviceを使用して、Ubuntu-18.04.02の新規インストールで問題なく動作しました。うまくいかない場合は、デフォルト以外のlxdインストールを実行したか、またはosのアップグレードが原因で問題/競合が発生していると思います。

2。更新(NIC固有のセットアップ):
Simos 'Blog によると、永続化する唯一の方法$ Sudo systemd-resolve --interface lxdbr0 --set-dns 10.78.38.1 --set-domain lxdは、システムの起動時にNIC特定の構成を初期化するカスタムsystemdサービスを作成することです。この方法は現在、「準公式」の「受け入れられた」アプローチです linuxcontainers.org

ブログで言及されている例:
systemd-resolveを介してNIC固有のDNSを有効にするシェルスクリプト(lxdhostdns_start.sh)

$ cat /usr/local/bin/lxdhostdns_start.sh 
#!/bin/sh

LXDINTERFACE=lxdbr0
LXDDOMAIN=lxd
LXDDNSIP=`ip addr show lxdbr0 | grep -Po 'inet \K[\d.]+'`

/usr/bin/systemd-resolve --interface ${LXDINTERFACE} \
                         --set-dns ${LXDDNSIP} \
                         --set-domain ${LXDDOMAIN}

Systemd-resolve(lxdhostdns_stop.sh)を介してNIC固有のDNSを無効にするシェルスクリプト

$ cat /usr/local/bin/lxdhostdns_stop.sh 
#!/bin/sh

LXDINTERFACE=lxdbr0

/usr/bin/systemd-resolve --interface ${LXDINTERFACE} --revert

2つのスクリプトを管理するsystemdサービスを作成し、システムの起動時にそれらを初期化します。

$ Sudo cat /lib/systemd/system/lxd-Host-dns.service 
[Unit]
Description=LXD Host DNS service
After=multi-user.target

[Service]
Type=simple
ExecStart=/usr/local/bin/lxdhostdns_start.sh
RemainAfterExit=true
ExecStop=/usr/local/bin/lxdhostdns_stop.sh
StandardOutput=journal

[Install]
WantedBy=multi-user.target

最後に、systemctl enable lxd-Host-dns.serviceを実行してホストを再起動し、systemd-resolve --statusを実行して変更が永続的であることを確認します。 lxbr0インターフェースはdnsスコープ(Current Scopes: DNS)にあるはずです。ネットワークを考えると、次のようになります。

Link 3 (lxdbr0)
      Current Scopes: DNS
       LLMNR setting: yes
MulticastDNS setting: no
      DNSSEC setting: no
    DNSSEC supported: no
         DNS Servers: 10.78.38.1
          DNS Domain: lxd

私はそれが理想的な解決策ではないことをよく認識しており、技術的にはsystemd-resolve内でこの構成を永続化することについてのあなたの質問に答えを与えません。ただし、永続化の問題は、lxbr0インターフェイスがnetplanではなくUbuntu18.04のsystemdによって管理されていることにあります。 netplanはインターフェースを認識していないため、前述の*.networkインターフェース構成を使用してDNSとドメイン設定をlxbr0に追加することはできません。

この回答は、今では長いテキストの壁ですが、少なくとも問題が少し明確になることを願っています。どちらのソリューションも、ubuntu Host上のコンテナー名を解決します。 2番目の方法はより正確ですが、ホストでの名前解決のみが要件である場合、/etc/systemd/resolved.confを介してlxdのdnsmasqサービスをグローバルに利用できるようにすることは、特に構成ファイルで2つの編集のみが必要になるため、実行可能な代替手段です。

0
tobi