IPv6 behind ISP cable modem (router mode)

Hi,

I'm having a bit of trouble getting IPv6 working on my network and hope you can help me.

The situation is as follows:

I have a cable modem (Technicolor TC 7200) from cablesurf (my ISP) which is working in router mode (which should stay that way because there's a telephone connected to its RJ-11 port and I don't have another adapter to replace it).

Behind the cable modem, there's a TL-WDR3600 running LEDE Reboot 17.01.2 r3435-65eec8bd5f.

Network diagram

There are 3 interfaces on the LEDE box: LAN, WAN, and WAN6 (pretty much default) with the following settings:

/etc/config/network

config globals 'globals'
        option ula_prefix 'fdd0:a444:2ce9::/48'

config interface 'lan'
        option ifname 'eth0.1'
        option force_link '1'
        option type 'bridge'
        option proto 'static'
        option ipaddr '192.168.1.1'
        option netmask '255.255.255.0'
        option ip6assign '64'

config interface 'wan'
        option _orig_ifname 'eth0.2'
        option _orig_bridge 'false'
        option ifname 'eth0.2'
        option proto 'static'
        option ipaddr '192.168.0.2'
        option netmask '255.255.255.0'
        option gateway '192.168.0.1'
        option broadcast '192.168.0.255'

config interface 'wan6'
        option ifname 'eth0.2'
        option proto 'dhcpv6'
        option reqaddress 'try'
        option reqprefix 'auto'

/etc/config/dhcp

config dhcp 'lan'
        option interface 'lan'
        option start '100'
        option limit '150'
        option leasetime '12h'
        option ra 'relay'
        option dhcpv6 'relay'
        option ndp 'relay'

config dhcp 'wan'
        option interface 'wan'
        option ignore '1'
        option dhcpv6 'relay'
        option ra 'relay'
        option ndp 'relay'

config dhcp 'wan6'
        option interface 'wan6'
        option ra 'relay'
        option dhcpv6 'relay'
        option ndp 'relay'
        option master '1'

The interfaces on the LEDE box are getting IPv6 addresses, at least LuCI says:

LAN

MAC-Address: 64:70:02:AA:B8:34
IPv4: 192.168.1.1/24
IPv6: 2001:4c50:dead:beef::1/64
IPv6: fdd0:a444:2ce9::1/64

WAN6

MAC-Address: 64:70:02:AA:B8:34
IPv6: 2001:4c50:dead:beef:6670:2ff:feaa:b834/128
IPv6-PD: 2001:4c50:dead:beef::/64

From the LEDE box itself, I can ping its own IPv6 addresses and the IPv6 address of the cable modem:

root@OpenWrt:~# ping6 -c 1 2001:4c50:dead:beef::1
PING 2001:4c50:dead:beef::1 (2001:4c50:dead:beef::1): 56 data bytes
64 bytes from 2001:4c50:dead:beef::1: seq=0 ttl=64 time=0.341 ms

--- 2001:4c50:dead:beef::1 ping statistics ---
1 packets transmitted, 1 packets received, 0% packet loss
round-trip min/avg/max = 0.341/0.341/0.341 ms
root@OpenWrt:~# ping6 -c 1 2001:4c50:dead:beef:6670:2ff:feaa:b834
PING 2001:4c50:dead:6670:2ff:feaa:b834 (2001:4c50:dead:beef:6670:2ff:feaa:b834): 56 data bytes
64 bytes from 2001:4c50:dead:beef:6670:2ff:feaa:b834: seq=0 ttl=64 time=0.342 ms

--- 2001:4c50:dead:beef:6670:2ff:feaa:b834 ping statistics ---
1 packets transmitted, 1 packets received, 0% packet loss
round-trip min/avg/max = 0.342/0.342/0.342 ms

# Cable modem:
root@OpenWrt:~# ping6 -c 1 2001:4c50:dead:beef:b62a:eff:feab:c57e
PING 2001:4c50:dead:beef:b62a:eff:feab:c57e (2001:4c50:dead:beef:b62a:eff:feab:c57e): 56 data bytes
64 bytes from 2001:4c50:dead:beef:b62a:eff:feab:c57e: seq=0 ttl=64 time=0.777 ms

--- 2001:4c50:dead:beef:b62a:eff:feab:c57e ping statistics ---
1 packets transmitted, 1 packets received, 0% packet loss
round-trip min/avg/max = 0.777/0.777/0.777 ms

From a client (in this case Mac OS X), I cannot reach any of those although it gets IPv6 addresses with the correct prefix:

$ ifconfig en0
en0: flags=8863<UP,BROADCAST,SMART,RUNNING,SIMPLEX,MULTICAST> mtu 1500
	ether 6c:40:08:b8:fc:28
	inet6 fe80::1c9d:db84:cd51:bac1%en0 prefixlen 64 secured scopeid 0x8
	inet 192.168.1.100 netmask 0xffffff00 broadcast 192.168.1.255
	inet6 2001:4c50:dead:beef:8bf:35bd:27c7:a706 prefixlen 64 autoconf secured
	inet6 2001:4c50:dead:beef:4422:71c6:9188:139 prefixlen 64 autoconf temporary
	nd6 options=201<PERFORMNUD,DAD>
	media: autoselect
	status: active
$ ping6 2001:4c50:dead:beef::1
ping6: UDP connect: No route to host
$ ping6 2001:4c50:dead:beef:6670:2ff:feaa:b834
ping6: UDP connect: No route to host
$ ping6 2001:4c50:dead:beef:b62a:eff:feab:c57e
ping6: UDP connect: No route to host

And that's pretty much where I have no idea what to do. Any hints are appreciated!

Cheers,
Jochen

If you only get a /64 from your ISP, you're pretty much out of luck.
However if you do get something more (like /56 or /48), you can configure something like "option ip6assign '60'" for your lan interface and dhcpv6-pd will work for cascaded routers.

Thanks for your reply!

I get a /56 from my ISP and configured the IPv6 assignment length to 60.

Updated block in /etc/config/network:

config interface 'lan'
	option ifname 'eth0.1'
	option force_link '1'
	option type 'bridge'
	option proto 'static'
	option ipaddr '192.168.1.1'
	option netmask '255.255.255.0'
	option ip6assign '60'

I don't know whether or not the last post was the OP's solution, but I have a similar hardware setup and I get a /64 from my ISP. I also have managed to get working IPv6 addressing on all my devices behind the equivalent of the TP-Link router, and here follows the stanzas of the LAN and INET interfaces of my config files. HTH.

/etc/config/dhcp

config dhcp 'lan'
        option interface 'lan'
        option start '100'
        option limit '150'
        option force '1'
        option leasetime '8h'
        option ra 'relay'
        option dhcpv6 'relay'
        option ndp 'relay'

config dhcp 'inet'
        option interface 'inet'
        option dhcpv6 'relay'
        option ra 'relay'
        option ndp 'relay'
        option master '1'

/etc/config/network

config interface 'lan'
        option force_link '1'
        option type 'bridge'
        option proto 'static'
        option ifname 'eth0.1'
        option ipaddr '192.168.0.1'
        option netmask '255.255.255.0'
        option macaddr 'aa:bb:cc:dd:ee:f1'
        option ip6assign '64'
        option dns '192.168.0.1'

config interface 'inet'
        option ifname 'eth0.2'
        option proto 'dhcp'
        option ipv6 '1'
        option demand '0'
        option macaddr 'aa:bb:cc:dd:ee:f0'
        option peerdns '0'
        option dns '192.168.x.254'

config interface 'inet6'
        option ifname '@inet'
        option proto 'dhcpv6'
        option reqaddress 'try'
        option reqprefix 'auto'
        option peerdns '0'
        option dns '2620:0:ccc::2 2620:0:ccd::2'

Thanks everyone for your replies!

After a lot of fiddling around, I think I've got it working with the following configuration:

/etc/config/network

config interface 'lan'
	option ifname 'eth0.1'
	option force_link '1'
	option type 'bridge'
	option proto 'static'
	option ipaddr '192.168.1.1'
	option netmask '255.255.255.0'
	option ip6assign '64'
	option dns '192.168.1.1'

config interface 'wan'
	option _orig_ifname 'eth0.2'
	option _orig_bridge 'false'
	option ifname 'eth0.2'
	option proto 'static'
	option ipaddr '192.168.0.2'
	option netmask '255.255.255.0'
	option gateway '192.168.0.1'
	option broadcast '192.168.0.255'
	option ipv6 '1'

config interface 'wan6'
	option ifname '@wan'
	option proto 'dhcpv6'
	option peerdns '0'
	option reqaddress 'none'
	option reqprefix 'no'

/etc/config/dhcp

config dhcp 'lan'
	option interface 'lan'
	option start '100'
	option limit '150'
	option leasetime '12h'
	option ra 'relay'
	option ndp 'relay'
	option dhcpv6 'relay'
	list dhcp_option '6,192.168.1.1'
	list dns '192.168.1.1'
	list dns '2001:4c50:17e:7780::1'

config dhcp 'wan'
	option interface 'wan'
	option ignore '1'
	option master '1'
	option ra 'relay'
	option ndp 'relay'
	option dhcpv6 'relay'

config dhcp 'wan6'
	option interface 'wan6'
	option master '1'
	option ra 'relay'
	option ndp 'relay'
	option dhcpv6 'relay'
1 Like

As you get a /56 from ISP, I assume that you also get prefix delegation. That is also indicated by your log output:

**IPv6-PD**: 2001:4c50:dead:beef::/64

In that case you should use the normal default "server" mode for odhcpd, instead of the "relay" mode that you currently have. "relay" is meant for situations where ISP gives just a /64 without prefix delegation.

In a normal case, the dhcp part should be simple:

config interface 'lan'
        option type 'bridge'
        option ifname 'eth1.1'
        option proto 'static'
        option ipaddr '192.168.1.1'
        option netmask '255.255.255.0'
        option ip6assign '60'

config interface 'wan'
        option ifname 'eth0.2'
        option proto 'dhcp'

config interface 'wan6'
        option ifname 'eth0.2'
        option proto 'dhcpv6'

And network ip6assign should be 60 for lan, so that possible downstream routers can still do prefix delegation...

To me it looks like you have made things overly complex and have also other unnecessary options there.

Of course, it is possible that

  • your ISP misbehaves and you do not get all necessary info (like DNS ipv6 server address) in the RA message, or
  • your modem misbehaves and does not allocate more than /64 for the LEDE router. (you might look into modem settings and see if that provides a setting for downstream prefix width selection.

That's the problem. The ISP cable modem/router only provides a /64 subnet to the LEDE router and unfortunately there's no configuration setting to change that prefix size.

I've already contacted the support of my ISP about that but, as expected, they're a bit slow to respond.

Many thanks to sharing it

Just use the LEDE box as access point and let the Technicolor do all the IPv6 assignments.