Tailscaleのnetfilterモード
最終検証日:
翻訳: 竹洞 陽一郎
このトピックは、Tailscaleを実行しているLinuxデバイスにのみ適用されます。
Netfilterは、Linuxカーネルに組み込まれたフレームワークです。
ネットワークスタックの要所にフックを提供し、システムを流れるパケットを検査、変更、破棄、リダイレクトできるようにします。
iptablesやnftablesといったファイアウォールツールの基盤となるエンジンです。
デフォルトでは、LinuxデバイスにTailscaleをインストールすると、Tailscaleは独自のファイアウォールルールを作成し、それらが自動的に評価されるように設定します。
この方式により、Tailscaleは必要なルールを自ら管理しつつ、必要に応じて利用者がカスタムルールを追加できる余地を残しています。
このデフォルト設定(onモード)はほとんどの環境で機能しますが、Tailscaleにはnodivertやoffといった他のnetfilterモードもあります。
以下のような状況では、別のモードを使用してTailscaleのnetfilterの動作をカスタマイズすることを検討してください。
- TailscaleのCGNATトラフィックフィルタリングに例外を設ける必要がある。例えば、他のソフトウェアがTailscaleの自動ルール管理と競合する場合に、例外が必要になることがあります。
tailscaledが、自身のルールを最初に評価させるために定期的にルールの位置を戻す動作を止める必要がある。- Tailscaleのルールより前に、他のファイアウォールルールを評価させる必要がある。
Tailscaleがnetfilterとどのように統合するかは、netfilterモードを設定することでカスタマイズできます。
Tailscaleでnetfilterモードを設定できる場所は複数あり、tailscaled設定ファイルのnetfilterModeオプションや、Tailscale CLIの--netfilter-modeフラグ(tailscale up、tailscale login、tailscale setに適用されます)があります。
netfilterモードのオプション
Tailscaleには、on、nodivert、offの3つのnetfilterモードのオプションがあります。
これらの値は、Tailscale CLIのフラグ(--netfilter-mode)とTailscaleデーモン設定ファイルの値(netfilterMode)で共通です。
| モード | 説明 |
|---|---|
on |
(デフォルト)Tailscaleがファイアウォールルールを作成し、該当するトラフィックに対して確実に評価されるようにします。 |
nodivert |
Tailscaleがファイアウォールルールを作成しますが、有効化はしません。トラフィックは自動的にはTailscaleのルールを通過しません。 |
off |
Tailscaleはファイアウォールルールを一切作成・管理しません。必要なルールはすべて利用者自身が記述する必要があります。 |
on
onはデフォルトのモードです。
onモードでは、Tailscaleがファイアウォールルールを作成し、該当するトラフィックに対して確実に評価されるようにします。
統合の方法は、使用しているツールによって異なります。
- iptablesの場合:Tailscaleはカスタムチェーンを作成し、組み込みチェーン(
filterテーブルのINPUTとFORWARD、natテーブルのPOSTROUTING)の先頭にジャンプルールを挿入して、トラフィックを自身のルールに誘導します。 - nftablesの場合:Tailscaleは独自のテーブルを作成し、その中のチェーンを高い優先度でフックに直接登録することで、自身のルールが早い段階で評価されるようにします。
Tailscaleのルールは、以下のセキュリティポリシーを適用します。
- tailnetトラフィックの許可:
tailscale0インターフェイス経由で到着したトラフィックを許可します。 - CGNATスプーフィングの防止:
tailscale0インターフェイス以外から到着したCGNAT範囲(100.64.0.0/10)のトラフィックを破棄します。これにより、攻撃者が他のインターフェイス上でTailscale IPアドレスを偽装することを防ぎます。 - Tailscaleプロトコルトラフィックの許可:接続を維持するため、Tailscaleのリスニングポートに対するUDPトラフィックを許可します。
- ルーティング機能の有効化:サブネットルーティングとExitノードの機能のため、転送トラフィックに適切にマークを付けて許可します。
onに設定されている場合、Tailscaleは自身のルールが早い段階で評価される位置に留まっているかを定期的に検証します。
他のソフトウェアがこれを変更した場合、Tailscaleは設定を元に戻します。
nodivert
No divert(nodivert)モードでは、Tailscaleのファイアウォールルールを作成しますが、有効化はしません。
ルールは存在しますが、トラフィックは自動的にはそれらを通過しません。
この動作は、使用しているツールによって異なります。
- iptablesの場合:Tailscaleはカスタムチェーンを作成しますが、組み込みチェーンにジャンプルールを挿入しません。
- nftablesの場合:Tailscaleはテーブルとチェーンを作成しますが、フックには登録しません。
nodivertモードは、以下が必要な場合に使用します。
- ファイアウォールルールの順序を制御し、自身のカスタムルールをTailscaleのルールより前に評価させる。
tailscale0インターフェイスを通過しないCGNATトラフィックを破棄するという、Tailscaleのデフォルト動作に例外を追加する。tailscaledが、早い段階で評価させるために定期的にルールの位置を戻す動作を止める。
nodivertモードでは、Tailscaleのルールは存在しますが、どこからも参照されません。
トラフィックがTailscaleのルールを通過するように、利用者がファイアウォールを手動で設定する必要があります。
iptablesの場合は、組み込みチェーンにジャンプルールを追加します。
nftablesの場合は、Tailscaleのチェーンを適切なフックに登録します。
CGNATトラフィックの破棄を無効にする目的でnodivertを使用する前に、CGNAT破棄ルールの無効化で要件を満たせないかを検討してください。
off
offモードは、Tailscaleにnetfilterへの変更を一切させないために使用します。
netfilterモードをoffに設定する妥当な理由は、通常はありません。
このモードでは、Tailscaleはiptablesにもnftablesにも変更を加えません。
Tailscaleが通常は自身のチェーン内に作成するルールを含め、必要なファイアウォールルールをすべて利用者自身が記述する必要があります。
offモードは、nodivertでは対応できない特定の要件がある場合にのみ使用してください。
netfilterモードをoffに設定した場合、以下は利用者の責任となります。
tailscale0インターフェイス上のトラフィックを許可する。- Tailscaleのリスニングポートに対するUDPトラフィックを許可する。
- サブネットルーティングとExitノードの機能のためのNATルールを設定する。