Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

NAT64: Add example of configuration for NAT64 #1179

Merged
merged 1 commit into from
Dec 11, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions docs/configuration/nat/index.rst
Original file line number Diff line number Diff line change
Expand Up @@ -9,4 +9,5 @@ NAT
:includehidden:

nat44
nat64
nat66
81 changes: 81 additions & 0 deletions docs/configuration/nat/nat64.rst
Original file line number Diff line number Diff line change
@@ -0,0 +1,81 @@
.. _nat64:

#####
NAT64
#####

:abbr:`NAT64 (IPv6-to-IPv4 Prefix Translation)` is a critical component in
modern networking, facilitating communication between IPv6 and IPv4 networks.
This documentation outlines the setup, configuration, and usage of the NAT64
feature in your project. Whether you are transitioning to IPv6 or need to
seamlessly connect IPv4 and IPv6 devices.
NAT64 is a stateful translation mechanism that translates IPv6 addresses to
IPv4 addresses and IPv4 addresses to IPv6 addresses. NAT64 is used to enable
IPv6-only clients to contact IPv4 servers using unicast UDP, TCP, or ICMP.


Overview
========

Different NAT Types
-------------------

.. _source-nat64:

SNAT64
^^^^^^

:abbr:`SNAT64 (IPv6-to-IPv4 Source Address Translation)` is a stateful
translation mechanism that translates IPv6 addresses to IPv4 addresses.

``64:ff9b::/96`` is the well-known prefix for IPv4-embedded IPv6 addresses.
The prefix is used to represent IPv4 addresses in an IPv6 address format.
The IPv4 address is encoded in the low-order 32 bits of the IPv6 address.
The high-order 32 bits are set to the well-known prefix 64:ff9b::/96.


Configuration Examples
======================

The following examples show how to configure NAT64 on a VyOS router.
The 192.0.2.10 address is used as the IPv4 address for the translation pool.


NAT64 server configuration:

.. code-block:: none

set interfaces ethernet eth0 address '192.0.2.1/24'
set interfaces ethernet eth0 address '192.0.2.10/24'
set interfaces ethernet eth0 description 'WAN'
set interfaces ethernet eth1 address '2001:db8::1/64'
set interfaces ethernet eth1 description 'LAN'

set service dns forwarding allow-from '2001:db8::/64'
set service dns forwarding dns64-prefix '64:ff9b::/96'
set service dns forwarding listen-address '2001:db8::1'

set nat64 source rule 100 source prefix '64:ff9b::/96'
set nat64 source rule 100 translation pool 10 address '192.0.2.10'
set nat64 source rule 100 translation pool 10 port '1-65535'

NAT64 client configuration:

.. code-block:: none

set interfaces ethernet eth1 address '2001:db8::2/64'
set protocols static route6 64:ff9b::/96 next-hop 2001:db8::1
set system name-server '2001:db8::1'

Test from the IPv6 only client:

.. code-block:: none

vyos@r1:~$ ping 64:ff9b::192.0.2.1 count 2
PING 64:ff9b::192.0.2.1(64:ff9b::c000:201) 56 data bytes
64 bytes from 64:ff9b::c000:201: icmp_seq=1 ttl=63 time=0.351 ms
64 bytes from 64:ff9b::c000:201: icmp_seq=2 ttl=63 time=0.373 ms

--- 64:ff9b::192.0.2.1 ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1023ms
rtt min/avg/max/mdev = 0.351/0.362/0.373/0.011 ms
Loading