Red Hat Bugzilla – Bug 41309
xinetd doesn't have IPv6 not enabled
Last modified: 2008-08-01 12:22:51 EDT
From Bugzilla Helper:
User-Agent: Mozilla/4.76C-CCK-MCD Netscape [en] (X11; U; SunOS 5.8 sun4u)
Description of problem:
xinetd doesn't have IPv6 enabled. That is, it doesn't listen to IPv6
addresses, even though the RedHat Linux kernel is now IPv6-aware and
enabled with init.d scripts.
Steps to Reproduce:
1. Enable a service, such as "daytime" (port 13) as follows.
1a. In file /etc/xinetd.d/daytime, change "disable = yes" to "disable = no"
1b. Restart xinetd: /etc/init.d/xinetd restart
2. See if it's listening to IPv6 sockets:
netstat -an -A inet6 |grep ':::13 '
Actual Results: # netstat -an -A inet6 |grep ':::13 '
Expected Results: # netstat -an -A inet6 |grep ':::13 '
tcp 0 0 :::13 :::*
udp 0 0 :::13 :::*
To enable, add "--with-inet6" to the %configure line in the xinetd.spec
%configure --with-libwrap --with-inet6
This enables xinetd to listen to BOTH IPv4 and IPv6 sockets.
This feature had been enabled in RPMs I built at:
(it also fixes bug 38669)
Not a bug - I didn't enable it because I'm not confident in the way it does it,
and having IPv4 work without problems is much more important.
That said, I'm considering enabling it for now (in Rawhide).
I just learned there's a problem with enabling IPv6 with xinetd. If it's running in a IPv4-only kernel (one with ipv6 not compiled in and the module not loaded), xinetd will start, but it won't listen to anything (IPv4 or IPv6).
One can load the IPv6 module (or compile it in) and IPv4 services will work without any further IPv6 configuration.
So it sounds like the alternatives are:
1. leave things as it
2. xinetd code needs to be a little smarter or
3. the /etc/init.d/xinetd script could dynamically decide whether to load a special
xinetd daemon only when IPv6 is enable.d
This also appears to be a FAQ item at http://synack.net/xinetd/ :
Q. No services start with IPv6! What's the deal?
A. When you compile IPv6 support in, all sockets are IPv6 sockets. If your
kernel doesn't understand what an IPv6 socket is, all attempts to create
sockets will fail, and no services will start. Only compile xinetd with
IPv6 support if your kernel supports IPv6.
In reality, this is just developer laziness. The software could do
1) first check whether ipv6 binding works, if not, use AF_INET for bindings
2) "force" options could be given when starting xinetd, so that if ipv6 is
not available, fallback would not occur (e.g. -6, -4)
3) per-service binding should be controllable, with for example either with like:
- protocol= tcp (default) | tcp4 | tcp6 | tcp46 , or
- family = inet4 | inet6 | unspecified (default)
I suggest you make the above suggestion on the xinetd mailing list
The support is non-trivial to add, so a workaround would be preferable for now; see #49621 for
a possible approach.