Skip site navigation (1)Skip section navigation (2)
Date:      Sat, 25 Aug 2012 14:45:47 -0600
From:      Jamie Gritton <jamie@FreeBSD.org>
To:        curtis@occnc.com
Cc:        freebsd-jail@FreeBSD.org
Subject:   Re: IPv6 multicast sent to jail
Message-ID:  <5039397B.7050205@FreeBSD.org>
In-Reply-To: <201208252015.q7PKFVVi009920@gateway2.orleans.occnc.com>
References:  <201208252015.q7PKFVVi009920@gateway2.orleans.occnc.com>

next in thread | previous in thread | raw e-mail | index | archive | help


On 08/25/12 14:15, Curtis Villamizar wrote:
> In message<503402FE.9080103@FreeBSD.org>
> Jamie Gritton writes:
>
>> On 08/19/12 11:35, Curtis Villamizar wrote:
>>> I'm trying to run isc-dhcpd using dhcpd -6 in a jail.  No luck.
>>>
>>> The following code is run in the jail and doesn't fail.
>>>
>>>           if (inet_pton(AF_INET6, All_DHCP_Relay_Agents_and_Servers,
>>>                         &mreq.ipv6mr_multiaddr)<= 0) {
>>>                   log_fatal("inet_pton: unable to convert '%s'",
>>>                             All_DHCP_Relay_Agents_and_Servers);
>>>           }
>>>           mreq.ipv6mr_interface = if_nametoindex(info->name);
>>>           if (setsockopt(sock, IPPROTO_IPV6, IPV6_JOIN_GROUP,
>>>                          &mreq, sizeof(mreq))<   0) {
>>>                   log_fatal("setsockopt: IPV6_JOIN_GROUP: %m");
>>>           }
>>>
>>> where All_DHCP_Relay_Agents_and_Servers is defined as "FF02::1:2".
>>>
>>> Later dhcpd binds to *.517 which can be seen in netstat -an.
>>>
>>> Packets to ff02::1:2.517 are seen on the jailer (as opposed to the
>>> jailee) using tcpdump, but no packets are received by the jailee.
>>>
>>> When the same command from the jailer using a chroot to the jailee
>>> directory, the multicast packets are received.
>>>
>>> Is there a solution to this other than changing the jail from an
>>> implied "ip6=new" with a specific address to "ip6=inherit".  What I'd
>>> really like is a yet to be invented "ip6=new+multicast".
>>>
>>> Using "ip6=inherit" would be OK, adding very little exposure (mostly
>>> DoS attack exposure).  It would be nice if "ip6=inherit" were
>>> supported in the rc.d/jail framework.
>>>
>>> Before I go changing anything I'm asking whether allowing the
>>> multicast join and then not passing multicast to the jail is
>>> considered a bug and how it should behave (the join should have failed
>>> or the packets should have arrived).  If the best workaround for now
>>> is "ip6=inherit" would adding jail_<jailname>_ip[46] variables to the
>>> rc files be viewed as a good solution (with a comment in
>>> /etc/defaults/rc.conf indicating that the interaction between setting
>>> addressing using _ip and _ip_multi and setting _ip4 or _ip6 (setting
>>> an address for each family forces "ip[46]=net" for that AF.
>>>
>>> Curtis
>>
>> Offhand, it does sound like a bug. I imagine the solution would be to
>> reject the join - at least the easy solution to be done first until
>> something more complicated can be done to make jails play nice with
>> multicast.
>>
>> - Jamie
>
>
> Jamie,
>
> Certainly not the preferred solution.  Best would be a
> jail.allow-ipv6multicast sysctl variable with rejecting the join if 0
> and accepting the join and passing in multicast if 1.  Same for v4,
> though not of immediate concern since DHCPv4 doesn't need it.
>
> If you (or someone) would like to point me in the right direction, I
> would be willing to put some time into learning the relevant code and
> proposing a fix.  No promises, but I can put some time into it.  Off
> list if you prefer.
>
> Curtis

It'll have to be someone besides me - I don't know enough about
multicast myself to be able to do more than keep it out of jails.

- Jamie



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?5039397B.7050205>