1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

WindowsのNICの選び方の罠

Last updated at Posted at 2018-10-13

PCに複数のNICが刺さっておりNICごとに別の役割をもたせたい。
そんな時にひっそりと襲ってくるWindowsの罠。

前提

Untitled(1).png

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ファイルで管理している。

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名でコピー

スクリーンショット (99).png

##ホスト側IPアドレスでコピー
スクリーンショット (101).png

##ホスト側fqdnでコピー
スクリーンショット (100).png

##ストレージ側IPアドレスでコピー
スクリーンショット (98).png

ストレージ側fqdnでコピー

スクリーンショット (97).png

(1)のまとめ

予測 実際 結果
NETBIOS eth02 eth0
ホストIP eth0 eth0
ホストfqdn eth0 eth0
ストレージIP eth1 eth0 X
ストレージfqdn eth1 eth0 X

eth0つよい

(2)fqdnを変えて実験

ストレージ側のホスト名に-LBを付けて分ける。

hosts
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

##ストレージ側IPアドレスでコピー
スクリーンショット (103).png

ストレージ側fqdnでコピー

スクリーンショット (102).png

(2)のまとめ

予測 実際 結果
ストレージIP eth1 eth0 X
ストレージfqdn eth1 eth1

IPで直接開いてるのに違うIFが使われるの納得がいかん!

(3)HOSTSにNETBIOS名のエリアスを付加

ストレージ側のホスト名に-LBを付けて分ける。

hosts
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

##ストレージ側IPアドレスでコピー
スクリーンショット (104).png

##ストレージ側NETBIOS名でコピー
スクリーンショット (105).png

(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: []

    ホストが見つかりませんでした。

んごっ。

##つまりこういうこと?

  1. 俺:IPアドレスで共有を開く(今回は10.20.30.20)
  2. CASTOR:IPアドレスをアドレスではなく名前10.20.30.20としてDNSに問い合わせ。そんなドメインは無い。
  3. CASTOR:名前10.20.30.20としてNetBIOSブロードキャスト。(nbtstat -a 10.20.30.20的な)
  4. POLLUX:元気よくお返事 「ぼくPOLLUX!!」(Macアドレスはストレージ側のものを返す)
  5. CASTOR:違う名前が返ってきたので改めてDNS(キャッシュ)に問い合わせ。
  6. DNS:「そのサーバーは192.168.11.232だな!」
  7. CASTOR:なるほど!

なるほどじゃねぇよ!

結論

  • 面倒臭がらずNICごとに違うNETBIOS名を持つfqdnを振って混同されないようにしよう
  • IPアドレスで叩けば素直に使ってくれると思ったら大間違いだ。
  • 大間違いなのは大間違いだろう
  1. Hypervは今回ほとんど関係ない

  2. デフォルトゲートウェイの優先接続先がくるのかなと

1
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?