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

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

集合住宅やマンションのネットワーク環境内に設置した Web サーバ(OpenLiteSpeed)を、Oracle Cloud Infrastructure(OCI)の VPS と VPN(Virtual Private Network)で接続し、公開する方法を説明します。VPS へのアクセスは、iptables の NAT を使用して直接 Web サーバへ転送します。

構成図

WireGuardとVPS(OCI)を活用した集合住宅ネットワーク内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種類のネットワークを使用します。

  1. WireGuard間の通信ネットワーク
    • WireGuardのトンネル内でVPNのピア同士が通信するためのネットワーク。
    • 例: 10.1.232.0/24
  2. WireGuardネットワーク内のマシン用ネットワーク
    • VPN内の各マシンに割り当てられるIPアドレス。
    • 例: 192.168.100.0/24

Wireguardでは以下のポートを使用します。

  1. 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/

動作確認

  1. WireGuardの接続確認
    docker exec -it <wireguardコンテナ名> wg show
  2. VPSから自宅サーバのWebサーバにアクセスできるか確認
    docker exec -it <wireguardコンテナ名> curl -I http://192.168.100.3
  3. インターネットからVPSのドメインを指定してWebサーバにアクセスできるか確認
    curl -I https://your-vps-domain.com

まとめ

この構成により、VPSを中継して集合住宅内のWebサーバを公開することができました。WireGuardを活用することで、安全かつ柔軟にトラフィックを転送し、外部からのアクセスを可能にしました。

2025-04-20サーバ&テクノロジ

Posted by 納戸 工房