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

内部 Web server への port forward

内部の HTTPS server を WAN 側 IPv4 address で公開し、LAN client からも同じ公開名で 到達できるよう hairpin を有効にする例です。

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

構成図

図の対応表

番号意味主な resource
[1]外部 client が接続する公開側 address と port。PortForward/web-https.spec.listen
[2]ingress DNAT と hairpin rule を出力する router。PortForward/web-https
[3]hairpin traffic が入ってくる LAN interface。PortForward/web-https.spec.hairpin.interfaces
[4]DNAT 先の内部 HTTPS backend。PortForward/web-https.spec.target
[5]公開 address や公開 DNS 名を使う LAN client。hairpin path

要点

# [1] 公開側 listener。hairpin ではここに具体的な address が必要。
- 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 された connection を受ける内部 backend。
target:
address: 192.168.10.20
port: 443
# [3] LAN client から同じ公開 address を使えるようにする。
hairpin:
enabled: true
interfaces:
- lan

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

確認

routerd validate --config examples/example-port-forward-web.yaml
routerd apply --config examples/example-port-forward-web.yaml --once --dry-run
routerctl describe PortForward/web-https
nft list table ip routerd_nat

よく変えるところ

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