本节书摘来自异步社区《深入解析IPv6(第3版)》一书中的第10章,第10.4节,作者: 【美】Joseph Davies 更多章节内容可以访问云栖社区“异步社区”公众号查看。
10.4 Windows的IPv6协议的静态路由
运行Windows Server 2012、Windows Server 2008 R2、Windows Server 2008、Windows 8、Windows 7和Windows Vista协议支持静态路由。可以用以下方法配置静态IPv6路由。
对于运行Windows Server 2012或Windows 8,可以使用Windows PowerShell命令行中的Set-NetRoute、Remove-NetRoute和Get-NetRoute命令。
对于运行Windows Server 2012、Windows Server 2008 R2、Windows Server 2008、Windows 8、Windows 7和Windows Vista的计算机,可以使用netsh interface ipv6命令行的命令。
对于运行Windows Server 2012、Windows Server 2008 R2、Windows Server 2008的计算机,可以使用路由和远程访问。
在实验室中使用这些命令建立静态路由的例子,请参见附录C。
10.4.1 用Windows PowerShell配置静态路由
要在Windows Server 2012和Windows 8的Windows PowerShell中创建静态路由,管理员必须在所需接口上通过下列命令来启用发送和通告:
Set-NetIPInterface -InterfaceAlias Name -AddressFamily IPv6 -Forwarding Enabled -Advertising Enabled
在默认情况下,所有IPv6接口的发送和通告都是禁用的。
例如,现在要将一台运行Windows Server 2012、名为ROUTER1的计算机配置为一台路由器。该ROUTER1有3个接口,分别名为Wired Ethernet Connection、Wired Ethernet Connection 2和Wired Ethernet Connection 3。Wired Ethernet Connection和Wired Ethernet Connection 2接口都和非主要子网连接。Wired Ethernet Connection 3接口则连接到了一个含有名为ROUTER2的相邻IPv6路由器的子网。图10-5所示为本示例的配置。
为了在Wired Ethernet Connection和Wired Ethernet Connection 2接口上启用发送与通告,并在Wired Ethernet Connection 3接口上启用发送,需要在ROUTER1上运行下列命令:
Set-NetIPInterface -InterfaceAlias "Wired Ethernet Connection" -AddressFamily IPv6 -Forwarding
Enabled -Advertising Enabled
Set-NetIPInterface -InterfaceAlias "Wired Ethernet Connection 2" -AddressFamily IPv6 -Forwarding
Enabled -Advertising Enabled
Set-NetIPInterface -InterfaceAlias "Wired Ethernet Connection 3" -AddressFamily IPv6 -Forwarding
Enabled
Wired Ethernet Connection 3接口所连接的子网已拥有通告路由器ROUTER2。
这些命令成功运行之后,ROUTER1会在两个非主要子网上使用Wired Ethernet Connection和Wired Ethernet Connection 2接口发送路由通告消息。然而,路由通告中不包含任何“前缀信息”或“路由信息”可选项(可以用于让所连接子网上的主机自动配置地址和路由)。为了通告“前缀信息”或“路由信息”可选项,必须配置ROUTER1,使它发布路由。
可以在Windows PowerShell中使用下述命令来添加一条路由,并将它发布出去:
Add-NetRoute -DestinationPrefix Prefix -InterfaceAlias Name -NextHop IPv6Address -AddressFamily IPv6 -Publish Yes -RouteMetric Metric
在默认情况下,没有下一跳地址(前缀在链路上),路由度量是自动判断出来的,路由条目也是不发布的。
例如,为了配置ROUTER1并在Wired Ethernet Connection上通告链路上的子网前缀2001:db8:0:1::/64,同时在Wired Ethernet Connection 2上通告链路上的子网前缀2001:db8:0:2::/64,需要使用如下命令:
Add-NetRoute -DestinationPrefix 2001:db8:0:1::/64 -InterfaceAlias "Wired Ethernet Connection"
-AddressFamily IPv6 -Publish Yes
Add-NetRoute -DestinationPrefix 2001:db8:0:2::/64 -InterfaceAlias "Wired Ethernet Connection 2"
-AddressFamily IPv6 -Publish Yes
通过配置在接口上通告出去的路由,其“前缀信息”可选项中的链路中(On-link)标记会被置位。如果链路中通告的路由前缀长度是64,ROUTER2就会将前缀信息可选项中的自治标记设置为允许主机创建无状态地址。注意,没有Add-NetRoute参数可以清除前缀信息可选项中的自治标记。
为了向主机提供到达通告路由器的直连子网的可达性,ROUTER1包含了一个子网前缀,这个子网前缀按“路由器通告”消息中的“路由器信息”可选项的要求,配置为在其他接口上发布。RFC 4191中描述了路由器信息可选项的用法。路由器信息可选项中的前缀会作为静态路由添加到接收方主机上,使接收方主机可以到达通告路由器直连的其他子网。例如,ROUTER1包含了前缀2001:db8:0:2::/64,该前缀会作为路由器通告中的“路由器信息”可选项在Wired Ethernet Connection上进行发送。同样,ROUTER1还包含了前缀2001:db8:0:1::/64,并将它作为路由器通告中的“路由器信息”选项在Wired Ethernet Connection 2上进行发送。
在这个配置环境中,ROUTER1不会将自己通告为默认路由器。在2001:db8:0:1::/64和2001:db8:0: 2::/64子网上的主机会自动配置地址并向它们的路由表添加路由,但是它们不会自动配置默认路由(::/0)。运行Windows系统的计算机不会将自己通告为默认路由器,除非计算机上配置了一条需要发布的默认路由。
为了将路由器配置为2001:db8:0:1::/64和2001:db8:0:2::/64子网上主机的默认路由器,必须在这台路由器上添加一条默认路由并且将它通告出去。例如,Wired Ethernet Connection 3的子网中包括了链路本地地址为fe80::2aa:ff:fe98:2ab1的ROUTER2。因此,需要在ROUTER1上运行如下命令,添加一条默认路由并将这条路由通告出去:
Add-NetRoute -DestinationPrefix ::/0 -InterfaceAlias "Wired Ethernet Connection 3" -NextHop
fe80::2aa:ff:fe98:2ab1 -AddressFamily IPv6 -Publish Yes
在运行命令之后,ROUTER1会在Wired Ethernet Connection和Wired Ethernet Connection 2上发送路由器生存时间字段为65535的路由器通告消息,表示这是具有最长生存时间的默认路由器。
上例中我们只使用了最有限的命令和可选项,来启用转发、通告行为,并对外通告路由。如需进一步了解使用命令Set-NetIPInterface 和 Add-NetRoute来配置高级IPv6路由器行为的内容,请参阅Windows PowerShell命令行提示符中以下命令的帮助。
注意,Netsh命令中没有可选项能够指定如下内容。
- 路由器通告消息中的路由器生存时间字段:如果路由器将自己通告为默认路由器,IPv6则会将路由器生存时间设置为一个比默认路由选用生存时间和有效生存时间都小的值。如果这两个值都没有指定,Windows中的IPv6会将这个值设置为65535。
- 路由器通告消息中的默认路由器优先级字段:IPv6将默认路由器优先级字段作为中等优先级并设置为0。
- 路由器通告消息中的当前跳数限制字段:IPv6会将当前跳数限制字段设置为0,向发送主机表示路由器没有指定默认跳数限制值。
- 在前缀信息可选项中清除自治标记:IPv6会将自治标记设置为0,这是为了告知接收方的主机,它们不应该根据通告的前缀来配置无状态地址。
- 10.4.2 用Netsh配置静态路由
为了用Netsh工具创建静态IPv6路由器,必须在所需接口上启用发送和通告。在某接口上启用发送和通告,可以使用下述命令来实现:
netsh interface ipv6 set interface InterfaceNameOrIndex forwarding=enabled advertise=enabled
在默认情况下,所有IPv6接口上的发送和通告都是禁用的。
例如,现在要将一台运行Windows Server 2008 R2、名为ROUTER1的计算机配置为一台路由器。该ROUTER1有3个接口,分别名为Local Area Connection、Local Area Connection 2和Local Area Connection 3。Local Area Connection和Local Area Connection 2接口都和非主要子网连接。Local Area Connection 3接口则连接到了一个含有名为ROUTER2的相邻IPv6路由器的子网。图10-6所示为本示例的配置。
为了在Local Area Connection和Local Area Connection 2接口上启用发送与通告,并在Local Area Connection 3接口上启用发送,需要在ROUTER1上运行下列命令:
netsh interface ipv6 set interface "Local Area Connection"
forwarding=enabled advertise=enabled
netsh interface ipv6 set interface "Local Area Connection 2"
forwarding=enabled advertise=enabled
netsh interface ipv6 set interface "Local Area Connection 3" forwarding=enabled
Local Area Connection 3接口所连接的子网已拥有通告路由器ROUTER2。
这些命令成功运行之后,ROUTER1会在两个非主要子网上使用Local Area Connection和Local Area Connection 2接口发送路由通告消息。然而,路由通告中不包含任何“前缀信息”或“路由信息”可选项(可以用于让所连接子网上的主机自动配置地址和路由)。为了通告“前缀信息”或“路由信息”可选项,必须配置ROUTER1,使它发布路由。
可以使用下述命令来添加一条路由,并将它发布出去:
netsh interface ipv6 add route IPv6Address/PrefixLength interface=InterfaceNameOrIndex
nexthop=IPv6Address metric=Integer publish=yes
在默认情况下,没有下一跳地址(前缀在链路上),路由度量是自动判断出来的,路由条目也是不发布的。
例如,为了配置路由器1并在Local Area Connection上通告链路上的子网前缀2001:db8:0: 1::/64,同时在Local Area Connection 2上通告链路上的子网前缀2001:db8:0:2::/64,需要使用如下命令:
netsh interface ipv6 add route 2001:db8:0:1::/64 "Local Area Connection" publish=yes
netsh interface ipv6 add route 2001:db8:0:2::/64 "Local Area Connection 2" publish=yes
通过配置在接口上通告出去的路由,其“前缀信息”可选项中的链路中(On-link)标记会被置位。如果链路中通告的路由前缀长度是64,ROUTER2就会将前缀信息可选项中的自治标记设置为允许主机创建无状态地址。注意,没有参数可以清除前缀信息可选项中的自治 标记。
在ROUTER 1上添加如下命令可以添加一条默认路由,并将它通告出去:
netsh interface ipv6 add route ::/0 "Local Area Connection 3" nexthop=fe80::2aa:
ff:fe98:2ab1 publish=yes
在运行命令之后,ROUTER1会在Local Area Connection和Local Area Connection 2上发送路由器生存时间字段为65535的路由器通告消息,表示这是具有最长生存时间的默认路由器。
上例中我们只使用了最有限的Netsh命令和可选项,来启动转发、通告行为,并对外通告路由。
注意,Netsh命令中没有可选项能够指定如下内容。
- 路由器通告消息中的路由器生存时间字段:如果路由器将自己通告为默认路由器,IPv6则会将路由器生存时间设置为一个比默认路由选用生存时间和有效生存时间都小的值。如果这两个值都没有指定,Windows中的IPv6会将这个值设置为65535。
- 路由器通告消息中的默认路由器优先级字段:IPv6将默认路由器优先级字段作为中等优先级并设置为0。
- 路由器通告消息中的当前跳数限制字段:IPv6会将当前跳数限制字段设置为0,向发送主机表示路由器没有指定默认跳数限制值。
- 在前缀信息可选项中清除自治标记:IPv6会将自治标记设置为0,这是为了告知接收方的主机,它们不应该根据通告的前缀来配置无状态地址。
10.4.3 使用路由和远程访问来配置静态路由
在运行Windows Server 2012、Windows Server 2008 R2或Windows Server 2008的计算机中,可以使用路由和远程访问管理单元来启用IPv6路由并配置静态IPv6路由。
如需启用对IPv6路由的支持,可执行如下操作。
1.在“路由和远程访问”管理单元的控制台树中,右键单击服务器名称,然后单击“属性”(Properties)。
2.在“常规”(General)选项卡中,单击“IPv6路由器”(IPv6 Router),然后选择“仅局域网路由”(Local Area Network[LAN] Routing Only)或“LAN和按需拨号路由”(LAN And Demand-Dial Routing)。
3.单击“确定”(OK)按钮。
如需添加静态IPv6路由,可执行如下操作。
1.在路由和远程访问管理单元的控制台树,打开IPv6。
2.右键单击“静态路由”(Static Routes),然后单击“新建静态路由”(New Static Route)。
3.在“IPv6静态路由”(IPv6 Static Route)对话框中,选择接口并输入目的地址、前缀长度、网关(下一跳IPv6地址)以及静态路由的度量(metric)。对于按需拨号路由,也可以选中“使用此路由来初始化按需拨号连接”(Use this route to initiate demand-dial Connections)复选框,这可以为匹配路由的流量启动按需拨号连接。图10-6所示为IPv6静态路由对话框的示例。
4.单击“确定”铵钮。
5.若要设置其他IPv6静态路由,则重复第2步~第4步。
如需修改“路由与远程访问”管理单元中现有的IPv6静态路由,在详细窗格右键单击路由并单击“属性”。如需删除“路由与远程访问”管理单元中现存的IPv6静态路由,在详细窗格中右键单击路由并单击“删除”按钮。