NAT64

NAT64 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

SNAT64

SNAT64 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:

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:

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:

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