PCに複数のNICが刺さっておりNICごとに別の役割をもたせたい。
そんな時にひっそりと襲ってくるWindowsの罠。
前提
HyperVをホストする12台のサーバーがあり、HyperVおよびゲストマシンへのアクセス用にNIC(192.168.11.*)、データ共有用に別のNIC(10.20.30.*)がそれぞれ別のネットワークにつながっている。
(ストレージ用のネットワークは独立しており、ホスト用ネットワークから侵入することはできない。)
サーバー間では定期的に大きなファイルを転送しあっているためトラフィックを分離したい。
HyperV1 | HyperV2 | |
---|---|---|
ホスト名 | castor | pollux |
eth0.name | vEthernet(ExternalShared) | vEthernet(ExternalShared) |
eth0.addr | 192.168.11.231 | 192.168.11.232 |
eth0.fqdn | castor.hyperv.local | pollux.hyperv.local |
eth1.name | StorageNetwork | StorageNetwork |
eth1.addr | 10.20.30.10 | 10.20.30.20 |
eth1.fqdn | castor.hyperv.storage | pollux.hyperv.storage |
お互いはそれぞれのネットワークごとに別々のFQDNを持ちHOSTSファイルで管理している。
10.20.30.10 castor.hyperv.storage
10.20.30.20 pollux.hyperv.storage
192.168.11.231 castor.hyperv.local
192.168.11.232 pollux.hyperv.local
ストレージ側サブネットへのアクセスには固定ルートを割り振っている。
C:\Users\Administrator>route print /4
===========================================================================
インターフェイス一覧
7...00 25 90 2d 80 a9 ......Intel(R) 82576 Gigabit Dual Port Network Connection
6...00 25 90 2d 80 a8 ......Hyper-V Virtual Ethernet Adapter
1...........................Software Loopback Interface 1
3...00 00 00 00 00 00 00 e0 Microsoft ISATAP Adapter
11...00 00 00 00 00 00 00 e0 Teredo Tunneling Pseudo-Interface
17...00 00 00 00 00 00 00 e0 Microsoft ISATAP Adapter #3
===========================================================================
IPv4 ルート テーブル
===========================================================================
アクティブ ルート:
ネットワーク宛先 ネットマスク ゲートウェイ インターフェイス メトリック
0.0.0.0 0.0.0.0 192.168.11.1 192.168.11.231 291
10.20.30.0 255.255.255.0 リンク上 10.20.30.10 291
10.20.30.0 255.255.255.0 10.20.30.1 10.20.30.10 36
10.20.30.10 255.255.255.255 リンク上 10.20.30.10 291
10.20.30.255 255.255.255.255 リンク上 10.20.30.10 291
127.0.0.0 255.0.0.0 リンク上 127.0.0.1 331
127.0.0.1 255.255.255.255 リンク上 127.0.0.1 331
127.255.255.255 255.255.255.255 リンク上 127.0.0.1 331
192.168.11.0 255.255.255.0 リンク上 192.168.11.231 291
192.168.11.231 255.255.255.255 リンク上 192.168.11.231 291
192.168.11.255 255.255.255.255 リンク上 192.168.11.231 291
224.0.0.0 240.0.0.0 リンク上 127.0.0.1 331
224.0.0.0 240.0.0.0 リンク上 10.20.30.10 291
224.0.0.0 240.0.0.0 リンク上 192.168.11.231 291
255.255.255.255 255.255.255.255 リンク上 127.0.0.1 331
255.255.255.255 255.255.255.255 リンク上 10.20.30.10 291
255.255.255.255 255.255.255.255 リンク上 192.168.11.231 291
===========================================================================
固定ルート:
ネットワーク アドレス ネットマスク ゲートウェイ アドレス メトリック
0.0.0.0 0.0.0.0 192.168.11.1 既定
0.0.0.0 0.0.0.0 192.168.11.1 既定
10.20.30.0 255.255.255.0 10.20.30.1 1
===========================================================================
実験方法
ホスト2側に共有ディレクトリを作成する。
ホスト1からエクスプローラー越しにファイルをコピーしリソースモニタでトラフィックを観測する。
hostsを変更する場合ipconfig /flushdns
でDNSキャッシュをクリアする。
(1)とりあえず実験
NETBIOS名でコピー
ストレージ側fqdnでコピー
(1)のまとめ
予測 | 実際 | 結果 | |
---|---|---|---|
NETBIOS | eth02 | eth0 | ○ |
ホストIP | eth0 | eth0 | ○ |
ホストfqdn | eth0 | eth0 | ○ |
ストレージIP | eth1 | eth0 | X |
ストレージfqdn | eth1 | eth0 | X |
eth0つよい
(2)fqdnを変えて実験
ストレージ側のホスト名に-LB
を付けて分ける。
10.20.30.10 castor-LB.hyperv.storage
10.20.30.20 pollux-LB.hyperv.storage
192.168.11.231 castor.hyperv.local
192.168.11.232 pollux.hyperv.local
ストレージ側fqdnでコピー
(2)のまとめ
予測 | 実際 | 結果 | |
---|---|---|---|
ストレージIP | eth1 | eth0 | X |
ストレージfqdn | eth1 | eth1 | ○ |
IPで直接開いてるのに違うIFが使われるの納得がいかん!
(3)HOSTSにNETBIOS名のエリアスを付加
ストレージ側のホスト名に-LB
を付けて分ける。
10.20.30.10 castor-LB , castor-LB.hyperv.storage
10.20.30.20 pollux-LB , pollux-LB.hyperv.storage
192.168.11.231 castor , castor.hyperv.local
192.168.11.232 pollux , pollux.hyperv.local
(3)のまとめ
予測 | 実際 | 結果 | |
---|---|---|---|
ストレージIP | eth1 | eth0 | X |
ストレージNETBIOS | eth1 | eth1 | ○ |
なんでじゃあああああ
Windowsの名前解決ってどうなってんだ
Windows 名前解決の順序 – Ask the Network & AD Support Team
:\Users\Administrator> ipconfig /displaydns
Windows IP 構成
,
----------------------------------------
タイプ CNAME のレコード データを表示できませんでした。
1.11.168.192.in-addr.arpa
----------------------------------------
名前が存在しません。
0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.6.e.b.0.8.a.0.c.ip6.arpa
----------------------------------------
名前が存在しません。
20.30.20.10.in-addr.arpa
----------------------------------------
レコード名 . . . . . . . : 20.30.20.10.in-addr.arpa.
レコードの種類 . . . . . : 12
Time To Live . . . . . .: 86400
データの長さ . . . . . . : 8
セクション . . . . . . . : 回答
PTR レコード . . . . . . : pollux-LB
castor.hyperv.local
----------------------------------------
レコード名 . . . . . . . : castor.hyperv.local
レコードの種類 . . . . . : 5
Time To Live . . . . . .: 86400
データの長さ . . . . . . : 8
セクション . . . . . . . : 回答
CNAME レコード . . . . . : castor
castor-lb
----------------------------------------
タイプ AAAA のレコードがありません
castor-lb
----------------------------------------
レコード名 . . . . . . . : castor-LB
レコードの種類 . . . . . : 1
Time To Live . . . . . .: 86400
データの長さ . . . . . . : 4
セクション . . . . . . . : 回答
A (ホスト) レコード. . . : 10.20.30.10
254.29.221.111.in-addr.arpa
----------------------------------------
名前が存在しません。
pollux
----------------------------------------
タイプ AAAA のレコードがありません
pollux
----------------------------------------
レコード名 . . . . . . . : pollux
レコードの種類 . . . . . : 1
Time To Live . . . . . .: 86400
データの長さ . . . . . . : 4
セクション . . . . . . . : 回答
A (ホスト) レコード. . . : 192.168.11.232
pollux-lb
----------------------------------------
タイプ AAAA のレコードがありません
pollux-lb
----------------------------------------
レコード名 . . . . . . . : pollux-LB
レコードの種類 . . . . . : 1
Time To Live . . . . . .: 86400
データの長さ . . . . . . : 4
セクション . . . . . . . : 回答
A (ホスト) レコード. . . : 10.20.30.20
castor-lb.hyperv.storage
----------------------------------------
レコード名 . . . . . . . : castor-LB.hyperv.storage
レコードの種類 . . . . . : 5
Time To Live . . . . . .: 86400
データの長さ . . . . . . : 8
セクション . . . . . . . : 回答
CNAME レコード . . . . . : castor-LB
3.0.0.0.1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.2.0.f.f.ip6.arpa
----------------------------------------
名前が存在しません。
0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.c.f.0.0.0.0.0.e.ip6.arpa
----------------------------------------
名前が存在しません。
10.30.20.10.in-addr.arpa
----------------------------------------
レコード名 . . . . . . . : 10.30.20.10.in-addr.arpa.
レコードの種類 . . . . . : 12
Time To Live . . . . . .: 86400
データの長さ . . . . . . : 8
セクション . . . . . . . : 回答
PTR レコード . . . . . . : castor-LB
pollux.hyperv.local
----------------------------------------
レコード名 . . . . . . . : pollux.hyperv.local
レコードの種類 . . . . . : 5
Time To Live . . . . . .: 86400
データの長さ . . . . . . : 8
セクション . . . . . . . : 回答
CNAME レコード . . . . . : pollux
255.11.168.192.in-addr.arpa
----------------------------------------
名前が存在しません。
88.190.89.13.in-addr.arpa
----------------------------------------
名前が存在しません。
pollux-lb.hyperv.storage
----------------------------------------
レコード名 . . . . . . . : pollux-LB.hyperv.storage
レコードの種類 . . . . . : 5
Time To Live . . . . . .: 86400
データの長さ . . . . . . : 8
セクション . . . . . . . : 回答
CNAME レコード . . . . . : pollux-LB
wpad
----------------------------------------
名前が存在しません。
castor
----------------------------------------
レコード名 . . . . . . . : CASTOR.hyperv.local
レコードの種類 . . . . . : 28
Time To Live . . . . . .: 1200
データの長さ . . . . . . : 16
セクション . . . . . . . : 質問
AAAA レコード. . . . . . : fe80::44bd:9b3e:3650:52aa
castor
----------------------------------------
レコード名 . . . . . . . : CASTOR.hyperv.local
レコードの種類 . . . . . : 1
Time To Live . . . . . .: 1200
データの長さ . . . . . . : 4
セクション . . . . . . . : 質問
A (ホスト) レコード. . . : 192.168.11.231
レコード名 . . . . . . . : CASTOR.hyperv.local
レコードの種類 . . . . . : 1
Time To Live . . . . . .: 1200
データの長さ . . . . . . : 4
セクション . . . . . . . : 質問
A (ホスト) レコード. . . : 10.20.30.10
12.11.168.192.in-addr.arpa
----------------------------------------
名前が存在しません。
253.29.221.111.in-addr.arpa
----------------------------------------
名前が存在しません。
255.30.20.10.in-addr.arpa
----------------------------------------
名前が存在しません。
231.11.168.192.in-addr.arpa
----------------------------------------
レコード名 . . . . . . . : 231.11.168.192.in-addr.arpa.
レコードの種類 . . . . . : 12
Time To Live . . . . . .: 86400
データの長さ . . . . . . : 8
セクション . . . . . . . : 回答
PTR レコード . . . . . . : castor
232.11.168.192.in-addr.arpa
----------------------------------------
レコード名 . . . . . . . : 232.11.168.192.in-addr.arpa.
レコードの種類 . . . . . : 12
Time To Live . . . . . .: 86400
データの長さ . . . . . . : 8
セクション . . . . . . . : 回答
PTR レコード . . . . . . : pollux
C:\Users\Administrator>nbtstat -R
NBT リモート キャッシュ ネーム テーブルを正常に削除し、事前に読み込みました。
C:\Users\Administrator>nbtstat -A 10.20.30.20
StorageNetwork:
ノード IP アドレス: [10.20.30.10] スコープ ID: []
NetBIOS リモート コンピューター ネーム テーブル
名前 種類 状態
---------------------------------------------
POLLUX <00> 一意 登録済
POLLUX <20> 一意 登録済
WORKGROUP <00> グループ 登録済
MAC アドレス = 00-25-90-2D-80-B7
vEthernet (ExternalShared):
ノード IP アドレス: [192.168.11.231] スコープ ID: []
ホストが見つかりませんでした。
C:\Users\Administrator>nbtstat -a 10.20.30.20
StorageNetwork:
ノード IP アドレス: [10.20.30.10] スコープ ID: []
NetBIOS リモート コンピューター ネーム テーブル
名前 種類 状態
---------------------------------------------
POLLUX <00> 一意 登録済
POLLUX <20> 一意 登録済
WORKGROUP <00> グループ 登録済
MAC アドレス = 00-25-90-2D-80-B7
vEthernet (ExternalShared):
ノード IP アドレス: [192.168.11.231] スコープ ID: []
ホストが見つかりませんでした。
んごっ。
##つまりこういうこと?
- 俺:IPアドレスで共有を開く(今回は10.20.30.20)
- CASTOR:IPアドレスをアドレスではなく名前
10.20.30.20
としてDNSに問い合わせ。そんなドメインは無い。 - CASTOR:名前
10.20.30.20
としてNetBIOSブロードキャスト。(nbtstat -a 10.20.30.20
的な) - POLLUX:元気よくお返事 「ぼくPOLLUX!!」(Macアドレスはストレージ側のものを返す)
- CASTOR:違う名前が返ってきたので改めてDNS(キャッシュ)に問い合わせ。
- DNS:「そのサーバーは192.168.11.232だな!」
- CASTOR:なるほど!
なるほどじゃねぇよ!
結論
- 面倒臭がらずNICごとに違うNETBIOS名を持つfqdnを振って混同されないようにしよう
- IPアドレスで叩けば素直に使ってくれると思ったら大間違いだ。
- 大間違いなのは大間違いだろう