メインコンテンツまでスキップ

内部 Web サーバーへのポートフォワード

内部 HTTPS サーバー向けの PortForward による受信 DNAT、LAN ヘアピンアクセス、ファイアウォールゾーン分離の構成

内部の HTTPS サーバーを WAN 側の IPv4 アドレスで公開し、LAN クライアントからも同じ公開名で 到達できるよう hairpin を有効にする例です。

完全な YAML は examples/example-port-forward-web.yaml にあります。

構成図

図の対応表

番号意味主なリソース
[1]外部クライアントが接続する公開側のアドレスと port。PortForward/web-https.spec.listen
[2]ingress DNAT と hairpin ルールを生成するルーター。PortForward/web-https
[3]hairpin のトラフィックが入ってくる LAN インターフェース。PortForward/web-https.spec.hairpin.interfaces
[4]DNAT 先の内部 HTTPS バックエンド。PortForward/web-https.spec.target
[5]公開アドレスや公開 DNS 名を使う LAN クライアント。ヘアピン経路

この例で管理するもの

領域routerd リソース
受信 DNATPortForward/web-https
ヘアピンアクセスPortForward.spec.hairpin
ゾーンとポリシーFirewallZone/wan, FirewallZone/lan, FirewallPolicy/home

設定の要点

# [1] 公開側のリスナー。ヘアピンではここに具体的なアドレスが必要。
- apiVersion: firewall.routerd.net/v1alpha1
kind: PortForward
metadata:
name: web-https
spec:
listen:
interface: wan
address: 203.0.113.10
protocol: tcp
port: 443
# [4] DNAT された接続を受ける内部バックエンド。
target:
address: 192.168.10.20
port: 443
# [3] LAN クライアントから同じ公開アドレスを使えるようにする。
hairpin:
enabled: true
interfaces:
- lan

hairpin を使うには、LAN 側から見える公開宛先のアドレスが必要です。 そのため listen.address または listen.addressFrom を指定します。

確認

routerctl validate -f examples/example-port-forward-web.yaml --replace
routerctl plan -f examples/example-port-forward-web.yaml --replace
routerctl describe PortForward/web-https
nft list table ip routerd_nat

よく変えるところ

  • 203.0.113.10 を実際の WAN 側 IPv4 アドレスに変えます。
  • 公開名がこのアドレスを返すよう、DNS は別途設定します。
  • 公開する port は必要最小限にします。