由于之前的工作原因接触到了 Citrix 设备的 IPv6 to IPv4 配置,得空找了一天时间把相同效果也在 F5 设备上重现一次,比较异同。
实验目的
利用业务现有的 IPv4 DNS 服务器和 F5,把 IPv6 客户端的请求负载到业务现有的 IPv4 服务器上,有两点要求:
- 不改动现有业务服务器的架构,兼容已有 IPv4 应用;
- 新上线 IPv4 应用,能自动完成 IPv6 部署,不需额外配置;
实验原理
IPv6地址
IPv6 地址共有 128 位,最后 32 位通过进制转换可以用来代表一个完整的 IPv4 地址,如:
IPv6地址 2408:bb25:3585:649b:1:0:c0a8:b6e 最后 32 位为 c0a8:b6e
十六进制 | c0 | a8 | 0b | 6e |
十进制 | 192 | 168 | 11 | 110 |
即最后32位可以代表 IPv4 地址 192.168.11.110 。
DNS64
F5 收到 DNS 请求后,向后端的 DNS 服务器请求对应 A 记录;收到 A 记录后,将其中的 IPv4 地址加上 96 位 IPv6 前缀,形成 AAAA 记录返回给客户端。
NAT64
F5 收到目的地址为特定前缀的 IPv6 地址的请求时,取该地址最后 32 位为负载后的 IPv4 目的地址,处理请求。
实验拓扑
图中央的 IPv6 客户端通过域名,telnet 到左边 IPv4 Server 区域的路由器 R1 和 R2
具体过程如下:
- IPv6 客户端发起 DNS 请求,请求解析 r2.yangbin64test.com
- F5 收到 DNS 请求,向 DNS 服务器请求 A 记录
- DNS 服务器返回 A 记录 172.28.1.2
F5 使用预配置的 96 位地址前缀 2408:bb25:3585:649b:1::/96 ,拼接成 AAAA 记录 2408:bb25:3585:649b:1:0:ac1c:102 返回给客户端 - 客户端收到域名 r2.yangbin64test.com 的 AAAA 记录,向该地址发起连接
- F5 收到连接请求,将 IPv6 地址最后 32 位取出作为负载后目的地址
- F5 将该连接后续返回的 IPv4 数据包再转换成 IPv6 返回给客户端;
环境配置
F5 VE
本实验使用 F5 VE V16 版本,配置 DNS64 和 NAT64 必要的功能 license 有:
- DNS(GTM)
- CGNAT
导入 F5 VE 的 ovf 模版时,建议:
- 选择 8G 及以上内存配置
- 虚拟机第一张网卡选仅主机模式,该网卡会作为管理口
- 虚拟机其他网卡按需选择模式,按顺序为 1.1,1.2,1.3 接口
Vlan 和 Self IP 配置
Vlan:
- outside_6
绑定接口 1.1 - inside_4
绑定接口 1.2
Self IP:
- outside
2408:bb25:3585:649b:0:0:0:2/64 - outside-linklocal
fe80:0:0:0:20c:29ff:fe84:eadc/64 - inside
192.168.11.232/24
F5 路由
default_v6
- ::/0
- 2408:bb25:3585:649b:0:0:0:1
default_v4
- 0.0.0.0/0
- 192.168.11.1
inside_route
- 172.28.0.0/16
- 192.168.11.108
路由器配置
IP为图上所示,这里主要说一下各设备路由条目
R1:
ip route 0.0.0.0 0.0.0.0 192.168.11.1 #IPv4网关不是F5
ip route 192.168.12.0 255.255.255.0 192.168.11.232 #LSN pool
R2:
ip route 0.0.0.0 0.0.0.0 172.28.1.1
R3 默认路由指向公网出口
DNS64 配置
这部分完全依照官方文档 Configuring DNS64
本实验 F5 DNS Listener VIP 为 2408:bb25:3585:649b:0:0:0:4
NAT64 配置
这部分参考官方文档 Using NAT64 to Map IPv6 Addresses to IPv4 Destinations
文档中一些步骤需要作如下补充:
- Creating a NAT64 LSN pool
LSN pool 用来负责 NAT64 之后与服务端的连接,在 F5 V16 版本中,要先在 CGNAT的 Option 中,勾选 Legacy LSN Pools Editor,才能配置 LSN pool
本实验中 LSN pool 使用 192.168.12.0/24 - Creating a NAT64 virtual server for an LSN pool
该步骤中第五点,Destination Address,即 VS 的目的地址,在V16中不能直接配置 Network
需要在 Shared Objects > Address Lists 中,预先定义好网段
本实验中 NAT64 VS 入口网段为 2408:bb25:3585:649b:1::/96
测试域名准备
测试域名使用yangbin64test.com
新建如下A记录
- r1.yangbin64test.com 172.28.1.1
- r2.yangbin64test.com 172.28.1.2
- r2new.yangbin64test.com 172.28.1.3
确保使用公众 DNS 能正常解析
测试过程
- 在纯 IPv6 客户端上,将系统 DNS 设置为 2408:bb25:3585:649b:0:0:0:4 ,解析两个测试域名,结果如下:
- 继续分别 telnet 两个域名,查看是否能够登陆路由器,结果如下:
- 将 R2 的 Gi0/0 接口地址改为 172.28.1.3, 在纯 IPv6 客户端上 telnet r2new.yangbin64test.com ,结果如下:
总结
至此, F5 BIG-IP 上 DNS64 和 NAT64 的配置与测试完成。
实际业务场景下,还需要注意:
- 对现有域名系统的 NS 记录作变更(指向 F5 Listener VIP),如此便不需要客户端再指定LDNS;
- 原有业务逻辑涉及SSL的部分仍然需要单独处理,这里不再展开。
DNS64 和 NAT64 依然比不上原生单/双栈的性能 (参考 RFC 6145),从应用角度出发,IPv6 不仅仅是简单扩展了地址空间,还能给开发和基础架构带来全新的设计思路。