V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
geekyouth
V2EX  ›  问与答

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

  •  
  •   geekyouth · 2023-04-21 21:19:29 +08:00 · 2380 次点击
    这是一个创建于 588 天前的主题,其中的信息可能已经有所发展或是发生改变。
    tcping 命令 向同一 tailscale 网络下的另一台机器发送请求,偶尔 0 丢包,偶尔丢包 50%,偶尔丢失 100%,而且连接后远程桌面非常慢,连接栏显示网络质量差,这种情况发生在同一城市的公寓里和办公室,然而,我老家有一台主机也是在同一 tailscale 网络下,远程连接异常丝滑,几天都不掉线,这个问题困扰我很久,全都是中国电信宽带,为什么会有如此差别?从哪开始排查?
    11 条回复    2023-04-24 11:44:38 +08:00
    Lentin
        1
    Lentin  
       2023-04-21 22:41:49 +08:00 via iPhone   ❤️ 1
    换 zerotier 有奇效🐶
    kokutou
        2
    kokutou  
       2023-04-21 22:43:19 +08:00 via Android
    家里有 upnp 可以打洞。。。
    盲猜公寓和公司没打洞成功
    neroxps
        3
    neroxps  
       2023-04-22 09:34:26 +08:00
    udp 通信特别是跨运营商,MTU 超过一定大小就会被干,改小一点 MTU 试试。wg 里能配 MTU 。
    delpo
        4
    delpo  
       2023-04-22 14:20:35 +08:00 via Android
    你先看看是直连还是中转,后者的话卡顿才是正常的,毕竟服务器在国外
    geekyouth
        5
    geekyouth  
    OP
       2023-04-22 16:21:30 +08:00
    @neroxps
    我用的是 tailscale 不是 wireguard ,不支持修改 mtu
    geekyouth
        6
    geekyouth  
    OP
       2023-04-22 16:26:54 +08:00
    正在试用 zerotile
    neroxps
        7
    neroxps  
       2023-04-23 21:05:16 +08:00 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
       2023-04-24 11:31:38 +08:00
    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
       2023-04-24 11:32:50 +08:00
    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
       2023-04-24 11:43:07 +08:00
    我使用 tailscale 从办公室远程连接公寓的电脑,相比于连接跨省的老家的电脑,公寓虽然很近,但是延迟特别高,质量很差。

    不过换成 zerotier 就好太多了。
    现在问题是 zerotier 如何内网穿透?暴露 http 端口 到公网之上。
    geekyouth
        11
    geekyouth  
    OP
       2023-04-24 11:44:38 +08:00
    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 是一项付费服务,免费用户可能会受到限制,例如连接数限制、随机子域名等。如果需要更高级的功能,可以考虑升级到付费计划。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2828 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 21ms · UTC 07:40 · PVG 15:40 · LAX 23:40 · JFK 02:40
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.