ラズパイでVPNを無料DNSで構築しよう【PiVPN+DuckDNS】

この記事は約 9 分で読めます

ラズパイでVPNを無料DNSで構築しよう【PiVPN+DuckDNS】 dcc887e9 image

こんにちは。

家に常時稼働しているラズパイを使って、外出時にスマホやPCからローカルネットワークにアクセスする方法を紹介します。

仮想プライベートネットワーク(VPN)を構築することで、外出先から家のPCをWOLしたり、NextCloudのファイルにアクセスできます。

さらに、公衆WiFiに接続する場合にVPNを通すことで通信内容を秘匿化でき、セキュリティを向上できます。私は出張時にビジネスホテルからVPNを通して録画したテレビ番組を見たりしています。(このときに謎の満足感を覚えます)

ポート開放

まずは、外部からのアクセスを受け入れるために、ポートを開放します。PiVPNのデフォルトポートは51820です。

お使いのルーターによって設定方法は異なりますので、メーカーのサイトや説明書を参考にしてください。

参考までに、NURO光のONUのSGP200Wの設定方法は以下です。

ラズパイでVPNを無料DNSで構築しよう【PiVPN+DuckDNS】 a367a03e image

転送ルール > ポートマッピング設定から新規作成をクリックします。

プロトコルをTCP/UDP、外部ポート番号、内部ポート番号を51820 にして作成します。作成したら有効にしてください。

DuckDNSに登録

Duck DNSは無料で使える動的DNSサービスです。簡単に言えば動的IPアドレスを名前解決して任意のURLに置き換えてくれます。

無料で使えるためか詐欺サイトに悪用されており、Duck DNS の検索候補が物騒ですが、サービス自体は危険ではありませんので、ご安心ください。

以下のサイトにアクセスします。

SNS連携でログインします。

ラズパイでVPNを無料DNSで構築しよう【PiVPN+DuckDNS】 dcc887e9 image

画面中央に、任意の文字列を入れてadd domain をクリックします。今回は例としてkuimalblog と入れました。アドレスはkuimalblog.duckdns.orgとなります。

ラズパイでVPNを無料DNSで構築しよう【PiVPN+DuckDNS】 8bbee537 image

すると、domainsに追加されます。一旦ここまでにして次はPiVPNをインストールします。このページは開いたままにしておいてください。

PiVPNをインストール

ラズパイにPiVPNをインストールするために以下のコマンドを実行します。

curl -L https://install.pivpn.io | bash
ラズパイでVPNを無料DNSで構築しよう【PiVPN+DuckDNS】 5ab516fc image

上記のインストーラーが起動します。エンターキーを押します。

ラズパイでVPNを無料DNSで構築しよう【PiVPN+DuckDNS】 86860f71 image

静的アドレスが必要だよと教えてくれます。エンターキーを押します。

ラズパイでVPNを無料DNSで構築しよう【PiVPN+DuckDNS】 d65758ea image

接続するインターフェースを選びます。wlan0(無線LAN)を選びました。

ラズパイでVPNを無料DNSで構築しよう【PiVPN+DuckDNS】 43db057f image

IPv6の接続方法を聞かれるので、先程と同様のインターフェースを選びます。

ラズパイでVPNを無料DNSで構築しよう【PiVPN+DuckDNS】 a5548d11 image

静的アドレスを設定するか聞かれるので、Yes を選択します。

ラズパイでVPNを無料DNSで構築しよう【PiVPN+DuckDNS】 86141abe image

ローカルユーザーを選びます。

ラズパイでVPNを無料DNSで構築しよう【PiVPN+DuckDNS】 3f63e269 image

ラズパイでVPNを無料DNSで構築しよう【PiVPN+DuckDNS】 11c761d8 image

新しい方式のWireGuardを選びます。

ラズパイでVPNを無料DNSで構築しよう【PiVPN+DuckDNS】 62fb0fe8 image

ポート番号は開放した番号にしましょう。(私はデフォルトにしました)

ラズパイでVPNを無料DNSで構築しよう【PiVPN+DuckDNS】 04ebd6ca image

念を押されますので、Yesを選択します。

ラズパイでVPNを無料DNSで構築しよう【PiVPN+DuckDNS】 b04ea0cd image

DNSプロバイダを聞かれますので、Googleを選択します。

ラズパイでVPNを無料DNSで構築しよう【PiVPN+DuckDNS】 92a143c4 image

public IPかpublic DNSかを聞かれるので、public DNSを選びます。(public IPは通常、適宜変わります)

ラズパイでVPNを無料DNSで構築しよう【PiVPN+DuckDNS】 536997d5 image

DNSサーバー名を聞かれるので、先程DuckDNSで作成したURLを打ち込みます。今回の例ではkuimalblog.duckdns.org でした。

ラズパイでVPNを無料DNSで構築しよう【PiVPN+DuckDNS】 920137cb image

念押しされますので、Yesを選択します。

ラズパイでVPNを無料DNSで構築しよう【PiVPN+DuckDNS】 9f65b766 image

暗号鍵が作成されました。

ラズパイでVPNを無料DNSで構築しよう【PiVPN+DuckDNS】 3d6854be image

再起動を推奨されますが、一旦OKを選択します。

ラズパイでVPNを無料DNSで構築しよう【PiVPN+DuckDNS】 7a7ce62a image

セキュリティパッチを当てるか聞かれるのでYesを選択します。

ラズパイでVPNを無料DNSで構築しよう【PiVPN+DuckDNS】 1ca4578a image

インストールが完了したら、次はプロファイルを作成します。

ラズパイでVPNを無料DNSで構築しよう【PiVPN+DuckDNS】 92d30bf6 image

PiVPNを適用させるために、一旦再起動しましょう。

再起動したら、バーチャルブリッジの/etc/wireguard/wg0.conf を編集します。

sudo vim /etc/wireguard/wg0.conf

wg0.confの[Interface]に以下を追加します。

有線接続の場合はwlan0eth0 に変更してください。

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 -A POSTROUTING -s 10.0.0.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.0.0.0/24 -j MASQUERADE
ラズパイでVPNを無料DNSで構築しよう【PiVPN+DuckDNS】 8abee519 image

上記のようになればOKです。

編集したら、以下のコマンドでサービスを再起動します。

sudo systemctl restart wg-quick@wg0

プロファイルの作成

VPNに接続するためのプロファイルを作成するため、以下のコマンドを実行します。

pivpn add
ラズパイでVPNを無料DNSで構築しよう【PiVPN+DuckDNS】 e54ae6de image

わかりやすい名前をつけましょう。今回はbanana としました。

ちなみに、pivpn -qr と打てばQRコードが発行されて、簡単にスマホをセットアップできるそうですが成功した試しがないので、プロファイルをコピーする方法を使います。

プロファイルはホームディレクトリのconfigs配下に保存されます。以下のコマンドを実行します。

cd ~/configs
ls
ラズパイでVPNを無料DNSで構築しよう【PiVPN+DuckDNS】 b908bcf5 image

すると.confのファイルが確認できるはずです。

catコマンドで中身を確認しましょう。この中身は機密情報ですので取り扱いには注意してください。

次に、プロファイルをPCにコピーしてください。SCPコマンドやSambaを使う手がありますが、Windowsのデスクトップにメモ帳を作成し、catの出力結果を貼り付けたほうが楽かもしれません。

これでPiVPNのセットアップは完了です。

Duck DNSをセットアップする

Duck DNSのスクリプトをラズパイにインストールします。ipアドレスは固定化しない限り、動的に変わってしまうため随時Duck DNSにipアドレスを通知する必要があります。

Duck DNSの公式サイトの上部にあるinstallをクリックします。

ラズパイでVPNを無料DNSで構築しよう【PiVPN+DuckDNS】 430de229 image

Operating Systemsからpiを選択して、作成したドメインを選びましょう。

すると、手順を丁寧に解説してくれます。

以下のコマンドを実行してください。

cd
mkdir duckdns
cd duckdns
vi duck.sh

duck.shを以下のように編集します。[token]は表示されているトークンを入れてください。

echo url="https://www.duckdns.org/update?domains=[token]&ip=" | curl -k -o ~/duckdns/duck.log -K -

保存したら、以下のコマンドを実行します。

chmod 700 duck.sh
crontab -e

cronは以下のように編集します。公式サイトでは5分おきになっていますが、実行頻度は30分程度で十分だと思います。

*/30 * * * * ~/duckdns/duck.sh >/dev/null 2>&1

cronの編集が終了したら、以下のコマンドでテストします。

./duck.sh
cat duck.log

ログファイルがOK となっていれば正常です。

PiVPNに接続する

いよいよWireGuardを使ってPiVPNに接続します。

WireGuardのクライアントは、Windows、Mac、Android、iOSに対応していますが今回はAndroidを解説します。

以下のリンクからアプリをインストールしてください。

インストールしたら、先ほど作成したプロファイルをGoogleドライブやファイル共有アプリを使ってAndroidに転送してください。(できればローカル内の共有がベストです)

ラズパイでVPNを無料DNSで構築しよう【PiVPN+DuckDNS】 f35e068f screenshot 20231002 202052

WireGuardアプリを開いたら、右下の+をタップします。

ラズパイでVPNを無料DNSで構築しよう【PiVPN+DuckDNS】 b31c3275 screenshot 20231002 202114

ファイル、アーカイブからインポートをタップします。

ラズパイでVPNを無料DNSで構築しよう【PiVPN+DuckDNS】 a6e1f571 screenshot 20231002 202142

Androidに転送したプロファイルを選択すると、接続できるようになります。トグルをタップしてアクティブにしてください。

AndroidのWiFiを切断して、ルーターの設定画面にアクセスできれば成功です。

お疲れ様でした。

category :