LoginSignup
4
3

More than 3 years have passed since last update.

WireGuardでRaspberryPiにVPNを実装する方法

Last updated at Posted at 2020-08-08

目標

RaspberryPiを使って外出先から自宅のLANに接続できるようにVPNのサーバーを作る。nuro光を使っており、めったにグローバルIPアドレスが変更されないのでグローバルIPアドレスの固定化は行わない。クライアントはWindowsとiOSを想定しますが、macOSでもubuntuでも設定ファイルの読み込み以外は特に違いはないと思います。ルーター側でポートマッピング(ポート開放)をする必要があります。その方法についてはルーターによって異なるためサポートできません。方法がわかっている方のみ以下の手順でwireguardをセットアップしてください。

手順

インストール

$ sudo apt update
$ sudo apt upgrade
# RaspberryPiの場合
$ curl -L https://install.pivpn.io | bash
# debian系の場合
$ sudo apt install wireguard

設定に必要なパラメータの値を取得する

認証鍵を作る

サーバー用のカギを作る

# 秘密鍵を作る
$ wg genkey | sudo tee /etc/wireguard/server.key
$ sudo chmod 600 /etc/wireguard/server.key

# 秘密鍵から公開鍵を生成して保存する。
$ sudo cat /etc/wireguard/server.key | wg pubkey | sudo tee /etc/wireguard/server.pub
$ sudo chmod 600 /etc/wireguard/server.pub

クライアント用のカギを作る

# 秘密鍵を作る
$ wg genkey | sudo tee /etc/wireguard/client.key
$ sudo chmod 600 /etc/wireguard/client.key

# 秘密鍵から公開鍵を生成して保存する。
$ sudo cat /etc/wireguard/server.key | wg pubkey | sudo tee /etc/wireguard/client.pub
$ sudo chmod 600 /etc/wireguard/client.pub

サーバー側のグローバルipアドレスを確認する

$ curl inet-ip.info

サーバー側のローカルipアドレスを確認する

$ ip addr show
  • Lanケーブルが繋がっている場合はeth0のinetの行のipアドレスがサーバーのプライベートipアドレスです。例( inet 192.168.1.16←これ netmask 255.255.255.0 broadcast 192.168.1.255)
  • Wi-Fiを使っている場合はwlanのipアドレスがサーバーのプライベートアドレスです。

設定ファイルを編集する。

サーバー側の設定ファイル

$ vim /etc/wireguard/wg0.conf

[Interface]
PrivateKey = サーバー側の秘密鍵
Address = 10.0.0.1/24
ListenPort = 50002
PostUp = iptables -A FORWARD -i %i -j ACCEPT; iptables -A FORWARD -o %i -j ACCEPT; iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
PostDown = iptables -D FORWARD -i %i -j ACCEPT; iptables -D FORWARD -o %i -j ACCEPT; iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE

[Peer]
PublicKey = クライアント側の公開鍵
AllowedIPs = 10.0.0.2/32

ユーザー側の設定ファイル

クライアント側メモ帳

[Interface]
PrivateKey = ユーザー側の秘密鍵
Address = 10.0.0.2/32
DNS = サーバー側のLANのDNSのipアドレス(デフォルトゲートウェイのipアドレスであることが多いです。)

[Peer]
PublicKey = サーバー側の公開鍵
AllowedIPs = 0.0.0.0/0
Endpoint = サーバー側のグローバルipアドレス:50002

サーバー側のwireguardの起動

$ sudo systemctl enable wg-quick@wg0
$ sudo systemctl start wg-quick@wg0

# 起動の確認 wg0が追加されているかを確認する。
$ ip addr show
$ sudo wg

ポートマッピング(ポート開放)をする

サーバー側プライベートipアドレスの50002番に設定をする。

クライアント側(windows)のwireguardの起動

WireGuardインストーラーダウンロードサイトの自分のOSを選択してダウンロードし、実行してインストールする。先ほど作った設定ファイルをインポートして実行する。

サーバーとは異なるネットワークからグローバルipアドレス確認サイトにアクセスして、サーバー側のグローバルipアドレスが表示されていれば繋がっている。

参考資料

wireguard公式サイト
技術評論社 Ubuntu Weekly Recipe 第614回 WireGuardでVPNサーバーを構築する
WireGuard VPN の利用

4
3
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
4
3