
問題の症状
- Tailscale Exit Nodeを設定後、クライアント端末からインターネットへの接続ができない
- Tailscaleネットワーク内の通信は正常に動作する
- Exit Nodeサーバー自体はインターネットに接続できている
原因:IP転送が無効
この問題の最も一般的な原因は、Exit Nodeとして設定したサーバーでIP転送(IP Forwarding)が無効になっていることです。
IP転送とは、Linuxサーバーが異なるネットワークインターフェース間でパケットを中継する機能です。Exit Nodeとして動作するためには、Tailscaleインターフェースから受信したパケットを、インターネットに向けて転送する必要があります。
解決方法
1. 現在のIP転送設定を確認
まず、現在のIP転送の状態を確認します:
cat /proc/sys/net/ipv4/ip_forward
この値が 0 の場合、IP転送が無効になっています。
2. IP転送を一時的に有効にする
すぐに問題を解決するために、一時的にIP転送を有効にします:
sudo sysctl -w net.ipv4.ip_forward=1
または、より直接的な方法として:
echo 1 | sudo tee /proc/sys/net/ipv4/ip_forward
3. 設定が反映されたことを確認
cat /proc/sys/net/ipv4/ip_forward
この値が 1 になっていれば成功です。
4. 永続的な設定にする
サーバーを再起動してもIP転送が有効のままになるよう、設定を永続化します:
# 設定ファイルに追記 echo 'net.ipv4.ip_forward = 1' | sudo tee -a /etc/sysctl.conf # 設定を反映 sudo sysctl -p
5. Exit Nodeの設定を確認
Tailscale側でもExit Nodeとして適切に設定されているか確認します:
# Exit Nodeとして広告 sudo tailscale up --advertise-exit-node # 状態確認 tailscale status
追加で必要になる可能性がある設定
ファイアウォール設定
環境によっては、iptablesの設定も必要な場合があります:
# Tailscaleインターフェース経由のトラフィックを許可 sudo iptables -A FORWARD -i tailscale0 -j ACCEPT sudo iptables -A FORWARD -o tailscale0 -j ACCEPT # NAT設定(eth0は実際のインターフェース名に置き換え) sudo iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
IPv6環境での設定
IPv6も使用している場合は、IPv6転送も有効にします:
echo 'net.ipv6.conf.all.forwarding = 1' | sudo tee -a /etc/sysctl.conf sudo sysctl -p
クライアント側での接続設定
Exit Nodeの設定が完了したら、クライアント側でExit Nodeを使用するよう設定します:
# 利用可能なExit Nodeを確認 tailscale status # 特定のExit Nodeを使用 tailscale up --exit-node=<exit-node-ip>
動作確認
設定が正しく動作しているか確認する方法:
# パブリックIPアドレスを確認(Exit NodeのIPアドレスになるはず) curl ifconfig.me # ルーティングを確認 traceroute 8.8.8.8
まとめ
Tailscale Exit Nodeでインターネット接続ができない問題は、多くの場合IP転送が無効になっていることが原因です。sysctl -w net.ipv4.ip_forward=1 で一時的に有効にし、/etc/sysctl.conf への設定追加で永続化することで解決できます。
参考情報
公式ドキュメント
- Tailscale公式ドキュメント - Exit Nodes
- Tailscale公式ドキュメント - Subnet routers and traffic relay nodes
- Tailscale公式ドキュメント - Troubleshooting