0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

年末帰省するエンジニアよ、VPNで自宅のRaspberry Piに遠隔で接続しよう!

Posted at

前置き

みなさんは自宅ネットワークに遠隔でアクセスしたいと思うことはないでしょうか?
記事執筆時点(2025/12/27)、年の瀬で実家に帰省するのですが、自宅のラズパイでどうしてもWebサーバを構築したい……でも帰らなきゃ……ラズパイ持っていくのも荷物になるし……
というわけで、実家から自宅へVPN接続をすることにしました。

VPNとは?

VPN(Virtual Private Network)とは、通信を暗号化することで、遠隔のネットワークにインターネット経由で接続することができる技術です。
今回は、実家のネットワークから自宅のネットワークにSSH接続できる状態を目指します。

全体構成

https://prod-files-secure.s3.us-west-2.amazonaws.com/01e6164d-e298-8134-ba37-00038eea7616/8200bf69-17fc-46df-a9eb-c75fab731a65/image.png?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Content-Sha256=UNSIGNED-PAYLOAD&X-Amz-Credential=ASIAZI2LB466THC2ORUB%2F20251228%2Fus-west-2%2Fs3%2Faws4_request&X-Amz-Date=20251228T140545Z&X-Amz-Expires=3600&X-Amz-Security-Token=IQoJb3JpZ2luX2VjEL3%2F%2F%2F%2F%2F%2F%2F%2F%2F%2FwEaCXVzLXdlc3QtMiJGMEQCIH2RV0gBBR8S7LjmuftBWShljRVer7VYjwgnGIetTe5XAiBfO7myvcZBHKuVVecd8E5u49sOFYXRiO0OnL4nh%2F%2FuQiqIBAiG%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F8BEAAaDDYzNzQyMzE4MzgwNSIMLC%2BSFA2PHryT8gjQKtwDTUMlRi5S%2FfLOIuf7IeP2RgXcRy7ynilpUepdediQOw%2FennoBAtUi7gwYyteRq7pRd0DvEj0BlMoGPh8DEzm6Ll%2BJRxdpBib0MQgWL5gz%2BbnPHWdJLQeya3T7HZabl57R5gfBr1s2mX38WtrhQWvgBtXIl8t4GJnd9zb2KDOGmyhzHsNbLtjeqq%2F%2BGV9UrRAIORZw77Pc%2Bw4x45faSj9FqxdTu%2FjYVB4NOrMcKJFyySViU28iZI0JpU2ZHBuF3FZQbLrnxh4B2DYb4%2BMnhFHLLClM8r6ceXU2kePczsbj3Sl8YnUP3pJN9nhoo2AOezXlt3FFcKx%2FWItclHlBQqcKACYwmQqDFqWGMeGz2tDAAwLhh60eUBDy%2BrIeG7eMZxhEw263aXotqfIOhmTAa%2Bx%2BL7A3av6L98ZgSsGjOcqQUhzivimkC3b2Gh0xZdOcCPSFJeNjD6ou66Y%2Fc4JGCENJqFWl8Y0NAVDQjydLDDhADTdUe13ZUFRT1UITgFzGb9LQ5P17NmTI5gzQKxsGfPNcIcDFnX5%2B2z3fNcz34K7Zl2P4DEHmiQ2%2F8aNFrqqEr%2BzZKpzEev1TuxuJoE%2BIIll48AmdUjuUmL0Z6ueAkXinJJnbOfKg9XW7qqo3IR8wz9TEygY6pgHa1Vtouerqb0xgYhwCGsER1RTrSTAiCOvyMhLP%2FGWRmXWHIOS866R9vEHAw03e2ezomzbkabq0PjfftJgHJSoFGeTQuv%2Bctbt5XmKNeWFwQjFlYdOmtbhdQAwdhsTwCE61a%2F%2BySp1hWPWprAJ6sPtoTJT4pL019e%2BI0yOX%2BIuIEpG5K0G%2Fug5BNBshMfdXyk1oLXqh6SCr1L5RHyExcTTtpneJrRXg&X-Amz-Signature=4636b7d2840eefc3335ea2350f66c6c0f97c0a10ed4db167c6fbf0063a92bf83&X-Amz-SignedHeaders=host&x-amz-checksum-mode=ENABLED&x-id=GetObject
実作業は下記の通りです。

  • Raspberry Pi に VPN サーバ を構築
  • 実家のPCに VPN クライアントをインストール
  • 自宅ルータのポートフォワーディング設定

技術選定

VPN技術としてはWireGuardとOpenVPNが有力候補なイメージです。
今回はWireGuardを選択しました。個人利用としては十分だと思います。

比較

技術 特徴 適している用途
WireGuard 軽量・高速・設定がシンプル 個人利用、簡単に導入したい場合など
OpenVPN 高い安全性。証明書管理やネットワーク調整が必要 企業ファイアウォールなど複雑なネットワーク設定がすでに存在する場合など

実践

では、自宅VPN実装に着手していきましょう。

① WireGuardインストール(自宅ラズパイ)

sudo apt update
sudo apt install wireguard -y

② WireGuard 設定(自宅ラズパイ)

鍵の生成

sudo cd /etc/wireguard
sudo wg genkey | tee server_private.key | wg pubkey > server_public.key
sudo wg genkey | tee client_private.key | wg pubkey > client_public.key
sudo chmod 600 server_private.key server_public.key client_private.key client_public.key

今回は個人利用のため雑にクライアント側の鍵ペアもサーバ側で作ってしまいましたが、
クライアント側の鍵ペアはクライアントPCで作成してください。

config設定

sudo vi /etc/wireguard/wg0.conf

/etc/wireguard/wg0.conf

[Interface]
Address =10.0.0.1/24
ListenPort =51820
PrivateKey = <server_private.keyの中身>
SaveConfig =true

[Peer]
PublicKey = <client_public.keyの中身>
AllowedIPs =10.0.0.2/32

クライアントPCに鍵を配置

サーバ側公開鍵(server_public.key)、クライアント側秘密鍵(client_private.key)を実家PCに配置します。
ファイルを手持ちのPCのローカルに保存したり、USBで持ち帰ったり、メモしたり(?)、お好きな方法で構いません。
本来は

  1. クライアント側で鍵ペアを作成して公開鍵をサーバ側に教える
  2. サーバ側はサーバ公開鍵をクライアントに渡す
    の手順に沿うべきで、真似しないでくださいね。

③ IP フォワーディング有効化(自宅ラズパイ)

sudo vi /etc/sysctl.conf

以下を有効化

/etc/sysctl.conf

net.ipv4.ip_forward=1

反映:

sudo sysctl -p

④ WireGuard 起動(自宅ラズパイ)

sudo systemctl enable wg-quick@wg0
sudo systemctl start wg-quick@wg0

確認:

sudo wg

⑤ 自宅ルータの設定(自宅ルータ)

インターネット側IPアドレスにおけるUDP/[利用可能なポート番号] を、
自宅ラズパイのローカルIPにおけるUDP/51820へ転送するように設定します。

自宅に設置のルータによって設定方法は異なります。
ルータの管理者画面にアクセスして設定してください。

実家に持っていくもの

WireGuardの設定はここまでですが、自宅ラズパイから下記を持ち出しましょう。

  • WireGuardのサーバ側公開鍵(server_public.key)
  • WireGuardのクライアント側秘密鍵(client_private.key)
  • 自宅ラズパイのSSH秘密鍵(ラズパイが鍵認証の場合)
    鍵は安全な経路で持ち出しましょう!!
    自宅側での作業はここまでです!帰省準備を始めましょう。

✈️ 飛行機帰省中…………


帰省しました!実家の匂いがしますね。
では実家側での作業を始めましょう。

① WireGuard クライアントを入れる(実家PC)

Windows

macOS

brew install --cask wireguard

または App Store で WireGuard を検索

筆者環境ではMacBookのみ動作確認済みです。

② クライアント設定ファイルを作る(実家PC)

ファイル名例:

home.conf

中身:

[Interface]
PrivateKey = <client_private.key>
Address =10.0.0.2/24
DNS =8.8.8.8

[Peer]
PublicKey = <server_public.key>
Endpoint = <自宅のグローバルIPアドレス>:51820
AllowedIPs =10.0.0.0/24, <自宅ラズパイのネットワークアドレス帯>
PersistentKeepalive =25

③ WireGuard クライアントに設定反映(実家PC)

以下、macOSにてApp StoreでWireGuardをインストールした場合の手順です。
(他の環境でも基本的に同様の手順になると思われます。)

  1. WireGuard を起動
  2. 左下の「+」ボタンより、「設定が空のトンネルを追加」を選択
  3. クライアント設定ファイルの中身を記述
  4. 保存する。
    https://prod-files-secure.s3.us-west-2.amazonaws.com/01e6164d-e298-8134-ba37-00038eea7616/f205e542-c490-4ecd-aa3d-787e69b7694e/WireGuard%E3%82%AF%E3%83%A9%E3%82%A4%E3%82%A2%E3%83%B3%E3%83%88.png?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Content-Sha256=UNSIGNED-PAYLOAD&X-Amz-Credential=ASIAZI2LB466THC2ORUB%2F20251228%2Fus-west-2%2Fs3%2Faws4_request&X-Amz-Date=20251228T140545Z&X-Amz-Expires=3600&X-Amz-Security-Token=IQoJb3JpZ2luX2VjEL3%2F%2F%2F%2F%2F%2F%2F%2F%2F%2FwEaCXVzLXdlc3QtMiJGMEQCIH2RV0gBBR8S7LjmuftBWShljRVer7VYjwgnGIetTe5XAiBfO7myvcZBHKuVVecd8E5u49sOFYXRiO0OnL4nh%2F%2FuQiqIBAiG%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F8BEAAaDDYzNzQyMzE4MzgwNSIMLC%2BSFA2PHryT8gjQKtwDTUMlRi5S%2FfLOIuf7IeP2RgXcRy7ynilpUepdediQOw%2FennoBAtUi7gwYyteRq7pRd0DvEj0BlMoGPh8DEzm6Ll%2BJRxdpBib0MQgWL5gz%2BbnPHWdJLQeya3T7HZabl57R5gfBr1s2mX38WtrhQWvgBtXIl8t4GJnd9zb2KDOGmyhzHsNbLtjeqq%2F%2BGV9UrRAIORZw77Pc%2Bw4x45faSj9FqxdTu%2FjYVB4NOrMcKJFyySViU28iZI0JpU2ZHBuF3FZQbLrnxh4B2DYb4%2BMnhFHLLClM8r6ceXU2kePczsbj3Sl8YnUP3pJN9nhoo2AOezXlt3FFcKx%2FWItclHlBQqcKACYwmQqDFqWGMeGz2tDAAwLhh60eUBDy%2BrIeG7eMZxhEw263aXotqfIOhmTAa%2Bx%2BL7A3av6L98ZgSsGjOcqQUhzivimkC3b2Gh0xZdOcCPSFJeNjD6ou66Y%2Fc4JGCENJqFWl8Y0NAVDQjydLDDhADTdUe13ZUFRT1UITgFzGb9LQ5P17NmTI5gzQKxsGfPNcIcDFnX5%2B2z3fNcz34K7Zl2P4DEHmiQ2%2F8aNFrqqEr%2BzZKpzEev1TuxuJoE%2BIIll48AmdUjuUmL0Z6ueAkXinJJnbOfKg9XW7qqo3IR8wz9TEygY6pgHa1Vtouerqb0xgYhwCGsER1RTrSTAiCOvyMhLP%2FGWRmXWHIOS866R9vEHAw03e2ezomzbkabq0PjfftJgHJSoFGeTQuv%2Bctbt5XmKNeWFwQjFlYdOmtbhdQAwdhsTwCE61a%2F%2BySp1hWPWprAJ6sPtoTJT4pL019e%2BI0yOX%2BIuIEpG5K0G%2Fug5BNBshMfdXyk1oLXqh6SCr1L5RHyExcTTtpneJrRXg&X-Amz-Signature=06f207679d9e79459b1570ce164b555773c46a2e1711626e223c4c70ab809fd5&X-Amz-SignedHeaders=host&x-amz-checksum-mode=ENABLED&x-id=GetObject
    以上でクライアント設定は全て完了です!
    接続確認をしましょう。

④ VPN を ON にする

設定したトンネルをダブルクリックすると、VPNが有効化されます。


⑤ 接続確認(実家PC)

  1. Raspberry Pi に SSH

    ssh pi@<自宅ラズパイのプライベートIPアドレス>
    
  2. VPN IP に ping

    ping 10.0.0.1
    

    → 通れば 成功です!
    なお、VPNを無効化したい場合はWireGuardクライアントで設定したトンネルを再度ダブルクリックしましょう。


筆者のつまずきエラー

本作業において筆者の手が止まったポイントを列挙しておきます。
いずれもすぐに原因はわかりましたが、AIに聞く前に確認してみてください!

  • VPN用の鍵とは別に、SSH鍵認証用の鍵も実家PCへ持ち込むこと
    • VPN接続はできてもSSHはできなくなり本末転倒です。
  • インターネット側のどのポートで待ち受けるか、LAN側のどのポートへフォワーディングするか正しく認識すること
    • 自宅ルータ側で待ち受けポートとして指定できるポートが制限されていました。当初インターネット側のポートもUDP/51280で待ち受ける想定でしたが、異なるポート番号にし、設定ファイルの記載の変更が発生しました。
  • グローバルIPアドレスは正しいか?
    • 筆者は自宅に回線が2個あり、当初はラズパイの接続しているルータとは異なる回線の方で作業していたため、グローバルIPの不一致のため接続できない事象が発生しました。

VPN利用におけるセキュリティ対策

プライベートネットワークを開放する作業のため、安全性は常に考慮すべきです。
こちらの記事にわかりやすくまとめられておりました。
VPN接続のセキュリティ周りについて
https://qiita.com/Yukimi_Choko/items/31076b737b6099cc152e

VPNの構築は初めてでしたが、かなり簡単にセットアップできました。
みなさまも今後LinuxでVPNサーバを構築する際は、WireGuardの利用をおすすめします。
それでは、よいお年を!

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?