Tailscaleロゴ

サブネットルートが重複する場合のLANトラフィック優先順位の問題のトラブルシューティング

最終検証日:
翻訳: 竹洞 陽一郎

LANサブネット内に、Tailscaleデバイスと非Tailscaleデバイスが混在しており、それらすべてが別のサブネットと通信する必要がある、という構成になっている場合があります。
このうちTailscaleデバイスは、そのサブネットへ到達するためにアドバタイズされたルートを受け入れる必要があります。
(非Tailscaleデバイスは通常のLANルーティングで到達します)

このような状況ではルーティングが非対称になり、新たな設定上の課題が生じることがあります。
この課題を回避するには、対象デバイスのOSに応じて異なる解決策があります。

Tailscaleデバイスと非Tailscaleデバイスが混在するLANサブネットから、Tailscaleのオーバーレイ経由と物理ゲートウェイ経由の2つの経路で別サブネットの宛先ホストへ到達する構成図
混在するLANサブネットから別サブネット(192.168.2.0/24)への2つの到達経路。Tailscaleデバイスはアドバタイズされたルートを受け入れてオーバーレイ経由で、非Tailscaleデバイスは物理ゲートウェイ経由で到達します。

以下で説明する解決策を、ノートパソコンのWi-Fiのような固定されていないネットワークインターフェイスに適用すると、本来Tailscaleネットワーク宛てのトラフィックを公衆LANネットワークへ送信してしまう状況を招く可能性があります。
これらの解決策は、サブネットおよびそれにアクセスするデバイスのネットワーク構成が十分に把握されており、かつ固定されている環境でのみ使用することを推奨します。

Windows・macOSの場合

WindowsおよびmacOSのいずれでも、ルートはデフォルトで受け入れられます。
OSは、最長プレフィックス一致のルート、言い換えれば設定済みのすべてのルートの中で最も具体的なルートを優先します。
したがって、サブネットルートが重複する場合の解決策の1つは、Tailscaleがアドバタイズするルートを、ルーティングの競合を避けたいLANサブネットよりも具体性の低いものに調整することです。

たとえば、192.168.2.0/24 というLANサブネットがあり、デバイスがこのLANセグメント上にあるときにそのサブネット宛てのトラフィックをTailscale経由でルーティングしないようにしたい場合は、サブネットルーターが 192.168.2.0/23 のルートをアドバタイズするように設定できます。

Linuxの場合

Linuxでは、tailnet内の他のデバイスからのサブネットルートを受け入れるために、tailscale up--accept-routes フラグを明示的に渡す必要があります。
Linux版Tailscaleは、ポリシールーティング(policy routing)と呼ばれるルーティング機能を使用しており、これによりルーティングに追加の優先順位付けの層が導入されます。

Tailscaleは、ルートの優先順位付けのために 5200 から 5500 の優先度範囲のIPルールを使用します。
現時点では 5210523052505270 です。

mwan3が動作していると検出されたOpenWRTシステムでは、互換性のためにTailscaleのルールはより低い優先度でインストールされます。
そのようなシステムでは、IPルールは 52005300 ではなく 13001400 の優先度範囲でインストールされます。

Tailscaleのルールより前に、lookup を使ってそれらを飛び越えるルールをインストールします。


ip rule add to 192.168.2.0/24 priority 2500 lookup main

上記のコマンドは、192.168.2.0/24 宛てのトラフィックに一致するルールを、優先度 2500(Tailscaleのルールより高い優先度)でインストールします。
一致した場合、このルールはデフォルトのルーティングテーブルである main ルーティングテーブルにジャンプします。
したがって、このルールはTailscaleのルールより優先され、main ルーティングテーブル内の通常のLANルートが使用されます。

この変更は永続的ではなく、起動時に適用する必要がある点に注意してください。
systemd-networkd を使用している場合は、systemd.network(5)RoutingPolicyRule 設定オプションを参照してください。
また、この設定は systemd.service(5) に記載されている「oneshot」サービスとして適用することもできます。