EC2（Windows）のルートテーブルを変更して疎通できなくなったインスタンスを復旧してみる

WindowsのEC2インスタンスのルートテーブルを編集する際に、誤った設定をしてしまいインスタンスに疎通できなくなってしまうことがあるかと思います。

そのような場合の対処法について、re:Postでは下記2通りの方法を説明します。

- EC2 シリアルコンソールを使用する
- 一時的にENIをもう一つアタッチする

本記事では一時的にENIをもう一つアタッチする方法に着目して説明します。

## ドキュメント

- [Amazon EC2 Windows インスタンスへのネットワーク接続を誤って無効にしました。この問題を解決する方法を教えてください。](https://repost.aws/ja/knowledge-center/restore-network-connectivity-windows)
-[サブネット CIDR ブロック](https://docs.aws.amazon.com/ja_jp/vpc/latest/userguide/subnet-sizing.html)

## 今回試す環境

- Windows Server 2022(ami-0987eed561fe06332 Windows_Server-2022-English-Full-Base-2024.07.10)
- EC2Launch 2.0.1948.0

## ルートテーブルを変更して疎通できなくしてみる

まずはルートテーブルの設定を削除してインスタンスに対して疎通できなくしてみます。

今回、構成したWindows環境のデプロイされているサブネットは`10.10.10.0/24`となっており、EC2インスタンスのローカルIPアドレスは`10.10.10.42/32`としています。

インスタンスにログインし、ルートテーブルを確認すると、`0.0.0.0/0`の向け先がVPCルーター（10.10.10.1/32）になっている事が確認できます。
（サブネットを作成すると、先頭から5個のIPアドレスはAWS側が予約していて、VPCルーターは先頭から2番目の10.10.10.1/32になる）

このルート削除するとインスタンスに疎通できなくなります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1670622/03f66b56-8a46-93de-cc45-d3aeb833efb4.png)

下記コマンドで設定を削除します。

```powershell
Get-NetRoute -DestinationPrefix "0.0.0.0/0" | Remove-NetRoute
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1670622/758bef37-7073-4d17-f374-c16b22073b77.png)

実行するとルートが削除されRDPなどつながらなくなります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1670622/6c8ecf26-713a-36ce-ef75-a3f138924d23.png)

## 一時的なENIをもう一つアタッチして復旧してみる

元々のローカルIPアドレス 10.10.10.42/32 は疎通できなくなったため。
新しいENIを作成してインスタンスにアタッチします。

今回、10.10.10.0/24のサブネットを利用しているため、この範囲内となる10.10.10.90/32のENIを作成し、疎通できなくなったインスタンスにアタッチします。

Network Interfaceを作成して、適宜必要なセキュリティグループを割り当てます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1670622/9378cf3f-4925-1ddf-a0ee-72624fa24f66.png)

作成したENIを疎通できなくなっているインスタンスにアタッチします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1670622/335687e8-59bd-0b62-ccb8-3dd885fba21b.png)

EC2インスタンスにENIが2枚アタッチされました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1670622/a3fc5e1b-926f-9e34-da34-c80c2cc2d9be.png)

作成したENIに紐づくIPアドレスに対して、RDPで疎通できるか確認してみます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1670622/08d6fc3a-60b1-0e0d-4b16-00a1ddda17ff.png)

認証画面がでてきたので疎通できているようです。
ログインしてルートテーブルを確認してみます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1670622/34057915-c571-f202-3575-e7b691cdf8ad.png)

Get-NetRouteで確認すると、削除してVPCルーター向けの設定が復活しています。
また先ほどルートを確認した際に比べてInterfaceIndexの番号が増えているのがわかります。（画像ではもともとあった3番だけではなく、12番が増えている）

```powershell
Get-NetIPAddress | select InterfaceIndex, IPAddress
```

でそれぞれを確認してみる、12番が今回アタッチした10.10.10.90だということがわかります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1670622/26aacd56-4a5d-a43a-e4b5-d8faadaa5a9c.png)

このルートテーブルをみていると気付くかもしれませんが、この時点で10.10.10.42の削除したルート設定も復旧されており、10.10.10.42でもアクセスできるようになっています。

ルートテーブルが復旧したため、一時的に作成したENIをデタッチして削除します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1670622/f07eddc0-7d8c-5d14-bfc0-b953404935a1.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1670622/d935312a-d2ca-3fd3-7207-b6f551fb5c21.png)

## なぜルートテーブルが更新されたのか

Windowsのイベントログから理由をさぐってみます。

システムログを確認すると2枚目のENIをアタッチした時間ごろにアダプターのリセットが走っているようです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1670622/605aa9a2-2553-c0de-7e4d-4d919a82d4ca.png)

これによりルートテーブルがリフレッシュされて復旧されているように思われます。

## 総評

AWSでネットワーク周りの変更時に、設定の不備から疎通できなくなってしまう。

などということは無いには越したことはありませんが、こういう復旧方法についても理解しておく事で、いざという場合に備えたい所です。