> veering slightly from the topic (typical setup for a server host would
> not be to use DHCPv6 but just statically route another block - usually a
> /56 or /48), but...

I don't doubt this is typical for serious network operators. But I
would counter that for every user who is in a position to request a
statically-routed /48 there are dozens if not hundreds of us who have
one /64 at home and another /64 on each of our VPSes.


> (to request a prefix be routed to you, you need a DHCPv6-PD client,
> not a server)

Oops, correct. I was thinking "DHCPv6 daemon" when I typed it. The
point is that configuring all those subnets and static routes is an
awful lot of extra work when all I want to do is set up a VPN proxy.


> why when people are looking for dhcpv6 software do they always find that
> unmaintained-for-years run-the-whole-lot-as-root wide-dhcp6 thing?
>
> use dhcpcd if you want a client that can do DHCPv6. the most recent release
> was a couple of months ago, it's sensibly written, uses pledge where possible,
> and has decent privilege separation for the parts which can't pledge).

Noted. I'm betting the reason people keep finding wide-dhcpv6 is that
it is the only result for "pkg_info -Q dhcpv6". I used to search
package descriptions at https://openports.se but that site is now
defunct. It would be great if pkg_info could search descriptions as
well as names, but so far none of the ideas that I think would be great
hold much appeal to anyone else.


> picking one other bit..
>
>> I would also suggest comparing the "hackiness" of NDP proxying to the
>> hackiness of NAT, which is how we solve this same problem in IPv4.
>
> it might be how some people solve it for v4. others solve it in a non-hacky
> way which is exactly the same as the non-hacky way for v6; put the vpn clients
> on a different subnet that's routed to the vpn gateway.

I would note here that "some people" includes the OpenBSD FAQ. See:
https://www.openbsd.org/faq/faq17.html#clientikev2

In any event, most of us can't readily get extra publically-routable
IPv4 subnets. According to Google a /24 costs about $9000 right now. I
could make do with a /28 since I only really want to connect three
servers at a time, but how do I get the /28 routed to my server? Either
I track down an ISP that provides these directly or else I have to set
up BGP. All this to connect my laptop to a VPN proxy server! Most
people use NAT for IPv4 because that's all most people can afford.


Maybe I'm missing something here. Why is NDP proxying considered so
distasteful? Can it cause technical problems down the road? I can see
how cycling the client through temporary addresses gets complicated and
has a lot of moving parts, but NDP proxying involves making a change to
the routing table (which iked already has to do whenever VPN clients
connect and disconnect) and its only effect (as I understand it) is
announcing to nodes on the local link that the VPN tunnel host is a
suitable destination for the address in question.

Consider the laptop-connecting-to-home-VPN-from-coffee-shop use case.
Suppose my home network is a /56 and I allocate a /64 for address
assignments to VPN clients like that laptop. Now: how do I make sure
that traffic on my local network which is destined for the laptop
actually gets sent to the laptop? Am I supposed to configure static
routes on all of the nodes on my home network that the laptop might
want to communicate with? That doesn't sound right. I'm guessing the
right way to advertise an entire subnet is with router advertisement
messages, so I would want to configure rad to support this. But that's
still a whole other thing to configure. So instead of using neighbor
advertisements to direct two or three addresses at a time to the VPN
proxy host, I'm using router advertisements to direct a whole subnet to
it---which seems reasonable if I could justify the hassle of getting
that whole subnet configured and advertised properly, but again, that's
a *lot* of trouble.

I recognize that there are other ways to get my individual use case to
work without requesting changes to iked. If I don't expect to have more
than 16 simultaneous connections, I could constrain iked to allocate
addresses from a /124 subnet and add those 16 addresses to the NDP
proxy list at server startup to get the equivalent of static routing
while still not having to reconfigure the ISP's (or hypervisor's)
router. But I would consider *that* to be hackier, because now I really
am using NDP to advertise a subnet instead of just advertising the
addresses that are actually in use. The other option I have on the
table is a shell script that runs as a daemon with root privileges,
monitors /var/log/daemon for IKEv2 connection and disconnection
events, and runs ndp -s and ndp -d appropriately. But if you thought
wide-dhcpv6 was bad for not being privilege separated, you'd hate my
shell script. And I would too! That's the point. This is something iked
could do automatically.

I'm still trying to understand why everyone's take on this is that I
need more subnets. It would be one thing if NDP proxying wasn't already
supported in OpenBSD. But this functionality is already there. It
solves the problem perfectly. And it makes it possible to set up an
IPv6 proxy VPN after configuring and enabling only one additional
daemon (iked) on both the client and the server---no dhcpv6, no rad,
and no static routes provided by the ISP. You can just drop it on any
random OpenBSD host and you're good to go---it's as easy to set up as
SSH! The only thing making it difficult is the manual configuration of
NDP proxying.

Suppose a lot of people start asking questions about how to best to
extend the "road warrior" proxy concept to IPv6. Now the question is
"frequently asked" and the time comes to update the FAQ I linked to
earlier. What should OpenBSD's official advice be to people who want
to set up an IPv6 VPN proxy? Is the official advice going to be, "For
IPv6, you should either use NAT like with IPv4 or you should get a
statically-routed /56 subnet and start installing static routes all
through your network"? Or should it instead be: "For small networks,
you can set up a VPN using iked.conf alone"? It really seems like the
latter approach makes more sense. What am I missing? Why is going out
and getting a larger subnet from my ISP a better way to connect a
laptop to my VPN than just proxying the neighbor solicitations?


Thanks,
Anthony Coulter

Reply via email to