次のように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つのテストユニットを作成しましたが、これが起こります。ping6
network.target
network-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
サービスはそれを尊重します。
ping
SSHログイン後
誰かが私のIPv6ネットワークが誤って設定されていると思う前に、いくつかの追加の証拠があります。
起動直後にマシンに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
たとえば、再起動すると
lighttpd
IPv6に正しくバインドされ、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