WireGuardとVPS(OCI)を活用した集合住宅ネットワーク内Webサーバの公開


集合住宅やマンションのネットワーク環境内に設置した Web サーバ(OpenLiteSpeed)を、Oracle Cloud Infrastructure(OCI)の VPS と VPN(Virtual Private Network)で接続し、公開する方法を説明します。VPS へのアクセスは、iptables の NAT を使用して直接 Web サーバへ転送します。
構成図
目的
- 集合住宅やマンションのネットワーク環境内に設置した Web サーバを公開する。
- 可能な限りコストをかけず、無料のサービスを活用して運用する。
- 過去に運用していた Web サーバを再利用する。
目標
- VPS の 80/tcp(HTTP), 443/tcp(HTTPS), 443/UDP(HTTP/3) ポートへのアクセスを直接 Web サーバに転送する。
課題
- 集合住宅やマンションではプライベート IP アドレスが割り当てられるため、Web サーバを直接公開できない。
- Web サーバを公開するためのコストを抑えたい。
- 引っ越し前に使用していた Web サーバを、新しい環境でどのように活用するか検討する必要がある。
VPN(Virtual Private Network)の構築
VPN(Virtual Private Network)とは、インターネット上に 仮想的な専用回線 を構築し、安全な通信を可能にする技術です。VPN を利用すると、離れた場所にあるネットワーク同士を 暗号化された通信経路 で接続でき、第三者にデータが盗み見られるリスクを軽減できます。
主な用途には以下のようなものがあります:
- リモートアクセス:外出先から社内ネットワークや自宅のサーバーに安全にアクセス
- 拠点間接続:異なる拠点のネットワークを VPN で接続し、一つのネットワークのように運用
- セキュリティ強化:公共 Wi-Fi などの安全でない環境でも、データを暗号化して通信
本記事では、VPN を活用して 集合住宅内の Web サーバを公開する方法 を解説します。そのために、軽量かつ高速な VPN プロトコルである「WireGuard」 を利用して VPN を構築します。
WireGuard とは?
WireGuard は、シンプルで高性能な VPN プロトコルであり、以下の特徴があります:
- 高速性:従来の VPN(IPsec や OpenVPN)よりも処理が軽く、高速な通信が可能
- 高いセキュリティ:最新の暗号技術を採用し、安全性が高い
- 設定がシンプル:複雑な設定が不要で、構築が容易
本記事では、Oracle Cloud Infrastructure(OCI)の VPS に WireGuard を導入し、集合住宅内の Web サーバと VPN 接続する方法 を詳しく説明します。
WireGuardのネットワーク構成
WireGuardでは2種類のネットワークを使用します。
- WireGuard間の通信ネットワーク
- WireGuardのトンネル内でVPNのピア同士が通信するためのネットワーク。
- 例:
10.1.232.0/24
- WireGuardネットワーク内のマシン用ネットワーク
- VPN内の各マシンに割り当てられるIPアドレス。
- 例:
192.168.100.0/24
Wireguardでは以下のポートを使用します。
- WireGuardサーバに通信するポート
- WireGuardのトンネルを作る際に使用するポート
- 例:
51820/UDP
(変更可能)
VPSの設定
VPS(Oracle Cloud Infrastructure, OCI)をWireGuardの中継ノードとして利用し、自宅サーバーと安全に通信するためには、以下の条件を満たしている必要があります。
-
VPSにPublic IPが割り当てられていること
- OCIのフリー枠インスタンスではデフォルトでパブリックIPが付与されますが、確認が必要です。
- OCIコンソールで「インスタンスの詳細」からパブリックIPを確認できます。
-
ファイアウォール(OCIセキュリティリスト)で必要なポートを開放する
- WireGuard通信(UDPポート51820)
- Webサーバー用(TCP 80, 443)
- HTTP/3(UDP 443)
WireGuard-Server の設定
VPS上でWireGuard-ServerをDockerコンテナとして動作させます。
docker-compose.yml
の環境変数設定
docker-compose.yml:
version: '3'
services:
wireguard:
image: linuxserver/wireguard
container_name: wireguard-server
cap_add:
- NET_ADMIN
- SYS_MODULE
environment:
- PUID=1000
- PGID=1000
- SERVERURL= <IP OR DOMAIN> #optional
- SERVERPORT=51820 #optional
- PEERS=1 #optional
- PEERDNS=8.8.8.8,10.1.232.1 #optional
- INTERNAL_SUBNET=10.1.232.0/24 #optional
- ALLOWEDIPS=10.1.232.0/24 #optional
- PERSISTENTKEEPALIVE_PEERS=all #optional
- LOG_CONFS=true #optional
- SERVER_ALLOWEDIPS_PEER_1=192.168.100.0/24
volumes:
- ./config:/config
- /lib/modules:/lib/modules #optional
ports:
- 80:80
- 443:443
- 443:443/udp
- 51820:51820/udp
restart: unless-stopped
sysctls:
- net.ipv4.conf.all.src_valid_mark=1
docker-compose up -d
を実行すると、config
ディレクトリ内にWireGuardの設定ファイルや関連データが自動的に生成されます。以下のようなディレクトリ構成になります。docker-compose.ymlのPEERSを"1″としているので、configディレクトリにpeer"1″が作られます。複数のpeerを作る場合はカンマ区切りで記入する。
$ls -R config
config/: coredns peer1 server templates wg_confs config/coredns: Corefile config/peer1: peer1.conf peer1.png presharedkey-peer1 privatekey-peer1 publickey-peer1 config/server: privatekey-server publickey-server config/templates: peer.conf server.conf config/wg_confs: wg0.conf
WireGuard-Client の設定
自宅サーバ上でWireGuard-ClientをDockerコンテナとして動作させます。
wg0.conf
の設定
WireGuard-Serverの config/peer1/peer1.conf
を参考にして wg0.conf
を作成します。
[Interface]
Address = 10.1.232.2/24
PrivateKey = <クライアントの秘密鍵: peer1.confからコピー>
ListenPort = 51820
DNS = 8.8.8.8,10.1.232.1
[Peer]
PublicKey = <サーバの公開鍵: peer1.confからコピー>
PresharedKey = <事前共有鍵: peer1.confからコピー>
Endpoint = <VPSのIPアドレスまたはドメイン>:51820
AllowedIPs = 10.1.232.0/24
PersistentKeepalive = 25
wg0.conf
の Interface に PostUp
/ PostDown
を追加
Wireguard起動時にNATのルールを適用するため、wireguard clientのwg0.confの[Interface]にPostUpとPostDownを追加する。
PostUp = iptables -t nat -A POSTROUTING -d 192.168.100.0/24 -j MASQUERADE
PostDown = iptables -t nat -D POSTROUTING -d 192.168.100.0/24 -j MASQUERADE
Webサーバ(OpenLiteSpeed)をWireGuardのネットワークに追加
Dockerの network
を使用してOpenLiteSpeedのIP(例:192.168.100.3)を指定します。
docker-compose.yml
のネットワーク設定
services:
openlitespeed:
image: litespeedtech/openlitespeed
container_name: openlitespeed
networks:
backbone:
ipv4_address: 192.168.100.3
...
中略
...
networks:
backbone:
driver: bridge
ipam:
config:
- subnet: 192.168.100.0/24
WireGuard-Serverのiptables設定
WireGuard-Server上でiptablesを設定し、VPSのHTTP/HTTPSトラフィックを自宅サーバのOpenLiteSpeedに転送します。config/wg_conf/wg0.confのPostUp/PostDownを以下のように書き換えます。(PostUp/PostDownの初期値は、1行で書かれていますが可読性を上げるために、分割しています。)
PostUp = iptables -A FORWARD -i %i -j ACCEPT PostUp = iptables -A FORWARD -o %i -j ACCEPT PostUp = iptables -t nat -A POSTROUTING -o eth+ -j MASQUERADE PostUp = iptables -A FORWARD -i %i -o %i -j ACCEPT PostUp = iptables -t nat -A POSTROUTING -d 10.1.232.0/24 -j MASQUERADE PostUp = iptables -t nat -A PREROUTING -i eth+ -p tcp --dport 80 -j DNAT --to-destination 192.168.100.3:80 PostUp = iptables -t nat -A PREROUTING -i eth+ -p tcp --dport 443 -j DNAT --to-destination 192.168.100.3:443 PostUp = iptables -t nat -A PREROUTING -i eth+ -p udp --dport 443 -j DNAT --to-destination 192.168.100.3:443 PostDown = iptables -D FORWARD -i %i -j ACCEPT PostDown = iptables -D FORWARD -o %i -j ACCEPT PostDown = iptables -t nat -D POSTROUTING -o eth+ -j MASQUERADE PostDown = iptables -D FORWARD -i %i -o %i -j ACCEPT PostDown = iptables -t nat -D POSTROUTING -d 10.1.232.0/24 -j MASQUERADE; PostDown = iptables -t nat -D PREROUTING -i eth+ -p tcp --dport 80 -j DNAT --to-destination 192.168.100.3:80 PostDown = iptables -t nat -D PREROUTING -i eth+ -p tcp --dport 443 -j DNAT --to-destination 192.168.100.3:443 PostDown = iptables -t nat -D PREROUTING -i eth+ -p udp --dport 443 -j DNAT --to-destination 192.168.100.3:443$ ls -R config/
動作確認
- WireGuardの接続確認
docker exec -it <wireguardコンテナ名> wg show
- VPSから自宅サーバのWebサーバにアクセスできるか確認
docker exec -it <wireguardコンテナ名> curl -I http://192.168.100.3
- インターネットからVPSのドメインを指定してWebサーバにアクセスできるか確認
curl -I https://your-vps-domain.com
まとめ
この構成により、VPSを中継して集合住宅内のWebサーバを公開することができました。WireGuardを活用することで、安全かつ柔軟にトラフィックを転送し、外部からのアクセスを可能にしました。