IPv6地址配置实战:从理论到思科设备部署
1. IPv6基础:为什么我们需要它?
记得我第一次接触IPv6是在2012年,当时还在用IPv4给公司网络做规划。突然老板扔过来一个需求:"下个季度我们要上IPv6,你研究下怎么搞。"我当时就懵了——这玩意儿跟IPv4有啥区别?为啥非得用这个?后来才发现,IPv4地址真的快用完了,就像手机号码不够用要升位一样。
IPv6采用128位地址长度,是IPv4的4倍。具体来说,IPv6地址长这样:2001:0db8:85a3:0000:0000:8a2e:0370:7334。每组4个16进制数,共8组,中间用冒号分隔。为了方便,可以省略前导零,连续的全零组可以用双冒号代替。所以上面这个地址可以简写成:2001:db8:85a3::8a2e:370:7334。
IPv6地址主要分这几类:
- 全局单播地址:相当于IPv4的公网IP,全球唯一可路由
- 链路本地地址:只在本地链路有效,相当于IPv4的169.254.0.0/16
- 唯一本地地址:类似IPv4的私有地址(10.0.0.0/8这种)
- 组播地址:一对多通信,IPv6取消了广播(因为效率太低)
- 任播地址:新增的类型,数据包会发给"最近"的一个接口
2. IPv6地址配置的两种方式
在实际项目中,我主要用过两种IPv6地址分配方式:无状态自动配置和有状态DHCPv6。先说无状态自动配置(Stateless Address Autoconfiguration,简称SLAAC),这是IPv6最酷的功能之一。
2.1 无状态自动配置实战
无状态配置下,设备会自己生成IPv6地址,过程是这样的:
- 设备先给自己分配一个链路本地地址(FE80::开头)
- 然后发个路由器请求(Router Solicitation)
- 路由器回复路由器通告(Router Advertisement),包含网络前缀
- 设备把网络前缀和自己的接口ID组合,就得到了全局单播地址
在思科设备上配置很简单:
Router(config)# ipv6 unicast-routing # 先启用IPv6路由 Router(config)# interface gigabitEthernet 0/0 Router(config-if)# ipv6 address 2001:db8:1:1::/64 eui-64 # 使用EUI-64格式这里的eui-64参数会让路由器自动生成后64位地址。前64位是你指定的网络前缀,后64位由MAC地址转换而来。比如MAC是00:1B:77:49:54:28,转换后就是021B:77FF:FE49:5428。
2.2 有状态DHCPv6配置
无状态配置虽然方便,但有个问题——没法自动分配DNS服务器这些信息。这时候就需要DHCPv6了。我在银行项目里就用过这个方案,因为他们的安全策略要求所有终端必须使用指定DNS。
思科设备上配置DHCPv6服务分三步:
# 第一步:创建地址池 Router(config)# ipv6 dhcp pool MYPOOL Router(config-dhcpv6)# address prefix 2001:db8:1:1::/64 Router(config-dhcpv6)# dns-server 2001:db8::1 Router(config-dhcpv6)# domain-name example.com # 第二步:在接口上启用 Router(config)# interface gigabitEthernet 0/0 Router(config-if)# ipv6 dhcp server MYPOOL # 第三步:客户端配置 Router(config)# interface gigabitEthernet 0/1 Router(config-if)# ipv6 address dhcp # 客户端用这个命令获取地址3. 思科设备上的IPv6部署技巧
3.1 双栈配置实战
现在很多网络都是IPv4/IPv6双栈运行。我在配置时通常会先做好规划表:
| 项目 | IPv4配置 | IPv6配置 |
|---|---|---|
| 管理地址 | 192.168.1.1/24 | 2001:db8:1::1/64 |
| 上行链路 | 203.0.113.1/30 | 2001:db8:ffff::1/64 |
| 用户地址池 | 10.10.0.0/16 | 2001:db8:100::/56 |
配置命令示例:
interface GigabitEthernet0/0 ip address 192.168.1.1 255.255.255.0 ipv6 address 2001:db8:1::1/64 ipv6 enable3.2 常见问题排查
去年给学校部署IPv6时遇到个坑:客户端拿不到地址。后来发现是路由器没发RA报文。解决方法是在接口下加这条命令:
Router(config-if)# ipv6 nd ra suppress all # 默认是关闭RA的其他常用排错命令:
show ipv6 interface brief # 查看接口IPv6状态 debug ipv6 dhcp detail # 查看DHCPv6过程 ping ipv6 2001:db8::1 # IPv6版ping traceroute ipv6 google.com # IPv6路径追踪4. 企业级部署建议
4.1 地址规划方案
中型企业我推荐这样规划:
- 总部:2001:db8:100::/56
- 部门1:2001:db8:100:100::/64
- 部门2:2001:db8:100:200::/64
- 分支机构:2001:db8:200::/56
- 每个分支分配一个/64
4.2 安全配置要点
IPv6的安全配置很多人会忽略,这几个命令建议加上:
# 禁止ICMPv6重定向 Router(config-if)# no ipv6 redirects # 启用IPv6访问控制列表 Router(config)# ipv6 access-list FILTER_IN Router(config-ipv6-acl)# permit tcp any any established Router(config-ipv6-acl)# permit icmp any any nd-ns Router(config-ipv6-acl)# deny ipv6 any any最后提醒下,用浏览器访问IPv6网站时,地址要用方括号括起来,比如: http://[2001:db8:1:1::1]
