企业网/校园网 网关设备通过PPPoE接入向ISP请求前缀委派,让内网三层交换多Vlan获取ipv6地址
本文解决的问题是:如何在不改变现有网络拓扑的情况下,让位于多个不同vlan内网的客户机都用上IPv6,也就是网关设备需要获取ipv6 地址并通过前缀委派的方式获取一组ipv6子网,并将获取到的ipv6地址通过三层交换机的多个vlan接口,分别下发到内网每个vlan的每个设备上。
DHCPv6 Prefix Delegation ,简写为 PD,在本文中翻译为前缀委派,也有翻译为前缀委托、前缀授权等。
背景简述:
本文针对传统企业的常见网络架构模型:企业内部是由三层交换机统治的多个vlan组成的 多个ipv4 子网的内网,出口通过一台或者若干台网关设备(随手搜的图中EG),NAT模式转换为公网ipv4 地址,通过固定ip或 PPPoE接入线路连接因特网。
一般传统企业的常见网络架构工作模式可以用下述场景描述:
- 内网存在多个功能区域或部门,不同区域之间的网段要分开(如监控、无线、电脑各一个网段);
- 每个网段的网关部署在三层核心设备上;
- 如公司内部需要划分多个部门网络,如财务部、行政部、技术部等,只需在交换机上增加对应的网段、VLAN、DHCP等配置
传统的一条固定ip或 PPPoE接入线路只给eth、vlan、dialer0、ppp0 或者 tun0等等设备与ISP直接对接的设备接口提供了ipv4 地址,即使大多网关设备已经有能力支持获取ipv6 地址,也无法将ipv6 地址传播到内网中去。
本文解决的问题是:如何在不改变现有网络拓扑的情况下,让位于多个不同vlan内网的客户机都用上IPv6,也就是网关设备需要获取ipv6 地址并通过前缀委派的方式获取一组ipv6子网,并将获取到的ipv6地址通过三层交换机的多个vlan接口,分别下发到内网每个vlan的每个设备上。
本文参考了前人的技术文档,相关链接如下:
在PPPoE拨号宽带上实现基于前缀委派(PD)的IPv6(Cisco路由器)
在PPPoE拨号环境下实现基于前缀委派(PD)的IPv6(H3C设备)
上文是在没有三层交换机的环境下,仅用一台路由器实现让内网的客户机也用上IPv6。
该实现的缺陷是,对稍大型的、带有三层交换机的企业网络需要改变网络拓扑,造成ipv6是在路由器内直通isp的,从而破环原有的安全防护通道(如防火墙、三层交换机acl等过滤手段),我们希望不改变网络拓扑,保留原网络的安全防护措施,于是有了本文的创作思路。
环境描述:
ISP一般提供了一个光猫,当前几乎所有的运营商光猫(电信、联通、移动)默认都是路由模式的,这里需要联系运营商更改为桥接模式,电信可以直接打10000更改,同时需要从ISP获得PPPoE账号和密码。
出口网关设备此处使用了FreeBSD路由器,这也是很多软路由的实现平台。具体用啥系统都可以,此处也可以用开源Linux 如Ubuntu,案例主要是解决工作原理,具体实现可以多样。
FreeBSD 路由器在此有三大功能:
- WAN口桥接ISP提供的光猫和企业内部三层交换机的出口通道
- 通过 PPPoE 获取WAN口IPv4地址和IPv6地址
- 在WAN和LAN之间用ipv4 NAT技术实现让企业内部三层交换机的内网ipv4 出口。
- 通过 DHCPv6c 获取 IPv6 PD (IPv6 前缀委派)并配置LAN口ipv6地址。
利用FreeBSD路由器实现最基础的出口 ipv4 pppoe 网关不是很复杂,处理 IPv4 的 NAT技术也很老了,所以1、2、3就不多赘述。
需要详细描述的是FreeBSD 路由器上的 IPv6 前缀委派,该技术在FreeBSD平台成型于2004年,但那时国内互联网都还在启动阶段,大家都在研究如何赚钱,没人关注基础技术研发。直到如今我才了解到,原来别人家的操作系统上的ipv6实现在20年前就已经成型了。
工作原理:
- FreeBSD路由器通过dhcpv6 client 向提供商请求前缀。国外通常拿到的前缀是/56,国内运营商小器一点,实测在浙江,三家(电信、联通、移动)都是只给/60。
- FreeBSD路由器 dhcpv6 client 给内部LAN接口配置运营商提供的前缀的 ipv6地址。
- 路由器通过内部LAN接口与内网三层交换机对接,互相添加静态ipv6路由,内网三层交换机通知客户端使用有状态方式(即DHCPV6方式)获取IPV6地址和无状态方式(即使用IPV6网关RA报文发布的64位前缀,终端自动拼装64位后缀)获取IPV6地址。
先决条件:
- 有两个或多个网络接口的x86 PC 主机。
- FreeBSD 13.1(实测环境是 FreeBSD 13.1-release-p6 )
- KAME DHCP6(实测环境是 dhcp6-20080615.2 )
- rtadvd(FreeBSD 系统内置)
-
uname -a
-
FreeBSD 13.1-RELEASE-p6 FreeBSD 13.1-RELEASE-p6 GENERIC amd64
-
-
pkg info | grep dhcp6
-
dhcp6-20080615.2_3 KAME DHCP6 client, server, and relay
为实现上述三大功能,FreeBSD 路由器必须具有两个或以上千兆网口。但其实并不严格要求,如对接入带宽无感,仅验证技术的话,也可以用单臂路由配置多个vlan接口实现。
本文实验环境使用vmware esxi 虚拟机,单臂路由配置多个vlan接口实现。
本文实验环境实测点在浙江,三家(电信、联通、移动)都测试成功获取了/60前缀。
配置
示例中的网络接口名称由/etc/rc.conf 创建,约定如下:
vlan1072 是wan接口,对接ISP提供的光猫。此处配了192.168.1.227 是为了进光猫的web设置。
lagg0.36是 lan 接口,对接内部网络的三层交换机192.168.36.227是与三层交换机互联地址。
tun0 是pppoe 拨号虚接口,由/etc/rc.conf 创建,由/etc/ppp/ppp.conf 指定对接vlan1072。
/etc/rc.conf 添加如下配置(ipv4相关设置省略):
-
ifconfig_vmx0="up"
-
cloned_interfaces="lagg0 vlan1072 tun0"
-
ifconfig_lagg0="laggproto failover laggport vmx0 laggport em0"
-
vlans_lagg0="36"
-
#ifconfig_lagg0_36="192.168.36.227/24"
-
ifconfig_vlan1072="inet 192.168.1.227/24 vlan 1072 vlandev lagg0"
-
-
ppp_enable="YES"
-
ppp_mode="ddial"
-
ppp_profile="cuc"
-
-
ipv6_cpe_wanif="tun0"
-
ipv6_activate_all_interfaces="YES"
-
ipv6_gateway_enable="YES"
-
rtadvd_enable="YES"
-
rtadvd_interfaces="lagg0.36"
-
-
ifconfig_tun0_ipv6="inet6 accept_rtadv up"
-
ifconfig_lagg0.36_ipv6="inet6 -accept_rtadv up"
-
-
dhcp6c_enable="YES"
-
dhcp6c_interfaces="tun0"
配置pppoe 拨号:
编辑/etc/ppp/ppp.conf:
-
#CUC_1G_Down_100M_Up_PPPoE_0571012345678_123456
-
cuc:
-
set device PPPoE:vlan1072 # replace xl1 with your Ethernet device
-
set authname 0571012345678
-
set authkey 123456
-
set dial
-
set login
-
add default HISADDR
请自行修改上面的device PPPoE:vlan1072、authname 0571012345678、authkey 123456。
cuc: 与/etc/rc.conf 中的ppp_profile="cuc"对应。
安装DHCPv6客户端:
重要:必备步骤。
dhcp6c 是向 ISP 请求前缀委派所必需的。
注意dhcp6c 不在 wan 接口上设置ipv6 地址,wan 口上ipv6 地址由pppoe 设置。
与路由器的 IPv6 通信是通过链路本地地址linklocal完成的。
使用 pkg 安装 KAME dhcp6c 客户端(或从ports 中的net/dhcp6 ):
pkg install -y dhcp6
修改 /usr/local/etc/dhcp6c.conf:
-
interface tun0 {
-
#从ISP WAN 接口 向 ISP 申请前缀委派
-
send ia-pd 0;
-
request domain-name-servers;
-
};
-
-
id-assoc pd 0 {
-
prefix-interface lagg0.36 {
-
#申请到的前缀绑定到lan口= langg0.36
-
sla-len 0;
-
#sla-len 申请到的前缀删除位数。
-
#如果ISP默认会将/60委派给我,如果我想获得/64,就从中删除4位。如 sla-len 4(声明删除的位数)。
-
#如果ISP默认会将/56委派给我,如果我想获得/64,就从中删除8位。如 sla-len 8(声明删除的位数)。
-
#先用0测试ISP默认委派的位数。实际使用需要计算到/64,实测国内三家运营商在浙江都用4
-
sla-id 1;
-
#测试阶段sla-len 0;时,sla-id 1;
-
#实际使用阶段,sla-len 4;时,sla-id 0;
-
};
-
};
重启系统。
如果一切正常,FreeBSD 将获得对应接口的ipv6地址,输入命令
ifconfig tun0
ifconfig lagg0.36 以检测对应的ip获取情况。
并且默认会自动将sysctl net.inet6.ip6.rfc6204w3更改为1,输入命令
net.inet6.ip6.rfc6204w3 确认对应的sysctl 变量情况。
-
[root@CUC227_PPPoE_1G_100M_up] ~# ifconfig tun0
-
tun0: flags=8051<UP,POINTOPOINT,RUNNING,MULTICAST> metric 0 mtu 1492
-
options=80000<LINKSTATE>
-
inet6 fe80::250:569f:33ac:7385%tun0 prefixlen 64 scopeid 0x6
-
inet6 2408:8240:5201:76e:250:569f:33ac:7385 prefixlen 64 autoconf
-
inet 172.19.200.223 --> 172.19.200.1 netmask 0xffffffff
-
groups: tun
-
nd6 options=3<PERFORMNUD,ACCEPT_RTADV>
-
Opened by PID 1025
-
[root@CUC227_PPPoE_1G_100M_up] ~# ifconfig lagg0.36
-
lagg0.36: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500
-
options=4000002<TXCSUM,NOMAP>
-
ether 00:50:56:ac:73:85
-
inet6 2408:8240:5210:af70:250:56ff:feac:7385 prefixlen 60
-
groups: vlan
-
vlan: 36 vlanproto: 802.1q vlanpcp: 0 parent interface: lagg0
-
media: Ethernet autoselect
-
status: active
-
nd6 options=41<PERFORMNUD,NO_RADR>
-
-
[root@CUC227_PPPoE_1G_100M_up] ~# sysctl net.inet6.ip6.rfc6204w3
-
net.inet6.ip6.rfc6204w3: 1
从上图可见,ISP给我方委派授权的ip地址已经绑定到lagg0.36,
其ip为2408:8240:5210:af70:250:56ff:feac:7385
前缀为:2408:8240:5210:af70 prefixlen 是/60,所以切分后,我方共有16个/64的ipv6 前缀可供分配,具体为2408:8240:5210:af70-2408:8240:5210:af7e,因为0已经被lagg0.36用掉,所以还有15个/64ipv6 前缀可供分配给其他vlan,就是2408:8240:5210:af70 ,因为是16进制数,最后一位可以是1-e/64。
配置三层交换机。
此处案例为一台华为S5720 三层交换机。参考链接:
FAQ-S5700 IPV6 DHCP SERVER配置- 华为
下面案例我选定了16进制数的最后一位e ,2408:8240:5210:af7e 这个/64前缀分配给vlan15,
将华为交换机的vlan 15,vlan 36 的三层接口ipv6 地址配置为每个段的第一个地址(将会自动充当ipv6路由接口);
dhcp6 server 分配时排除前10个地址避免冲突。
配置如下:
-
#
-
ipv6
-
#
-
dhcp enable
-
#
-
dhcpv6 pool vlan15
-
address prefix 2408:8240:5210:AF7E::/64
-
excluded-address 2408:8240:5210:AF7E::1 to 2408:8240:5210:AF7E::10
-
dns-server 2408:8888::8
-
dns-server 2408:8899::8
-
dns-domain-name mycompany.com
-
#
-
dhcpv6 pool vlan36
-
address prefix 2408:8240:5210:AF70::/64
-
excluded-address 2408:8240:5210:AF70::1 to 2408:8240:5210:AF70::10
-
dns-server 2408:8888::8
-
dns-server 2408:8899::8
-
dns-domain-name mycompany.local
-
#
-
interface Vlanif15
-
ipv6 enable
-
ipv6 address 2408:8240:5210:AF7E::1/64
-
ipv6 mtu 1432
-
undo ipv6 nd ra halt
-
ipv6 nd autoconfig managed-address-flag
-
ipv6 nd autoconfig other-flag
-
dhcpv6 server vlan15
-
#
-
interface Vlanif36
-
ipv6 enable
-
ipv6 address 2408:8240:5210:AF70::1/64
-
ipv6 address auto link-local
-
ipv6 mtu 1432
-
undo ipv6 nd ra halt
-
ipv6 nd autoconfig managed-address-flag
-
ipv6 nd autoconfig other-flag
-
dhcpv6 server vlan36
-
#
上面vlan36 是互联接口,所以我们还需要:
配置ipv6路由
在华为交换机上添加默认互联接口的ip为ipv6 默认出口网关:
ipv6 route-static :: 0 2408:8240:5210:AF70:250:56FF:FEAC:7385
在FreeBSD 上对应添加对应的ipv6子网为回程路由(指向华为交换机的vlan 36 的三层接口ipv6 地址 2408:8240:5210:af70::1)
route add -6 2408:8240:5210:af70::1/60 2408:8240:5210:af70::1
完工测试:
- 先从三层交换机测试出口:
-
【huawei]]ping ipv6 -a 2408:8240:5210:AF70::1 2408:8240:5210:AF70:250:56FF:FEAC:7385
-
PING 2408:8240:5210:AF70:250:56FF:FEAC:7385 : 56 data bytes, press CTRL_C to break
-
Reply from 2408:8240:5210:AF70:250:56FF:FEAC:7385
-
bytes=56 Sequence=1 hop limit=64 time = 1 ms
-
Reply from 2408:8240:5210:AF70:250:56FF:FEAC:7385
-
bytes=56 Sequence=2 hop limit=64 time = 2 ms
-
Reply from 2408:8240:5210:AF70:250:56FF:FEAC:7385
-
bytes=56 Sequence=3 hop limit=64 time = 1 ms
-
Reply from 2408:8240:5210:AF70:250:56FF:FEAC:7385
-
bytes=56 Sequence=4 hop limit=64 time = 1 ms
-
Reply from 2408:8240:5210:AF70:250:56FF:FEAC:7385
-
bytes=56 Sequence=5 hop limit=64 time = 2 ms
-
-
--- 2408:8240:5210:AF70:250:56FF:FEAC:7385 ping statistics ---
-
5 packet(s) transmitted
-
5 packet(s) received
-
0.00% packet loss
-
round-trip min/avg/max = 1/1/2 ms
- 再测一下ping v6 的dns:
-
【Huawei】ping ipv6 -a 2408:8240:5210:AF70::1 2408:8888::8
-
PING 2408:8888::8 : 56 data bytes, press CTRL_C to break
-
Reply from 2408:8888::8
-
bytes=56 Sequence=1 hop limit=60 time = 5 ms
-
Reply from 2408:8888::8
-
bytes=56 Sequence=2 hop limit=60 time = 5 ms
-
Reply from 2408:8888::8
-
bytes=56 Sequence=3 hop limit=60 time = 4 ms
-
Reply from 2408:8888::8
-
bytes=56 Sequence=4 hop limit=60 time = 5 ms
-
Reply from 2408:8888::8
-
bytes=56 Sequence=5 hop limit=60 time = 5 ms
-
-
--- 2408:8888::8 ping statistics ---
-
5 packet(s) transmitted
-
5 packet(s) received
-
0.00% packet loss
-
round-trip min/avg/max = 4/4/5 ms
- 从vlan 15 接口地址发测试包:
-
【huawei】ping ipv6 -a 2408:8240:5210:AF7e::1 2408:8888::8
-
PING 2408:8888::8 : 56 data bytes, press CTRL_C to break
-
Reply from 2408:8888::8
-
bytes=56 Sequence=1 hop limit=60 time = 6 ms
-
Reply from 2408:8888::8
-
bytes=56 Sequence=2 hop limit=60 time = 7 ms
-
Reply from 2408:8888::8
-
bytes=56 Sequence=3 hop limit=60 time = 11 ms
-
Reply from 2408:8888::8
-
bytes=56 Sequence=4 hop limit=60 time = 7 ms
-
Reply from 2408:8888::8
-
bytes=56 Sequence=5 hop limit=60 time = 7 ms
-
-
--- 2408:8888::8 ping statistics ---
-
5 packet(s) transmitted
-
5 packet(s) received
-
0.00% packet loss
-
round-trip min/avg/max = 6/7/11 ms
- 从另一家ISP 运营商地址 ipv6 ping vlan 15 的接口地址 2408:8240:5210:AF7e::1 :
-
【CTC_PPPoE】 /usr/local/etc# ping 2408:8240:5210:AF7E::1
-
PING6(56=40 8 8 bytes) 240e:390:5272:e40a:250:56ff:feac:1375 --> 2408:8240:5210:af7e::1
-
16 bytes from 2408:8240:5210:af7e::1, icmp_seq=0 hlim=55 time=11.027 ms
-
16 bytes from 2408:8240:5210:af7e::1, icmp_seq=1 hlim=55 time=11.004 ms
-
16 bytes from 2408:8240:5210:af7e::1, icmp_seq=2 hlim=55 time=11.283 ms
-
16 bytes from 2408:8240:5210:af7e::1, icmp_seq=3 hlim=55 time=10.867 ms
-
16 bytes from 2408:8240:5210:af7e::1, icmp_seq=4 hlim=55 time=11.027 ms
-
16 bytes from 2408:8240:5210:af7e::1, icmp_seq=5 hlim=55 time=10.922 ms
-
16 bytes from 2408:8240:5210:af7e::1, icmp_seq=6 hlim=55 time=11.325 ms
-
^C
-
--- 2408:8240:5210:AF7E::1 ping6 statistics ---
-
7 packets transmitted, 7 packets received, 0.0% packet loss
-
round-trip min/avg/max/std-dev = 10.867/11.065/11.325/0.161 ms
- 检查vlan 15 下的PC获取ipv6 地址:
-
C:\Windows\system32>ipconfig /renew6
-
-
Windows IP 配置
-
-
以太网适配器 Ethernet0:
-
-
连接特定的 DNS 后缀 . . . . . . . : mycompany.com
-
IPv6 地址 . . . . . . . . . . . . : 2408:8240:5210:af7e::11
-
IPv6 地址 . . . . . . . . . . . . : 2408:8240:5210:af7e:4c2:47ab:757e:cd59
-
临时 IPv6 地址. . . . . . . . . . : 2408:8240:5210:af7e:61f1:4f8a:e2b6:16cf
-
本地链接 IPv6 地址. . . . . . . . : fe80::4c2:47ab:757e:cd59%4
-
自动配置 IPv4 地址 . . . . . . . : 169.254.205.89
-
子网掩码 . . . . . . . . . . . . : 255.255.0.0
-
默认网关. . . . . . . . . . . . . : fe80::3abc:1ff:feb2:4d48%4
- ping 各个网关测试略, ping dns 测试:
-
C:\Windows\system32>ping 2408:8899::8
-
-
正在 Ping 2408:8899::8 具有 32 字节的数据:
-
来自 2408:8899::8 的回复: 时间=8ms
-
来自 2408:8899::8 的回复: 时间=8ms
-
来自 2408:8899::8 的回复: 时间=8ms
-
来自 2408:8899::8 的回复: 时间=8ms
-
-
2408:8899::8 的 Ping 统计信息:
-
数据包: 已发送 = 4,已接收 = 4,丢失 = 0 (0% 丢失),
-
往返行程的估计时间(以毫秒为单位):
-
最短 = 8ms,最长 = 8ms,平均 = 8ms
- 从从另一家ISP 运营商地址 ipv6 ping 内网 vlan 15 的PC 地址 2408:8240:5210:AF7e::11 :
-
# ping 2408:8240:5210:AF7E::11
-
PING6(56=40 8 8 bytes) 240e:390:1272:e40a:250:56ff:feac:1375 --> 2408:8240:5210:af7e::11
-
16 bytes from 2408:8240:5210:af7e::11, icmp_seq=0 hlim=54 time=13.525 ms
-
16 bytes from 2408:8240:5210:af7e::11, icmp_seq=1 hlim=54 time=13.502 ms
-
16 bytes from 2408:8240:5210:af7e::11, icmp_seq=2 hlim=54 time=13.849 ms
-
16 bytes from 2408:8240:5210:af7e::11, icmp_seq=3 hlim=54 time=13.555 ms
-
16 bytes from 2408:8240:5210:af7e::11, icmp_seq=4 hlim=54 time=13.679 ms
-
--- 2408:8240:5210:AF7E::11 ping6 statistics ---
-
5 packets transmitted, 5 packets received, 0.0% packet loss
-
round-trip min/avg/max/std-dev = 13.439/13.636/13.903/0.167 ms
- 使用 vnc 通过ipv6 远程控制 PC:
补充:如用于生产环境需要考虑以下因素:
国内运营商都只给/60的委派授权,最多只能拆成16个/64的子网,去除互联的一个,实际只能供15个vlan分配地址。生产环境最好能申请更大委派授权,比如/56
因为是PPPoE动态地址,每次断电、重启、PPPoE超时重拨号(每家运营商都会在一定周期断开重拨,一般是24小时的整数倍)都会导致三层交换机配置的ipv6地址失效。我目前的想法是检测到ipv6地址变化时,自行撰写bash expect脚本命令行登录交换机,使用命令行盲交互的方式自动修改对应的ipv6设置。生产环境最好能申请固定ipv6子网委派授权。
三层交换机默认的ipv6地址租约是3天,对动态地址的情况不友好,建议改短,并人为将PPPoE 重拨时间优化到午夜,以便各PC、移动终端在第二天获取到新的、具有较长有效期(不会在使用时突然因ipv6地址变更而中断)的ipv6地址。
ipv6 dns 优先级会比ipv4 dns 优先级高,如果企业内部有ipv4 dns server,为降低内网应用响应时间不影响业务,也需要创建一个具有ipv6 aaaa 记录的内部 ipv6 dns server 替换掉案例中的2408:8888::8
注:本文范例的所有ipv6 地址均已修改以掩藏真实地址。
这篇好文章是转载于:学新通技术网
- 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
- 本站站名: 学新通技术网
- 本文地址: /boutique/detail/tanhfbjeae
-
photoshop保存的图片太大微信发不了怎么办
PHP中文网 06-15 -
Android 11 保存文件到外部存储,并分享文件
Luke 10-12 -
《学习通》视频自动暂停处理方法
HelloWorld317 07-05 -
word里面弄一个表格后上面的标题会跑到下面怎么办
PHP中文网 06-20 -
photoshop扩展功能面板显示灰色怎么办
PHP中文网 06-14 -
微信公众号没有声音提示怎么办
PHP中文网 03-31 -
excel下划线不显示怎么办
PHP中文网 06-23 -
excel打印预览压线压字怎么办
PHP中文网 06-22 -
怎样阻止微信小程序自动打开
PHP中文网 06-13 -
TikTok加速器哪个好免费的TK加速器推荐
TK小达人 10-01