手当たり次第に書くんだ

飽きっぽいのは本能

VyOS DNAT / NAT66 destination 設定 – 公開サービスへの転送と Firewall

VyOS で内部サービスを外部へ公開する場合、IPv4 では DNAT、IPv6 では NAT66 destination を使う構成があります。どちらも外から来た通信の宛先を内部サーバーへ向けるための設定ですが、それだけで公開サービスの制御が完了するわけではありません。

NAT は宛先変換、Firewall は通過可否の制御です。公開ポート、転送先アドレス、送信元制限、outside-in の許可を分けて考えると、何を外へ出しているのかを後から確認しやすくなります。

この記事では、VyOS 1.5 系で読むことを前提に、DNAT と NAT66 destination を公開サービスへの転送として扱う時の考え方、設定例、確認手順をまとめます。アドレスやホスト名は公開用の例です。

この記事の結論

  • DNAT / NAT66 destination は公開サービスの入口を作る設定である
  • NAT ルールと Firewall ルールは役割を分けて読む
  • address-group / port-group を使うと公開対象を追いやすい
  • IPv6 では NAT66 が必要か、Firewall だけでよいかを先に決める
  • 疎通しない時は NAT、Firewall、戻り経路、サービス待受を順番に確認する

DNAT と Firewall の責務

DNAT は、外部インターフェイスで受けた IPv4 通信の宛先を内部サーバーのアドレスへ変換します。NAT66 destination も同じ方向の変換ですが、IPv6 で宛先変換を使う設計です。

要素役割確認すること
DNATIPv4 の宛先変換外部ポートと内部サーバーの対応
NAT66 destinationIPv6 の宛先変換NAT66 を使う理由と変換先
Firewall通信の許可と拒否送信元、宛先、ポート、状態
戻り経路応答通信の返送内部サーバーの gateway と経路

DNAT を書いても Firewall が拒否していれば通信は通りません。逆に Firewall だけを許可しても、宛先変換が必要な構成では内部サーバーへ届きません。

公開するサービスを決める

先に、どのサービスをどのアドレスとポートで公開するかを決めます。ここでは、Web と DNS を例にします。

公開サービス外部ポート内部サーバー内部ポート
WebTCP 80 / 443192.0.2.80TCP 80 / 443
DNSTCP / UDP 53192.0.2.53TCP / UDP 53
IPv6 WebTCP 4432001:db8:100::80TCP 443

公開対象が増える場合は、NAT ルールに直接アドレスやポートを書き続けるより、Firewall group を使って名前を付けた方が読みやすくなります。

Firewall group を用意する

address-groupport-group は、NAT と Firewall の両方で参照できます。公開対象をグループ化すると、ルール番号を見なくても意図を追いやすくなります。

configure
set firewall group address-group pub_web_v4 address '192.0.2.80'
set firewall group address-group pub_dns_v4 address '192.0.2.53'
set firewall group ipv6-address-group pub_web_v6 address '2001:db8:100::80'
set firewall group port-group pub_http port '80'
set firewall group port-group pub_http port '443'
set firewall group port-group pub_dns port '53'
commit
save

IPv4 DNAT を設定する

IPv4 では nat destination を使い、外部インターフェイス、プロトコル、宛先ポート、変換先アドレスを指定します。

configure
set nat destination rule 2000 inbound-interface name 'eth0'
set nat destination rule 2000 protocol 'tcp'
set nat destination rule 2000 destination group port-group 'pub_http'
set nat destination rule 2000 translation address '192.0.2.80'
set nat destination rule 2010 inbound-interface name 'eth0'
set nat destination rule 2010 protocol 'tcp_udp'
set nat destination rule 2010 destination group port-group 'pub_dns'
set nat destination rule 2010 translation address '192.0.2.53'
commit
save

ルール番号は、サービス単位で間隔を空けておくと追加や差し替えがしやすくなります。外部ポートと内部ポートを変える場合は、translation port も含めて設計します。

NAT66 destination を使う場合

IPv6 は、各ホストがグローバルアドレスを持ち、NAT せずに Firewall で制御する設計が基本です。ただし、内部アドレス体系を隠したい、外側アドレスと内側アドレスを分けたい、移行期間の都合がある、といった理由で NAT66 destination を使う場合があります。

configure
set nat66 destination rule 3000 inbound-interface name 'eth0'
set nat66 destination rule 3000 protocol 'tcp'
set nat66 destination rule 3000 destination port '443'
set nat66 destination rule 3000 translation address '2001:db8:100::80'
commit
save

NAT66 destination を使う場合でも、Firewall の許可は別に必要です。IPv6 では NAT を使うこと自体が設計判断になるため、単に IPv4 の DNAT と同じ感覚で置き換えない方が安全です。

outside-in を許可する

外部から内部へ向かう通信は、outside-in の Firewall で明示的に許可します。公開したい宛先とポートだけを許可し、それ以外は既定の drop に任せる構成にします。

configure
set firewall ipv4 name OUTSIDE-IN default-action 'drop'
set firewall ipv4 name OUTSIDE-IN rule 200 action 'accept'
set firewall ipv4 name OUTSIDE-IN rule 200 state 'established'
set firewall ipv4 name OUTSIDE-IN rule 200 state 'related'
set firewall ipv4 name OUTSIDE-IN rule 210 action 'accept'
set firewall ipv4 name OUTSIDE-IN rule 210 protocol 'tcp'
set firewall ipv4 name OUTSIDE-IN rule 210 destination group address-group 'pub_web_v4'
set firewall ipv4 name OUTSIDE-IN rule 210 destination group port-group 'pub_http'
set firewall ipv4 name OUTSIDE-IN rule 220 action 'accept'
set firewall ipv4 name OUTSIDE-IN rule 220 protocol 'tcp_udp'
set firewall ipv4 name OUTSIDE-IN rule 220 destination group address-group 'pub_dns_v4'
set firewall ipv4 name OUTSIDE-IN rule 220 destination group port-group 'pub_dns'
set interfaces ethernet eth0 firewall in name 'OUTSIDE-IN'
commit
save

IPv6 側も同じ考え方で、公開したい宛先とポートだけを許可します。IPv6 は到達性が広いため、NAT66 を使わない場合でも outside-in の設計は必須です。

configure
set firewall ipv6 name OUTSIDE-IN-V6 default-action 'drop'
set firewall ipv6 name OUTSIDE-IN-V6 rule 200 action 'accept'
set firewall ipv6 name OUTSIDE-IN-V6 rule 200 state 'established'
set firewall ipv6 name OUTSIDE-IN-V6 rule 200 state 'related'
set firewall ipv6 name OUTSIDE-IN-V6 rule 210 action 'accept'
set firewall ipv6 name OUTSIDE-IN-V6 rule 210 protocol 'tcp'
set firewall ipv6 name OUTSIDE-IN-V6 rule 210 destination group address-group 'pub_web_v6'
set firewall ipv6 name OUTSIDE-IN-V6 rule 210 destination port '443'
set interfaces ethernet eth0 firewall in ipv6-name 'OUTSIDE-IN-V6'
commit
save

確認する

確認では、NAT ルール、Firewall ルール、外部からの到達性、内部サーバーの待受、戻り経路を分けて見ます。

show nat destination rules
show nat66 destination rules
show firewall
show conntrack table ipv4
show conntrack table ipv6
show configuration commands | match 'nat destination'
show configuration commands | match 'nat66 destination'

公開サービスが応答しない場合、VyOS の NAT だけを見るのではなく、内部サーバー側で該当ポートが待ち受けているか、default gateway が VyOS を向いているか、サーバー自身の Firewall が拒否していないかも確認します。

よくあるつまずき

症状見る場所考え方
NAT ルールはあるが外から届かないoutside-in Firewall宛先変換と許可制御を分けて確認する
内部サーバーまで届くが応答が戻らない戻り経路内部サーバーの gateway と経路を見る
IPv6 だけ意図と違うNAT66 の必要性NAT ではなく Firewall だけでよい構成か確認する
DNS だけ失敗するprotocol と port-groupTCP / UDP の両方が必要か見る
設定が読みにくいaddress-group / port-group公開対象に名前を付けて管理する

まとめ

VyOS の DNAT / NAT66 destination は、内部サービスを公開するための入口を作る設定です。ただし、NAT は宛先変換であり、公開可否を制御する主体は Firewall です。

公開するサービス、変換先、許可するポート、outside-in、戻り経路を分けて確認すると、トラブル時に見る場所が明確になります。特に IPv6 では、NAT66 を使う理由を先に決め、Firewall だけで制御する設計との違いを意識することが重要です。

関連する記事
VyOS DNAT / NAT66 destination 設定 – 公開サービスへの転送と Firewall

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)

トップへ戻る