如果你的 PPPoE 宽带访问部分因特网服务异常或缓慢

126 天前
 Tianao

请检查 PPPoE 接口的 IPv6 TCP MSS adjust 是否正确。
对于 MTU 1492, IPv6 的 TCP MSS 应为 1432.

对于 RouterOS, PPP profile 中的 change-tcp-mss=yes 可能不会对 IPv6 正确生效。
对于 RouterOS, 可以使用如下命令对 IPv6 的 TCP MSS 做正确的 adjust.
/ipv6 firewall mangle add out-interface=pppoe-out1 protocol=tcp tcp-flags=syn action=change-mss new-mss=1432 chain=forward tcp-mss=1433-65535

2054 次点击
所在节点    宽带症候群
8 条回复
veSir
126 天前
OpenWrt 23.05 呢?
OneOfSisters
126 天前
OpenWrt 这边自动的 1500 会默认-8 MSS 也不用动会自动计算 但建议把防火墙 V4V6 分开 V6 不要用 MSS 钳制 因为 RA 已经告知设备应该使用 MTU1492 不需要再检测一次 TCP SYN MSS
gentrydeng
126 天前
这应该是 RouterOS 独有的问题,从搜索记录来看,这个问题至少在 2011 年就被用户报告给了 MikroTik ,但是无人关心: https://forum.mikrotik.com/viewtopic.php?t=51117

所以我很好奇 RouterOS 究竟好用在哪里?软路由意味着小包转发性能不佳,但是又有许多人推荐使用 RouterOS 进行 PPPoE 拨号,然后 OpenWrt 进行 DHCP 管理。
ac169
125 天前
目前我使用的其他软硬路由包括光猫都,只要不去对设置无脑骚操作默认状态下都没有这个问题, 所以我也觉得和 3# 说的那样 "...应该是 RouterOS 独有的问题..."
Tianao
125 天前
@OneOfSisters #2 RA 中宣告的 MTU 应当是 link / 三层口的 MTU, 而不是路由器所有接口 MTU 中最小的那个。直接向下联口宣告最保守的小 MTU 是对 IPv6 相关协议设计的错误理解和 RFC 的错误实现,不然如果我要用 ULA 地址跨三层访问内网 PMTU 9000 的 CIFS 存储,也用 1492 的 MTU 这显然不合理。

按 RFC, 针对中间路径 MTU 比源端小这个场景,应当依靠 PMTUD. 但是现网中大量对 RFC 的错误实现和比相关 RFC 更早出现的屎山,导致了 PMTUD 的可用性与可靠性问题。(其实这就是 ICMP 中 C 的用例之一,但是很多网络工程师乃至所谓架构师只看到了其中的 echo (ping))

没有 IP 路由器高兴在数据面参与 TCP 的事情( IPv6 路由器不参与 fragment 也是对这一“IP 路由尽可能纯粹化”的思想的推广和贯彻),TCP MSS adjust/clamp 的施加是作为 PMTUD 失效时的兜底,IPv4 尚有中间路由器帮忙 fragment 作为兜底,IPv6 的中间路由器就只能通过帮忙 adjust/clamp 照顾 TCP 了。
Tianao
125 天前
@gentrydeng #3 感谢给出的信息和链接。

我用的是 MikroTik 的硬路由,主要图它既支持 UPnP 和 NAT-PMP 又支持可配置的 SPI 防火墙,对于 IPv6 的 PD 、ND 相关功能也具有相当高的可配置和可诊断(观测)能力。
Tianao
125 天前
@ac169 #4 感谢提供信息。工作原因我平时接触的都是行业产品,在这个问题上是第一次在这种非主流厂商的产品上踩坑,所以想着给大家提个醒。
szzys
124 天前
我习惯了在防火墙上统一 tcpmss1200 ,简单而粗暴

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1006287

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX