Windows 10の標準ファイアウォール機能の詳細設定行う「セキュリティが強化された Windows Defender ファイアウォール」で、受信の規則に「DNS Server Forward Rule」や「HNS Container Networking 」から始まる規則が大量に作成されていることがあります。
何かのトラブルなのか気になったので、このルールがいったい何なのか、削除してもよいかについて、調査・対応した内容について紹介します。
目次
状況と原因
状況
以下の画像では、「セキュリティが強化された Windows Defender ファイアウォール」に「DNS Server Forward Rule -TCP」と「DNS Server Forward Rule - UDP」から始まる受信の規則が200個近く作成されています。
また、最近の環境では「HNS Container Networking - DNS (UDP-In)」と「HNS Container Networking - ICS DNS (TCP-In)」から始まる受信の規則が大量に生成されている場合もあります。
規則の内容は、いずれもDNSへの問い合わせ利用されるTCPおよびUDPの53番ポートの受信を許可する設定になっています。
原因
調べてみると、この規則は、Windows 10でHyper-Vを有効化している場合に、仮想スイッチ「Default Switch」により作成されるようです。
また、この仮想スイッチは、PCを起動するたびに再作成される仕様らしく、これにより受信の規則も起動するたびに新たに作成され、どんどん規則の数が多くなってしまうようです。
本来であれば、「Default Switch」そのものを削除したり、設定を変更することで、この状況を回避できればよいのですが、この仮想スイッチは、ユーザーによる削除や設定変更ができないため、状況を回避することは難しいようです。
「Default Switch」は、Hyper-V仮想マシンに対してプライベートIPアドレスの自動割り当てや、NAT機能を提供してくれる仮想スイッチで、Windows 10バージョン1709から「既定のスイッチ」として搭載されている機能です。
対処方法
生成される受信の規則は「Default Switch」に接続された仮想マシンからの名前解決に使用されているため、この規則がないと、仮想マシンから名前解決ができなくなってしまいます。
ただ、生成されている規則すべてが必要なわけではなく、TCP用とUDP用の規則が一つずつあれば、仮想マシンからの名前解決は問題なくできるため、1組だけ規則を残して残りは削除しても問題ないようです。
現状での応急処置としては、まず「セキュリティが強化されたWindows Defenderファイアウォール」を開いて、生成された受信の規則の内、1組だけ次のように名前を変更してから、残りの「DNS Server Forward Rule」または「HNS Container Networking - DNS」から始まる受信の規則を削除します。
変更前 | 変更後 |
---|---|
DNS Server Forward Rule - TCP … | My DNS Server Forward Rule - TCP |
DNS Server Forward Rule - UDP … | My DNS Server Forward Rule - UDP |
HNS Container Networking - ICS DNS (TCP-In) - … | My HNS Container Networking - ICS DNS (TCP-In) |
HNS Container Networking - DNS (UDP-In) - … | My HNS Container Networking - DNS (UDP-In) |
規則の削除は、手作業で行っていも良いですし、面倒ならWindows PowerShellを管理者権限で起動し、以下のコマンド実行して一括削除することもできます。
PS> Remove-NetFirewallRule -DisplayName "DNS Server Forward Rule - *"
PS> Remove-NetFirewallRule -DisplayName "HNS Container Networking - ICS DNS (TCP-In) - *"
PS> Remove-NetFirewallRule -DisplayName "HNS Container Networking - ICS DNS (UDP-In) - *"
なお、既存の規則を削除しても、PCの起動のたびに、また新たに作成されるので、上のコマンドを記述したWindows PowerShellスクリプトを作成し、コンピュータ起動時に実行されるよう「タスクスケジューラ」に登録しておくのもありかと思います。