Consider the following configuration:
- eth0 is non-static WAN[1], eth1 is LAN[2]
- DHCP6 clients should be assigned public ipv6 addresses
- public ipv6 prefix is DEAD:BEEF:F00::/48
- Gateway should only have a single public ipv6 address (let's say DEAD:BEEF:F00::1/48)
- LAN can be restricted to a /64 (let's say DEAD:BEEF:F00::/64)
- (assumption) Local-Link addresses are fine[2]

In such a scenario, I would expect the following configuration to work:

/etc/network/interfaces:
----
auto eth0 eth1
iface eth0 inet6 manual # eth0 does dhcp6/slaac/whatever through ra
    pre-up echo 1 > /proc/sys/net/ipv6/conf/$IFACE/accept_ra
iface eth1 inet6 manual # eth1 only needs link-local, no upstream here
    pre-up echo 0 > /proc/sys/net/ipv6/conf/$IFACE/accept_ra
----

dnsmasq conf (simplified):
----
listen=eth1
enable-ra
dhcp-authoritative
dhcp-range=::100,::400,constructor:eth0
# other options for ntp, dns, etc
----

After all, the prefix is only available on eth0's interface, but eth1 is what's meant to serve its addresses.

However, this does not work, after several RTR-SOLICIT(eth1), dnsmasq logs "no address range available for DHCPv6 request via eth1".

The only way I have managed to get the above scenario working is by assigning a static ip to eth1 in the address range defined in the dhcp-range and setting the constructor to eth1 - suddenly the gateway has two public IPs.

The ironic part is that the clients continue to use the link-local address as the gateway - the IP is not even used.

Is this me being a massive PBCAK, intentional behavior, or a bug?
From what I can tell, there is no reason for dnsmasq to act like this (in the context of ipv6), and there are some massive disadvantages (e.g setting a static ip for eth1 means the whole setup will break whenever eth0's ip changes - something that may be rare, but is definitely possible).

Please advise.

[1]: This is a slight simplification - my ISP does not currently provide native ipv6, so eth0 is actually sit0 (6to4) in all of these examples. This does mean that I have to enter the address manually into sit0 (as automatic ipv4-6to4 conversion is not done) and thus could change eth1's static ip at the same time, I'd rather not repeat myself (DRY is burned deep into my mind). Further, once native ipv6 *is* here for me, the problem will go back to the above state, with no obvious solutions (e.g it may be possible to use ifupdown hooks that inspect the situation and custom ordered ifupdown callers, but this seems like severe overkill for what should be quite simple). [2]: LAN is dual-stack. This (and all sides) is omitted since it (should) have no bearing on the scenario.

_______________________________________________
Dnsmasq-discuss mailing list
Dnsmasq-discuss@lists.thekelleys.org.uk
http://lists.thekelleys.org.uk/mailman/listinfo/dnsmasq-discuss

Reply via email to