treedown’s Report

システム管理者に巻き起こる様々な事象を読者の貴方へ報告するブログです。会社でも家庭でも"システム"に携わるすべての方の共感を目指しています。

※https化しました。その影響でしばらくリンク切れなどがあるかもしれませんが徐々に修正していきます。 リンク切れなどのお気づきの点がございましたらコメントなどでご指摘いただけますと助かります。

Server Core(Hyper-V Server)でICMP許可

かなり初歩的な話ですが、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環境でコマンド実行、

f:id:treedown:20190821165119p:plain
すると、別PCからping実行していたのが、「要求がタイムアウトしました。」から「%IPアドレス%からの応答:バイト数 =32 時間 =19ms TTL=126」という具合に応答を返すようになりました。

f:id:treedown:20190821165132p:plain
どうやら成功です。

これで上手くいったものの…

メッセージ
ただし、"netsh firewall" は、使用されなくなりました。
代わりに "netsh advfirewall firewall" を使用してください。
"netsh firewall" の代わりに "netsh advfirewall firewall"
が表示されました。
うーん、そういや、けっこう前からnetsh firewallはもう推奨しませんよ、ってなっていたのを思い出しました。
今回古いOSだったからいいようなものの、新しいOS(Server Core)だとこの方法では上手くいかないこともありそうです。
それはここにちゃんと記載がありました。

https://support.microsoft.com/en-ae/help/947709/how-to-use-the-netsh-advfirewall-firewall-context-instead-of-the-netsh

※日本語で内容を読む場合には

https://support.microsoft.com/ja-jp/help/947709/how-to-use-the-netsh-advfirewall-firewall-context-instead-of-the-netsh

※ただし、コマンドの表示まで日本語に翻訳されているため、コマンドの確認には英語版のページをみたほうがよいです。

このページの「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のほうを使ってみようと思いました。