-
Notifications
You must be signed in to change notification settings - Fork 237
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
DHCPv6 proxy prefix delegation/address assignments #546
Comments
@jkroonza: Thanks for this ticket! @paulusmack: What do you think? |
I have very little experience with IPv6, sorry. What you suggest sounds OK. I don't know really why having a DHCPv6 proxy outside of pppd will end up more complicated than having it inside pppd, but I take it that you know what you're talking about here. Possibly seeing the actual code would help with that. |
No problem. Client side perspective is easy enough. The problem stems from the fact that we need to bind to each ppp interface separately, both for the multicast address as well as the response address. This can be done externally by monitoring new interfaces being added/removed, or possibly by signalling from ipv6-up/down. It just gets a lot more complicated and it's easier if we can avoid that complexity. Much of this is still exploratory regardless, I might well when I get started change my mind again, so this is asking for opinions to influence my own as much as technical guidance. The advantage of in-pppd is that we "cannot go out of sync", and a simple "dhcpv6proxy ..." option means we bind the ports on the ppp interface itself, and just proxy to the relevant address after possibly adding option 82 based on remotenumber for example, or if radius provided PD attributes, simply responding with the relevant PD. For things like "active ethernet" tools like KEA (ISC) is perfectly workable already, but it really struggles with dynamic interfaces, and I cannot get it to not crash. Also very non-responsive upstream in my experience, which is why I was considering following the proxy route to begin with. |
Hi,
I've looked a bit into how to best handle IPv6 requests here.
KEA (ISC replacement) DHCPv6 server is perfectly capable of issuing prefix delegations, and maintaining persistence and all of than, but it really, really sucks at dynamic interfaces. It's probably OK if you only have a handful of connections, but we had extreme problems just to get it configured in this way.
I then started on a DHCPv6 proxy (yes, there were existing ones, none of which has active maintenance), but then realised that getting PD delegations and all that into radius, whilst it can be done externally, it would overall be simpler if we can build the DHCPv6 proxy (which also knows how to handle radius IPv6 static assignments and delegations) straight into pppd.
I've started playing in https://github.com/jkroonza/dhcpv6-relay towards a standalone relay, but the complexities involved with not being part of the pppd daemon is tremendous once radius interactions becomes involved.
Using strace the pppd daemon sits mainly in this system call.
In this case fd 8 is a pipe whilst 10 and 12 are /dev/ppp. The write-end of the pipe is at fd=9 and I suspect this is to enable signals to interrupt the select.
This will likely result in work on top of #544 where the function to add/remove the default route will start accepting a specific prefix. This can happen before #544 but has the obvious rebasing caveats.
It looks like it's fairly trivial to add a file descriptor using add_fd to this set of descriptors, but I see no obvious way to associate an event handler with this file descriptor.
Would the following set of PRs (or commits in a single PR) be acceptable?
The text was updated successfully, but these errors were encountered: