手当たり次第に書くんだ

飽きっぽいのは本能

VyOS DNAT / NAT66 destination – 公開サービスへの転送を整理する

VyOS で内部サービスを外部へ公開する場合、IPv4 では DNAT、IPv6 では NAT66 destination を使う構成があります。どちらも「外から来た通信を内部の宛先へ転送する」設定ですが、Firewall、宛先グループ、ポートグループと合わせて設計しないと、何を公開しているのか分かりにくくなります。

この記事では、VyOS 1.5 を前提に、DNAT と NAT66 destination を公開サービスへの転送として整理します。ここで使うアドレスやホスト名は公開用の例です。

DNAT は公開サービスの入口である

DNAT は、外部インターフェイスで受けた IPv4 通信の宛先を、内部サーバーのアドレスへ変換する設定です。Web、DNS、メールなどを内部サーバーで動かしつつ、外部から到達させる場合に使います。

ただし、DNAT を書いただけで安全に公開できるわけではありません。NAT は宛先変換、Firewall は通過可否の制御です。この2つは役割が違います。

Firewall group と組み合わせる

公開するサービスが複数ある場合、宛先アドレスやポートを NAT ルールに直接書き続けると読みにくくなります。事前に address-groupport-group を作っておくと、DNAT ルールの意味が明確になります。

グループ設定例

set firewall group address-group web.example.internal address '192.0.2.80'
set firewall group address-group dns.example.internal address '192.0.2.53'
set firewall group port-group http port '80'
set firewall group port-group http port '443'
set firewall group port-group dns port '53'

IPv4 DNAT の設定例

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

set nat destination rule 2000 inbound-interface name 'eth0'
set nat destination rule 2000 protocol 'tcp_udp'
set nat destination rule 2000 destination group port-group '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 'dns'
set nat destination rule 2010 translation address '192.0.2.53'

ここでは例として Web と DNS を分けています。ルール番号は、サービス単位で余裕を持たせておくと後から追加しやすくなります。

IPv6 で NAT66 destination を使う場合

IPv6 は本来、各ホストがグローバルアドレスを持ち、NAT せずに到達性と Firewall で制御する設計が基本です。一方で、設計上の抽象化や内部アドレス体系の維持を目的として、NAT66 destination を使いたくなる場面もあります。

NAT66 destination を使う場合も、IPv4 DNAT と同じように、NAT と Firewall の責務を分けて考えます。

NAT66 destination の設定例

set nat66 destination rule 2000 inbound-interface name 'eth0'
set nat66 destination rule 2000 protocol 'tcp_udp'
set nat66 destination rule 2000 destination group port-group 'http'
set nat66 destination rule 2000 translation address 'fd00::192:0:2:80'

set nat66 destination rule 2010 inbound-interface name 'eth0'
set nat66 destination rule 2010 protocol 'tcp_udp'
set nat66 destination rule 2010 destination group port-group 'dns'
set nat66 destination rule 2010 translation address 'fd00::192:0:2:53'

Firewall で outside-in を許可する

DNAT / NAT66 destination の設定だけでは、外部から内部へ通すべき通信を説明しきれません。外部から内部へ転送する通信は、Firewall の outside-in 側で許可します。

set firewall ipv4 name outside-in rule 2000 action 'accept'
set firewall ipv4 name outside-in rule 2000 destination group address-group 'web.example.internal'
set firewall ipv4 name outside-in rule 2000 destination group port-group 'http'
set firewall ipv4 name outside-in rule 2000 protocol 'tcp_udp'

set firewall ipv6 name outside-in rule 2000 action 'accept'
set firewall ipv6 name outside-in rule 2000 destination group address-group 'web.example.internal'
set firewall ipv6 name outside-in rule 2000 destination group port-group 'http'
set firewall ipv6 name outside-in rule 2000 protocol 'tcp_udp'

実際の環境では、IPv4 と IPv6 でアドレスグループを分ける場合もあります。重要なのは、NAT で転送先を決め、Firewall で通してよい通信を決める、という責務を混ぜないことです。

まとめ

VyOS の DNAT / NAT66 destination は、公開サービスへの入口を作る設定です。ただし、NAT は宛先変換であり、公開可否の制御そのものではありません。Firewall group で対象を整理し、Firewall の outside-in で通過可否を明示することで、何を公開しているのか説明しやすくなります。

IPv6 では NAT66 を使うべきかどうか自体が設計判断になります。使う場合でも、IPv4 DNAT の延長として雑に扱うのではなく、アドレス設計、Firewall、公開サービスの責務分界として整理するのが重要です。

関連する記事

次に進む

参考書籍

参考書籍
参考書籍
マスタリングTCP/IP 入門編 第6版

NAT、ポート、プロトコル、IPv4 / IPv6 の前提を確認したい場合の参考書籍です。

Amazon で見る

このリンクは Amazon アソシエイトリンクです。

VyOS DNAT / NAT66 destination – 公開サービスへの転送を整理する

コメントを残す

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

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

トップへ戻る