web-dev-qa-db-ja.com

Netplanを使用してサーバーにIPv6 / 64ブロック全体を追加する

私は読んだ debianのネットワークインターフェースにIPv6/64ブロック全体を追加するAnyIP 機能を利用してIPv6/64サブネットブロック全体をウェブホスティングサーバーですが、Ubuntu 18.04を使用しているため、Netplanを使用しています

サイドノート:少数の専門家がAnyIPを使用してIPv6を構成しないようにアドバイスしているため、手動で少数のIPを構成するなどの代替ソリューションについても検討します。

私たちのデータセンターはすでに/ 64を単一のIPにルーティングしています。たとえば、

The range  2001:db8:1:10::0/64  is routed to the IP  2001:db8:1::1:10
The range  2001:db8:1:11::0/64  is routed to the IP  2001:db8:1::1:11

Netplanでは、この方法で単一のIPを構成できます

network:
  version: 2
  renderer: networkd
  ethernets:
    eth0:
      accept-ra: no
      addresses:
        - '2001:db8:1::1:10/48'
        - '2001:db8:1:10::0/64'
        - '2001:db8:1:10::1/64'
      gateway6: '2001:db8:1::1'

そして、これはうまくいきます。ただし、このサーバーで2001:db8:1:10::/64の範囲全体を使用したいので、18446744073709551616行で構成したくありません。

このコマンドを実行すると、すべての/ 64 IPを外部からpingできます。

ip -6 route add local 2001:db8:1:10::/64 dev lo

補足:サーバーデーモンは、インターフェイスで明示的に構成されていないIPにバインドできるようにIP_FREEBINDをサポートする必要があります。

私の質問は:各再起動後にip -6 route add local ..を実行する代わりに、Netplan Yaml構成内で適切に構成したいと思います。

解決策を見つけましたが、誰かがより良い解決策を知っていますか?

cat <<EOF > /usr/lib/networkd-dispatcher/routable.d/50-ipv6-block
#!/bin/sh
ip -6 route add local 2001:db8:1:10::/64 dev lo
exit 0
EOF

chmod 755 /usr/lib/networkd-dispatcher/routable.d/50-ipv6-block

機能するかどうかを確認するには:

ip -6 route del local 2001:db8:1:10::/64
netplan apply
systemctl --no-pager status networkd-dispatcher.service
route -6 | grep 2001:db8:1:10::/64
ping6 -c2 2001:db8:1:10::1234

RTNETLINK answers: File existsが表示された場合、これは以前のnetplan applyのためにすでに存在していたルートが追加されたためです。