OCIでWirguardサーバを構築する
なんか記事読んでもうまいこと行かなかったのでGeminiに聞いた。
以下やったこと
1. カーネル設定 (中継の有効化)
-
設定ファイルに追記
echo "net.ipv4.ip_forward = 1" | sudo tee -a /etc/sysctl.conf
-
設定を即時反映
sudo sysctl -p
2. iptables フィルタリング (通行許可)
INPUT
-
確立済みの通信を最優先で許可 (RELATED,ESTABLISHED)
sudo iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-
ローカルループバックを許可 (lo)
sudo iptables -A INPUT -i lo -j ACCEPT
-
WireGuardの入り口を開放 (UDP 51820)
sudo iptables -A INPUT -p udp --dport 51820 -j ACCEPT
-
SSH管理用ポートを開放 (TCP 22)
sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT
-
VPN内の通信(10.0.10.0/24)をすべて許可
sudo iptables -A INPUT -s 10.0.10.0/24 -j ACCEPT
-
他はすべて拒否 (REJECT)
sudo iptables -A INPUT -j REJECT --reject-with icmp-host-prohibited
FORWARD
-
WireGuardから入ってきた通信(スマホからのリクエスト)をすべて許可
sudo iptables -A FORWARD -i wg0 -j ACCEPT
-
既に確立された通信の「戻り」パケットを許可 (RELATED,ESTABLISHED)
sudo iptables -A FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT
-
他はすべて拒否 (REJECT)
sudo iptables -A FORWARD -j REJECT --reject-with icmp-host-prohibited
NAT
- VPN内からの通信が外(ens3)へ出るときにIPを変換する
sudo iptables -t nat -A POSTROUTING -s 10.0.10.0/24 -o ens3 -j MASQUERADE
3. 現在の状態を保存
sudo netfilter-persistent save
4. VCNセキュリティ・リストの設定
- ソース CIDR
- 0.0.0.0/0 どこからでも接続可能にする(スマホの回線はIPが変わるため)
- IP プロトコル
- UDP
- ソース・ポート範囲(空白または All)
- 空白
- 宛先ポート範囲
- 51820(WireGuardが待ち受けているポート番号)
5. Adguard HomeをOCI上に構築する
まずインストールスクリプトでつまづいた(wget,curlで名前解決ができない)
/etc/resolv.confに元々書いてあった内容
# systemd-resolved
nameserver 127.0.0.53
# なくても困らない
options edns0 trust-ad
# OCI内部通信用(他インスタンスからの接続用だから不要)
search vcn20260321.oraclevcn.com
/etc/netplan/50-cloud-init.yamlを編集
ens3:
中略
# 以下を追記
nameservers:
addresses: [8.8.8.8, 1.1.1.1]
search: [vcn20260321.oraclevcn.com] # OCI内部通信用
### 適用
sudo netplan apply
systemd-resolved の停止と無効化
sudo systemctl stop systemd-resolved
sudo systemctl disable systemd-resolved
/etc/resolv.conf の固定
# 既存のリンクを削除
sudo rm /etc/resolv.conf
# 新しく実ファイルを作成
echo "nameserver 8.8.8.8" | sudo tee /etc/resolv.conf
echo "nameserver 1.1.1.1" | sudo tee -a /etc/resolv.conf
echo "search vcn20260321.oraclevcn.com" | sudo tee -a /etc/resolv.conf
Adguardインストール
ドキュメント参照
VCNの設定
初期設定用: TCP/3000 -> セットアップが終わったら不要なので消す
WebUI用: TCP/80
6. SSL証明書
NASにアクセスする用。Nginx Proxy MangerはProxmox上のLinuxに構築済み。
あとドメインも取得済み。
DNS書き換え設定
- Adguard Home -> DNS書き換え
*.domain.comを10.0.10.x(Linux)に向ける
Cloudflare APIトークン
- Zone.DNS:Edit(*.domain.com)
- トークンはコピーして控える
NPMに適用
- NPM -> 証明書を追加 -> Let’s Encrypt via DNS
- ドメイン名:
*.domain.comとdomain.com - DNSプロバイダ: Cloudflare
dns_cloudflare_api_token=にトークンを貼り付ける
- ドメイン名:
プロキシホストの追加
- ドメイン名:
hoge.domain.com - http://<コンテナ名>:ポート番号
- NASはWireguard入れていないしdockerコンテナでもないので
192.168.x.x:ポート番号と書く - dockerコンテナはNPMと同じdocker networkに参加させる
- NASはWireguard入れていないしdockerコンテナでもないので
- ACL: Wireguard(
10.0.10.0/24のみ許可) - SSLに作成した証明書を設定、SSL強制とHTTP/2サポートをオンにした
おわり
- LAN外からNASへアクセスできるようになった
- Wireguardで認証した端末だけが名前解決できるようになった