MSR系列路由器对Windows主机进行IPv6侧ND和静态NATPT经验的案例
一、组网:
MSR和各主机进行简单的组网,组网图如下
二、问题描述:
在如上组网及部分配置后,察看MSR上的配置:
MSR配置 |
# //使能设备IPv6 ipv6 # //配置设备的natpt IPv6侧静态配置,将XP IPv6 PC的1::215:c5ff:fe0d:1903转换成 natpt v6bound
static 0001::0215:c5ff:fe0d:1903 //配置natpt前缀为2:: natpt prefix 0002:: # interface Ethernet0/0 port link-mode route //配置接口的IPv6地址 ipv6 address 1::1/64 //取消nd
ra的抑制 undo ipv6 nd ra halt //使能NATPT natpt enable # interface Ethernet0/1 port link-mode route //IPv4侧接口地址 ip address //使能NATPT natpt enable # |
如上配置后,从IPv6主机ping6 2::
C:\>ping6
2:: Pinging
2::102:2 from
1::b4e5:4ede:bf70:8dea with 32 bytes of data: 请求超时。 请求超时。 请求超时。 请求超时。 Packets: Sent = 4,
Received = 0, Lost = 4 (100% loss), C:\Documents
and Settings\Administrator> |
但是从IPv4主机ping
<2021>display
natpt session all NATPT Session Info: No IPV6Source IPV4Source
Pro
IPV6Destination
IPV4Destination 1 0002::0102:0002
^ 0
0001::0215:c5ff:fe0d:1903
^ 0 <2021> |
也就是说如上配置后只能从IPv4主机侧发起连接,而不能从IPv6侧发起连接。
三、过程分析:
检查IPv6侧主机的IPv6地址信息:
XP
IPv6 PC的IPv6地址信息 |
C:\Documents
and Settings\Administrator>netsh netsh>interface
ipv6 netsh
interface ipv6>show address 正在查询活动状态... 接口 5: Teredo
Tunneling Pseudo-Interface 地址类型 DAD 状态
有效寿命 首选寿命 地址 --------- ---------- ------------ ------------
----------------------------- 链接
首选项
infinite
infinite fe80::ffff:ffff:fffd 接口 4: 本地连接 地址类型 DAD 状态
有效寿命 首选寿命 地址 --------- ---------- ------------ ------------
----------------------------- 临时
首选项
6d22h 公用
首选项
29d23h 链接
首选项 infinite infinite
fe80::215:c5ff:fe0d:1903 接口 2: Automatic Tunneling
Pseudo-Interface 地址类型 DAD 状态
有效寿命 首选寿命 地址 --------- ---------- ------------ ------------
----------------------------- 链接
首选项
infinite
infinite fe80::5efe:10.153.43.145 接口 1: Loopback Pseudo-Interface 地址类型 DAD 状态
有效寿命 首选寿命 地址 --------- ---------- ------------ ------------
----------------------------- 环回
首选项
infinite
infinite ::1 链接
首选项 infinite infinite
fe80::1 netsh
interface ipv6> |
可以看到本地连接4上有2个无状态地址自动配置生成的IPv6地址,一个是路由器natpt v6bound static中配置的1::215:c5ff:fe0d:1903(EUI-64方式生成的),另一个是1::b4e5:4ede:bf70:8dea(微软通过MAC Hash方法生成的),那么是不是Windows主机默认使用Hash生成的地址呢?通过Ethereal抓包显示果然使用的是1::b4e5:4ede:bf70:8dea,因此改变IPv6主机上的操作:
C:\>ping6
-s 1::215:c5ff:fe0d:1903 2:: Pinging
2::102:2 from
1::215:c5ff:fe0d:1903 with 32 bytes of data: Reply
from 2::102:2: bytes=32 time=21ms Reply
from 2::102:2: bytes=32 time=21ms Reply from
2::102:2: bytes=32 time=21ms Reply
from 2::102:2: bytes=32 time=20ms Packets: Sent = 4,
Received = 4, Lost = 0 (0% loss), Approximate
round trip times in milli-seconds: Minimum = 20ms, Maximum =
21ms, Average = 20ms C:\> |
由此可见Windows主机默认会使用通过Hash生成的IPv6地址,因此可以将MSR的配置改成:
MSR配置 |
# //配置设备的natpt IPv6侧静态配置,将XP IPv6 PC的1::b4e5:4ede:bf70:8dea转换成 natpt v6bound
static 0001::b4e5:4ede:bf70:8de //配置natpt前缀为2:: natpt prefix 0002:: # |
MSR其余配置保持不变即可:
C:\>ping6
2:: Pinging
2::102:2 from
1::b4e5:4ede:bf70:8dea with 32 bytes of data: Reply
from 2::102:2: bytes=32 time=22ms Reply
from 2::102:2: bytes=32 time=21ms Reply
from 2::102:2: bytes=32 time=21ms Reply
from 2::102:2: bytes=32 time=21ms Packets: Sent = 4,
Received = 4, Lost = 0 (0% loss), Approximate
round trip times in milli-seconds: Minimum = 21ms, Maximum =
22ms, Average = 21ms C:\> |
四、结论:
微软认为通过EUI-64方式生成不安全,因为可以从IPv6地址猜测MAC地址,所以微软自行搞了一个Hash方式的地址,而且首选使用这个地址作为IPv6通信的源地址。
五、解决方法:
静态NATPT实验。可以不用结合ND,而给IPv6主机单独配置IPv6地址,并在IPv6主机发起通信时抓包判断使用的IPv6源地址,必须保证路由器上NATPT配置IPv6地址和通信源地址相吻合。另外一个解决办法就是使用动态NATPT。