VPS 上の h2o サーバの h3 接続が不安定に。手元から curl しても、https://http3check.net/ を使っても繋がったり繋がらなかったり不定。
結局 mtu いじったりなんやかんやいじっているうちになおってしまった。設定は結局元のままだしわけわからん。
GSO が怪しいのでオフにしてみることに。Gemini と壁打ちしたところ、最終的に矛盾がないのは「virtio_net ドライバの TXリングバッファ(送信キュー)がスタックしていた」説らしいですが。
$ sudo ethtool -k ens3 | grep -i segmentation
tcp-segmentation-offload: off
tx-tcp-segmentation: off
tx-tcp-ecn-segmentation: off
tx-tcp-mangleid-segmentation: off
tx-tcp6-segmentation: off
generic-segmentation-offload: on
tx-fcoe-segmentation: off [fixed]
tx-gre-segmentation: off [fixed]
tx-gre-csum-segmentation: off [fixed]
tx-ipxip4-segmentation: off [fixed]
tx-ipxip6-segmentation: off [fixed]
tx-udp_tnl-segmentation: off [fixed]
tx-udp_tnl-csum-segmentation: off [fixed]
tx-sctp-segmentation: off [fixed]
tx-esp-segmentation: off [fixed]
tx-udp-segmentation: off [fixed]
$ sudo ethtool -K ens3 gso off
$ sudo ethtool -k ens3 | grep -i segmentation
tcp-segmentation-offload: off
tx-tcp-segmentation: off
tx-tcp-ecn-segmentation: off
tx-tcp-mangleid-segmentation: off
tx-tcp6-segmentation: off
generic-segmentation-offload: off
tx-fcoe-segmentation: off [fixed]
tx-gre-segmentation: off [fixed]
tx-gre-csum-segmentation: off [fixed]
tx-ipxip4-segmentation: off [fixed]
tx-ipxip6-segmentation: off [fixed]
tx-udp_tnl-segmentation: off [fixed]
tx-udp_tnl-csum-segmentation: off [fixed]
tx-sctp-segmentation: off [fixed]
tx-esp-segmentation: off [fixed]
tx-udp-segmentation: off [fixed]Chrome の is_broken=true
Chrome は一回 h3 がうまくいかなくなるとブラックリスト的なものに入れるようで、しばらく h2 でしかアクセスしてくれなくなる。クリア方法がわからん。
chrome://net-export/ して HTTP_STREAM_JOB_CONTROLLER で検索すると is_broken=true が見える。
24497: HTTP_STREAM_JOB_CONTROLLER
https://lowreal.net/
Start Time: 2026-01-09 08:50:46.370
t=83062 [st= 0] +HTTP_STREAM_JOB_CONTROLLER [dt=50]
--> allowed_bad_certs = []
--> is_preconnect = true
--> privacy_mode = "disabled"
--> url = "https://lowreal.net/"
t=83062 [st= 0] +PROXY_RESOLUTION_SERVICE [dt=0]
t=83062 [st= 0] PROXY_RESOLUTION_SERVICE_RESOLVED_PROXY_LIST
--> proxy_info = "DIRECT"
t=83062 [st= 0] -PROXY_RESOLUTION_SERVICE
t=83062 [st= 0] HTTP_STREAM_JOB_CONTROLLER_PROXY_SERVER_RESOLVED
--> proxy_chain = "[direct://]"
t=83062 [st= 0] HTTP_STREAM_JOB_CONTROLLER_ALT_SVC_FOUND
--> alt_svc = "quic lowreal.net:443, expires 2026-01-09 09:00:11"
--> is_broken = true
t=83112 [st=50] -HTTP_STREAM_JOB_CONTROLLER
GUI からの操作だとどうあがいてもクリアできないっぽい。待つか、Profile フォルダの "Network Persistent State" の JSON を削除するしかないっぽい。
$ pwd
/Users/cho45/Library/Application Support/Google/Chrome/Default
$ cat "Network Persistent State" | jq '.net.http_server_properties.broken_alternative_services[] | select(.host == "lowreal.net")'
{
"anonymization": [
"...",
false,
0
],
"broken_count": 3,
"host": "lowreal.net",
"port": 443,
"protocol_str": "quic"
}
{
"anonymization": [
"...",
false,
0
],
"broken_count": 8,
"broken_until": "1767933207",
"host": "lowreal.net",
"port": 443,
"protocol_str": "quic"
}一応バックアップとってからクリア。
$ cp "Network Persistent State" "Network Persistent State.bak" $ cat "Network Persistent State.bak" | jq '.net.http_server_properties.broken_alternative_services |= map(select(.host != "lowreal.net"))' > "Network Persistent State"