V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Nile20
V2EX  ›  宽带症候群

请教 MTU 对 ZeroTier 和 TailScale 组网的影响(异地异网)

  •  
  •   Nile20 · 286 天前 · 1203 次点击
    这是一个创建于 286 天前的主题,其中的信息可能已经有所发展或是发生改变。

    情况

    今年春节在家里放了一个 armbian 盒子(Ubuntu),接入的移动宽带;在上海的电脑是 Windows ,接入的联通宽带。两台机器都安装了 ZeroTier 和 TailScale (以下简称 ZT 和 TS )。

    春节结束返回上海以后发现 ZeroTier 和 TailScale 都能 ping 通 armbian ,但是 ssh 均无法连接。ping 延时都在 50ms 左右,说明都是直连。经过一番搜索,把目光投向了 MTU 。通过在 Windows 下执行ping x.x.x.x -l 1472 -f指令( x.x.x.x 是组网工具分配的 IP ),并逐步缩小 ICMP 数据大小,发现 ZT 网络内的上限是 1166 ,TS 的上限是 1252 。算上 28 字节的 ICMP 头,即 ZT 的最大 MTU 为 1194 ,TS 的为 1280

    执行netsh interface ipv4 show subinterfaces查看各个网卡的 MTU ,发现电脑上 ZT 配置的 MTU 是惊人的 2800 ,TS 的为 1280 。修改 ZT 网卡的 MTU 为 1194 后能使用 ZT 网内的 IP 地址连上 ssh ,测试了一个网页服务也正常访问。但是 TS 这边,MTU 已经是正确的了,仍然无法 ssh 连接。

    疑惑

    我不是科班背景也不熟悉网络这块的内容,请教一下专业的朋友:

    1. 我理解,当数据来到 ZeroTier 的网卡时,还要在 ZeroTier 网络内拆包然后借助真实的网卡发送出去,这种情况下 2800 的 MTU 似乎也并无不可。但是实际表现来看稍大的 MTU 网络就不能工作,为什么会有这样的表现?

    2. TailScale 这边 MTU 已经是正确的了,但是仍然无法连通,希望大家能指点一下排查思路

    3. 题外:有没有什么推荐的书可以比较系统性地介绍一下类似的网络知识?不需要细致到能进行相应开发工作的程度,只需要能够在网络出现问题时能够定位大致方向和排查思路即可

    提前谢谢各位~

    YGBlvcAK
        1
    YGBlvcAK  
       285 天前
    因为 mtu 导致的 ssh 不通,这个很奇怪,我这边有 7 ,8 个节点,也是不同运营商,没调整过 mtu 完全没问题,期待大神解答
    hanssx
        2
    hanssx  
       285 天前   ❤️ 1
    和科班关系应该不大,网络方面也只学过谢希仁的计算机网络第 5 版,但是不实践很难理解得深。

    我是用的 wireguard ,mtu 当时也遇到了问题,最后设置的值是 1280 ,具体我忘了是什么原因,勉强回忆了一下可能的几个点:
    1 、网卡本身有几个大包特性,看看是不是要关闭,比如现在大多数网卡都具有 LRO/GRO 功能,即网卡收包时将同一流的小包合并成大包 ( tcpdump 抓包可以看到>MTU 1500bytes 的数据包)交给内核协议栈。
    2 、协议本身可能占的字节也要考虑,比如 ZeroTier 和 TailScale 应该是有协议字段的,当一个包到达 TailScale 网卡的时候,TailScale 封装完之后要满足真实网卡的 MTU 才行,所以 TailScale 的 MTU 肯定是要小于真实网卡 MTU 。

    另外,你好像少计算了 IP Header 的 20 个字节,MTU 是 2 层的 payload ,实际也就是 3 层的全包内容。
    hanssx
        3
    hanssx  
       285 天前
    思路大概就是先对齐 MTU ,然后慢慢降低吧,tcpdump 一下,比如我没看到你提及在对端配置的 MTU ,两端都要配置。
    rulagiti
        4
    rulagiti  
       285 天前
    没关注过这个,平常使用 wg 也没啥问题,mtu 有问题岂不是 wifi 和手机 5g 要配置不同的 mtu ?
    bigfei
        5
    bigfei  
       285 天前 via Android
    zt 或者 ts 网络是 overlay 的网络,mtu 的事情是由底层协议处理的。
    zt 2800 的 mtu 在转发大包的时候,应该可以自动 fragment 为底层协议的 mtu
    Nile20
        6
    Nile20  
    OP
       285 天前
    @hanssx 感谢解答~我去对端反过来 ping 一下这边,看下 MTU 怎么调整。计算字节的这里是我表述有误,查找的资料里说的是 20 字节 IP 头+8 字节 ICMP 头,共 28 字节。我在表述的时候混在一起了
    Nile20
        7
    Nile20  
    OP
       285 天前
    @rulagiti 其实我也有这个疑惑,因为我以往是不调整 MTU 的,在市内不同运营商时有时能连上有时不能。这次排错我只改了 MTU 就修复了连接问题,所以才归因到 MTU
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1112 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 20ms · UTC 22:53 · PVG 06:53 · LAX 14:53 · JFK 17:53
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.