

# Amazon EC2 インスタンスの MTU を設定する
<a name="ec2-instance-mtu"></a>

ネットワーク接続の最大送信単位 (MTU) とは接続を介して渡すことができる最大許容パケットサイズ (バイト単位) です。すべての Amazon EC2 インスタンスで標準フレーム (1500 MTU) がサポートされており、すべての現行世代のインスタンスタイプでジャンボフレーム (9001 MTU) がサポートされています。

Amazon EC2 インスタンスの MTU を表示したり、インスタンスと別のホストの間のパス MTU を表示したり、標準フレームまたはジャンボフレームを使用するようにインスタンスを設定したりできます。

**Topics**
+ [2 つのホスト間のパス MTU の確認](#check_path_mtu)
+ [インスタンスの MTU を確認する](#check_mtu)
+ [インスタンスの MTU を設定する](#set_mtu)

## 2 つのホスト間のパス MTU の確認
<a name="check_path_mtu"></a>

EC2 インスタンスと別のホストとの間のパス MTU を確認できます。宛先として DNS 名または IP アドレスを指定できます。宛先が別の EC2 インスタンスの場合、そのセキュリティグループによりインバウンド UDP トラフィックが許可されていることを確認します。

使用する手順はインスタンスのオペレーティングシステムによって異なります。

### Linux インスタンス
<a name="check-path-mtu-linux"></a>

インスタンスで **tracepath** コマンドを実行して、EC2 インスタンスと指定された宛先の間のパス MTU を確認します。このコマンドは `iputils` パッケージの一部であり、多くの Linux ディストリビューションでデフォルトで使用できます。

次の例ではEC2 インスタンスと `amazon.com` との間のパス MTU を確認しています。

```
[ec2-user ~]$ tracepath amazon.com
```

この出力例ではパス MTU は 1500 となっています。

```
 1?: [LOCALHOST]     pmtu 9001
 1:  ip-172-31-16-1.us-west-1.compute.internal (172.31.16.1)   0.187ms pmtu 1500
 1:  no reply
 2:  no reply
 3:  no reply
 4:  100.64.16.241 (100.64.16.241)                          0.574ms
 5:  72.21.222.221 (72.21.222.221)                         84.447ms asymm 21
 6:  205.251.229.97 (205.251.229.97)                       79.970ms asymm 19
 7:  72.21.222.194 (72.21.222.194)                         96.546ms asymm 16
 8:  72.21.222.239 (72.21.222.239)                         79.244ms asymm 15
 9:  205.251.225.73 (205.251.225.73)                       91.867ms asymm 16
...
31:  no reply
     Too many hops: pmtu 1500
     Resume: pmtu 1500
```

### Windows インスタンス
<a name="check-path-mtu-windows"></a>

**mturoute を使用してパス MTU を確認するには**

1. [https://elifulkerson.com/projects/mturoute.php](https://elifulkerson.com/projects/mturoute.php) から EC2 インスタンスに **mturoute.exe** をダウンロードします。

1. コマンドプロンプトウィンドウを開いて、**mturoute.exe** をダウンロードしたディレクトリに移動します。

1. 次のコマンドを使用して、EC2 インスタンスと指定した宛先との間のパス MTU を確認します。次の例ではEC2 インスタンスと `www.elifulkerson.com` との間のパス MTU を確認しています。

   ```
   .\mturoute.exe www.elifulkerson.com
   ```

   この出力例ではパス MTU は 1500 となっています。

   ```
   * ICMP Fragmentation is not permitted. *
   * Speed optimization is enabled. *
   * Maximum payload is 10000 bytes. *
   + ICMP payload of 1472 bytes succeeded.
   - ICMP payload of 1473 bytes is too big.
   Path MTU: 1500 bytes.
   ```

## インスタンスの MTU を確認する
<a name="check_mtu"></a>

インスタンスの MTU 値を確認できます。一部のインスタンスではジャンボフレームを使用し、それ以外のドライバには標準フレームサイズを使用するように設定されています。

使用する手順はインスタンスのオペレーティングシステムによって異なります。

### Linux インスタンス
<a name="check-mtu-linux"></a>

**Linux インスタンス上の MTU 設定を確認するには**  
EC2 インスタンスで次の **ip** コマンドを実行します。プライマリネットワークインターフェイスが `eth0` でない場合は`eth0` を使用しているネットワークインターフェイスに置き換えます。

```
[ec2-user ~]$ ip link show eth0
```

この出力例で、*mtu 9001* はこのインスタンスにジャンボフレームが使用されていることを示しています。

```
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 9001 qdisc pfifo_fast state UP mode DEFAULT group default qlen 1000
    link/ether 02:90:c0:b7:9e:d1 brd ff:ff:ff:ff:ff:ff
```

### Windows インスタンス
<a name="check-mtu-windows"></a>

使用する手順はインスタンスのドライバーによって異なります。

------
#### [ ENA driver ]

**バージョン 2.1.0 以降**  
MTU 値を取得するにはEC2 インスタンスで次の **Get-NetAdapterAdvancedProperty** コマンドを使用します。ワイルドカード (アスタリスク) を使用して、すべてのイーサネット名を取得します。インターフェイス名 `*JumboPacket` の出力を確認します。値 9015 はジャンボフレームが有効であることを示します。ジャンボフレームはデフォルトで無効化されています。

```
Get-NetAdapterAdvancedProperty -Name "Ethernet*"
```

**バージョン 1.5 以前**  
MTU 値を取得するにはEC2 インスタンスで次の **Get-NetAdapterAdvancedProperty** コマンドを使用します。インターフェイス名 `MTU` の出力を確認します。値 9001 はジャンボフレームが有効であることを示します。ジャンボフレームはデフォルトで無効化されています。

```
Get-NetAdapterAdvancedProperty -Name "Ethernet"
```

------
#### [ Intel SRIOV 82599 driver ]

MTU 値を取得するにはEC2 インスタンスで次の **Get-NetAdapterAdvancedProperty** コマンドを使用します。インターフェイス名 `*JumboPacket` のエントリを確認します。値 9014 はジャンボフレームが有効であることを示します。(MTU のサイズにはヘッダーとペイロードが含まれる点に注意してください)。ジャンボフレームはデフォルトで無効化されています。

```
Get-NetAdapterAdvancedProperty -Name "Ethernet"
```

------
#### [ AWS PV driver ]

MTU 値を取得するにはEC2 インスタンスで次のコマンドを使用します。インターフェイスの名前は異なる場合があります。出力では「Ethernet」、「Ethernet 2」、または 「Local Area Connection」 という名前のエントリを探してください。ジャンボフレームを有効または無効にするにはインターフェイス名が必要です。値 9001 はジャンボフレームが有効であることを示します。

```
netsh interface ipv4 show subinterface
```

------

## インスタンスの MTU を設定する
<a name="set_mtu"></a>

VPC 内のネットワークトラフィックにジャンボフレームを使用したり、インターネットトラフィックに標準フレームを使用したりする場合があるでしょう。どのようなユースケースでも、インスタンスが想定どおりに動作することを確認することをお勧めします。

使用する手順はインスタンスのオペレーティングシステムによって異なります。

### Linux インスタンス
<a name="set-mtu-linux"></a>

**Linux インスタンス上の MTU 値を設定するには**

1. インスタンスで次の **ip** コマンドを実行します。このコマンドで目的の MTU 値が 1500 に設定されますが、代わりに 9001 を使用することができます。プライマリネットワークインターフェイスが `eth0` でない場合は `eth0` を実際のネットワークインターフェイスに置き換えます。

   ```
   [ec2-user ~]$ sudo ip link set dev eth0 mtu 1500
   ```

1. (オプション) 再起動後もネットワーク MTU 設定を維持するにはオペレーティングシステムのタイプに基づいて、次の設定ファイルを変更します。
   + **Amazon Linux 2023** – 設定ファイルの `[Link]` セクションを変更します。デフォルトの設定ファイルは `/usr/lib/systemd/network/80-ec2.network` です。または、/run/systemd/network/ で作成された任意のカスタム設定ファイルを更新できます。ファイル名は *priority*-*interface*.network です。詳細については、Amazon Linux ドキュメントの「[Networking service](https://docs.aws.amazon.com/linux/al2023/ug/networking-service.html)」を参照してください。

     ```
     MTUBytes=1500
     ```
   + **Amazon Linux 2** – 次の行を `/etc/sysconfig/network-scripts/ifcfg-eth0` ファイルに追加します。

     ```
     MTU=1500
     ```

     次の行を `/etc/dhcp/dhclient.conf` ファイルに追加します。

     ```
     request subnet-mask, broadcast-address, time-offset, routers, domain-name, domain-search, domain-name-servers, host-name, nis-domain, nis-servers, ntp-servers;
     ```
   + **その他の Linux ディストリビューション** – それぞれに固有のドキュメントを参照してください。

1. (オプション) インスタンスを再起動し、MTU 設定が正しいことを確認します。

### Windows インスタンス
<a name="set-mtu-windows"></a>

使用する手順はインスタンスのドライバーによって異なります。

------
#### [ ENA driver ]

インスタンスでデバイスマネージャーまたは **Set-NetAdapterAdvancedProperty** コマンドを使用して、MTU を変更できます。

**バージョン 2.1.0 以降**  
ジャンボフレームを有効にするには次のコマンドを使用します。

```
Set-NetAdapterAdvancedProperty -Name "Ethernet" -RegistryKeyword "*JumboPacket" -RegistryValue 9015
```

ジャンボフレームを無効にするには次のコマンドを使用します。

```
Set-NetAdapterAdvancedProperty -Name "Ethernet" -RegistryKeyword "*JumboPacket" -RegistryValue 1514
```

**バージョン 1.5 以前**  
ジャンボフレームを有効にするには次のコマンドを使用します。

```
Set-NetAdapterAdvancedProperty -Name "Ethernet" -RegistryKeyword "MTU" -RegistryValue 9001
```

ジャンボフレームを無効にするには次のコマンドを使用します。

```
Set-NetAdapterAdvancedProperty -Name "Ethernet" -RegistryKeyword "MTU" -RegistryValue 1500
```

------
#### [ Intel SRIOV 82599 driver ]

インスタンスでデバイスマネージャーまたは **Set-NetAdapterAdvancedProperty** コマンドを使用して、MTU を変更できます。

ジャンボフレームを有効にするには次のコマンドを使用します。

```
Set-NetAdapterAdvancedProperty -Name "Ethernet" -RegistryKeyword "*JumboPacket" -RegistryValue 9014
```

ジャンボフレームを無効にするには次のコマンドを使用します。

```
Set-NetAdapterAdvancedProperty -Name "Ethernet" -RegistryKeyword "*JumboPacket" -RegistryValue 1514
```

------
#### [ AWS PV driver ]

インスタンスで **netsh** コマンドを使用することで MTU を変更できます。デバイスマネージャーでは MTU を変更できません。

ジャンボフレームを有効にするには次のコマンドを使用します。

```
netsh interface ipv4 set subinterface "Ethernet" mtu=9001
```

ジャンボフレームを無効にするには次のコマンドを使用します。

```
netsh interface ipv4 set subinterface "Ethernet" mtu=1500
```

------