1731552971
2024-11-14 01:16:00
問題
昨日、TrueNAS SMB 共有から ISO ファイルを転送しようとしたとき、ひどい転送速度が発生しました。
NAS は間違いなく、私のデスクトップがスイッチオーバーに接続しているギガビット リンクを飽和させる可能性があります。私は以前にこの動作を見たことがあり、Tailscale の実行に関連していると感じていました。最後にこの動作が発生したときは、Tailscale を終了し、高速転送が戻りました。
なぜこれが重要なのでしょうか?
私のホーム ネットワークには、特に Tailscale を実行する Proxmox VM があります。 サブネットルーター。ホームラボ サービス (特に Pi-hole) を家の外からラップトップと電話で利用できるように、このように設定しました。
その結果、私のデスクトップには 2 つのインターフェイスがあり、どちらも信頼できるインターフェイスにアクセスできるようになりました。 10.10.1.1/24 ネットワーク – スイッチと Tailscale 仮想アダプターに接続されたギガビット NIC。
簡単なオンライン検索でスレッドにたどり着きました Tailscale フォーラムで 私が見ていた正確な動作を説明しています。
Windows には、複数のインターフェイスが使用できる場合に、どのインターフェイスがリクエストを処理するかを決定するシステムがあることを知りました。動的ルーティング プロトコルがリモート ネットワークへの各ルートの「コスト」を計算するのと同じように、Windows にはどのインターフェイスを使用するかを計算するシステムがあります。 Windows では、このコストを「インターフェイス メトリック」と呼び、物理インターフェイス メディアとそのリンク速度に基づいて計算されます (文書化されているとおり)。 ここ 最後の表にあります)。
Tailscale インターフェイスは 100Gbps のリンク速度をアドバタイズしているため、Windows はマザーボード上の統合ギガビット NIC よりもはるかに低いインターフェイス メトリックを割り当てます。指標が低い = 関連する「コスト」が低い。
PS C:> Get-NetAdapter | Where-Object {$_.Name -EQ "Tailscale" -or $_.Name -EQ "Ethernet"}
Name InterfaceDescription ifIndex Status LinkSpeed
---- -------------------- ------- ------ ---------
Ethernet Intel(R) I211 Gigabit... 10 Up 1 Gbps
Tailscale Tailscale Tunnel 9 Up 100 Gbps
PS C:> Get-NetIPInterface | Where-Object { ($_.InterfaceAlias -EQ "Tailscale" -or $_.InterfaceAlias -EQ "Ethernet") -and $_.AddressFamily -eq "IPv4"}
ifIndex InterfaceAlias AddressFamily NlMtu(Bytes) InterfaceMetric Dhcp ConnectionState PolicyStore
------- -------------- ------------- ------------ --------------- ---- --------------- -----------
10 Ethernet IPv4 1500 25 Enabled Connected ActiveStore
11 Tailscale IPv4 1280 5 Disabled Connected ActiveStore
自分宛のトラフィックのみが必要です テールネット Tailscale インターフェイスを使用します。他のすべてのケースで Windows がイーサネット インターフェイスを選択するようにするには、Tailscale インターフェイスのインターフェイス メトリックを 25 より大きくするだけです。
修正
これを変更する通常の方法はコントロール パネルですが、インターフェイス メトリックを手動で設定しようとしても、Tailscale インターフェイスに何らかの理由で「空の」静的 IP アドレスが設定されているため、Windows では設定できません。

Powershell が助けになります:
PS C:Windowssystem32> Get-NetAdapter | Where-Object -FilterScript {$_.InterfaceAlias -Eq "Tailscale"} | Set-NetIPInterface -InterfaceMetric 500
PS C:Windowssystem32> Get-NetIPInterface |Where-Object { ($_.InterfaceAlias -EQ "Tailscale" -or $_.InterfaceAlias -EQ "Ethernet") -and $_.AddressFamily -eq "IPv4"}
ifIndex InterfaceAlias AddressFamily NlMtu(Bytes) InterfaceMetric Dhcp ConnectionState PolicyStore
------- -------------- ------------- ------------ --------------- ---- --------------- -----------
10 Ethernet IPv4 1500 25 Enabled Connected ActiveStore
9 Tailscale IPv4 1280 500 Disabled Connected ActiveStore
これを変更した後、イーサネット インターフェイス上でギガビットに近い速度が得られるようになりました。

今後のステップ
このマシンを Linux ディストリビューションに切り替え、NIC を 10G にアップグレードしてください。
#そして #サーモン #Tailscale #を使用すると #Windows #で #SMB #速度が低下する