折角 OPNsense を建てたので、 DNS Override もしておく。
現在の環境
現在の環境は、ざっくりと次のようになっている。

このとき、ローカルから自分のドメインにアクセスすると、図の右側、一旦 Nginx のリバースプロキシから入り、 WireGuard を通過し、オンプレ AP サーバーに到達するという遠回りを強いられる上、現在の回線が Docomo Home 5G (環境が悪く、実質 4G)という上り一桁台の貧弱回線なので、自分のサーバーにアクセスするのがストレスという事態になってしまっていた。いくら仮設環境とはいえ、流石に我慢できなくなったというのが今回の話。
ローカル Nginx
そこで本題。ローカル環境からは、 sagino-alchemia.org を VPS サーバーに向けず、ローカル内最短経路でルートしてしまおうという設定。今回は、ローカルサービスをまとめるために Nginx を Docker で構築。勿論、 OPNsense WAF を使わないなどあれば、フロントに BunkerWeb などを配置しても良さそう。

compose.yml
services:
nginx-proxy:
# Build the image using the local Dockerfile
build: .
container_name: nginx-reverse-proxy
# Map host port 80 and 443 to container ports
ports:
- "80:80"
- "443:443"
# Restart the container automatically unless it is stopped manually
restart: always
# Volume mounts with :z parameter for SELinux compatibility (RHEL Only)
volumes:
# Mount the main configuration file
- ./nginx.conf:/etc/nginx/nginx.conf:ro,z
# Mount the extra configuration directory for server blocks
- ./conf.d/:/etc/nginx/conf.d/:ro,z
# Mount the html directory for custom error pages and index
- ./html/:/usr/share/nginx/html/:ro,z
# Mount the Let's Encrypt directory
- ./letsencrypt/:/etc/letsencrypt/:ro,z
Dockerfile
# Dockerfile
# Use a stable Nginx image as the base
FROM nginx:stable-alpine
# Expose port 80 for HTTP traffic
EXPOSE 80
# The container will run Nginx using the default CMD
# CMD ["nginx", "-g", "daemon off;"]
ローカル Nginx の設定は、ほぼ VPS 上の Nginx と一緒。違いは、 proxy_pass の宛先をローカルに向けるだけ。そして、ローカルでも SSL を有効化するために、 VPS 上の Cartbot が管理する証明書をローカルに同期する。 compose.yml で letsencrypt directory 指定があるのはこのため。
OPNsense による DNS Override
コンテナを建てたら、経路情報を書き換えていく。
OPNsense の Services: Unbound DNS: Overrides
に入り、上段枠の Hosts をオレンジ色の ➕️ で追加。

Host...* (サブドメインをすべて含める)
Domain...自分のドメイン
Type...対象となるレコード。今回は IPv4 だけで設定するので、 'A'
TTL...空欄で OK
IP address...ローカルの Nginx アドレスを指定
Description...自分が理解できる、設定名
Save したあと、左下、 Apply で適用される筈。
ただこのままでは、 OS の DNS キャッシュが働いて、正常にルーティングできない場合もあるので、 Windows マシンの場合、 Powershell などで ipconfig /flushdns を、 Linux (RHEL, Debian) の場合、 systemd-resolve --flush-caches を実行すると、キャッシュがクリアされて、設定した通りのルーティングがされるはず。
ちなみに…
例えば、 NHK のドメインをブロックするだとか、アクセスを逸らしたい場合、こんな感じで登録できる。純粋に蹴る方法としては Blocklist もあるのだが、そんなに根こそぎブロックしたい訳でもないとかであれば、これでも良いと思う。

下段の Aliases は、上段のルールと同じように適用するドメインを指定することで、複数ドメインに対応可能。ちなみにリダイレクトしているアドレス、 142.250.76.142は Google のアドレスなので、 404 が返ってくる。勿論、自分のサイトのアクセス禁止ページに向けても OK. 但しこの場合、証明書が一致しないので、エラーになって、 Firefox 的には警告が出る。

今回は WordPress 内蔵のエディタで編集。10 年くらい前は Web ベースのブログエディタってとても使い難かったのに、最近は進化しまくってるね。

Leave a Reply