0円VPNを構築・運用する

※電気代・通信料はかかります。
この記事の作成に当たり、一部Geminiを使用しました。
QRコードはデンソーウェーブの登録商標です
[note](https://note.com/hinatakko/n/n40ab3b8ceabd)でも同内容の投稿をしています。
# 用意する物

RaspberryPi400 (JA)(下記ラズパイ)ラズパイOSが書き込まれているSSDまたは、USBメモリーまたは、SDカード(SDカードはやめましょう、壊れるのが早いです。)インターネットルーターこの記事ではSSDを使用します。

# VPNを構築する

Wireguardを使用します。

>“WireGuardは、最先端の暗号化技術を採用した、非常にシンプルでありながら高速で現代的なVPNです。”

[Pi-hole ドキュメント](https://docs.pi-hole.net/guides/vpn/wireguard/)(日本語訳)

# 事前準備

## ラズパイのIPを固定

ルータでDHCP予約をしてください。ラズパイで固定すると、まれに、おかしくなります。ルーター機種によって異なるので、説明書等を確認してください。

## ポートフォワーディング (ポート開放)

外部ポート: WireGuardのデフォルトポートは UDP 51820 です。これを入力します。

内部IPアドレス: ラズパイの固定IPアドレス（例: 192.168.0.200）を入力します。

内部ポート: WireGuardのデフォルトポートと同じ UDP 51820 を入力します。

プロトコル:UDP を選択します。

※ないなら、入力いりません。

## ラズパイOSの更新

```shell
sudo apt update
sudo apt upgrade -y
sudo apt dist-upgrade -y # カーネルも更新されることがある
sudo reboot # 念のため再起動
```

## DDNS (Dynamic DNS) の設定（推奨）

ご自宅のインターネット回線のグローバルIPアドレスは、プロバイダから動的に割り当てられることが多く、時間とともに変わることがあります。DDNSサービスを使うと、変わるIPアドレスを固定のドメイン名（例: yourhome.example.jp）に紐付けてくれるため、IPアドレスが変わってもVPN接続に影響が出ません。

[No-IP](https://www.noip.com/) や [DynDNS](https://account.dyn.com/) などの無料/有料DDNSサービスを利用できます。

ルーターによってはDDNS機能が内蔵されている場合もあります。

DDNSサービスでドメイン名を取得し、そのドメイン名をルーターまたはラズパイに設定します。

### どちらの方法を選ぶのか

ルーターにDDNS機能があるなら、ルーターでDDNSを設定するのがおすすめです。設定が簡単で、ラズパイの電源に依存しないため信頼性が高いです。

ルーターに機能がない、または設定が複雑で分からない場合は、No-IPなどを使用しましょう。この場合、ラズパイは常に起動させておく必要があります。

この記事ではNo-IPを使用します。

# No-IP のセットアップ

ルーターでDDNSを設定した場合はスキップしてください。
[サインアップ](https://www.noip.com/sign-up)
Google、Microsoftで続行しましょう。早いです。
メニューのDDNS & Remote Access→サブメニューのNo-IP Hostnamesをクリック
Create Hostnameをクリック
Hostnameを入力、domainは変えたければかえる。
Create Hostname with DDNS Keyをクリックその後、
Generate DDNS KeyをクリックUsername / Email(下記、認証情報Aという)と、Password(下記、認証情報Bという)を控えておく。


以下は既存のパッケージリストを更新、No-IPDUCの執筆時点の一般的なLinux版ダウンロードを行うのコマンドの例です。

```shell
sudo apt update && sudo apt upgrade -y && cd /usr/local/src/ && sudo wget https://www.noip.com/client/linux/noip-duc-linux.tar.gz && sudo tar xvf noip-duc-linux.tar.gz && cd noip-*-*/  && sudo make && sudo make install
```
### No-IP DUCとは
No-IPに保存されいる、グローバルIPを現在のグローバルIPに自動更新するものです。
### No-IP DUC (対話型プロンプト)

sudo make install を実行すると、設定のための対話型プロンプトが開始されます。ここで、選択すべきボタンや入力すべき情報があります。

以下に表示される可能性のあるプロンプトと、それに対する一般的な選択・入力内容を挙げます。

#### Please enter the login email/username for no-ip.com []:

入力: 認証情報Aを入力します。

ボタン: Enterキーを押します。

#### Please enter the password for user '<認証情報A>':

入力: 認証情報Bを入力します。

ボタン: Enterキーを押します。

注意:認証情報Bを入力しても画面には表示されません（アスタリスクなども）。そのまま入力してEnterを押してください。

#### Please select the host(s) you wish to update [<番号>,all]:

選択:

もしNo-IPアカウントに複数のホスト名が登録されており、そのすべてを更新したい場合は all と入力します。

特定のホスト名だけを更新したい場合は、画面に表示されているホスト名のリストに対応する番号を入力します。（例: 1 または 1,3 のようにカンマ区切りで複数指定）

推奨: 通常は、PiVPNで使うホスト名一つだけを選択すれば十分です。そのホスト名の番号を入力してください。

ボタン: Enterキーを押します。

#### Do you wish to update all of these hosts every 30 minutes? (y/n) [n]:

選択: 通常は「はい」を選択します。y と入力します。

理由: DDNSクライアントは定期的にあなたのグローバルIPアドレスをチェックし、変更があった場合にNo-IPに通知する必要があります。30分間隔は一般的です。

ボタン: Enterキーを押します。

分数をきくタイプもあります

#### Do you wish to run something at update? Y/n [n]:

選択: 通常は「いいえ」を選択します。n と入力します。

理由: 特定のスクリプトをDDNS更新時に実行する必要がなければ不要です。

ボタン: Enterキーを押します。

#### Do you want to run noip at startup? (y/n) [y]:

選択:必ず「はい」を選択します。 y と入力します。

理由: Raspberry Piが再起動した際に、No-IPクライアントが自動的に起動し、DDNSの更新を継続するために必要です。

ボタン: Enterキーを押します。

No-IP DUC の自動起動設定:ラズパイの起動時にNo-IP DUCが自動で起動するように設定します。まず、noip2.service ファイルを作成します。

sudo nano /etc/systemd/system/noip2.service

以下の内容を貼り付けて保存します。

```conf
[Unit]
Description=No-IP Dynamic DNS Update Client
After=network.target

[Service]
ExecStart=/usr/local/bin/noip2
Restart=always
Type=forking

[Install]
WantedBy=multi-user.target
```

保存したら、systemdにサービスを認識させて有効化し、起動します。

```shell
sudo systemctl daemon-reload
sudo systemctl enable noip2.service
sudo systemctl start noip2.service
```

状態を確認するには：

```shell
sudo systemctl status noip2.service
```

active (running) と表示されれば成功です。

確認:数分待ってから、No-IPのウェブサイトにアクセス・ログインし、作成したホスト名のIPアドレスが現在のグローバルIPアドレスに更新されているか確認します。

これでNo-IPのセットアップは完了です。

### インストール

PiVPN (WireGuard) セットアップ

```shell
curl -L https://install.pivpn.io | bash
```

実行してセットアップを開始すると、以下のようなプロンプトが順に表示されます。(表示されない場合もあります。)

#### 1. Welcome to PiVPN!

これは開始画面です。

選択: Ok (Enter)

#### 2. Static IP Address Needed

ラズベリーパイのIPアドレスを固定する必要がある旨の警告です。

選択: Ok (Enter)

#### 3. Select a Local User

VPN設定ファイルを保存するローカルユーザーを選択します。通常はVPNを管理するユーザー（例: pi）を選択します。

選択: 画面に表示されるユーザー名（例: pi）を選択して Ok (Enter)

#### 4. Choose VPN Protocol

WireGuard または OpenVPN のどちらを使用するか選択します。

選択:WireGuard を選択して Ok (Enter)

#### 5. Default port for WireGuard is 51820

WireGuardのデフォルトポート（UDP 51820）が提示されます。

選択: そのまま Yes (Enter) を押してデフォルトポートを受け入れるか、No を選んで任意のポート番号を入力することもできます。（通常はデフォルトで問題ありません）

#### 6. Confirm your DNS Provider for VPN Clients

VPNクライアントが使用するDNSプロバイダーを選択します。

Pi-hole (Recommended): Pi-holeが同じラズベリーパイにインストールされている場合に推奨。VPN経由で広告ブロックも利用できます。

Google

Cloudflare

OpenDNS

Custom: 自分でDNSサーバーを指定する場合

選択:

もしPi-holeがすでにインストールされていて、VPN経由で広告ブロックも利用したい場合は、Pi-hole を選択します。

Pi-holeを使っていない、またはPi-holeをDNSにしたくない場合は、Google や Cloudflare など、信頼できるパブリックDNSを選択します。

ボタン: 選択肢を選んで Ok (Enter)

#### 7. Confirm your Public IP or DNS

VPNサーバーにアクセスするための方法を選択します。

Public IP: 現在のグローバルIPアドレスを使用します。（IPアドレスが変わると再設定が必要）

DNS Entry: DDNS (Dynamic DNS) サービスで取得したドメイン名を使用します。（推奨）

選択:

推奨:DNS Entry を選択します。IPアドレスが変わっても、DDNSサービスが自動的にIPアドレスを更新してくれるため、クライアント側の設定変更が不要になります。

もしDNS Entryを選択した場合、次の画面であなたのDDNSドメイン名を入力するように求めらることがれます。

ボタン: 選択肢を選んで Ok (Enter)

#### (8. DNS Entry for Public IP)

(前のステップで「DNS Entry」を選択した場合のみ) あなたのDDNSドメイン名を入力します。

入力: 例: あなたの実際のドメイン名

ボタン: Ok (Enter)

#### 9. Server Key Generation

WireGuardのサーバーキーペアを生成します。時間がかかる場合があります。

選択: Ok (Enter) (自動的に進行します)

#### 10. Install Unattended Upgrades?

ラズベリーパイのシステムパッケージを自動的にアップグレードするかどうか。セキュリティのために推奨されます。

選択: Yes (Enter) (推奨)

#### 11. Installation complete!

インストールが完了したことを通知します。

選択: Ok (Enter)

#### 12. Reboot?

システムを再起動するかどうか。VPN設定を有効にするために再起動が必要です。

選択: Yes (Enter) (推奨、通常は必須)

セットアップが完了しました。続いてクライアントの追加などを行います。

# Wireguardアプリをインストール

ここから、インストールしてください。
[https://www.wireguard.com/install/](https://www.wireguard.com/install/)
# PiVpnマネージャーの導入

ラズパイでダウンロードして実行してください。
[noteでダウンロード](https://note.com/api/v2/attachments/download/d48638dd16c4fd703b628dd19e32b234)
1の新しいクライアントを追加から、指示に従ってクライアントを追加してください。パソコンの場合はファイルがコピーカメラ付きスマホ、タブレットはQRコードが生成ファイルがコピーまたは、QRコードが生成されたらWireguardアプリでスキャン、ファイルを追加して、トンネルを登録してください。


次回予告

Pi-holeで広告ブロックDNSを構築!

最後までよんでいただき、ありがとうございました。