Raspberry PiでWireGuardサーバを立ててみた③ -サーバルーティング編-
作業がひと段落したのでそろそろ書き始めようかと思いました。
現実逃避であることに変わりはありません。
WireGuardサーバ+ルータの構築
Raspberry Piをルータとして駆動させます。
前回までのおさらい
前回はWireGuardクライアントであるWindows PCとWireGuardサーバであるRaspberry PiとでVPN接続を行いました。
現状だと、PCからVPN経由でRaspberry Piと接続できるようになっただけなので、まだ恩恵はあまりないですね。
今回のテーマ
WireGuard VPNのネットワークと、Raspberry Piで構築されているローカルネットワークをつなぎます。
最終目標は、PCからWireGuard VPN経由でRaspberry Piのローカルネットワーク上にある端末にアクセスします。
構築するネットワークについて
構築するネットワークは下記のとおりです。

Network AにはPCが、Network BにはRasPi ServとRasPi FSが所属しています。
この2つのネットワークは直接のつながりはなく、直接アクセスはできないものとします。
どうやって異なるネットワークをつなぐのか?
このままだと、PCはRasPi FSにアクセスすることはできません。
そこで、WireGuard VPNを用いてネットワークの経路を作成します。
図の通り、PCとRasPi Servの間にWireGuard VPNのコネクションを確立します。
そして、RasPi Servに追加の設定を行い、WireGuard VPN経由のパケットとNetwork Bのパケットがお互いにつながるように設定します。
実装する内容について
今回の実装を行うにあたり、以下の手順で進めます。
-
RasPi ServとRasPi FSをつなぐネットワークを作成する。 -
RasPi FSにファイルサーバを実装する。 -
RasPi Serv上にWireGuard VPNとNetwork Bのルーティング設定を行う。 -
PC上のWireGuardクライアント設定変更を行う。 -
PCからRasPi Servに向けてWireGuard接続を行い、RasPi FSのファイルサーバにアクセスする。
今回はボリューミーかつ様々な内容が含まれています。
ぜひ参考になるところだけをピックアップしてくださいね。
実装しましょう
1. RasPi ServとRasPi FSをつなぐネットワークを作成する
Network Bのネットワークを確立します。
Network Bは192.168.100.0/24のネットワークを設定します。
Network Bに接続するデバイス一覧と各IPアドレスは以下の通りに設定します。
| デバイス名 | IPアドレス |
|---|---|
| RasPi Serv | 192.168.100.1/24 |
| RasPi FS | 192.168.100.10/24 |
これの通りに設定を始めます。
まずはRasPi ServのNetwork B設定を行います。
# Create the NetworkB network configuration
sudo nmcli connection add type ethernet con-name NetworkB ifname eth0
# Add the network address information
sudo nmcli connection modify NetworkB ipv4.method manual ipv4.addresses 192.168.100.1/24 ipv4.routes 192.168.100.1
# Enable the configuration
sudo nmcli connection up NetworkB
次にRasPi FSのNetwork B設定を行います。
RasPi ServとIPアドレスが違うだけでそれ以外は一緒です。
# Create the NetworkB network configuration
sudo nmcli connection add type ethernet con-name NetworkB ifname eth0
# Add the network address information
sudo nmcli connection modify NetworkB ipv4.method manual ipv4.addresses 192.168.100.10/24 ipv4.routes 192.168.100.1
# Enable the configuration
sudo nmcli connection up NetworkB
両者のネットワーク設定が完了したところで、RasPi ServとRasPi FSとを接続します。
Ethernetケーブルで接続したら、ネットワークの疎通確認をします。
RasPi FS上でping疎通確認をして、レスポンスが返ってきたらOKです。
ping 192.168.100.1
2. RasPi FSにファイルサーバを実装する
これはおまけです。
ネットワークが接続されたかを確認する手法として、ファイルサーバにアクセスできるかを確認することとします。
使用するパッケージはsambaです。
まずはRasPi FSにsambaをインストールします。
sudo apt install samba -y
次に、共有フォルダを作成します。
sudo mkdir /samba-share
sudo chmod 777 /samba-share
フォルダが作成できたところで、sambaの設定を行いましょう。
設定ファイルを開きます。
sudo nano /etc/samba/smb.conf
このファイルに新たな設定を書き込みます。
[samba-share]
path = /samba-share
browseable = yes
writable = yes
guest ok = yes
guest only = yes
create mode = 0777
directory mode = 0777
force user = fs01
設定が完了したらsamba用のユーザを作成します。
sudo smbpasswd -a fs01
これを入力するとパスワードの作成を求められるので、適宜作成してください。
サービスを再起動します。
sudo systemctl restart smbd
これで設定は完了です。
ちなみに作成したsambaユーザはこちらで確認できます。
sudo pdbedit -L
3. RasPi Servのルーティング設定を行う
ルーティング設定を行います。
今回はルーティングにiptablesを使用します。
RasPi Servにパッケージのインストールを行います。
sudo apt install iptables -y
インストールが完了したら、WireGuardの設定ファイルを編集します。
sudo nano /etc/wireguard/wg0.conf
設定ファイルを下記の通りにします。
[Interface]
Address = 10.0.100.1/24
PrivateKey = <サーバの秘密鍵>
ListenPort = 51820
# [PostUp] wg0 -> eth0
PostUp = iptables -A FORWARD -i %i -o eth0 -s 10.0.100.0/24 -d 192.168.100.0/24 -j ACCEPT
PostUp = iptables -A FORWARD -i eth0 -o %i -s 192.168.100.0/24 -d 10.0.100.0/24 -m state --state RELATED,ESTABLISHED -j ACCEPT
PostUp = iptables -t nat -A POSTROUTING -s 10.0.100.0/24 -d 192.168.100.0/24 -o eth0 -j MASQUERADE
# [PostDown] delete all settings
PostDown = iptables -t nat -D POSTROUTING -s 10.0.100.0/24 -d 192.168.100.0/24 -o eth0 -j MASQUERADE
PostDown = iptables -D FORWARD -i eth0 -o %i -s 192.168.100.0/24 -d 10.0.100.0/24 -m state --state RELATED,ESTABLISHED -j ACCEPT
PostDown = iptables -D FORWARD -i %i -o eth0 -s 10.0.100.0/24 -d 192.168.100.0/24 -j ACCEPT
[Peer]
PublicKey = <クライアントの公開鍵>
AllowedIPs = 10.0.100.10/32
PostUPとPostDownについて
wg-quick upを用いてWireGuardを起動時にPostUpコマンドに書かれているコマンドが実行されます。
また、wg-quick downを用いてWireGuardを停止した時にPostDownコマンドに書かれているコマンドが実行されます。
設定が完了したらWireGuardサーバを再起動します。
sudo wg-quick down wg0
sudo wg-quick up wg0
以上でWireGuardサーバの設定が完了です。
ここでiptablesで設定しているコマンドについて説明します。
iptablesの設定を確認してみます。
sudo iptables -nvL
FORWARD設定に、wg0とeth0間の設定が追加されています。
wg0の10.0.100.0/24と、eth0の192.168.100.0/24の間にフォワーディングの設定を行っています。
sudo iptables -nvL -t nat
POSTROUTING設定にマスカレード設定が記載されています。
これは、Network Bに所属しているクライアント端末がRasPi Servからのアクセスに見えるような設定になっています。
4. PC上のWireGuardクライアント設定変更を行う
WireGuardクライアントの設定を行います。
もしクライアントの設定を行っていない場合は、こちらを参考にしてください。
PCでWireGuardアプリを起動します。
起動したら設定ファイルを起動して、下記のように設定をします。
[Interface]
PrivateKey = <クライアントの秘密鍵>
Address = 10.0.100.10/24
[Peer]
PublicKey = <サーバの公開鍵>
AllowedIPs = 10.0.100.0/24, 192.168.100.0/24
Endpoint = <サーバのIPアドレス>:51820
PersistentKeepalive = 25
大きな変更点は、AllowedIPsにネットワークを追加した点です。
Network Bである192.168.100.1/24を追加しています。
これによって、本ネットワークへのアクセスはWireGuard VPN経由での通信となります。
ちなみにPersistentKeepalive設定は、ネットワークのタイムアウトを防ぐために定期的にデータを送る設定です。
5. PCからRasPi FSのファイルサーバにアクセスする
これで設定はすべて完了しました。
それではテストしてみましょう。
まずはWireGuardクライアントを起動してください。
起動したら、接続できているか確認しましょう。
PCでコマンドプロンプトを起動してPingを送ってみましょう。
ping 192.168.100.10
これでレスポンスが返ってきたら正しくネットワークの構成が完了しました!
せっかくなのでファイルサーバにもアクセスできるか確認しましょう。
PCでエクスプローラを起動し、\\192.168.100.10にアクセスしましょう。
IDとパスワードを聞かれたら、sambaアカウントであるfs01とパスワードを入力してください。
samba-shareが見えていたら成功です!
終わりに
今回はWireGuard経由で、WireGuardサーバに接続されているネットワーク経由でファイルサーバにアクセスしてみました。
これで、秘密のファイルサーバができますね!
次にやることは、「WireGuardサーバからWireGuardクライアントにアクセスする」 ことです。
これに伴って、一部構成を変える必要があります。
これは備忘録です。
また現実逃避したいときに書きますね。
Discussion