システムネットワーキング:起動時にIPv6ネットワーキングを使用できません。

システムネットワーキング:起動時にIPv6ネットワーキングを使用できません。

次のようにsystemd独自に管理する複数の静的IPv4およびIPv6アドレスを実行するDebianシステムがあります。/etc/systemd/network/10-static-eth0.network

[Match]
Name=eth0

[Network]
Address=2a04:----::149/64
Address=2a04:----::242/64
Address=2a04:----::243/64
Gateway=2a04:----:0001

Address=5.----.149/25
Address=5.----.242/25
Address=5.----.243/25
Gateway=5.----.129

DNS=89.----.4
DNS=46.----.104

OpenVPN、Bind9などを介してシステム上で実行されるいくつかのプロセスがあります。systemdこれらはすべてインターフェイスの特定のIPにバインドするように設定されていますeth0。ただし、起動後にアドレスにバインドできないため、起動に失敗しますIPv6

これをどうやって知ることができますか?

ネットワークをテストするためにターゲットを使用し、pingその後2つのテストユニットを作成しましたが、これが起こります。ping6network.targetnetwork-online.target

IPv4テスト結果:

server.example:~# systemctl status abootping.service
● abootping.service - A boot-time ping for network testing
   Loaded: loaded (/lib/systemd/system/abootping.service; enabled)
   Active: inactive (dead) since Thu 2015-11-26 11:01:58 CET; 45s ago
 Main PID: 433 (code=exited, status=0/SUCCESS)

Nov 26 11:01:54 server.example ping[433]: PING test-ping-host.example (89.-----.8) from 5.----.149 : 56(84) bytes of data.
Nov 26 11:01:54 server.example ping[433]: 64 bytes from test-ping-host.example (89.-----.8): icmp_seq=1 ttl=59 time=4.92 ms
Nov 26 11:01:55 server.example ping[433]: 64 bytes from test-ping-host.example (89.-----.8): icmp_seq=2 ttl=59 time=4.92 ms
Nov 26 11:01:56 server.example ping[433]: 64 bytes from test-ping-host.example (89.-----.8): icmp_seq=3 ttl=59 time=4.84 ms
Nov 26 11:01:57 server.example ping[433]: 64 bytes from test-ping-host.example (89.-----.8): icmp_seq=4 ttl=59 time=5.41 ms
Nov 26 11:01:58 server.example ping[433]: 64 bytes from test-ping-host.example (89.-----.8): icmp_seq=5 ttl=59 time=4.95 ms
Nov 26 11:01:58 server.example ping[433]: --- test-ping-host.example ping statistics ---
Nov 26 11:01:58 server.example ping[433]: 5 packets transmitted, 5 received, 0% packet loss, time 4007ms
Nov 26 11:01:58 server.example ping[433]: rtt min/avg/max/mdev = 4.843/5.010/5.414/0.209 ms

IPv6テスト結果:

server.example:~# systemctl status abootping6.service
● abootping6.service - A boot-time ping6 for network testing
   Loaded: loaded (/lib/systemd/system/abootping6.service; enabled)
   Active: failed (Result: exit-code) since Thu 2015-11-26 11:01:54 CET; 56s ago
 Main PID: 436 (code=exited, status=2)

Nov 26 11:01:54 server.example ping6[436]: ping: bind icmp socket: Cannot assign requested address
Nov 26 11:01:54 server.example systemd[1]: abootping6.service: main process exited, code=exited, status=2/INVALIDARGUMENT
Nov 26 11:01:54 server.example systemd[1]: Failed to start A boot-time ping6 for network testing.
Nov 26 11:01:54 server.example systemd[1]: Unit abootping6.service entered failed state.

ご覧のとおり、ブート後、IPv4は正常に動作しますが、IPv6はそうではなく、IPv6を必要とするすべてのブートプロセスはバインディングのために失敗します。


私についてnetwork-online.target

私の起動デバイスがネットワークが実際に動作した後にのみ起動できるようにするために、After=network.target network-online.targetすべてのデバイスを追加しました。

network-online.targetこれはこれを持っていますwants

ここに画像の説明を入力してください。

含む:

[Unit]
Description=Wait for Network to be Configured
Documentation=man:systemd-networkd-wait-online.service(8)
DefaultDependencies=no
Conflicts=shutdown.target
Requisite=systemd-networkd.service
After=systemd-networkd.service
Before=network-online.target

[Service]
Type=oneshot
ExecStart=/lib/systemd/systemd-networkd-wait-online
RemainAfterExit=yes

[Install]
WantedBy=network-online.target

~によると文書:

systemd-networkd-wait-online は、ネットワーク構成を待機するワンタイムシステムサービスです。デフォルトでは、これは認識され、systemd-networkd.service(8)によって管理されているすべてのリンクが完全に構成または失敗するのを待ちます。そして、少なくとも1つのリンクがオペレータを取得するのを待ちます。

このサービス待機の実際の効果は開始時に非常に顕著であり、私のテストpingサービスはそれを尊重します。

ここに画像の説明を入力してください。


pingSSHログイン後

誰かが私のIPv6ネットワークが誤って設定されていると思う前に、いくつかの追加の証拠があります。

  1. 起動直後にマシンにSSHで接続して使用しようとするとping6機能します。

    server.example:~# ping6 -I 2a04:-----::242 test-ping-host.example -c 5
    PING test-ping-host.example(test-ping-host.example) from 2a04:-----::242 : 56 data bytes
    64 bytes from test-ping-host.example: icmp_seq=1 ttl=59 time=7.41 ms
    64 bytes from test-ping-host.example: icmp_seq=2 ttl=59 time=7.41 ms
    64 bytes from test-ping-host.example: icmp_seq=3 ttl=59 time=7.31 ms
    ^C
    --- test-ping-host.example ping statistics ---
    3 packets transmitted, 3 received, 0% packet loss, time 2003ms
    rtt min/avg/max/mdev = 7.314/7.381/7.415/0.047 ms
    
  2. たとえば、再起動するとlighttpdIPv6に正しくバインドされ、IPv6クライアントを使用したり、ping6別のコンピュータでホストされているWebサイトを開くことができます。


これは私の問題です。:これは正常ですか? IPv6もsystemd-networkd-wait-online利用可能であるため、動作する必要がありますか?それとも… at least one link to gain a carrier.IPv4が利用可能になった後に待機が停止し、IPv6アドレスがルーティングできない状態になることを意味しますか?この問題をどのように解決できますか?

ベストアンサー1

どうやら私の言葉が正しかった。 IPv6を待ちません。この問題をプロジェクトGithubに投稿しましたが、誰かがRFEとしてマークされました。https://github.com/systemd/systemd/issues/2037

問題を一時的に解決するには、この回避策(IPv6 DADを無効にする)を確認してください。http://serverfault.com/questions/766253/ensure-systemd-wait-for-ipv6-before-start-service-unit

おすすめ記事