選択的ルーティングの設定
TailscaleのExit Node機能をそのまま使うと、デフォルトルート(0.0.0.0/0)を丸ごと持っていかれる all-or-nothing になります。これだと全通信が「自宅→Lightsail→宛先→Lightsail→自宅」のヘアピン経路になって、遅延もLightsailの転送量ももったいない。
そこで登場するのが Subnet Router と App 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一択 |
ハマりどころ
tailscale set --advertise-*はスナップショット上書き。--advertise-connectorだけを単独で実行したら、既存の経路広告が全部消えて接続不能に……という事故を一度やらかしました。「差分追加」ではなく「指定したものだけを広告する」挙動なので、変更するときは毎回、維持したいフラグを全部並べて実行すること。いまの広告状態はsudo tailscale debug prefs | grep Advertiseで確認できます- 「繋がるのにネットに出られない」 → firewalldのmasquerade忘れが定番
- 経路がクライアント側で有効にならない → gateway側で広告していても、管理画面での承認とクライアント側の
--accept-routesが要る - 再起動したら設定が消えた →
firewall-cmdの--permanent漏れ。AL2023はnftablesベースなので、確認はiptables -Lじゃなくてsudo nft list ruleset