設定:
- ホストマシン: macOS、IPv6 アドレス - 2002::3/64 (vmnet1)
- ゲストマシン: VMware 内で実行されている Ubuntu、IPv6 アドレス - 2002::2/64 (eth0) および 2001::1/64 (tun0)
構成:
- UbuntuでIPv4とIPv6の転送を有効にする
- macOS にルートを追加しました:
sudo route add -inet6 2001::/64 -interface vmnet1
問題: macOS からはできませんping6 2001::1
。ただし、 はできますping6 2002::2
。VMware の「Mac と共有」、「自動検出」、および「Mac 専用」設定を試しました。
答え1
2001::/64をvmnet1経由でルーティングするだけでは不十分です。どのゲートウェイこの場合、vmnet1 ではパケットは 2002::2 に送信される必要があります。
ゲートウェイの指定がない場合、送信元は ARP (IPv4 の場合) または NDP (ICMPv6 近隣探索) を使用して宛先を直接解決しようとします。ただし、IPv6 では通常、アドレスはホスト全体ではなく、個々のインターフェイスまたはリンクに属するものとみなされます。そのため、IPv6 ホストは、そのアドレスが割り当てられていないインターフェイスを介して近隣探索要求が到着した場合、通常その要求を無視します。(これは IPv4 の Linux arp_ignore=1 に似ています。)
したがって、Ubuntu システムは、eth0 経由で到着する 2001::1 の NDP クエリには応答しません。なぜなら、eth0 にはそのようなアドレスが存在せず、tun0 にのみ割り当てられているからです。ただし、2002::2 の NDP クエリには応答するため、ルートは次のようになります。
route add -inet6 2001::/64 2002::2
(とはいえ、パケットがL2経由で正しいMACアドレスに正常にルーティングされると、Ubuntuシステムは意思そのアドレスはルーティング テーブルでローカルとしてマークされているため、IP ヘッダー (L3) の 2001::1 を受け入れて認識します。