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?

Raspberry Pi4でVPNを構築して外部から自宅NWにアクセスする2025

Last updated at Posted at 2025-01-26

環境

以下の環境で設定しました。3時間くらい詰まったので、備忘録として残します。
PiVPN以外の事項(Raspberry Pi OSの設定)はこの記事では説明しません。

  • Raspberry Pi 4
  • Raspberry Pi OS
  • PiVPN + WireGuard
  • OCN固定回線(グローバルIPあり、変動)
  • ASUSルータの標準機能で以下を利用
    • IPアドレスをクライアントで固定(例えばRaspberry Piに192.168.0.81を固定で割り当てました)
    • DDNS(ルータの機能で、hoge.asuscomm.comのようなDDNSが取得可能)
    • ポートフォワーディング

PiVPN設定方法

基本的に以下のサイトの通りやれば大丈夫ですが、PiVPNの設定が最新状況で違ったところもありました。
そのため、PiVPNの設定のみ、イチから記載します。

基本設定

基本設定は上記サイトと全く同じです。が、自分用メモとして記載しておきます。

  1. PiVPNのインストール
    curl -L https://install.pivpn.io | bash
  2. DHCP Reservation
    DHCPか静的IPかが聞かれています。
    基本的にはRaspberry Piから静的IPを指定するので「No」を選ぶのですが、
    私の環境ではASUSルータ側からRaspberry PiのIPアドレスを固定しており、DHCPを引き続き利用するため「Yes」を選択しました。
  3. Choose a user
    OS上にいるユーザしか選べません。インストール時にhogeというユーザを作成していたら、piは出てこず、hogeしか出てこないと思います。
    特に誰でインストールしても良いと思うので、hogeのままで進めます。
  4. Installation mode
    VPNと言っても色々あり、WireGuardとOpenVPNが選べます。
    WireGuardがLinuxではナウでイケてるVPNなので、こちらを選択します。
    「Proceed to upgrade?」は私の環境では聞かれませんでした。。
  5. Default wireguard port
    WireGuard、VPNソフトで使うポート番号です。デフォルトの51820のままにしました。
  6. DNS Provider
    DNSプロバイダです。クライアントで使うDNSを1.1.1.1にするか8.8.8.8にするか、という話です。
    つまり、ぶっちゃけなんでも良いと思います。
    私は↑↓でCloudFlareにして、Spaceを押して、Enterで確定しました。
  7. Public IP or DNS
    私の環境ではDDNSなので、「DNS Entry」で、自分のDDNSを入力しました。
  8. あとは全部YESで抜ければOKです。rebootするので少し待ちます。

/etc/sysctl.confの設定

上記サイトには「追記」で末尾に書いていますが、私はこの設定が必要でした。

  1. sudo vi /etc/sysctl.confで開きます。
  2. net.ipv4.ip_forward=1の行がデフォルトでコメントアウトされているので、コメントを外して有効化します。
  3. viを閉じてsudo sysctl -pで有効化します。

サーバ側の設定

ここで、上記サイトと手順が異なってきます。上記サイトでは、クライアントを追加していますが、先にサーバ側で設定します。

sudo vi /etc/wireguard/wg0.confで、サーバ側の設定をします。
ファイルの内容を以下のように書きます。一例なので、以下のポイントを参照して書き換えてください

[Interface]
PrivateKey = FOO
Address = 10.133.100.1/24,fd11:5ee:bad:c0de::a85:6401/64
#replace eth0 with the interface open to the internet (e.g might be wlan0 if wifi)
PostUp = iptables -A FORWARD -i %i -j ACCEPT; iptables -A FORWARD -o %i -j ACCEPT; iptables -t nat -A POSTROUTING -o wlan0 -j MASQUERADE; iptables -t nat -ATROUTING -s 10.133.100.0/24 -j MASQUERADE
PostDown = iptables -D FORWARD -i %i -j ACCEPT; iptables -D FORWARD -o %i -j ACCEPT; iptables -t nat -D POSTROUTING -o wlan0 -j MASQUERADE; iptables -t nat -D POSTROUTING -s 10.133.100.0/24 -j MASQUERADE
MTU = 1420
ListenPort = 51820

書き換えのポイントは以下です。

  • Address = 10.133.100.1/24の部分はそのままにします。
    • これが、WireGuardで割り当てるネットワーク…みたいなイメージです。
    • ip -aで、RasPiのネットワークインターフェースが見えるのですが、ここでも10.133.100.1/24を使っているのが見えます。
    • 他と被らなければ何でも良いのですが、触らぬ神に祟りなしでそのままにします。
  • #replacePostUpPostDownの3行は追加してください。その際、10.133.100.0/24は、Addressの部分と対応させてください。
    • このおまじないをいれることで、WireGuardで割り当てるネットワークを自宅LANと共有する…みたいなことができます。
    • なので、正しくアドレスを指定しないと、正しく自宅LANに繋がりません。

クライアントの追加

上記サイトでは「クライアントの設定変更も必要」とも見えますが、私の環境では不要でした。
そもそも、WireGuardで「10.133.100.0/24は自宅VPNと疎通OK」と設定しているので、クライアントのIPアドレスはデフォルトで割り振られる10.133.100.xで大丈夫、ということです
アプリ上の「Allowed IPs」は、「どの通信がこのVPNを抜けるか」という設定のようです※。ここを0.0.0.0/0、つまり全通信にしておけば、自宅LANにいるのと同じになります。
参考まで、設定後に自宅のサーバにつなぐと、Last Loginが見慣れぬIPになります。
image.png

※この部分は個人的に怪しいです。間違っていたらご指摘ください。

  1. pivpn addでクライアントを追加
  2. pivpn -qrでiPhoneで読み取って追加…など。

参考:トラブルシュート方法

pivpn -cでクライアントがつながっているか確認

私は、iPhoneのアプリで「有効」と出ても通信できないケースがありました。
よくよく見ていると、IPアドレスが自宅と違っており、自宅のRasPiに正しくつながっていませんでした。
pivpn -cで接続状態、通信量などを見ることで、正常につながっているかが推測できます。

ChatGPTに聞きましょう

私は「イチから設定する方法」を聞いて、sysctlの手順が抜けていることに気づきました。
壁打ち、質問しまくるのも良さそうです。

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?