🍓

Raspberry Pi で Tailscale VPN を動かすまでの覚書

2024/06/09に公開

背景

自宅のネットワークに外部からアクセスしたくなったので VPN サーバーを立てることにしました。と言ってもしっかりしたものが欲しいわけではなく「出張中に自宅に置いてある PC に RDP で簡単な作業をしたい」というくらいのカジュアルな用途なので、そこそこ安価に済ませたいです。

ということで、Tailscale というイマドキな VPN サービスと Raspberry Pi で作ってみました。今回は俺的チートシートとしてのメモを残します。

https://tailscale.com/

Raspberry Pi のセットアップ手順

1. SD カードに OS イメージを焼く

Raspberry Pi Imager で SD カードに OS イメージを焼きましょう。このとき Wi-Fi や SSH を事前に有効にしておくと非常に楽です。
https://www.raspberrypi.com/software/

焼きあがった SD カードを Raspberry Pi に刺して電源を入れましょう。

2. Tailscale をセットアップ

Tailscale のアカウントは事前に作っておきましょう。Raspberry Pi に直接 HDMI ケーブルでモニタに繋いで Terminal 操作をするか、SSH で接続するなどして下記のコマンドを打ち込みます。

# インストール
curl -fsSL https://tailscale.com/install.sh | sh

# IP の転送を許可
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

もし Subnet routers や Exit nodes を有効にしたい場合は tailscale up の際にオプションを追加します。Subnet として公開したい IP Address 帯は適宜読み替えてください。

sudo tailscale up --advertise-routes=192.168.1.0/24 --advertise-exit-node

Tailscale はサービスとして登録されるので、再起動後も自動的に起動してきます。

3. Wi-Fi の省電力モード管理を切る

以下のコマンドを入力することで Power Management の設定を OFF にすることができます。

# 実行
iwconfig wlan0 power off

# 確認
iwconfig

ただ上記のコマンドを入力するだけでは再起動後に再度 Power Management が ON になってしまいます。なので、OS 起動時にも自動的に無効化するために /etc/rc.local に先のコマンドを書き込みます。末尾にある exit 0 の前あたりに入れておけば良いでしょう。

/etc/rc.local
iwconfig wlan0 power off    < この行を追加
exit 0

Appendix

以降はおまけです。作業をスムーズに行うための便利コマンドだとか、VPN サーバーとしての性能測定結果などを載せます。

VPN サーバーとしての性能

明確に Raspberry Pi を経由した通信にするために Tailscale Exit nodes を利用した状態でザックリ計測してみました。どのモデルも Wi-Fi ベースで稼働させています。

モデル 下り速度 [Mbps] 温度 [℃] 備考
Raspberry Pi Zero 2 W 3.5 53.1
Raspberry Pi 4 Model B 40.7 60.3 ヒートシンクのみ
Raspberry Pi 5 67.9 49.3 アクティブクーラー使用

Raspberry Pi 4 以上のスペックがあると RDP としては特段のストレスなく使える範囲でした。それどころか YouTube すらストレスなく閲覧できます。Zero 2 W は流石に鈍足ですが、RDP を低速モードで動作させれば妥協できるラインでした。

RDP を有効化

セットアップのためにもう一台モニタを用意したりするのは面倒なので RDP 接続できると楽です。Windows 標準のリモートデスクトップ接続を使うときは以下を実行しましょう。

sudo apt install xrdp

ちなみに RDP 中に Chromium などを立ち上げると表示が乱れて使い物にならないことがあります。そういったときには以下を行ってください。

  1. /etc/X11/xrdp/xorg.conf を開く
  2. Section "Device" の中にある Option "DRMDevice" の値を "" に変更
  3. デバイス再起動 (sudo shutdown -h now)
/etc/X11/xrdp/xorg.conf
Section "Device"
    Identifier "Video Card (xrdpdev)"
    Driver "xrdpdev"
    # Option "DRMDevice" "/dev/dri/renderD128"    < ここをコメント
    Option "DRMDevice" ""    < こう書き換える
    Option "DRI3" "1"
EndSection

Bluetooth 機器の接続

愛用している MX Master 2 を有線接続してみたけれど、微塵も反応がなかったので Bluetooth 接続で解決しました。以下を覚えておけば Bluetooth マウスでも安心です。

# Bluetooth 関連の操作モードに入る
bluetoothctl

# 周辺機器をスキャン
scan on

# MAC アドレスを指定して接続
pair <MAC Address>

温度計測

各々の作業の実行中にどのくらい発熱するのかを知っておくと Raspberry Pi を運用する上で安心かと思います。ずっと計測しながら作業していましたが、Raspberry Pi 5 のアクティブクーラーは 50 ℃を下回ると完全に停止するようです。言うて 50 ℃を超えて稼働しているときでも「無音」と言って差し支えないほど静穏ですが。

# 現在の温度を計測
vcgencmd measure_temp

# 2 秒ごとに計測
watch -n 2 vcgencmd measure_temp

Discussion