geekyouth
V2EX  ›  问与答

通过 tailscale 连接微软远程桌面 3389 丢包严重

  •  
  •   geekyouth · Apr 21, 2023 · 3861 views
    This topic created in 1116 days ago, the information mentioned may be changed or developed.
    tcping 命令 向同一 tailscale 网络下的另一台机器发送请求,偶尔 0 丢包,偶尔丢包 50%,偶尔丢失 100%,而且连接后远程桌面非常慢,连接栏显示网络质量差,这种情况发生在同一城市的公寓里和办公室,然而,我老家有一台主机也是在同一 tailscale 网络下,远程连接异常丝滑,几天都不掉线,这个问题困扰我很久,全都是中国电信宽带,为什么会有如此差别?从哪开始排查?
    11 replies    2023-04-24 11:44:38 +08:00
    Lentin
        1
    Lentin  
       Apr 21, 2023 via iPhone   ❤️ 1
    换 zerotier 有奇效🐶
    kokutou
        2
    kokutou  
       Apr 21, 2023 via Android
    家里有 upnp 可以打洞。。。
    盲猜公寓和公司没打洞成功
    neroxps
        3
    neroxps  
       Apr 22, 2023
    udp 通信特别是跨运营商,MTU 超过一定大小就会被干,改小一点 MTU 试试。wg 里能配 MTU 。
    delpo
        4
    delpo  
       Apr 22, 2023 via Android
    你先看看是直连还是中转,后者的话卡顿才是正常的,毕竟服务器在国外
    geekyouth
        5
    geekyouth  
    OP
       Apr 22, 2023
    @neroxps
    我用的是 tailscale 不是 wireguard ,不支持修改 mtu
    geekyouth
        6
    geekyouth  
    OP
       Apr 22, 2023
    正在试用 zerotile
    neroxps
        7
    neroxps  
       Apr 23, 2023 via iPhone
    @geekyouth

    是的,Tailscale 可以修改 MTU(最大传输单元)设置。

    根据 Tailscale 官方文档,可以通过两种方式修改 MTU:

    1. 在 Tailscale 节点上直接设置 MTU:

    bash
    # Set MTU to 1200 bytes
    sudo ip link set tailscale0 mtu 1200


    这将直接设置 Tailscale 接口`tailscale0`的 MTU 为 1200 字节。

    2. 在 Tailscale 配置文件中指定 MTU:

    在每个节点上的`/etc/tailscale/tailscaled.conf`文件中添加以下配置:

    [Interface.tailscale0]
    MTU = 1200


    然后重启 Tailscale 服务使配置生效:

    bash
    sudo systemctl restart tailscaled


    官方文档中给出的示例片段为:

    [Interface.tailscale0]
    # MTU size for the Tailscale interface. Default is 1500.
    # MTU = 1400


    注释中提到,如果未指定 MTU,默认值为 1500 字节。

    设置 MTU 的大小可以根据您的网络环境进行调整。降低 MTU 可以避免链路之间的碎片,提高 MTU 可以减少开销和提高吞吐量。

    我希望 Tailscale 官方文档中的这两个 MTU 设置方法及说明能满足您的要求。如果在配置或使用 Tailscale 时遇到任何其他问题,也请随时告诉我。我会尽最大努力为您解答所有问题。
    geekyouth
        8
    geekyouth  
    OP
       Apr 24, 2023
    win10 修改无效,服务重启恢复默认
    ```
    netsh interface ipv4 show interfaces
    netsh interface ipv4 set subinterface 54 mtu=900 store=persistent
    net stop tailscale
    net start tailscale
    netsh interface ipv4 show interfaces
    ```

    geekyouth
        9
    geekyouth  
    OP
       Apr 24, 2023
    You:
    tailscale win10 修改 MTU 设置,降低默认值

    ChatGPT:
    在 Windows 10 上修改 Tailscale 的 MTU (最大传输单元)设置可以通过以下步骤完成:

    1. 打开命令提示符:点击开始菜单,输入 "cmd" ,然后右键点击 "命令提示符",选择 "以管理员身份运行"。

    2. 查找 Tailscale 网络适配器的名称。输入以下命令:

    ```
    netsh interface ipv4 show interfaces
    ```

    在显示的列表中,找到 Tailscale 网络适配器。通常它的名称类似于 "Tailscale" 或 "Tailscale Tunnel"。

    3. 记下 Tailscale 网络适配器的索引( Idx )号。

    4. 修改 Tailscale 网络适配器的 MTU 设置。输入以下命令,将 `<Idx>` 替换为你在上一步找到的索引号,将 `<new_MTU_value>` 替换为你想要设置的新 MTU 值:

    ```
    netsh interface ipv4 set subinterface <Idx> mtu=<new_MTU_value> store=persistent
    ```

    例如,如果索引号为 12 ,你希望将 MTU 设置为 1300 ,那么命令将是:

    ```
    netsh interface ipv4 set subinterface 12 mtu=1300 store=persistent
    ```

    5. 重启 Tailscale 服务以使更改生效。打开 "任务管理器",找到 "Tailscale" 服务,然后右键单击并选择 "重启"。或者在命令提示符中输入以下命令:

    ```
    net stop tailscale
    net start tailscale
    ```

    完成以上步骤后,Tailscale 的 MTU 值已经被更改。请注意,修改 MTU 值可能会影响网络性能。如果在降低 MTU 设置后遇到任何问题,请尝试将其还原为默认值(通常为 1500 )并重新启动 Tailscale 服务。


    You:
    如何通过配置文件修改

    ChatGPT:
    Tailscale 目前在 Windows 上不支持通过配置文件直接修改 MTU 。但是,你可以创建一个简单的批处理脚本( batch script )来实现此功能。

    以下是一个批处理脚本示例,用于修改 Tailscale 网络适配器的 MTU 设置。请将 `<new_MTU_value>` 替换为你想要设置的新 MTU 值。

    1. 打开记事本或其他文本编辑器,创建一个新文件。

    2. 将以下内容复制并粘贴到新文件中:

    ```
    @echo off
    set new_MTU_value=<new_MTU_value>
    for /f "tokens=1,4" %%a in ('netsh interface ipv4 show interfaces ^| findstr /i "tailscale"') do (
    netsh interface ipv4 set subinterface %%a mtu=!new_MTU_value! store=persistent
    )
    net stop tailscale
    net start tailscale
    ```

    3. 将 `<new_MTU_value>` 替换为你想要设置的新 MTU 值。例如,如果你希望将 MTU 设置为 1300 ,那么该行应更改为 `set new_MTU_value=1300`。

    4. 保存文件,扩展名为 ".bat",例如 "change\_tailscale\_mtu.bat"。

    5. 以管理员身份运行此批处理脚本。右键单击 ".bat" 文件,然后选择 "以管理员身份运行"。脚本将自动修改 Tailscale 网络适配器的 MTU 设置并重启 Tailscale 服务以使更改生效。

    请注意,此脚本需要以管理员权限运行,以便修改网络适配器设置和重启 Tailscale 服务。如果在降低 MTU 设置后遇到任何问题,请尝试将其还原为默认值(通常为 1500 )并重新启动 Tailscale 服务。


    You:
    本地端修改了,远程机器也要改吗?

    ChatGPT:
    当你修改本地计算机上的 Tailscale MTU 设置时,你可能还需要在远程计算机上进行相同的修改,以确保它们之间的通信不受影响。

    如果本地计算机和远程计算机之间的 Tailscale 链接发生问题,建议将远程计算机的 MTU 设置更改为与本地计算机相同的值。

    如果远程计算机运行的是 Windows ,你可以按照前面提供的方法修改 MTU 设置。如果远程计算机使用的是其他操作系统,例如 Linux 或 macOS ,请参考相应系统的 MTU 更改方法。在大多数情况下,确保本地计算机和远程计算机的 MTU 设置匹配是很重要的,这有助于确保它们之间的通信顺畅。

    需要注意的是,修改 MTU 设置可能会影响网络性能,所以在进行更改后,请密切关注网络性能和连接稳定性。如果遇到任何问题,请尝试将 MTU 设置还原为默认值(通常为 1500 )并重新启动 Tailscale 服务。
    geekyouth
        10
    geekyouth  
    OP
       Apr 24, 2023
    我使用 tailscale 从办公室远程连接公寓的电脑,相比于连接跨省的老家的电脑,公寓虽然很近,但是延迟特别高,质量很差。

    不过换成 zerotier 就好太多了。
    现在问题是 zerotier 如何内网穿透?暴露 http 端口 到公网之上。
    geekyouth
        11
    geekyouth  
    OP
       Apr 24, 2023
    You:
    zerotier 如何内网穿透?暴露 http 端口 到公网之上

    ChatGPT:
    要使用 ZeroTier 实现内网穿透并将 HTTP 端口暴露到公网,你需要完成以下步骤:

    1. 注册 ZeroTier 账户:访问 ZeroTier 官网(<https://www.zerotier.com/)并注册一个新账户。完成注册后,登录到> ZeroTier 管理界面。

    2. 创建网络:在管理界面中,点击 "Create a Network"。这将生成一个新的 ZeroTier 网络,同时会显示一个网络 ID 。

    3. 安装 ZeroTier 客户端:根据你的操作系统(如 Windows 、macOS 、Linux )下载并安装适当的 ZeroTier 客户端。在计算机上安装 ZeroTier 客户端后,启动客户端并加入刚刚创建的网络。为此,输入你在步骤 2 中获得的网络 ID ,然后点击 "Join"。

    4. 授权设备:回到 ZeroTier 管理界面,你将在 "Members" 列表中看到你的设备。将设备的 "Auth?" 复选框选中,表示允许该设备加入 ZeroTier 网络。

    5. 配置端口转发:现在,你需要配置一台具有公共 IP 地址的互联网设备(例如 VPS 、云服务器或具有公网 IP 的路由器)以转发 HTTP 端口(通常为 80 或 443 )。你需要将公网设备上的 HTTP 端口转发到通过 ZeroTier 分配给你本地计算机的 IP 地址。端口转发的配置过程因设备和操作系统而异。如果你使用的是云服务器或 VPS ,可能需要在其防火墙设置中添加相应的规则。

    6. 访问 HTTP 服务:完成端口转发设置后,你可以通过公网设备的 IP 地址访问本地计算机上的 HTTP 服务。在浏览器中输入 `http://<公网设备 IP>:<HTTP 端口>`,你应该能看到本地计算机上运行的 HTTP 服务的响应。

    请注意,端口转发可能会导致安全隐患。确保你已采取适当的安全措施,如使用 HTTPS 、保护端口和限制 IP 访问等。


    You:
    我没有带公网 ip 的设备

    ChatGPT:
    如果没有带公网 IP 的设备,你可以使用第三方的穿透服务,如 ngrok 、frp ( Fast Reverse Proxy )等。这里以 ngrok 为例,介绍如何在没有公网 IP 设备的情况下实现内网穿透。

    1. 注册 ngrok 账户:访问 ngrok 官网(<https://ngrok.com/)并注册一个新账户。完成注册后,登录到> ngrok Dashboard 。

    2. 下载 ngrok 客户端:在 ngrok Dashboard 中找到适合你操作系统的 ngrok 客户端(例如 Windows 、macOS 、Linux 等),然后下载并解压。

    3. 配置 ngrok:在解压后的 ngrok 文件夹中,找到 `ngrok.yml` 文件(如果不存在,请创建一个)。打开该文件并输入以下内容:

    ```
    authtoken: <your_auth_token>
    tunnels:
    http:
    proto: http
    addr: <your_local_http_port>
    ```

    将 `<your_auth_token>` 替换为在 ngrok Dashboard 中找到的授权令牌。将 `<your_local_http_port>` 替换为本地计算机上运行的 HTTP 服务的端口号(例如 80 、8080 等)。

    4. 启动 ngrok:打开命令提示符( Windows )或终端( macOS 、Linux ),然后导航到解压后的 ngrok 文件夹。运行以下命令启动 ngrok:

    ```
    ./ngrok start --config ngrok.yml http
    ```

    5. 获取公网访问地址:启动 ngrok 后,它会生成一个公网访问地址,如 `http://random-subdomain.ngrok.io`。你可以在命令提示符或终端窗口中看到该地址,或在 ngrok Dashboard 中找到。将这个地址用于访问本地计算机上运行的 HTTP 服务。

    通过这种方法,你可以在没有公网 IP 设备的情况下实现内网穿透。但是,ngrok 是一项付费服务,免费用户可能会受到限制,例如连接数限制、随机子域名等。如果需要更高级的功能,可以考虑升级到付费计划。
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   1037 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 40ms · UTC 19:26 · PVG 03:26 · LAX 12:26 · JFK 15:26
    ♥ Do have faith in what you're doing.