再起動しても変わらない MTU を Amazon Linux 2 で設定する

こんにちは、VPN 芸人のトランです。みなさんいかがお過ごしでしょうか? きょうは、再起動しても変わらない MTU を Amazon Linux 2 で設定する方法についてご紹介します。
2019.05.18

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

こんにちは、VPN 芸人のトランです。みなさんいかがお過ごしでしょうか? きょうは、再起動しても変わらない MTU を Amazon Linux 2 で設定する方法についてご紹介します。

背景

比較的新しい世代のインスタンスタイプで作成された EC2 インスタンスは、使用する OS がサポートする限り初めからジャンボフレームの MTU (9001) が使用される状態で起動します。

[ec2-user ~]$ ip link show eth0
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

今回は、(特殊なケースではありますが) 新しく作成した EC2 インスタンスで非ジャンボフレームの MTU (1500) を使用する必要が生じたため、これを行う方法について調べることにしました。

やり方

EC2 サービスのユーザーガイドを確認すると、Amazon Linux 2 のプライマリインターフェイスで任意の MTU を使用するには /etc/sysconfig/network-scripts/ifcfg-eth0 を編集せよとの記載があります。

Network Maximum Transmission Unit (MTU) for Your EC2 Instance - Amazon Elastic Compute Cloud https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/network_mtu.html

DEVICE=eth0
BOOTPROTO=dhcp
ONBOOT=yes
TYPE=Ethernet
USERCTL=yes
PEERDNS=yes
DHCPV6C=yes
DHCPV6C_OPTIONS=-nw
PERSISTENT_DHCLIENT=yes
RES_OPTIONS="timeout:2 attempts:5"
DHCP_ARP_CHECK=no
MTU=1500

しかし、上記の変更を加えた状態でインスタンスを再起動しても MTU が依然 9001 のまま変わりません。そこで AWS サポートに確認した情報を元に追加検証を行ったところ、Amazon Linux 2 を使用している場合でも Amazon Linux を使用している場合と同じように DHCP クライアントの設定を変更する必要があることがわかりました。確かに、VPC の DHCP サービスから返された DHCP オプションを確認してみると Option 26 (Interface MTU) として 9001 が返されています。

Amazon Linux 2 では、DHCP クライアントの設定を /etc/dhcp/dhclient.conf で行います。今回は既定の状態で DHCP クライアントがリクエストする DHCP オプションから Option 26 を除外したいので、明示的にそれ以外の DHCP オプションだけをリクエスト対象として指定します。

# cat /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;
timeout 300;

この状態で DHCP リースを返却、改めて DHCP リクエストを行うと DHCP サーバーから Option 26 が返されなくなっていることを確認できます。

# dhclient -r && dhclient eth0

実際にインターフェイスで使用されている MTU も、/etc/sysconfig/network-scripts/ifcfg-eth0 で指定した値になっていることが確認できました!

$ sudo ip link show eth0
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP mode DEFAULT group default qlen 1000
    link/ether 06:87:23:61:92:f6 brd ff:ff:ff:ff:ff:ff

おわりに

いかがでしたか? きょうは、再起動しても変わらない MTU を Amazon Linux 2 で設定する方法についてご紹介しました。参考にしていただけたら嬉しいです。

それではごきげんよう :)