VyOS で内部サービスを外部へ公開する場合、IPv4 では DNAT、IPv6 では NAT66 destination を使う構成があります。どちらも外から来た通信の宛先を内部サーバーへ向けるための設定ですが、それだけで公開サービスの制御が完了するわけではありません。
NAT は宛先変換、Firewall は通過可否の制御です。公開ポート、転送先アドレス、送信元制限、outside-in の許可を分けて考えると、何を外へ出しているのかを後から確認しやすくなります。
この記事では、VyOS 1.5 系で読むことを前提に、DNAT と NAT66 destination を公開サービスへの転送として扱う時の考え方、設定例、確認手順をまとめます。アドレスやホスト名は公開用の例です。
書籍
NAT、Firewall、ルーティング、IPv4 / IPv6 の基礎を体系的に確認したい場合の参考書籍です。価格や在庫はリンク先で確認してください。
Amazon で見るこのリンクは Amazon アソシエイトリンクです。
この記事の結論
- DNAT / NAT66 destination は公開サービスの入口を作る設定である
- NAT ルールと Firewall ルールは役割を分けて読む
- address-group / port-group を使うと公開対象を追いやすい
- IPv6 では NAT66 が必要か、Firewall だけでよいかを先に決める
- 疎通しない時は NAT、Firewall、戻り経路、サービス待受を順番に確認する
DNAT と Firewall の責務
DNAT は、外部インターフェイスで受けた IPv4 通信の宛先を内部サーバーのアドレスへ変換します。NAT66 destination も同じ方向の変換ですが、IPv6 で宛先変換を使う設計です。
| 要素 | 役割 | 確認すること |
|---|---|---|
| DNAT | IPv4 の宛先変換 | 外部ポートと内部サーバーの対応 |
| NAT66 destination | IPv6 の宛先変換 | NAT66 を使う理由と変換先 |
| Firewall | 通信の許可と拒否 | 送信元、宛先、ポート、状態 |
| 戻り経路 | 応答通信の返送 | 内部サーバーの gateway と経路 |
DNAT を書いても Firewall が拒否していれば通信は通りません。逆に Firewall だけを許可しても、宛先変換が必要な構成では内部サーバーへ届きません。
公開するサービスを決める
先に、どのサービスをどのアドレスとポートで公開するかを決めます。ここでは、Web と DNS を例にします。
| 公開サービス | 外部ポート | 内部サーバー | 内部ポート |
|---|---|---|---|
| Web | TCP 80 / 443 | 192.0.2.80 | TCP 80 / 443 |
| DNS | TCP / UDP 53 | 192.0.2.53 | TCP / UDP 53 |
| IPv6 Web | TCP 443 | 2001:db8:100::80 | TCP 443 |
公開対象が増える場合は、NAT ルールに直接アドレスやポートを書き続けるより、Firewall group を使って名前を付けた方が読みやすくなります。
Firewall group を用意する
address-group と port-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
saveIPv4 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
saveNAT66 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
saveIPv6 側も同じ考え方で、公開したい宛先とポートだけを許可します。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-group | TCP / UDP の両方が必要か見る |
| 設定が読みにくい | address-group / port-group | 公開対象に名前を付けて管理する |
まとめ
VyOS の DNAT / NAT66 destination は、内部サービスを公開するための入口を作る設定です。ただし、NAT は宛先変換であり、公開可否を制御する主体は Firewall です。
公開するサービス、変換先、許可するポート、outside-in、戻り経路を分けて確認すると、トラブル時に見る場所が明確になります。特に IPv6 では、NAT66 を使う理由を先に決め、Firewall だけで制御する設計との違いを意識することが重要です。

