IP v6过渡技术
IP v6过渡技术分为互通、共存、转换三种:
- 互通(隧道技术)包括6 over 4和4 over 6。
- 共存技术表示接口IP v4和IP v6共存,即双栈技术。
- 转换技术使NAT64和IVI技术,将IP v4和IP v6地址互相转换。
::: tip 隧道有手动隧道和自动隧道两种: 手动隧道包括6 over 4手动隧道、6 over 4 GRE隧道。 自动隧道包括6 over 4自动隧道、6 to 4隧道、6RD隧道、ISTAP隧道。 :::
手动隧道
手动隧道即边界设备不能自动获得隧道目的IP v4地址,需要手工配置。
GRE实验
[AR1]int Tunnel 0/0/0
[AR1-Tunnel0/0/0]tunnel-protocol gre 必须先指定隧道协议
[AR1-Tunnel0/0/0]source 1.1.1.1 源目地址可以是环回口或者物理接口
[AR1-Tunnel0/0/0]destination 3.3.3.3
[AR1-Tunnel0/0/0]ipv6 enable 隧道需要支持IP v6
[AR1-Tunnel0/0/0]ipv6 address fe80:13::1 link-local 使用链路本地地址做IP v6通信
[AR3]int Tunnel 0/0/0
[AR3-Tunnel0/0/0]tunnel-protocol gre
[AR3-Tunnel0/0/0]source 3.3.3.3
[AR3-Tunnel0/0/0]destination 1.1.1.1
[AR3-Tunnel0/0/0]ipv6 enable
[AR3-Tunnel0/0/0]ipv6 address fe80:13::3 link-local
测试隧道通信:
[AR1]ipv6 route-static 2033:: 64 Tunnel 0/0/0 将去往目标地址的下一跳设为隧道的出接口
[AR3]ipv6 route-static 2011:: 64 Tunnel 0/0/0
6 over 4手动隧道实验
在GRE的基础上,修改隧道协议实现:
如上抓包,6 over 4的协议中没有GRE的头部,直接在IP v6的数据包前面封装IP v4头部。 ::: tip 手动指定主要体现在手工配置的隧道源和目标地址。(6over4和GRE都是手动隧道) 如果有多个目标站点,需要手动给每一个IP v6站点创建一个隧道接口。 :::
自动隧道
自动隧道中,用户仅需要配置设备隧道的源IP v4地址,隧道的目的IP v4地址由设备自动生成。 边界设备(PE)收到IP v6报文后,根据目的IP v6地址,解析出隧道的目标IP v4地址。 ::: tip 为了使设备能够自动产生目的IP v4地址,隧道接口的IP v6地址采用内嵌IPv4地址的特殊IP v6地址形式。 :::
IP v4兼容IP v6自动隧道
如上,PC1的SIP为::1.1.1.1,DIP为::3.3.3.3,PE设备AR1的SIP为1.1.1.1,DIP为3.3.3.3,为了方便PE设备自动识别,将隧道32位IP v4格式的SIP、DIP分别嵌套在PC上的IP v6格式的SIP、DIP的最后32位。 即PC的地址设置需要按照本端隧道地址来设置,否则PE设备解析IP v4的源目地址时对应不上。 ::: warning 兼容隧道规定:兼容地址的前缀网段必须为 :: ,隧道的IP v4地址必须嵌套在目标IP v6地址的后32bit。 如拓扑中隧道的源目地址为1.1.1.1和3.3.3.3,两台PC的地址为::1.1.1.1和::3.3.3.3。 :::
[AR1-Tunnel0/0/0]ipv6 enable 隧道仍通过IP v6实现通信,但是底层为IP v4
[AR1-Tunnel0/0/0]ipv6 address fe80:13::1 link-local
[AR1-Tunnel0/0/0]tunnel-protocol ipv6-ipv4 ?
6to4 IPv6 automatic tunneling using 6to4
auto-tunnel IPv6 automatic tunneling using IPv4 compatible addresses
isatap IPv6 isatap tunneling
<cr> Please press ENTER to execute command
[AR1-Tunnel0/0/0]tunnel-protocol ipv6-ipv4 auto-tunnel
[AR1-Tunnel0/0/0]source 1.1.1.1
[AR3-Tunnel0/0/0]ipv6 enable 隧道仍通过IP v6实现通信,但是底层为IP v4
[AR3-Tunnel0/0/0]ipv6 address fe80:13::3 link-local
[AR3-Tunnel0/0/0]tunnel-protocol ipv6-ipv4 auto-tunnel
[AR3-Tunnel0/0/0]source 3.3.3.3
::: warning 隧道只能做链路本地地址,不能做全球单播地址。 兼容隧道只有::这一个前缀,被隧道全球单播地址占用后IP v6站点就无法使用。 :::
[AR1-GigabitEthernet0/0/0]ipv6 enable
[AR1-GigabitEthernet0/0/0]ipv6 address ::1.1.1.254 120
[AR1-GigabitEthernet0/0/0]ipv6 address FE80::1 link-local
[AR1]ipv6 route-static :: 0 Tunnel 0/0/0
[AR3-GigabitEthernet0/0/0]ipv6 enable
[AR3-GigabitEthernet0/0/1]ipv6 address ::3.3.3.254 120
[AR3-GigabitEthernet0/0/1]ipv6 address FE80::3 link-local
[AR3]ipv6 route-static :: 0 Tunnel 0/0/0
如上,抓包显示IP v6的包上面封装IP v4的头部,IP v4报头的SIP、DIP都是IP v6报文的源目地址的后32位映射得来。
::: tip IP v4兼容IP v6自动隧道的缺点是,对端访问的是确定IP地址,一个地址只能对应一台主机,即PE设备只能允许后面连接的一台IP v6站点设备使用,如果IP v6站点有多台设备,不能让所有站点设备都通过兼容隧道转发通信。 :::
6 to 4(自动)隧道(较为常用)
6 to 4地址:固定16bit前缀2002 + 32bit隧道目标IP v4地址 + 16bit站点级聚合标识符(SLA ID) + 64bit主机位。
::: tip 兼容隧道的IP v4地址嵌套在主机位,6 to 4隧道嵌套在网络位(网段变化)。
站点级聚合标识符(SLA ID)用于区分不同的网段。 如一台PE设备下面连接了多个站点,假设PE设备的地址为1.1.1.1,即网络位前48位均为2002:0101:0101,需要使用网络位后16位的SLA ID进行区分,从而配置在不同的接口上。后64位主机位可由EUI-64或手工指定等配置。
::: 6 to 4隧道除了隧道协议改为6 to 4外,其他配置与兼容隧道相同。
隧道配置:
[AR1]interface Tunnel0/0/0
[AR1-Tunnel0/0/0]ipv6 enable
[AR1-Tunnel0/0/0]ipv6 address FE80:13::1 link-local
[AR1-Tunnel0/0/0]tunnel-protocol ipv6-ipv4 6to4
[AR1-Tunnel0/0/0]source 1.1.1.1
[AR1]ipv6 route-static :: 0 Tunnel 0/0/0
[AR3]interface Tunnel0/0/0
[AR3-Tunnel0/0/0]ipv6 enable
[AR3-Tunnel0/0/0]ipv6 address FE80:13::1 link-local
[AR3-Tunnel0/0/0]tunnel-protocol ipv6-ipv4 6to4
[AR3-Tunnel0/0/0]source 1.1.1.1
[AR3]ipv6 route-static :: 0 Tunnel 0/0/0
接口配置:
[AR1-GigabitEthernet0/0/0]ipv6 enable
[AR1-GigabitEthernet0/0/0]ipv6 address 2002:0101:0101:0001::254 64
[AR1-GigabitEthernet0/0/0]ipv6 address FE80::1 link-local
[AR3-GigabitEthernet0/0/1]ipv6 enable
[AR3-GigabitEthernet0/0/1]ipv6 address 2002:0303:0303:0001::254/64
[AR3-GigabitEthernet0/0/1]ipv6 address FE80::3 link-local
如上,抓包显示IP v6的包上面封装IP v4的头部,IP v4报头的SIP、DIP都是IP v6报文的源目地址的16-48位映射得来。
::: warning 6 to 4隧道的接口可以做链路本地地址,也可以做全球单播地址。 :::
6 to 4中继
上述拓扑实现PC1访问PC3,需要经过AR3做6 to 4中继。
全球单播地址设置在隧道接口上,格式和接口的IP v4地址需要相对应。
在6 to 4隧道的基础上做中继
[AR4-GigabitEthernet0/0/1]ipv6 address 2044::254/64
[AR4]ipv6 route-static :: 0 Tunnel0/0/0
AR1去往2044:: 64网段时无法判断隧道源目IP,需要单独做静态,静态下一跳是6 to 4隧道的下一跳地址:
[AR1]ipv6 route-static 2044:: 64 2002:0404:0404:0001::254
6 to 4隧道的下一跳地址再指向隧道(路由迭代):
[AR1]ipv6 route-static 2002:0404:0404:0001:: 64 Tunnel 0/0/0
(走隧道需要封装隧道的源目IP,访问2044::3时无法判断隧道IP v4的源目IP,需要手工单独配置静态路由)
[AR4-Tunnel0/0/0]ipv6 enable
[AR4-Tunnel0/0/0]ipv6 address fe80:13::4 link-local
[AR4-Tunnel0/0/0]ipv6 address 2002:0404:0404:0001::254 64 根据6 to 4隧道AR4本段的源地址配置
[AR4-Tunnel0/0/0]tunnel-protocol ipv6-ipv4 6to4
[AR4-Tunnel0/0/0]source 4.4.4.4
[AR4]ipv6 route-static :: 0 Tunnel 0/0/0
此时PC1可以通过6 to 4隧道访问到PC3: 配置PC2和PC3通信时,只需要在AR3上添加和AR1一样的静态路由迭代即可。 ::: tip 隧道的全球单播地址的作用只是做封装的下一跳。 :::
ISATAP隧道
ISATAP隧道将IP v4地址封装在接口标识处来完成目标地址提取。
64位接口标识中,前32位为固定值,第7bit根据IP v4地址判断:
如果IP v4地址是全局唯一的(公网地址),则第7bit的值置1,即前32位为0200:5efe
如果IP v4地址不是全局唯一的(私网地址),则第7bit的值置0,即前32位为0000:5efe
后32位由IP v4地址直接做映射
虚拟机的网关地址等信息设置为网卡同网段地址。
[AR2-Tunnel0/0/0]ipv6 enable
[AR2-Tunnel0/0/0]tunnel-protocol ipv6-ipv4 isatap 作用是根据接口IP v4地址自动生成链路本地地址的接口标识
[AR2-Tunnel0/0/0]source 10.1.12.2
[AR2-Tunnel0/0/0]ipv6 address 2001::0000:5efe:0a01:0c02 64
需要有全球单播地址和链路本地地址,链路本地地址由全球单播地址配置后自动生成:
AR2使用该地址为终端分配网络参数,需要配置如下参数:
[AR2-Tunnel0/0/0]undo ipv6 nd ra halt
终端设置隧道路由信息(使用管理员window powershell):
PS C:\WINDOWS\system32> netsh
netsh>interface isatap
netsh interface isatap>set router 10.1.12.2 (设置后就有了链路本地地址)
确定。
netsh interface isatap>show state
ISATAP 状态 : default
netsh interface isatap>show state enable (设置后就会发送RS进行全球单播地址获取)
ISATAP 状态 : denabled
netsh interface isatap>exit
退出检查是否获取到网络参数:
PS C:\WINDOWS\system32> ipconfig
可以查看到隧道适配器出现
::: tip 流程是先有链路本地地址,发送RS报文请求,收到的RA报文携带前缀,最后获取全球单播地址。 ISATAP隧道设置ISATAP服务器的IP v4地址,根据IP v4地址生成链路本地地址的接口标识,通过链路本地地址转发进入隧道向服务器获取IP v6前缀(SLAAC)。
如上转发进隧道时,链路本地地址的接口标识中可以提取到目标IP v4地址。 ::: ISATAP隧道的作用是,终端通过IP v4网络接入IP v6站点时,开启ISATAP协议,通过隧道获取IP v6分配的前缀,再通过前缀访问IP v6站点。终端会把隧道的接口地址当作网关。即只要IP v4可达,就可以访问IP v6网络。
6PE
只有双栈设备才可以做6PE。两台双栈设备之间使用IP v4隧道(MPLS)连接,利用MP-BGP分配的标签标识IP v6路由。隧道转发时通过标签转发,类似于VLAN标签,只有相同的VLAN才可以接收。
单自治域6PE
单域即一个BGP,多个BGP为跨域。
CE2发送路由给CE1,CE1发送报文给CE2:
I-L表示内层标签(MP-IBGP Label),内层标签由MP-BGP分配,表示报文的出接口或者报文属于哪个CE。
O-L表示外层隧道标签(MPLS Label),外层隧道标签由MPLS分配,用来指示如何到达BGP下一跳。
上图中CE1发送数据到6PE1时,封装内层标签和外层标签,两台6PE设备间可能存在多台设备,按照封装的外层标签信息转发,到达对端6PE2设备时,按照内层标签信息转发给CE2。
转换技术(NAT64)
NAT64是一种将IP v6网络地址转换成IP v4网络地址的NAT(网络地址转换)技术。 NAT64前缀分为两种形式:
- 知名前缀:即64:FF9B::/96,缺省情况下已存在,无需配置。
- 自定义前缀:前缀长度为32、40、48、56、64或96。
根据前缀长度不同,IPv4地址嵌入IPv6地址时,嵌入的位置存在差异,如下图:
PL(Prefix Length)表示前缀长度。 Suffix表示后缀,可以任意取值,设备不处理该字段。 U为保留位,8 bit,取值必须为0。
实验使用前缀长度96(前缀96位时,IP v4地址嵌入时为后32位):
[AR1]ipv6 route-static :: 0 2001::2 将所有路由都指向防火墙做出口
静态NAT
[FW1]firewall zone trust
[FW1-zone-trust]add int gi 1/0/0
[FW1]firewall zone untrust
[FW1-zone-untrust]add int gi 1/0/1
[FW1-policy-security]default action permit 默认全部允许(关闭所有策略)
[FW1]nat64 prefix 2002:: 96 设置NAT64前缀
[FW1]nat64 static 2001::1 1.1.1.10 unr-route 做NAT后自动在路由表中生成路由信息,如下图
[FW1-GigabitEthernet1/0/0]nat64 enable
分别在防火墙的两个接口抓包: 如上,防火墙左边通过IP v6通信,右边通过IP v4通信。 IP v6通信的目标地址是2002:: 96的前缀 + 1.1.1.1的IP v4地址映射。 由于设置了nat64 static 2001::1 1.1.1.10的转换,IP v4通信的源地址就是1.1.1.10。
动态NAT
动态NAT和静态NAT的区别是在NAT转换时,静态NAT是一个IP v6地址转换为一个IP v4地址,动态NAT是将转换的IP v4地址替换为IP v4地址网段,通过IP v4地址池做映射。
NAT配置:
[USG6000V1]nat64 prefix 2002:: 96
[USG6000V1]nat address-group 1 创建地址池1
[USG6000V1-address-group-1]mode pat pat端口转换模式
[FW-address-group-1]section 1 1.1.1.10 1.1.1.20 设置转换网段(公网地址池),section id设为1
做策略允许AR1-1到AR2-1,不允许AR2-1到AR1-1:
[USG6000V1-policy-security-rule-1]source-zone trust
[USG6000V1-policy-security-rule-1]destination-zone untrust
[USG6000V1-policy-security-rule-1]action permit
[USG6000V1]nat-policy 做NAT策略,在策略中执行绑定
[USG6000V1-policy-nat]rule name NAT64
[USG6000V1-policy-nat-rule-NAT64]nat-type nat64
[USG6000V1-policy-nat-rule-NAT64]action source-nat address-group 1 绑定源做转换,目标为地址池1
[USG6000V1-GigabitEthernet1/0/0]nat64 enable
其余配置与静态NAT64一致
防火墙使用了地址池中的1.1.1.14访问AR2-1: