公開された自宅ラボのリスク
映画鑑賞用のJellyfinや、スマート照明用のHome Assistantなどのサービスをセットアップした後、外出先からもアクセスしたいと考えるのは自然なことです。多くの初心者と同じように、私も最初は安易な方法を選び、ルーターのポートを何十個も開放してしまいました。その結果はどうだったでしょうか? 48時間以内に、ログには世界中のIPアドレスから1,200回を超えるSSHログイン試行の失敗が記録されていました。それはまさに警鐘でした。
ポートフォワーディング(ポート開放)経由で個々のサービスを公開することは、災害を招くようなものです。開放されたすべてのポートは、防御壁に開いた潜在的な穴となります。もし明日、Jellyfinに新しい脆弱性が見つかれば、ネットワーク内部全体が危険にさらされます。私は、公開することなく、まるで自宅のデスクに座っているかのようにホームネットワークにアクセスできる、単一の堅牢なエントリポイントが必要だと気づきました。これこそが、VPNゲートウェイが必要な理由です。
なぜOpenWrtとWireGuardなのか?
私は数ヶ月かけてさまざまな構成をテストしました。専用のUbuntu VMでOpenVPNを試したり、市販のルーターに搭載されている標準的なVPN機能もいじってみました。最終的に、Linksys WRT3200ACMで動作するOpenWrtとWireGuardの組み合わせに落ち着きました。これはパフォーマンスとコントロールの完璧なバランスと言えます。
WireGuardが他の競合に勝っている理由は、速度、シンプルさ、そして効率性の3点です。ユーザ空間で動作する巨大なコードベースของ OpenVPNとは異なり、WireGuardはLinuxカーネル内で動作します。私のハードウェアでは、OpenVPNは40 Mbpsを出すのが精一杯でしたが、WireGuardは300 Mbpsのアップロード帯域を簡単に使い切りました。これにより、趣味のセットアップがプロフェッショナルなレベルへと引き上げられます。
コアコンセプト:スプリットトンネリング vs フルトンネリング
設定を始める前に、データの流れをどのように制御するかを選択する必要があります。
- フルトンネリング(Full Tunneling): すべてのインターネットトラフィックが自宅のルーターを経由します。カフェのWi-Fiなどで安全を確保するのに最適ですが、自宅のアップロード速度に大きく依存します。
- スプリットトンネリング(Split Tunneling): 自宅のサーバー宛のトラフィック(192.168.1.0/24など)のみがVPNを経由します。Netflixの視聴などはローカルの回線をそのまま使用します。最高のパフォーマンスを得るための、私の日常的な選択肢です。
OpenWrtでのWireGuardゲートウェイの設定
LuCI(Webインターフェース)とコマンドライン(CLI)を組み合わせて使用します。初期設定については、CLIの方が素早く、操作ミスの可能性が低いため、私はCLIを好んで使用します。
# パッケージリストを更新し、WireGuardをインストールする
opkg update
opkg install luci-proto-wireguard wireguard-tools kmod-wireguard
1. キーの生成
WireGuardは非対称暗号化を使用します。ルーターと、接続するすべてのデバイスの両方に、公開鍵と秘密鍵のペアが必要です。
# キーを保存するための安全なディレクトリを作成する
mkdir -p /etc/config/wireguard_keys
cd /etc/config/wireguard_keys
# 権限を制限してサーバーキーを生成する
umask 077
wg genkey | tee server_private.key | wg pubkey > server_public.key
2. VPNインターフェースの設定
LuCIの「ネットワーク」 -> 「インターフェース」に移動し、vpn0という名前の新しいインターフェースを作成します。プロトコルにはWireGuard VPNを選択し、以下の設定を行います:
- 秘密鍵(Private Key):
server_private.keyファイル内の文字列。 - リスンポート(Listen Port): 51820
- IPアドレス: 10.0.0.1/24(VPNクライアント専用のサブネットを作成します)。
3. ファイアウォール:点と線を繋ぐ
設定ミスはたいていここで起こります。暗号化されたトラフィックがルーターに入ることを許可し、そのトラフィックがLANに到達できるようにする必要があります。まず、UDPポートを開放するルールを作成します:
# WAN経由のWireGuardトラフィックを許可する
config rule
option name 'WireGuard着信を許可'
option src 'wan'
option dest_port '51820'
option proto 'udp'
option target 'ACCEPT'
次に、vpn0をVPNという名前の新しいファイアウォールゾーンに割り当てます。VPNゾーンからLANゾーンへのフォワーディング(転送)を許可するように設定します。このシンプルなブリッジにより、スマートフォンからNASやProxmoxノードに通信できるようになります。
4. 最初のデバイスの追加
スマートフォンやノートPCで新しいキーペアを生成します。OpenWrtのWireGuard設定で、「ピア(Peer)」を追加し、以下の詳細を入力します:
- 公開鍵(Public Key): デバイスの公開鍵。
- 許容IP(Allowed IPs): 10.0.0.2/32(この特定のデバイス用の固定IP)。
- Route Allowed IPs: チェックが入っていることを確認します。
運用開始から6ヶ月:現実的な評価
私はこの構成を半年間運用してきました。これにより、ラボの管理方法が根本から変わりました。長期使用中に気づいた点は以下の通りです。
信頼性と速度
WireGuardは驚くほど安定しています。スマートフォンが自宅のWi-Fiから5Gの基地局に切り替わっても、接続が切れたりハングしたりすることはありません。ミリ秒単位でハンドシェイクを再確立します。離れた場所にあるホテルのWi-Fiから、サーバーにある60GBの4K Blu-rayリマックッスをストリーミング再生することにも成功しました。これらの転送中、ルーターのCPU使用率が12%を超えることは滅多にありません。
バッテリー持ち
以前は、VPNを24時間接続し続けるとスマートフォンのバッテリーを消耗するのではないかと心配していました。しかし、WireGuardは「静か」であるため異なります。データを送信していないときは、スマートフォンの無線機能を呼び起こすようなキープアライブのpingを送信しません。私のAndroidデバイスでは、WireGuardによるバッテリー消費は1日を通して1%未満です。
DNSの悩みを解決する
タッチスクリーンで 192.168.1.50 のようなIPアドレスを入力するのは面倒です。これを解決するために、VPNのDNS設定をルーター上で動作しているAdGuard Homeに向けるようにしました。今では、モバイルブラウザに nas.home と入力するだけです。完璧に動作するだけでなく、モバイルデータ通信中でもネットワーク全体の広告ブロックという恩恵を受けられます。
結論
VPNゲートウェイの構築は、自宅ラボ(HomeLab)に施すことができる最も重要なアップグレードです。セキュリティ戦略を、受動的な「誰もこのポートを見つけないことを願う」ものから、能動的な「ゼロトラストモデル」へとシフトさせることができます。認証されたデバイスだけが、そこにサービスが存在することを知ることができるのです。
まずはWireGuardから始めましょう。コードはクリーンで、古いプロトコルよりもバグが少なく、安価なハードウェアでのパフォーマンスは他の追随を許しません。安全なトンネルが稼働すれば、心ゆくまで構築と実験を楽しむことができるようになります。

