【Cisco IOS】【Catalyst】【Ubuntu】MTUの変更

接続構成

Windows 端末から Ubuntu Linux 内の VM 仮想ルーター(MTU 8192 で OSPF 設定済み)への通信において、MTUを拡張する。この時、Cisco Catalyst スイッチ経由でルーティングするため、スイッチの MTU を変更し、また OSPF ネイバー確立も出来るように設定を行う。

Catalyst8192 byte(Vlan100) 192.168.100.254/24
(Vlan240) 192.168.240.254/24
(Vlan254) 192.168.254.253/24
Ubuntu Linux8192 byte
1500 byte
(br0) 192.168.254.240/24
(vlan100) 192.168.100.240/24
VM 仮想ルーター
(OSPF)
8192 byte192.168.254.254/24
Windows 118174 byte192.168.240.1/24
MTU 設定

MTU 設定

Catalyst の MTU 設定

初めにジャンボフレームを有効にする。これには再起動が必要なため、変更後に再起動を行う。また、ジャンボフレームは Gigabit Ethernet のインタフェースが対象となる。
※この変更自体では設定の保存は不要

#show system mtu
System MTU size is 1500 bytes
System Jumbo MTU size is 1500 bytes
System Alternate MTU size is 1500 bytes
Routing MTU size is 1500 bytes

(config)#system mtu jumbo ?
  <1500-9198>  Jumbo MTU size in bytes

(config)#system mtu jumbo 8192
Changes to the system jumbo MTU will not take effect until the next reload is done

(config)#do show system mtu
System MTU size is 1500 bytes
System Jumbo MTU size is 1500 bytes
On next reload, System Jumbo MTU will be 8192 bytes
System Alternate MTU size is 1500 bytes
Routing MTU size is 1500 bytes

(config)#system mtu routing ?
  <1500-1500>  MTU size in bytes

#reload
System configuration has been modified. Save? [yes/no]: no
Proceed with reload? [confirm]

再起動後に変更した MTU 8192 byte でスイッチングが可能となる。但し、 Vlan インタフェース (SVI) との通信はまだ 1500 byte となる。そのため、まだ OSPF ネイバーは確立しない。
※ルーティングや、 SVI との通信はまだ MTU 1500 byte

#show system mtu
System MTU size is 1500 bytes
System Jumbo MTU size is 8192 bytes
System Alternate MTU size is 1500 bytes
Routing MTU size is 1500 bytes

#show interfaces GigabitEthernet 0/1 | include MTU
  MTU 8192 bytes, BW 10000 Kbit/sec, DLY 1000 usec,

#show interfaces Vlan254 | include MTU
  MTU 1500 bytes, BW 1000000 Kbit/sec, DLY 10 usec,

#show ip ospf neighbor
Neighbor ID     Pri   State           Dead Time   Address         Interface
10.0.0.254      100   EXSTART/DR      00:00:37    192.168.254.254 Vlan254

ジャンボフレームを拡張したため、拡張が可能となったルーティング (L3) の MTU も変更する。

(config)#system mtu routing ?
  <1500-8192>  MTU size in bytes

(config)#system mtu routing 8192
(config)#do show system mtu
System MTU size is 1500 bytes
System Jumbo MTU size is 8192 bytes
System Alternate MTU size is 1500 bytes
Routing MTU size is 8192 bytes

Windows の MTU 設定

MTU の設定は管理者権限の PowerShell にて設定を行う。 手動で MTU 設定していた場合は一旦削除する。未設定時の MTU はデフォルトの 1500 byte となる。

Set-NetIPInterface -ifIndex 10 -NlMtuBytes 0

Get-NetIPInterface -ifIndex 10
ifIndex InterfaceAlias AddressFamily NlMtu(Bytes) InterfaceMetric Dhcp ConnectionState PolicyStore
------- ------- -------- ------- ----- -------- ----------  -----------
10      USB-LAN     IPv6    1500    25 Disabled Connected   ActiveStore
10      USB-LAN     IPv4    1500    25 Disabled Connected   ActiveStore

デバイスマネージャーから対象の NIC のプロパティでジャンボフレームを有効にする。
※ Realtek 製 NIC の場合

Realtek 製 NIC でジャンボフレームを 8KB に設定した場合は以下の様に自動で MTU 8174 byte になる。

Get-NetIPInterface -ifIndex 10
ifIndex InterfaceAlias AddressFamily NlMtu(Bytes) InterfaceMetric Dhcp ConnectionState PolicyStore
------- ------- -------- ------- ----- -------- ----------  -----------
10      USB-LAN     IPv6    8174    25 Disabled Connected   ActiveStore
10      USB-LAN     IPv4    8174    25 Disabled Connected   ActiveStore

Linux の MTU 設定

netplan の設定ファイルで 物理インタフェース、およびブリッジインタフェース両方の MTU を拡張する。
【/etc/netplan/xx-network.yaml】

network:
  version: 2
  renderer: NetworkManager
  ethernets:
    enxxxxxxxxxxxxx:
      match:
        macaddress: xx:xx:xx:xx:xx:xx
      set-name: en1
      mtu: 8192
  bridges:
    br0:
      interfaces:
        - enxxxxxxxxxxxxx
      mtu: 8192
      parameters:
        forward-delay: 0
        stp: false
      dhcp4: false
      dhcp6: false
      accept-ra: false
      addresses:
        - 192.168.254.240/24
        - fd00:0:0:fe::f0/64
  vlans:
    vlan100:
      id: 100
      link: br0
      mtu: 1500
      dhcp4: false
      dhcp6: false
      accept-ra: false
      addresses:
        - 192.168.100.240/24
        - fd00:0:0:64::f0/64

設定ファイル編集後に適用する。

$ sudo netplan apply

$ ip address show br0 | grep mtu
28: br0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 8192 qdisc noqueue state UP group default qlen 1000

$ ip address show vlan100 | grep mtu
29: vlan100@br0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000

疎通確認

Catalyst からの確認

OSPF のネイバーとの通信が確立していることを確認し、 DF ビット付きで ping にて MTU サイズが 8192 byte になっていることを確認する。これは Vlan インタフェース (SVI) からの L2 セグメント内の疎通確認となる。

#show ip ospf neighbor
Neighbor ID     Pri   State           Dead Time   Address         Interface
10.0.0.254      100   FULL/DR         00:00:34    192.168.254.254 Vlan254

#ping 192.168.254.254 size 8192 df-bit
Type escape sequence to abort.
Sending 5, 8192-byte ICMP Echos to 192.168.254.254, timeout is 2 seconds:
Packet sent with the DF bit set
!!!!!
Success rate is 100 percent (5/5), round-trip min/avg/max = 5/6/10 ms

#ping 192.168.254.254 size 8193 df-bit
Type escape sequence to abort.
Sending 5, 8193-byte ICMP Echos to 192.168.254.254, timeout is 2 seconds:
Packet sent with the DF bit set
.....
Success rate is 0 percent (0/5)

Catalyst から Ubuntu Linux の Vlan100 に ping したところ、 MTU 8192 byte でも応答あり・・・あくまで送信なので
※ Linux bridge の vlan インタフェース MTU 1500 byte は受信では影響なし

#ping 192.168.100.240 size 8192 df-bit
Type escape sequence to abort.
Sending 5, 8192-byte ICMP Echos to 192.168.100.240, timeout is 2 seconds:
Packet sent with the DF bit set
!!!!!
Success rate is 100 percent (5/5), round-trip min/avg/max = 10/11/16 ms

Windows 端末からの確認

Windows 端末からも同様に VM 仮想ルータに疎通確認する。これは Catalyst でルーティングされた先の通信となる。
※ Windows の ping サイズ指定は IP ヘッダー (20 byte)と ICMP ヘッダー (8 byte)が含まれていない。(8146 + 20 + 8 = 8174)

PS C:\Users\admin> ping 192.168.254.254 -l 8146 -f
Pinging 192.168.254.254 with 8146 bytes of data:
Reply from 192.168.254.254: bytes=8146 time=1ms TTL=63
Reply from 192.168.254.254: bytes=8146 time=2ms TTL=63
Reply from 192.168.254.254: bytes=8146 time=1ms TTL=63
Reply from 192.168.254.254: bytes=8146 time=1ms TTL=63

Ping statistics for 192.168.254.254:
    Packets: Sent = 4, Received = 4, Lost = 0 (0% loss),
Approximate round trip times in milli-seconds:
    Minimum = 1ms, Maximum = 2ms, Average = 1ms


PS C:\Users\admin> ping 192.168.254.254 -l 8147 -f
Pinging 192.168.254.254 with 8147 bytes of data:
Packet needs to be fragmented but DF set.
Packet needs to be fragmented but DF set.
Packet needs to be fragmented but DF set.
Packet needs to be fragmented but DF set.

Ping statistics for 192.168.254.254:
    Packets: Sent = 4, Received = 0, Lost = 4 (100% loss),

Linux からの確認

Linux から各インタフェースの MTU を確認する。送信においては MTU 1500 byte が vlan100 で正常に動作している。(受信は 1500 byte 超えでもしてしまう・・・)

$ ping 192.168.100.254 -s 1472 -M do -c 3
PING 192.168.100.254 (192.168.100.254) 1472(1500) bytes of data.
1480 bytes from 192.168.100.254: icmp_seq=1 ttl=255 time=7.22 ms
1480 bytes from 192.168.100.254: icmp_seq=2 ttl=255 time=2.57 ms
1480 bytes from 192.168.100.254: icmp_seq=3 ttl=255 time=2.14 ms

--- 192.168.100.254 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2003ms
rtt min/avg/max/mdev = 2.135/3.975/7.222/2.302 ms


$ ping 192.168.100.254 -s 1473 -M do -c 3
PING 192.168.100.254 (192.168.100.254) 1473(1501) bytes of data.
ping: local error: message too long, mtu=1500
ping: local error: message too long, mtu=1500
ping: local error: message too long, mtu=1500

--- 192.168.100.254 ping statistics ---
3 packets transmitted, 0 received, +3 errors, 100% packet loss, time 2066ms

一方、 br0 側のインタフェースでは MTU 8192 byte で ping 可能。

$ ping 192.168.254.253 -s 8164 -M do -c 3
PING 192.168.254.253 (192.168.254.253) 8164(8192) bytes of data.
8172 bytes from 192.168.254.253: icmp_seq=1 ttl=255 time=4.95 ms
8172 bytes from 192.168.254.253: icmp_seq=2 ttl=255 time=5.89 ms
8172 bytes from 192.168.254.253: icmp_seq=3 ttl=255 time=5.12 ms

--- 192.168.254.253 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2002ms
rtt min/avg/max/mdev = 4.946/5.318/5.892/0.411 ms


$ ping 192.168.254.253 -s 8165 -M do -c 3
PING 192.168.254.253 (192.168.254.253) 8165(8193) bytes of data.
ping: local error: message too long, mtu=8192
ping: local error: message too long, mtu=8192
ping: local error: message too long, mtu=8192

--- 192.168.254.253 ping statistics ---
3 packets transmitted, 0 received, +3 errors, 100% packet loss, time 2079ms

【参照URL】
Catalyst 9000 シリーズ スイッチでの MTU のトラブルシューティング