Hello everyone,
I am trying to set up a small lab network to test IPV6 on DOCSIS network. I am having difficulty in getting a cable modem to receive DHCPv6 IP address.
I am using the following equipment:
- Cisco uBR7200 with NPE-G2 and MC28U
- ISC-DHCP-SERVER6 running on Ubuntu 14.04
- DOCSIS 3 IPv6 compatible cable modem
Wireshark shows me that IPV6 Solicit packets are received from the modem and the DHCPv6 server sends Advertisement back.
Looking at the IPV6 dhcp debug messages on CMTS, I see the following which confirms that DHCPv6 packets are relayed correctly but for some reason the cable modem is not accepting the IP and hence, keeps sending out Solicit packets over and over again:
*Aug 15 05:55:56.147: IPv6 DHCP: Received SOLICIT from FE80::21C:7BFF:FEEF:1C5A on Bundle6
*Aug 15 05:55:56.147: IPv6 DHCP: Sending RELAY-FORWARD to 2001:A:1:1::2 on GigabitEthernet0/1
*Aug 15 05:55:56.147: IPv6 DHCP: Received RELAY-REPLY from 2001:A:1:1::2 on GigabitEthernet0/1
*Aug 15 05:55:56.147: IPv6 DHCP: Sending REPLY to FE80::21C:7BFF:FEEF:1C5A on Bundle6
Router#
*Aug 15 05:55:57.179: IPv6 DHCP: Received SOLICIT from FE80::21C:7BFF:FEEF:1C4B on Bundle6
*Aug 15 05:55:57.179: IPv6 DHCP: Sending RELAY-FORWARD to 2001:A:1:1::2 on GigabitEthernet0/1
*Aug 15 05:55:57.179: IPv6 DHCP: Received RELAY-REPLY from 2001:A:1:1::2 on GigabitEthernet0/1
*Aug 15 05:55:57.179: IPv6 DHCP: Sending REPLY to FE80::21C:7BFF:FEEF:1C5A on Bundle6
Router#
*Aug 15 05:55:59.327: IPv6 DHCP: Received SOLICIT from FE80::21C:7BFF:FEEF:1C5A on Bundle6
*Aug 15 05:55:59.327: IPv6 DHCP: Sending RELAY-FORWARD to 2001:A:1:1::2 on GigabitEthernet0/1
*Aug 15 05:55:59.327: IPv6 DHCP: Received RELAY-REPLY from 2001:A:1:1::2 on GigabitEthernet0/1
*Aug 15 05:55:59.327: IPv6 DHCP: Sending REPLY to FE80::21C:7BFF:FEEF:1C5A on Bundle6
ISC-DHCP-Server6 config (I am only trying to get DHCPv6 IPs for Cable Modems, I'll worry about CPEs afterwards):
option dhcp6.rapid-commit;
authoritative;
allow booting;
allow bootp;
ddns-update-style none;
option space docsis code width 2 length width 2 hash size 17;
option docsis.tftp-servers code 32 = array of ip6-address;
option docsis.cablelabs-configuration-file code 33 = text;
option docsis.cablelabs-syslog-servers code 34 = array of ip6-address;
option docsis.device-id code 36 = string;
option docsis.time-servers code 37 = array of ip6-address;
option docsis.time-offset code 38 = signed integer 32;
option vsio.docsis code 4491 = encapsulate docsis;
subnet6 2001:A:1:1::/64 {}
subnet6 2001:B:1:1::/64 {
default-lease-time 600;
max-lease-time 7200;
log-facility local7;
range6 2001:B:1:1::50 2001:B:1:1::55;
option docsis.tftp-servers 2001:A:1:1::2;
option docsis.cablelabs-configuration-file "/tftpboot/CM-BASIC.cfg";
}
CMTS config
------------------
interface GigabitEthernet0/1
ip address 172.16.1.1 255.255.255.0
media-type rj45
speed auto
duplex auto
negotiation auto
ipv6 address 2001:A:1:1::1/64
ipv6 enable
!
interface Cable3/0
cable ip-init ipv6
no cable packet-cache
cable bundle 6
!!!Rest of the cable RF config not printed here
interface Bundle6
no ip address
cable arp filter request-send 3 2
cable arp filter reply-accept 3 2
ipv6 address 2001:B:1:1::1/64
ipv6 enable
ipv6 nd prefix default no-advertise
ipv6 nd managed-config-flag
ipv6 nd other-config-flag
ipv6 nd ra interval 5
ipv6 dhcp relay destination 2001:A:1:1::2
I connected a Ubuntu IPV6 client to the DHCPv6 Server and it successfully received a DHCPv6 IP so that tells me the server is configured correctly but I'm not sure if I'm missing anything else that cable modems are looking for. Any advise is highly appreciated.
What version of DHCPD are you running on Ubuntu? I ran into an issue with 4.1 and above that the Advertisement packets were not sending the DHCP options to the modems. This caused the modem to continuously solicit the server and eventually reboot. This looks to be a very similar issue.
They may have another way of doing this now, I haven't had much time to look at the newer versions. 4.3.0 they are calling the "IPv6 Uplift" so they may have added something in there.
https://lists.isc.org/pipermail/dhcp-users/2010-October/012459.html
You can verify that the options are in the advertisement by mirroring that port on the CMTS or doing a tcpdump on the DHCP server and looking at the output in wireshark. The -w option will send it to a file. 'tcpdump -n -i -w /tmp/ipv6_cap1.cap'
If you do in fact see the TFTP server and config file in the packet I would also add in the ToD server, Time-Offset and syslog server options. I don't think they are required for D3.0, but for some reason it made me provide them when I was setting this up. Probably depends on the modem.
Thank you very much for taking the time to reply.
I am using the latest ISC-DHCP-SERVER version (4.2.4-7ubuntu12) and Zoom Cable Modem 3.0 series 1094
According to WireShark I see the options in the Advertisement packet from the DHCPv6 Server but the modem just keeps sending repeated solicit messages and then eventually reboots. I believe if the modem was able to read the options successfully then it would have accepted the IPv6 address supplied by the DHCPv6 server and then attempted to download the config file via TFTP but I'm not seeing that. Is there some specific option that CM's expect to see that my config is missing? Does my DHCPv6 config look correct apart from missing ToD and log server options?
I have also tested a different modem and that does the same thing.
Thank you again for your help.
I was under the impression that at least the DHCPv6 IP would be accepted by the cable modem and I would see the tftp request and so on after that but it seems like the cable modem completely ignored the DHCP options if it didn't see ToD server, Time-Offset and syslog server options. IPv4 is a lot forgiving in that case.
I was able to get it all working after adding those three options to the DHCPv6 config file as follows (hope it will help someone else)
option docsis.cablelabs-syslog-servers 2001:c:1:1::2;
option docsis.time-servers 2001:c:1:1::2;
option docsis.time-offset 28800;
I ended up using /etc/xinetd.d/time config file on Ubuntu 12.04 to configure my ToD server and had to enable it to listen to IPv6 interface as follows:
service time
{
flags = IPv6
disable = no
type = INTERNAL
id = time-dgram
socket_type = dgram
protocol = udp
user = root
wait = yes
}
Thank you for your help.