VMwareのIPv6 NATを使ってみたら、IPv4 onlyホストにつながらなくなる(from Windows 10 VM)
はじめに
VMware Fusion 8, Workstation 12, Player 12 には、IPv6 NAT (NAPT)機能が提供されている。NAT配下のVMにULAを配布して、ホストOS IPv6アドレスを1つだけ持っていれば、ポート変換まで通信する事ができる。
|
| 2001:db8::xxxx (GUA)
[VMware]
[ NAT ] ↓↓↓↓↓ホストOS内の仮想ネットワークの世界
|
| RA fd01:2::/64 (IPv6 ULA)
| DHCPv4 192.168.46.0/24 (IPv4プライベート)
---+-----------------------+---
|
[VM: Windows10]
NAT配下にWindows 10のVMをおいて、RAでULAを配布してみたら、IPv4 onlyのサイト(例えばgithub.com) につながらなくなってしまった。ULAの配布をやめれば問題なくつながる。
アプリケーションの動作
FireFoxとVisutal Studio 2015 にバンドルされる git for Windows の動作例。どちらも名前解決に失敗して動作が止まる。しかしIPv4インターネットにはつながっているし、DNSサーバはAクエリに対してA応答を返してくる。
名前解決API getaddrinfo() の動き
テスト
呼び出しの前提として、github.com に2つのAレコードがついているとする
github.com. IN A 192.30.253.112
github.com. IN A 192.30.253.113
IPv6デュアルスタック、VMwareのDNSプロキシを使用、かつ下記の引数で github.com の名前解決を試みると
int getaddrinfo(hints, ai0, nodename, servname)
IN hints
.ai_family = PF_UNSPEC;
.ai_socktype = SOCK_STREAM;
.ai_flags = 0;
OUT ai0
IN nodename = "github.com";
IN servname = "https";
呼び出し関数戻り値(結果)は
OS | IPv6あり (デュアルスタック) | IPv6なし (IPv4 only) |
---|---|---|
Windows 10 Pro | 失敗(EAI_FAIL)※1 | 成功※2 |
Ubuntu 16.04 LTS | 成功※3 | 成功※3 |
FreeBSD 11.0-RELEASE | 成功※4 | 成功※4 |
分析&推測
ケース ※1 (Windows デュアルスタック)
getaddrinfo() 自身が失敗で終わるのでIPv4アドレスも取れない。CNAMEのループを処理できなくなりEAI_FAILが返すのではないかと思う。EAI_FAILのテキスト表現、gai_sterror() の出力は "non-recoverable failure in name resolution"
ケース ※2 (Windows IPv4 only)
Windows Vista以降では、IPv4 onlyの環境ではAAAAクエリの生成しないので、AAAAクエリの応答に対する回答を解釈しない。CNAMEのループを処理する必要がないため、成功を返すと推測している。
ケース ※3 (Linux glibc)
名前解決は成功するが同じアドレスが2つ重なったアドレスリストが得られる。
- 192.30.253.113
- 192.30.253.112
- 192.30.253.113
最初の一つ目は、AAAAクエリに対して得たA応答から作った要素、後者の2つがAクエリに対して得たA応答から要素を作り、全体のリストを作っていると推測する。
ケース ※4 (FreeBSD libc)
名前解決は成功して返却されるアドレスリストも
- 192.30.253.112
- 192.30.253.113
重複はない。ちなみに、syslogには gethostby*.getanswer: asked for "github.com IN AAAA", got type A と出力される。
原因
VMwareのDNS proxyがAAAAクエリを適切に処理できないため。動作の詳細を下記のノートのまとめてある。
- VMware Fusion 8のDNSプロキシ, AAAAクエリに対する不正な応答 (たぶん Workstation, Player 12も), http://qiita.com/ip6/items/e82279656837fa474589
workaround
VMware NATのDNSプロキシを使わない。
Author And Source
この問題について(VMwareのIPv6 NATを使ってみたら、IPv4 onlyホストにつながらなくなる(from Windows 10 VM)), 我々は、より多くの情報をここで見つけました https://qiita.com/ip6/items/af4677e9afe9661b521d著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .