特定のホストにアクセスするときにIPv4を強制する方法は?
ドメイン名で指定する方が良いです。これはできますか?
試してみましたが、これができるかどうかはわかりません。つまり、新しいインターフェイスを作成し、このインターフェイスを介して特定のホストのみをルーティングしてから、IPv6を完全に無効にします。
いいと思いますか?これを行うより良い方法はありますか?
答え1
ルーティングは、ホスト名がIPアドレスで解決された後にのみ発生します。 IPv4のみを使用するように強制するには、「特定のホスト」に対してそのIPv4アドレスのみを返すようにホスト名解決を操作することをお勧めします。
DNSサーバーへのアクセス権がある場合は、そのホストのIPv4アドレスのみを返すように構成できます。
クライアントのみが機能できる場合は、その関連ホストにIPv4アドレスのみを提供でき、および/または存在することを/etc/hosts
確認してください。/etc/nsswitch.conf
files
dns
resolve
ホスト名解決が複数のIPアドレスを返す場合(問題のアプリケーションがすでにIPv6をサポートしているため、getaddrinfo()
以前のバージョンを使用している場合gethostbyname()
)/etc/gai.conf
、アドレスが試行される順序を決定します。 「一部のホスト」が特定のIPv4ネットワーク(または少数の個々のIPアドレス)にある場合は、優先順位ルールを追加してgai.conf
そのIPv4を優先的に選択できます。ただし、これは優先順位を設定するだけです。つまり、IPv4接続が失敗した場合、アプリケーションがIPv6に置き換えられるのを防ぎません。
「一部のホスト」のIPv6アドレスが既知で固定されている場合は、そのホストへのすべてのIPv6接続試行に対してファイアウォールiptables
ルールを設定できます。nftables
クライアント側では、これは次の出力ファイアウォールルールを設定することを意味します。REJECT
DROP
ip6tables -A OUTPUT -p tcp -d <ipv6-address-of-certain-host> -j REJECT --reject-with tcp-reset
ip6tables -A OUTPUT -d <ipv6-address-of-certain-host> -j REJECT
デフォルトでは、ターゲットはREJECT
ICMP(v6)「ポートに接続できません」応答を生成します。 TCP接続に使用すると、--reject-with tcp-reset
このポートへのIPv6接続を確立したいアプリケーションが、確認した可能性のある代替アドレス(IPv4)にすばやく置き換えられるようにすることができます。
(サーバー側でこの制限を適用すると、--reject-with tcp-reset
クライアントとサーバー間の過度に編集可能なファイアウォールがICMPを中断する可能性があるため、IPv6 TCP接続拒否を使用することがより重要になる可能性があります。)