‹ Mockun Note

Raspberry Pi 4でTailscaleのExit nodeを立てる

Posted Sep 10, 2024

2024年9月7日(土)の深夜にイギリスの自宅近くで大きな落雷がありました。深夜だったので気がつかなかったのですが、その落雷で我が家は停電し、その時に光ファイバーの終端装置が故障したみたいです。

我が家の端末だけでなく、近隣の光ファイバー網がダウンし、回線業社は翌日の日曜日から月曜の午後にかけて復旧作業に追われているようでした。

近隣の光ファイバー網が復旧した後、火曜の午後には自宅の終端装置の交換が完了しましたが、その影響で自宅内のネットワーク設定もリセットされたため、このタイミングで外部からのアクセスで使っているVPNサーバーも再構築することになりました。

この記事は、VPNサービスであるTailscaleのExit nodeの再セットアップの備忘録として、実施すべき手順をまとめたものです。

全体像

  1. Ubuntuのインストール
  2. 起動とパッケージの更新
  3. 固定IPの設定
  4. Tailscaleのインストールと設定

1. Ubuntuのインストール

Rasoberry Pi Imagerを使って、OSをMicroSDカードにインストールします。

デバイスを選択

OSを動かすデバイスを選択します。

手元にはRaspberry Pi 4の4GBがあるので、Raspberry Pi 4を選択しました。

OSを選択

Rasoberry Pi Imagerを起動したら利用するOSを選択します。

今回(2024年9月10日)はUbuntu Server 24.04 LTSを選択しました。

LTSは「Long-Term Support」の略語であり、Ubuntuの場合は5年間の無償サポートが提供されます。

Other general-purpose OS > Ubuntu > Ubuntu Server 24.04.1 LTS (64bit) と順番に選択します。

ストレージを選択

PCに接続したMicroSDカードを選択します。

オプションの設定

設置場所で使えるホスト名、wifi、ユーザーとパスワード、公開鍵認証の場合には鍵情報を設定します。

OSのインストール

設定が完了したらMicroSDカードにOSをインストールします。

進捗率が表示され、インストールとインストール後の確認が終わればインストールは完了です。

2. 起動とパッケージの更新

Raspberry Pi 4にMicroSDカードを接続

OSのインストールが完了したら、PCからMicroSDカードを取り出し、Raspberry Pi 4に接続します。

Raspberry Pi 4の起動

Raspberry Pi 4にUSB-Cの電源ケーブルに接続して起動します。

Raspberry Pi 4のIPアドレスを特定

我が家の場合には、wifiルーターの管理画面で接続しているデバイス(PC、スマホ、Raspberry Piなど)を一覧で確認できるので、この管理画面からRaspberry Pi 4に割り当てられているIPアドレスを特定します。

ホスト名から簡単に特定できる場合や一つずつ潰していくなど地道に探すこともあります。もっと良いやり方があるかもしれませんが、デバイスの数が少ないので問題ありません。

他にもPCのコマンドラインでarp -aを打つなどして、ネットワークに接続しているデバイスのIPアドレスを取得し、そこから探す方法もあります。

arp -a

Raspberry Pi 4にSSH接続

sshコマンドを使ってRaspberry Pi 4にログインします。

今回は公開鍵認証を設定したので、ssh ユーザー名@IPアドレスと打つだけでログインできました。

Raspberry Pi 4のユーザー名が「ubuntu」、特定したIPアドレスが「192.168.0.100」だった場合はこんな感じ。

ssh ubuntu@192.168.0.100

パッケージの更新

aptコマンドでパッケージリストを更新します。

sudo apt update

パッケージリストの更新が完了したら、パッケージを更新します。

sudo apt upgrade -y

3. 固定IPの設定

netplanによる固定IPの設定

Tailscaleを使うだけならIPアドレスの固定は不要ですが、メンテナンスや他の用途で使うことも想定してIPアドレスを固定します。

前の手順ではRaspbery Pi 4のIPアドレスはルーターから自動で割り当てられた「192.168.0.100」が設定されていましたが、ここでは有線Etherポートに「192.168.0.201」、wifiに「192.168.0.200」を割り当てています。

こうしておくことで次回からは「ssh ubuntu@192.168.0.200」(wifi)か「ssh ubuntu@192.168.0.201」(有線)で接続できるようになります。

network:
  version: 2
  renderer: networkd
  ethernets:
    eth0: // 有線LAN用ポート
      addresses:
        - 192.168.0.201/24 // 有線LANポートのIPアドレス
      routes:
        - to: default
          via: 192.168.0.1
          table: 201  // 有線LAN用のルーティングテーブル
          metric: 100 // 有線LANが接続されている場合には有線LANを優先的に利用する
      routing-policy:
        - from: 192.168.0.201
          table: 201 // 有線LAN用のルーティングテーブルを使う
      nameservers:
          addresses: [192.168.0.1, 1.1.1.1, 8.8.8.8, 8.8.4.4]
      optional: true
  wifis:
    wlan0: // wifi
      addresses:
        - 192.168.0.200/24 // wifiのIPアドレス
      routes:
        - to: default
          via: 192.168.0.1
          table: 200  // wifi用のルーティングテーブル
          metric: 200 // 有線LANが接続されている場合には有線LANを優先的に利用する
      routing-policy:
        - from: 192.168.0.200
          table: 200 // wifi用のルーティングテーブルを使う
      nameservers:
          addresses: [192.168.0.1, 1.1.1.1, 8.8.8.8, 8.8.4.4]
      optional: true

ルーターの設定(任意)

DHCPの設定でRaspberry Pi 4のイーサネットとwifiにそれぞれ固定IPを割り当てます。

Raspberry Pi4のOS(Ubuntu)で固定IPを指定しているので、ルーターのDHCPによるIP割り当てルールは任意だと思いますが、念のため設定しました。

3. Tailscaleのインストールと設定

固定IPを割り当てたら以下の手順でTailscaleのインストールと設定を進めます。

tailscaleのインストール

以下のコマンドで一発でインストールできました。

詳細はTailscaleのWebサイトを確認すること。

curl -fsSL https://tailscale.com/install.sh | sh

tailscaleの起動

今回のRaspberry Pi 4はExit nodeつまりVPNからインターネットへの出口として利用するため以下のコマンドでIPフォワーディング(転送)の設定を行います。

必ず最新情報をTailscaleのWebサイトで確認すること。

echo 'net.ipv4.ip_forward = 1' | sudo tee -a /etc/sysctl.d/99-tailscale.conf
echo 'net.ipv6.conf.all.forwarding = 1' | sudo tee -a /etc/sysctl.d/99-tailscale.conf
sudo sysctl -p /etc/sysctl.d/99-tailscale.conf
sudo tailscale up --advertise-exit-node

Tailscaleの管理画面でExit nodeを承認

上記コマンドを実行するとExit nodeとして起動するためのリクエストが管理画面に表示されるようになります。

これを管理者の権限を持つユーザーが承認、つまりExit nodeとして利用登録することで利用可能になります。

管理画面の端末一覧

Tailscale Exit nodeの利用

あとはTailscaleのアプリでExit nodeを指定すれば、Exit nodeを通じてインターネットにアクセスできるようになります。

個人的なTailscaleの用途

日本のWebサービスへのアクセス

銀行、動画ストリーミングサービス、Yahoo!Japanなど日本のIPアドレスからしかアクセスできないサービスが意外に多いので、これらを利用する時に使います。

欧州の個人情報規制への(消極的な)対応の一環として、EUやイギリスからアクセスできないサービスが増えており、日本国内のExit nodeなしでは日本のサービスを受けづらい状況です。

TailscaleのExit nodeを実家に設置し、このExit nodeを利用することで海外からでも日本のIPでサービスにアクセスすることができます。

逆もまた然りで、日本からはイギリスのWebサービスを利用できないケースにも遭遇しており、そのようなケースもイギリスのExit nodeを利用することで回避しています。

外出先でのフリーwifi(公衆無線LAN)利用時のセキュリティ

上記のようなアクセス元IPの切り替えの他にも、外出先でのフリーwifiの接続時のセキュリティ向上を目的に利用しています。

イギリスで生活していると、外出先でフリーwifiを利用する機会が多くあります。

カフェ、イベント会場、ホテル、空港などさまざまな場所で無料でwifiを利用することができます。

そのようなwifiを利用する場面ではTailscaleを利用して、スマートフォンやPCからExit nodeまでを暗号化することでリスクを減らしています。

どこまで意味があるのか、ないのかはわかりませんが、念のためという感じです。

モバイル回線(SIMなどの携帯電話回線)を使えば良いのでは?と思うかも知れませんが、日本のような通信環境は望めません。

必然的にフリーwifiを使う機会が増えてくるので、こういった対策をしています。

フリーwifiを使う際にも、利用するサービスによってイギリスと日本のExit nodeを使い分けることができるため便利です。

さいごに一言

今回は落雷をきっかけにした自宅のネットワーク環境の再構築のついでにTailscale(VPN)を再インストールしてみました。

Tailscaleを使えば1時間ほどでVPN環境を構築することが可能ですので、興味がある方は挑戦してみてはいかがでしょうか?

🏷