接続構成
Windows 端末から Ubuntu Linux 内の VM 仮想ルーター(MTU 8192 で OSPF 設定済み)への通信において、MTUを拡張する。この時、Cisco Catalyst スイッチ経由でルーティングするため、スイッチの MTU を変更し、また OSPF ネイバー確立も出来るように設定を行う。
Catalyst | 8192 byte | (Vlan100) 192.168.100.254/24 (Vlan240) 192.168.240.254/24 (Vlan254) 192.168.254.253/24 |
Ubuntu Linux | 8192 byte 1500 byte | (br0) 192.168.254.240/24 (vlan100) 192.168.100.240/24 |
VM 仮想ルーター (OSPF) | 8192 byte | 192.168.254.254/24 |
Windows 11 | 8174 byte | 192.168.240.1/24 |
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