Tailscale Exit Node設定でインターネットに接続できない問題の解決方法

Tailscale Exit Node設定でインターネットに接続できない問題の解決方法
Tailscaleは、簡単にVPNネットワークを構築できる優れたツールです。その中でもExit Node機能を使うことで、特定のサーバー経由でインターネットにアクセスできるようになります。しかし、Exit Nodeを設定したにも関わらず、他の端末からインターネットに接続できなくなるという問題に遭遇することがあります。(過去2回設定して、2回とも忘れていた…ので記録に残す)

問題の症状

  • 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 への設定追加で永続化することで解決できます。

参考情報

公式ドキュメント

Linux システム設定