はじめに
Cisco IOS XEシリーズにおいて"ip tcp adjust-mss"を利用している場合に、
TCPコネクションの確立に断続的に失敗するという事例をご紹介します。
事象
"ip tcp adjust-mss"を利用しているルータをTCPのSYNフラグパケット(SYNまたはSYN/ACK)が通過する際に、
ルータがTCPチェックサムを不整合な値に書き換える問題が報告されています。
TCPクライアント間でのMSSのネゴシエーションは通常TCP 3way handhsake時に行われますが、
ルータがパケットのTCP MSSを設定されたMSS値に書き換える際に、
TCPチェックサムを不整合な値に書き換えることに起因しています。
不整合な値のTCPチェックサムを持つパケットは到達先のTCPホストで破棄されるため、
SYNフラグパケットの再送を引き起こし、結果として断続的にTCPコネクションの確立に失敗します。
原因および発生条件について
(1)原因について
CSCwd12330の不具合が原因として報告されています。
CSCwd12330 Invalid TCP checksum in SYN flag packets passing through Router
(2)発生条件について
・ "ip tcp adjust-mss" が設定されていること
かつ
・L2/L3/TCPヘッダのすべての合算が128Byteを超えていること
(3)発生が確認された設定の組合せ例
・IPsec Crypto mapを利用したGRE over IPsec (IPsecヘッダの内側でのGREカプセル化)
・Tunnel modeのIPsec
・VLANタグをIPsec crypto mapと同じインタフェースで利用
かつ
"ip tcp adjust-mss 1360" が経路上インタフェースに設定されている
回避策および解決策
(1)根本的な対処
CSCwd12330のFixされたIOS XEソフトウェアへのアップグレード
Bug Search ToolのCustomer Fixed Releaseをご確認ください。
(2)暫定的な対処
・ルータから"ip tcp adjust-mss"を削除し、周囲の機器で利用する(可能であれば)
・設定を調整して全てのL2/L3/TCPヘッダ長の合計を128Byte以下に減らす
例1: VLANタグを取り除く
例2: GREとCrypto mapの組合せではなく、Tunnel Protectionを利用し、GREヘッダとGREトンネルで利用するIPヘッダを取り除く
参考情報
CSCwd12330 Invalid TCP checksum in SYN flag packets passing through Router
https://bst.cloudapps.cisco.com/bugsearch/bug/CSCwd12330