WireGuardで自宅ネットワークへアクセスできるようにしたお話

# はじめに


今回は、自宅のProxmox環境でWireGuardサーバを立てて、外から自宅のネットワークにアクセスできるようにしました。

皆さん、外から自宅ネットワークへアクセスしたくないですか？ 私は特にしたかったです！！理由としては、自宅でProxmox環境を動かしており、学校や外からでもProxmox環境で色々と試したいなぁと思ったからです。あとは、CML2.8へ外からアクセスしてCCNPの勉強をしたかったからです。 
という感じの理由で今回、外から自宅ネットワークへアクセスできるようにしました。

また、今回WireGuardと呼ばれるものを採用しました。理由としては、「なんか最近よく聞くな〜」と思ったからです。以上。というのはあまりにも雑すぎますが、概ねそんな感じです。あとは、シンプルな構成であることを聞いていたので採用したのもあります。そんなかんなで、今回はWireGuardを採用する流れになりました！！

https://www.wireguard.com/

というわけで、本記事では、以下の構成で話していきますねー
- はじめに (<-イマココ)
- 環境紹介
- ProxmoxでのVM作成
- WireGuardのインストール
- 各種設定(鍵作成・マスカレード設定とかとか！！)
- 確認！！(テザリングあると嬉しい)


# 環境紹介
以下が今回の環境になります。おそらく、皆さんと環境が少し/全く違うと思うので、「こんな設定が必要なんだなぁ」と言うのを知っていただいて、ご自宅の環境に適用していただければと思います！！下の図は、構成図になりますー

- ONU+光電話ルータ  => PR600MI
- スマートフォン => iPhone
- プラットフォーム => Proxmox
- 外からアクセス用のPC => MacBook

![スクリーンショット 2025-02-21 13.03.46.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4005556/d5b1b43c-c897-432c-81c4-ab229b3a0068.png)


# ProxmoxでのVM作成
今回はこんな感じでやりました〜


OS： Ubuntu Server 22.04 
コア数：2 core  (2も要らない？)
メモリ：2.03  GiB (適当です🙇)

![スクリーンショット 2025-02-17 7.16.16.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4005556/9b2f540e-4d4d-46d3-8bb9-2a4504584230.png)

VM作成手順がわからんかたは、こちらを見ていただけると〜 

https://qiita.com/yankee/items/495e80193070f6e70b65


# WireGuardのインストール
こちらでは、MacBooKとUbuntu Server(作成したVM)にWireGuardをインストールしていきます！！

## MacBookへのインストール
![スクリーンショット 2025-02-17 7.23.23.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4005556/3ce6b04a-0e61-4f16-aaac-366020e2e224.png)

はい、画像を見るとお分かりになると思いますが、App Storeにあります！！なので、「入手」ボタンからインストールしてもらえればOKです。(設定は後でやりますー)

## WireGuardサーバへのインストール
流石にMacみたいにポチっとはいきませんww 
(CLIでの設定が苦手な方はすみませんがお付き合いください🙏)

ここから、こちらの資料を参考に説明していきますね(めっちゃ分かりやすいです!!)

https://qiita.com/yuito723/items/13d9ddafe0f10bb8d2b7

### お約束的なやつ
```
sudo apt -y update
sudo apt -y upgrade
```
### WireGuardのインストール
```
sudo apt -y install wireguard
```
この時、「Err:1〜」みたいなのでが出て、インストールできない時、原因は色々あると思いますが、以下の設定を試してみてください。DNSサーバーの指定です(私もんん？となりました)

https://qiita.com/Htanos/items/6545dc676197e1d95d71

```
echo nameserver 8.8.8.8 | tee /etc/resolv.conf
```

# 各種設定(鍵作成・マスカレード設定とかとか！！)
さてさて、次は色々と設定していきましょう。といっても、PR600MIでの設定、WireGuardサーバでの設定、MacBookでの設定と色々あるので、ちょっとゴチャゴチャするかもですが頑張りましょう！！

## PR600MI(ONU+光電話ルータ/ホームゲートウェイ)


正直、ここの設定はなんとも言えんところです。と言うのも、人によって異なります！！なので、Kinukuiはこんな感じやったのね♫ 程度で見てくださいね

まず、PR600MIでの設定を行っていきましょう！！PR600MIでは静的マスカレード設定を行っていきます！！(ホームゲートウェイを自前のルータで賄っている場合は、各設定方法を確認してください〜)

っとその前に、ONU+光電話ルータ/HGWなどがわからない方はこちらをご参照ください

https://aun-company.com/media/internet/chigai

まず、PR600MIのWeb設定ページへ飛びます！！

http://192.168.1.1:8888/t

次に、配信済事業者ソフトウェア一覧からからIPoE IPv4設定 => 静的IPマスカレード設定ページへ飛びます。
![スクリーンショット 2025-02-21 10.55.26.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4005556/12e5c839-e2d4-4b40-a729-a49e0e34ae8c.png)

その次に、編集ボタンから各項目に以下の設定を行います！！
- 対象プロトコル => UDP
- 公開対象ポート => 利用可能なポート番号から選択
- LAN側宛先IPアドレス => WireGuardサーバのIPアドレス
- LAN側宛先ポート => 51820
![スクリーンショット 2025-02-21 11.00.24.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4005556/4e8c5231-25a7-4afe-af90-febc92b430aa.png)

各項目を埋めた後は、「設定」ボタンを押下して、設定を反映させましょう！！
以上がPR600MIでの設定になります！！

## ファイアウォールの設定
WireGuardサーバでファイアウォールの設定を行いましょう！！
今回は、WireGuardでデフォルトで使用される```UDP 51820```を開けておきましょう。なので、以下のコマンドを実行してください。

https://qiita.com/010Ri/items/f37f7f5fb35265823c7c

```
# sudo ufw enable
# sudo ufw allow 51820/udp
```
## 鍵作成
次は、WireGuardサーバにて鍵の作成を行なっていきます。
(この鍵作成自体は簡単ですが、どれがどの鍵かごっちゃごちゃになるかもしれないのでご注意ください〜)

https://docs.redhat.com/ja/documentation/red_hat_enterprise_linux/9/html/configuring_and_managing_networking/proc_creating-private-and-public-keys-to-be-used-in-wireguard-connections_assembly_setting-up-a-wireguard-vpn#proc_creating-private-and-public-keys-to-be-used-in-wireguard-connections_assembly_setting-up-a-wireguard-vpn

https://gihyo.jp/admin/serial/01/ubuntu-recipe/0614

まず、WireGuardサーバで**サーバ**の秘密鍵と公開鍵を作成します。
```
(秘密鍵を作成)
# wg genkey | sudo tee /etc/wireguard/server.key
(公開鍵を作成)
# sudo cat /etc/wireguard/server.key | wg pubkey | sudo tee /etc/wireguard/server.pub
```
次に、**クライアント**の秘密鍵と公開鍵を作成します。
```
(秘密鍵を作成)
# wg genkey | sudo tee /etc/wireguard/client.key
(公開鍵を作成)
# sudo cat /etc/wireguard/client.key | wg pubkey | sudo tee /etc/wireguard/client.pub
```
これで、サーバとクライアントの秘密鍵と公開鍵を作成することができました！！
念の為、先ほど作成ファイルのパーミッションを変更しておきましょう。
```
# sudo chmod 600 /etc/wireguard/server.key /etc/wireguard/server.pub
# sudo chmod 600 /etc/wireguard/client.key /etc/wireguard/client.pub
```
よし、これで鍵作成は完了です！！まとめると、以下のファイルに以下の情報が格納されている状態です。
- ```server.key``` => サーバの秘密鍵
- ```server.pub``` => サーバの公開鍵
- ```client.key``` => クライアントの秘密鍵
- ```client.pub``` => クライアントの公開鍵


## 仮想インターフェイスの作成
ここでは、WireGuardサーバとMacで設定を行っていきます。ここで、先ほど作成した鍵が重要になってきます。が、公開鍵と秘密鍵でどっちがどっちやみたいになるので、気をつけてください🎵


### WireGuardサーバ
初めに、WireGuardサーバで/etc/sysctl.confファイルで IPv4 のフォワーディング（パケット転送）を有効にしていきます。おそらく、```net.ipv4.ip_forward = 0```となっているかもしれないので、この値を```1```に変更します。また、コメントアウト(#)されている場合は、コメントアウトを外してください。
```
# sudo vim /etc/sysctl.conf
net.ipv4.ip_forward = 1
```
設定変更を反映させるのをお忘れなく！！
```
sudo sysctl -p
```
次に、WireGuardサーバで仮想インターフェイスを作成していきましょう！！
以下のコマンドを実行して、書き込むのに必要な鍵情報を確認します。
```
# cat /etc/wireguard/server.key
(サーバの秘密鍵が表示される)

# cat /etc/wireguard/client.pub
(クライアントの公開鍵が表示される)
```
次に、```wg0.conf```を作成し設定を書き込んでいきましょう！！今回は、10.0.0.0/24を仮想インターフェイスに割り振るようにしました（お好みでOK)。ポート番号はデフォルトの51820にしました。あと、```PostUP/PostDown```設定をお忘れなく、自宅LANにアクセスするために必要ですので〜
```
# sudo vim /etc/wireguard/wg0.conf

[Interface]
PrivateKey = (サーバーの秘密鍵)
Address = 10.0.0.1
ListenPort = 51820
(NAT設定)
PostUp = iptables -A FORWARD -i %i -j ACCEPT; iptables -t nat -A POSTROUTING -o [自宅ルータ側のインターフェイス] -j MASQUERADE;
PostDown = iptables -D FORWARD -i %i -j ACCEPT; iptables -t nat -D POSTROUTING -o [自宅ルータ側のインターフェイス] -j MASQUERADE;
SaveConfig = true

[Peer]
PublicKey = (クライアントの公開鍵)
AllowedIPs = 10.0.0.0/24
```
```wg0.conf```の作成が完了した後は、以下のコマンドで起動しましょう！！
```
# sudo systemctl enable wg-quick@wg0
# sudo systemctl start wg-quick@wg0
```

### MacBook
次に、MacBookで仮想インターフェイスを作成していきましょう！！
まず、WireGuardサーバでMacBookに必要な情報を確認しましょう
```
# cat /etc/wireguard/client.key
(クライアントの秘密鍵が表示される)

# cat /etc/wireguard/server.pub
(サーバの公開鍵が表示される)
```

次に、MacBookにインストールしたWireGuardアプリを開きます。
![スクリーンショット 2025-02-21 11.43.14.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4005556/a45ffe54-dd47-4924-8d2b-c69be7d1d747.png)

すると、WireGuardトンネルの管理画面が表示されるので「+」=>「設定が空のトンネルを追加」を押下してください。すると、設定を書き込むための画面が表示されます。(画面が表示されると設定欄にPrivateKeyが表示されますがサーバで作成したものを使うので、**削除**してください！！)
![スクリーンショット 2025-02-21 11.49.50.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4005556/6a825384-371c-49f8-b8f6-6e2ecefbf23f.png)

設定欄には、以下の設定を書き込みます。Endpointには、自宅のグローバルIPアドレスとPR600MIの[設定](https://qiita.com/drafts/29db2769d31d2fe9b701/edit#:~:text=%E5%85%AC%E9%96%8B%E5%AF%BE%E8%B1%A1%E3%83%9D%E3%83%BC%E3%83%88%20%3D%3E%20%E5%88%A9%E7%94%A8%E5%8F%AF%E8%83%BD%E3%81%AA%E3%83%9D%E3%83%BC%E3%83%88%E7%95%AA%E5%8F%B7%E3%81%8B%E3%82%89%E9%81%B8%E6%8A%9E)で選択したポート番号を書き込みます。自宅のグローバルIPアドレスは以下から確認できます。

https://www.cman.jp/network/support/go_access.cgi
```
[Interface]
Address = 10.0.0.2/24
DNS = 8.8.8.8
PrivateKey = (クライアントの秘密鍵)

[Peer]
PublicKey = (サーバの公開鍵)
AllowedIPs = 0.0.0.0/0
Endpoint = (自宅のグローバルIP):(利用可能なポート)
PersistentKeepalive = 25
```
![スクリーンショット 2025-02-21 12.01.40.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4005556/92344b87-5f6f-4b44-8e1b-7667b8a5c284.png)

以上で、各種設定は終了となります！！お疲れ様です！！

# 確認！！
最後に、確認していきましょう！！
確認するに当たって、今回はスマホのテザリング機能を利用します。
まず、MacBookがスマホ経由でインターネットにアクセスできるようにしてください。

https://support.apple.com/ja-jp/guide/mac-help/mchl7594e36f/mac

次に、MacBookdでWireGuardを開き、有効化ボタンを押下しましょう！！
すると、WireGuardサーバ <=> MacBook間でトンネルが確立され、自宅LANにアクセスすることが可能となります。トンネルが確立されているかは、以下のように送受信データがあるかで確認することができます。確立されていない場合は、送信したデータのみが表示されるため、各設定を見直してみてくださいね！！

![スクリーンショット 2025-02-21 12.35.18.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4005556/50556609-a005-4a57-a648-ca8e0cbba611.png)

この状態で自宅ルータにpingを打ってみると、ちゃんと返ってきます！！
![スクリーンショット 2025-02-21 15.05.15.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4005556/ca2a67bc-d340-42e2-a416-5361a6f08cfb.png)


なので、当然CML2.8へもアクセスすることができます！！わーい

![スクリーンショット 2025-02-21 15.07.04.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4005556/01bd0c64-ca4f-4817-af89-96bae3d1c7fa.png)

# おわりに
ここまでお付き合いいただき、ありがとうございます！
今回は、自宅のProxmox環境でWireGuardサーバを構築し、外部から自宅ネットワークにアクセスできるようにする手順を紹介しました。

やってみた感想としては、鍵管理が簡単で設定ファイルもシンプルなので、ハードルが低いのかなぁと感じました。
あと、自宅外からでもCML2.8でコマンドの確認をできるようになったので、ありがたいです。(これで研究室からでもCMLで勉強できるぜ)

本記事以外にも、構築方法は調べれば色々出てくるので、皆さんもぜひ自宅にWireGuardサーバを導入してみください！！ありがとうございました！！