再起動しても変わらない MTU を Amazon Linux 2 で設定する
こんにちは、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 を編集せよとの記載があります。
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 で設定する方法についてご紹介しました。参考にしていただけたら嬉しいです。
それではごきげんよう :)