コンテンツにスキップ

選択的ルーティングの設定

TailscaleのExit Node機能をそのまま使うと、デフォルトルート(0.0.0.0/0)を丸ごと持っていかれる all-or-nothing になります。これだと全通信が「自宅→Lightsail→宛先→Lightsail→自宅」のヘアピン経路になって、遅延もLightsailの転送量ももったいない。

そこで登場するのが Subnet RouterApp Connector です。

宛先IPが固定なら:Subnet Router(/32広告)

gateway側で、固定IPで出たい宛先を /32 でピンポイントに経路広告します。

# gateway (Lightsail) 側
sudo tailscale set \
  --advertise-routes=203.0.113.10/32,198.51.100.20/32 \
  --ssh

管理画面の Machines → 該当マシン → Edit route settings で経路を承認して、クライアント側で受け入れればOK。

# クライアント側
sudo tailscale set --accept-routes

これで 203.0.113.10 宛の通信だけ がgateway経由になります。それ以外の通信はWireGuardのカプセル化すら発生せず、物理NICからそのまま出ていく。「普段のネット利用ではTailscaleを使ってすらいない」という、なかなか気持ちのいい状態です。当然、Lightsailの転送量も対象宛先の分しか増えません。

事前にgateway側でIPフォワーディングとNAT(masquerade)を有効にしておきましょう:

echo 'net.ipv4.ip_forward = 1' | sudo tee /etc/sysctl.d/99-tailscale.conf
sudo sysctl -p /etc/sysctl.d/99-tailscale.conf

# AL2023はfirewalld。masqueradeを忘れると「繋がるのにネットに出られない」状態になる
sudo firewall-cmd --permanent --add-masquerade
sudo firewall-cmd --reload

宛先がドメイン名で、IPが変わるなら:App Connector

--advertise-routes はIP/CIDRしか受け付けてくれません。「このFQDNだけ固定IP経由にしたい。でも裏のIPがちょいちょい変わる」というケース(クラウド上のインスタンスなど)には App Connector の出番です。

App Connectorは指定ドメインのDNS解決を肩代わりして、解決されたIPを動的に経路広告してくれます。つまり IPが変わっても勝手に追従。ワイルドカード(*.example.com)もいけます。設定は管理画面の Apps で対象ドメインを登録するだけ。

宛先 使う機能
固定IPの少数のサーバ Subnet Router(/32 直接指定)
ドメイン名で叩く・IP変動あり App Connector
ワイルドカードドメイン App Connector一択

ハマりどころ

  1. tailscale set --advertise-* はスナップショット上書き--advertise-connector だけを単独で実行したら、既存の経路広告が全部消えて接続不能に……という事故を一度やらかしました。「差分追加」ではなく「指定したものだけを広告する」挙動なので、変更するときは毎回、維持したいフラグを全部並べて実行すること。いまの広告状態は sudo tailscale debug prefs | grep Advertise で確認できます
  2. 「繋がるのにネットに出られない」 → firewalldのmasquerade忘れが定番
  3. 経路がクライアント側で有効にならない → gateway側で広告していても、管理画面での承認とクライアント側の --accept-routes が要る
  4. 再起動したら設定が消えたfirewall-cmd--permanent 漏れ。AL2023はnftablesベースなので、確認は iptables -L じゃなくて sudo nft list ruleset