基本の NAT とファイアウォールポリシー

routerd は、Linux ルーター上で IPv4 NAPT (NAT44) とステートフルファイアウォールを適用します。 このチュートリアルでは、初期構成のホストに両方を入れる最小手順を示します。
想定する構成
ルーターは次の構成になっているものとします。
- IPv4 が乗っている上流インターフェース (
wan)。ネイティブデュアルスタック / PPPoE / DS-Lite のいずれでもかまいません。 - LAN 内クライアントにプライベートアドレスを配る LAN インターフェース (
lan)。 - 任意で、管理インターフェース (
mgmt)。
ここでの目的は次の 2 つです。
- LAN からの外向き IPv4 を masquerade する。
- 健全なファイアウォールの既定状態を適用する (WAN は LAN に届かない、LAN は WAN に届く、管理側はルーター自身に届く)。
NAT44
- apiVersion: net.routerd.net/v1alpha1
kind: NAT44Rule
metadata:
name: lan-to-wan
spec:
outboundInterface: wan
sourceCIDRs:
- 192.0.2.0/24
masquerade: true
routerd は、routerd_nat nftables テーブルにルールを生成します。
DHCP 取得回線、PPPoE 仮想インターフェース、DS-Lite トンネルのいずれでも書き方は同じで、outboundInterface だけを変えます。
conntrack 観測
routerd は conntrack を読み、Web 管理画面と routerctl connections でライブフローを表示します。
/proc/net/nf_conntrack がない環境では、sysctl 由来のサマリに縮退します。失敗にはせず、観測できる範囲だけを表示します。
ファイアウォール Kind
FirewallZone、FirewallPolicy、FirewallRule がステートフルフィルターを表現します。
routerd は、これらを inet routerd_filter nftables テーブルに生成します。
役割 (untrust、trust、mgmt) が、暗黙の accept / drop マトリクスを提供します。
DHCP / DNS / DS-Lite 制御のような管理対象サービスに必要な穴は、routerd が自動で開けます。
- apiVersion: firewall.routerd.net/v1alpha1
kind: FirewallZone
metadata: {name: wan}
spec:
role: untrust
interfaces:
- Interface/wan
- apiVersion: firewall.routerd.net/v1alpha1
kind: FirewallZone
metadata: {name: lan}
spec:
role: trust
interfaces:
- Interface/lan
- apiVersion: firewall.routerd.net/v1alpha1
kind: FirewallPolicy
metadata: {name: default}
spec: {}
例外を入れたいときは ファイアウォールルールのガイド を参照してください。
確認
routerctl describe NAT44Rule/lan-to-wan
routerctl firewall test from=wan to=lan proto=tcp dport=22
nft list table inet routerd_filter
nft list table ip routerd_nat