web-dev-qa-db-ja.com

IPv4にマップされたIPv6を無効にするにはどうすればよいですか?

私のLinuxボックスには、::上のすべてのIPv6対応インターフェースにバインドできるさまざまなデーモンがあります。その場合、LinuxはIPv4要求を、たとえば::ffff:198.51.100.37としてマップされたデーモンに送信します。

代わりに、IPv4接続が拒否され、デーモンが::にバインドするときにIPv6接続のみが受け入れられるようにしたいと思います。 IPv4接続を受信するには、デーモンに0.0.0.0(および::)に明示的にバインドする必要があります。

つまり、IPv4ではなくIPv6でのみサービスを実行したいのです。

これを達成する方法はありますか?

17
Michael Hampton

これは_net.ipv6.bindv6only_ sysctlによって制御されます。以下を_/etc/sysctl.conf_に追加し、_Sudo sysctl -p_を実行して変更を有効にします。

_net.ipv6.bindv6only=1
_

アプリケーションは、これをグローバルに変更する代わりに、IPv6アドレスにのみ明示的にバインドすることもできます。たとえば、nginxには listen ディレクティブに_ipv6only_オプションがあります。これは、setsockopt()の-​​ _IPV6_V6ONLY_ オプションに対応します。

22
mgorven