LoginSignup
0
0

DNS切り替え

Posted at

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ファイルを実行しエラーが出力しないこと


0
0
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
0
0