かなり初歩的な話ですが、Server Core環境(正確にはHyper-V Serverという無償のOS)でping応答を返すための許可設定をどうすればいいのか、と言う点がいままで分かってなかったようなので、自分用に備忘録。
Hyper-V Server環境
Microsoftから無償で提供されるHyper-V ServerというOSは、ちょろっと古いPCで仮想化を使うのに役に立ちます。(費用がいらないってのが一番)
ただ、Hyper-VのホストOSとしてハイパーバイザ環境を実行することに特化したOSということもあって、Server CoreベースでありGUIが用意されていない、という特徴があります。
このため、コントロールパネル(control.exe)から実行できる各種設定をGUI画面から操作できない、という点でいつもの簡単な設定が行き詰まることもあります。
今回行き詰まったのは、「ping応答しなくなった」という件。
元々応答していたのが…
このHyper-V ServerはゲストOSを4インスタンス稼働させている小規模環境。
元々は構築当初pingに応答していたのですが、ネットワーク内でDHCP機能を担当していたブロードバンドルータが故障したため交換、そのタイミングで(DHCPのIP提供元が変わったため)PrivateプロファイルからPublicプロファイルに変更されてしまい、その影響からかpingで応答を返さなくなっていました。
コマンドで有効化しなきゃいけなかったのね、ということで解消。
コマンドは「netsh firewall set icmpsetting 8」
あれこれ試して失敗していたのですが、結論を言えば、「netsh firewall set icmpsetting 8」でファイアウォールのICMPを有効化することでping応答を返すようになりました。
Server Core環境でコマンド実行、
すると、別PCからping実行していたのが、「要求がタイムアウトしました。」から「%IPアドレス%からの応答:バイト数 =32 時間 =19ms TTL=126」という具合に応答を返すようになりました。
どうやら成功です。
これで上手くいったものの…
メッセージ
「ただし、"netsh firewall" は、使用されなくなりました。
代わりに "netsh advfirewall firewall" を使用してください。
"netsh firewall" の代わりに "netsh advfirewall firewall"」
が表示されました。
うーん、そういや、けっこう前からnetsh firewallはもう推奨しませんよ、ってなっていたのを思い出しました。
今回古いOSだったからいいようなものの、新しいOS(Server Core)だとこの方法では上手くいかないこともありそうです。
それはここにちゃんと記載がありました。
※日本語で内容を読む場合には
※ただし、コマンドの表示まで日本語に翻訳されているため、コマンドの確認には英語版のページをみたほうがよいです。
このページの「Example 4: Configure ICMP settings(例 4: ICMP 設定を構成します。)」の項に記載があります。
ここには、
--------------------------------------------------------------
■旧コマンド
--------------------------------------------------------------
netsh firewall set icmpsetting 8
--------------------------------------------------------------
■新コマンド
--------------------------------------------------------------
netsh advfirewall firewall add rule name="ICMP Allow incoming V4 echo request" protocol=icmpv4:8,any dir=in action=allow
--------------------------------------------------------------
とあります。netsh advfirewallコマンドを利用する場合には、コマンドラインの文字列が長くなりますね。
次にやることがあったら、netsh advfirewallのほうを使ってみようと思いました。