DNS切り替え

DNSを切り替えた際の調べた事の防備録

■1.cmdでDNSの設定が可能なことの確認
---------------------------------------------
　→ netshコマンドで可能
netsh interface ipv4 set dns /?
使用法: set dnsservers [name=]<文字列> [source=]dhcp|static
              [[address=]<IP アドレス>|none]
              [[register=]none|primary|both]
              [[validate=]yes|no]
パラメーター:
      タグ           値
      name         - インターフェイスの名前またはインデックス。
      source       - 次のいずれかの値を指定します:
                     dhcp: 特定のインターフェイスに対する DNS サーバーの構成元として DHCP を設定します。
                     static: DNS サーバーの構成元をローカルの静的構成に設定します。
      address      - 次のいずれかの値を指定します:
                     <IP アドレス>: DNS サーバーの IP アドレス。
                     none: DNS サーバーの一覧を消去します。
      register     - 次のいずれかの値を指定します:
                     none: 動的 DNS の登録を無効にします。
                     primary: プライマリ DNS サフィックスでのみ登録します。
                     both: プライマリ DNS サフィックスおよび接続固有のサフィックスの両方で登録します。
      validate     - DNS サーバー設定の検証が実行されるかどうかを指定します。
                     既定値は yes です。
注釈: DNS サーバーの構成を DHCP または静的モードに設定します。
      source に'static' が指定されている場合のみ、'addr' オプションを使用して、指定されたインターフェイスに対する
      DNS サーバーの IP アドレスの静的一覧を構成できます。
      validate スイッチが yes の場合、新しく設定されたDNS サーバーは検証されます。
例:
       set dnsservers name="ワイヤード イーサネット接続" source=dhcp
       set dnsservers "ワイヤード イーサネット接続" static 10.0.0.1 primary

---------------------------------------------

■2.cmdで優先DNSの設定コマンドの確認
---------------------------------------------
interfaceの確認
C:\Users\user>netsh interface ip show interface

Idx     Met         MTU          状態                 名前
---  ----------  ----------  ------------  ---------------------------
  1          75  4294967295  connected     Loopback Pseudo-Interface 1
 20          50        1500  connected     Wi-Fi 2
  8          25        1500  disconnected  ローカル エリア接続* 11
  7          25        1500  disconnected  ローカル エリア接続* 12

名前で設定
　→ # netsh interface ipv4 set dnsservers name="Wi-Fi 2" source=static addr="8.8.8.8" register=non validate=no

Idxで設定
　→ # netsh interface ipv4 set dnsservers name="20" source=static addr="8.8.8.8" register=non validate=no

確認したこと
・DHCPの状態から上記コマンドでDNSサーバの値が設定される
・すでに設定されているIPと違うIPの場合は、上書きされ設定される
・すでに設定されているIPと同じIPにしてコマンドを実行。エラー出力はなし
・代替DNSの設定が入っていた場合は、代替DNSの設定がなくなる

---------------------------------------------

■3.cmdで代替DNSの設定コマンドの確認
---------------------------------------------
名前で設定
　→ netsh interface ipv4 add dnsservers name="Wi-Fi 2" addr="8.8.4.4" index=2 validate=no
Idxで設定
　→ netsh interface ipv4 add dnsservers name="20" addr="8.8.4.4" index=2 validate=no

確認したこと
・優先DNSが設定されている時に、コマンドを実行すると、代替DNSに設定される
・優先DNSが設定されていない時に、コマンドを実行すると優先DNSに設定される
・優先DNSと同じIPの場合は、「オブジェクトは既に一覧に存在します。」と表示される
・すでに設定されている代替DNSのIPと同じIPを実行すると「オブジェクトは既に一覧に存在します。」と表示される

---------------------------------------------

■4.スタートアップで実行されるか確認
---------------------------------------------
以下のコマンドのみのbatファイルを作成
netsh interface ipv4 set dnsservers name="20" source=static addr="8.8.8.8" register=non validate=no
netsh interface ipv4 add dnsservers name="20" addr="8.8.4.4" index=2 validate=no

※文字コードは、デフォルトのUTF-8からANSIに変更(batファイルは、UTF-8だと動かない)

・batファイルを管理者権限で実行して、反映されるかテストをする
・batファイルをスタートアップへ配置し、ログオフ ログオンしてテストをする

※スタートアップ
　C:\ProgramData\Microsoft\Windows\Start Menu\Programs\StartUp

確認したこと
・反映される
・batファイル実行後に、もう一度batファイルを実行しエラーが出力しないこと

---------------------------------------------

■5.変更するインターフェイスについて
---------------------------------------------
以下のコマンドでIdxか名前を取得する
netsh interface ip show interface

コマンド実行結果
Idx     Met         MTU          状態                 名前
---  ----------  ----------  ------------  ---------------------------
  1          75  4294967295  connected     Loopback Pseudo-Interface 1
 20          50        1500  connected     Wi-Fi 2
  8          25        1500  disconnected  ローカル エリア接続* 11
  7          25        1500  disconnected  ローカル エリア接続* 12


コマンドの実行結果から、以下の行を削除
Idx     Met         MTU          状態                 名前
---  ----------  ----------  ------------  ---------------------------
  1          75  4294967295  connected     Loopback Pseudo-Interface 1
  8          25        1500  disconnected  ローカル エリア接続* 11
  7          25        1500  disconnected  ローカル エリア接続* 12


以下のコマンドを使う
netsh interface ip show interface | findstr /v "Idx ------ Loopback disconnect"

コマンド実行結果
 20          55        1500  connected     Wi-Fi 2


---------------------------------------------

■6.batファイル作成
---------------------------------------------
for文を利用して、変数にIdxを入れる
netsh interface ipv4 set dnsservers name="変数" source=static addr="DNSのIP" register=non validate=no


@echo off
cd /d %~dp0
setlocal enabledelayedexpansion

set DNS1="8.8.8.8"
set DNS2="8.8.4.4"

for /f "usebackq tokens=1 delims= " %%a in (`netsh interface ip show interface ^| findstr /v "Idx ------ Loopback disconnect"`) do (
set _interface=%%a
netsh interface ipv4 set dnsservers name="!_interface!" source=static addr="%DNS1%" register=non validate=no
netsh interface ipv4 add dnsservers name="!_interface!" addr="%DNS2%" index=2 validate=no
)

・batファイルを管理者権限で実行して、反映されるかテストをする
・batファイルをスタートアップへ配置し、ログオフ ログオンしてテストをする

確認したこと
・反映される
・batファイル実行後に、もう一度batファイルを実行しエラーが出力しないこと

---------------------------------------------