DNSを切り替えた際の調べた事の防備録
■1.cmdでDNSの設定が可能なことの確認
→ netshコマンドで可能
netsh interface ipv4 set dns /?
使用法: set dnsservers [name=]<文字列> [source=]dhcp|static
[[address=]|none]
[[register=]none|primary|both]
[[validate=]yes|no]
パラメーター:
タグ 値
name - インターフェイスの名前またはインデックス。
source - 次のいずれかの値を指定します:
dhcp: 特定のインターフェイスに対する DNS サーバーの構成元として DHCP を設定します。
static: DNS サーバーの構成元をローカルの静的構成に設定します。
address - 次のいずれかの値を指定します:
: 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ファイルを実行しエラーが出力しないこと