環境
以下の環境で設定しました。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の設定のみ、イチから記載します。
基本設定
基本設定は上記サイトと全く同じです。が、自分用メモとして記載しておきます。
- PiVPNのインストール
curl -L https://install.pivpn.io | bash
- DHCP Reservation
DHCPか静的IPかが聞かれています。
基本的にはRaspberry Piから静的IPを指定するので「No」を選ぶのですが、
私の環境ではASUSルータ側からRaspberry PiのIPアドレスを固定しており、DHCPを引き続き利用するため「Yes」を選択しました。 - Choose a user
OS上にいるユーザしか選べません。インストール時にhoge
というユーザを作成していたら、pi
は出てこず、hoge
しか出てこないと思います。
特に誰でインストールしても良いと思うので、hoge
のままで進めます。 - Installation mode
VPNと言っても色々あり、WireGuardとOpenVPNが選べます。
WireGuardがLinuxではナウでイケてるVPNなので、こちらを選択します。
「Proceed to upgrade?」は私の環境では聞かれませんでした。。 - Default wireguard port
WireGuard、VPNソフトで使うポート番号です。デフォルトの51820のままにしました。 - DNS Provider
DNSプロバイダです。クライアントで使うDNSを1.1.1.1
にするか8.8.8.8
にするか、という話です。
つまり、ぶっちゃけなんでも良いと思います。
私は↑↓でCloudFlareにして、Spaceを押して、Enterで確定しました。 - Public IP or DNS
私の環境ではDDNSなので、「DNS Entry」で、自分のDDNSを入力しました。 - あとは全部YESで抜ければOKです。rebootするので少し待ちます。
/etc/sysctl.confの設定
上記サイトには「追記」で末尾に書いていますが、私はこの設定が必要でした。
-
sudo vi /etc/sysctl.conf
で開きます。 -
net.ipv4.ip_forward=1
の行がデフォルトでコメントアウトされているので、コメントを外して有効化します。 - 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を使っているのが見えます。 - 他と被らなければ何でも良いのですが、触らぬ神に祟りなしでそのままにします。
-
#replace
、PostUp
、PostDown
の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になります。
※この部分は個人的に怪しいです。間違っていたらご指摘ください。
-
pivpn add
でクライアントを追加 -
pivpn -qr
でiPhoneで読み取って追加…など。
参考:トラブルシュート方法
pivpn -c
でクライアントがつながっているか確認
私は、iPhoneのアプリで「有効」と出ても通信できないケースがありました。
よくよく見ていると、IPアドレスが自宅と違っており、自宅のRasPiに正しくつながっていませんでした。
pivpn -c
で接続状態、通信量などを見ることで、正常につながっているかが推測できます。
ChatGPTに聞きましょう
私は「イチから設定する方法」を聞いて、sysctlの手順が抜けていることに気づきました。
壁打ち、質問しまくるのも良さそうです。