MTUを1502 byteにしないとscpできない現象に遭遇


ホストOSからゲストOSである仮想マシンに向けてscpをしたのですが、1バイトも送ってくれません。色々調べていくうちに仮想マシン側でMTUを1502バイトにすると送れる現象に遭遇しました。

原因はUSB-LANアダプタのドライバだったようです。最新版のドライバをインストールしたら不思議な2バイトのtrailerはなくなりました。

問題の現象

  • 成功$ ping -c 1 -M do -s 1470 192.168.1.1
  • 失敗$ ping -c 1 -M do -s 1472 192.168.1.1

MTUは1500バイトなので1472バイトでも成功するはず。何故か成功しません。ホストOSからゲストOSに向けたscpでは、数バイトのデータは転送できますが、約2KB以上では転送できません(scpがだんまり)。

環境

  • ホストOS: Ubuntu 18.04(192.168.123.1)
  • ゲストOS: VyOS 1.1.8(192.168.123.254, 192.168.1.254), CentOS 7.4(192.168.1.1)
  • ホストOSとゲストOSの通信では、マザーボード備え付けのLANアダプタではなく、USB3ポートに指したUSB-LANアダプタを使用(BAFFALO LUA4-U3)

調査結果

  • ホストOS/ゲストOSともにMTUは1500
  • ゲストOS側のMTUを1502バイトにすると問題はなくなる(でも設定としてはおかしな設定なのですぐに戻す)
  • マザーボード備え付けのLANポートを使う場合は見られない現象(マザーボードのLANポートを使う場合はなんの問題もなし)
  • WireSharkで通信データを見てみると、データの末尾に「VSS-Monitoring ethernet trailer」という2バイトのデータが付加されている。ん?

解決策

参考資料に挙げたように、同じ現象に遭遇された方がいらっしゃいました。

その方の対策を真似て、AX88179のLinuxドライバ・ソースファイルをダウンロードしてインストールし直したら、「VSS-Monitoring ethernet trailer」は無くなりました。

参考資料