无状态NAT64、NAT46配置.note
无状态NAT64和有状态NAT64不同,不维护转换的任何信息·拓扑图:

一、无状态 NAT46 配置:
使用 nat64 prefix stateless 定义前缀的都是无状态化转换
使用 nat64 prefix stateful 定义前缀的都是有状态化转换
1、静态一对一转换:
将 136.136.136.136/32 转换为 2001:abcd::8888:8888/128
136.136.136.136 是8888:8888这个 16进制转换后的十进制 ,必须要配置这种能转换的,才能映射成功
(访问136.136.136.136就能够访问到Inside的 Loop0接口)
转换:
136(十进制) -> 88(十六进制)
136.136(十进制) -> 8888(十六进制)
136.136.136.136 -> 8888:8888
# NAT64设备:
ipv6 un
int g0/0
no sh
ip address 1.1.1.2 255.255.255.0
nat64 enable
int g0/1
no sh
ipv6 enable
ipv6 address 2001:DB8::1/64
nat64 enable
exit
# Inside 设备:
ipv6 un
int g0/0
no sh
ipv6 enable
ipv6 address autoconfig
## 仅开启接口,通过slaac自动获取一个地址
int loop 0
no sh
ipv6 address 2001:ABCD::8888:8888/128# 配置 NAT64:
# 指定无状态nat64前缀(内部被转换的ipv6地址必须要包含在该前缀中):
nat64 prefix stateless 2001:ABCD::/96
# 将外部ipv4地址引入nat64中,g0/0表示该路由通过g0/0进行转发
nat64 route 136.136.136.136/32 GigabitEthernet0/1
# 配置路由(这里在NAT64机器和Inside机器上配置OSPFv3):
## NAT64:
ipv6 access-list NAT64
permit ipv6 2001:ABCD::/96 any //匹配nat64前缀并将它通告给Inside
permit ipv6 64:ff9b::/96 any //匹配nat64自动生成的前缀,将其通告
route-map NAT64 permit 10
match ipv6 address NAT64
router ospfv3 1
router-id 1.1.1.2 //因为ospfv3必须要有一个router-id才能运行,我们随便写一个即可
address-family ipv6 unicast
redistribute static rotue-map NAT64 //仅重分发nat64前缀
int g0/1
ospfv3 1 ipv6 area 0
ospfv3 1 ipv6 network point-to-point
## Inside:
router ospfv3 1
router-id 2.2.2.2
address-family ipv6 unicast
int g0/0
ospfv3 1 ipv6 area 0
ospfv3 1 ipv6 network point-to-point
int loop 0
ospfv3 1 ipv6 area 0
ospfv3 1 ipv6 network point-to-pointnat64设备上路由:
64:ff9b::/96 是配置nat64之后自动生成的路由
2001:ABCD::/96 是 nat64 prefix stateless 2001:ABCD::/96命令生成的路由
Inside设备路由:

#(如果不配置动态路由,这里也可以配置静态路由比较好理解一点)
nat64设备:
ipv6 route 2001:abcd::8888:8888/128 g0/1
Inside:
2001:abcd::/96 g0/0在Outside上 ping 136.136.136.136 进行测试:

2、动态转换:(网段转换)
内部被映射的ipv6地址,必须是 nat64 prefix stateless 定义的前缀 + nat64 route [ipv4地址网段] 定义的范围。
例如,前缀是 6666:6666::/96,地址范围是 200.1.1.0/24,内部的ipv6网段就必须是 6666:6666::200.1.1.0/120(转换成ipv6地址就是:6666:6666::c801:100/120)因为末尾的 00 刚好能嵌入一个 /24位的ipv4地址段。
这样,访问 200.1.1.1 时,就会内部访问到 6666:6666::c801:101 IPv6地址
200.1.1.1 —— 6666:6666::c801:101
200.1.1.2 —— 6666:6666::c801:102
...
2001.1.1.254 —— 6666:6666::c801:1fe
2001.1.1.255 —— 6666:6666::c801:1ff
以此类推
拓扑:

Inside:

Client1:

Client2:

# NAT64机器:
ipv6 un
int g0/1
ipv6 enable
nat64 enable //需要在接口启用nat64
ipv6 address 2001:db8::fffe/64
int g0/0
ip address 23.23.23.254/24 255.255.255.0
nat64 enable
# 指定无状态nat64前缀(内部被转换的ipv6地址必须要包含在该前缀中):
nat64 prefix stateless 6666:6666::/96
# 将外部ipv4地址引入nat64中,g0/0表示该路由通过g0/0进行转发
nat64 route 200.1.1.0/24 g0/0
# 配置去往内部ipv6地址的路由,也可以配置动态路由,只要有路由能到达即可(注意对端需要有回程路由)
## 静态路由最好指定下一跳,否则有时无法生效
ipv6 route 6666:6666::CB01:0100/120 g0/0 2001:db8::1 // 注意:6666:6666::C801:0100/120 这个还是一个网段,因为最后一位为0,且掩码不是 /128,如果是 6666:6666::C801:0100/128,那么就是一个IP地址
## CB01:0100 是 200.1.1.0 转换为十六进制的值
## 当然如果不想转换为十六进制,也可以这样写:ipv6 route 6666:6666::200.1.1.0/120 g0/0 2001:db8::1 // (系统会自动将其转换为十六进制)
## Inside机器:
ipv6 route 6666:6666::/96 g0/0 2001:db8::254 //配置一条去往NAT64设备的nat前缀路由,否则路由无法通信(这条配置动态路由也可以)
测试:
注意,Outside需要有去往 200.1.1.0/24 的路由
ip route 200.1.1.0 255.255.255.0 23.23.23.254
