ifconfig
私のスクリプトはIPv6アドレスを使用しています。その後、そのアドレスはTCPポートでリッスンするためにすぐに使用されます。
次のようにスクリプトを作成すると、サービスが受信できないため失敗します。
ifconfig igb0 inet6 2001:db8::10/64 add
service my_service start #fails
しかし、次のようにすれば成功します。
ifconfig igb0 inet6 2001:db8::10/64 add
sleep 1
service my_service start
ifconfig
私は実行ジョブの直後に出力を書いてみましたadd
。ifconfig
報告されたIPアドレスは次のとおりです。暫定的な、これは明らかにサービスがそれを受け取らないようにします。
もちろん、しばらく待ってからアドレスを使用できるようにしたいのは、この問題を解決する良い方法ではありません。一時アドレスが利用可能になるのを待つか、後で戻ってifconfig
アドレスがすべて設定されるようにするにはどうすればよいですか。
ベストアンサー1
アドレスは複数の状態にあり、一時アドレスはその1つです。ifconfig
アドレスが一時的な状態から離れるのを待つことは意図的に設計されていません。
次の定義に従って楽観的DADを使用するように構成できます。RFC 4429。 DADがまだ作成されていない場合でも、アプリケーションに利用可能な住所を提供することが目的です。この機能を使用するには、カーネルの再構成が必要な場合があります。
楽観的なDADを提供するようにカーネルを構築したら、特定のsysctl設定でそれを有効にできます。 ~からIP-sysctl.txt:
/proc/sys/net/ipv6/* Variables:
...
conf/interface/*:
Change special settings per interface.
The functional behaviour for certain settings is different
depending on whether local forwarding is enabled or not.
...
optimistic_dad - BOOLEAN
Whether to perform Optimistic Duplicate Address Detection (RFC 4429).
0: disabled (default)
1: enabled
use_optimistic - BOOLEAN
If enabled, do not classify optimistic addresses as deprecated during
source address selection. Preferred addresses will still be chosen
before optimistic addresses, subject to other ranking in the source
address selection algorithm.
0: disabled (default)
1: enabled
つまり、次のことを行います。
sysctl -w net.ipv6.conf.enp2s6.optimistic_dad=1
sysctl -w net.ipv6.conf.enp2s6.use_optimistic=1
起動時に。