[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

exim, local resolver, host name lookups and IPv6



Hi,

Exim has the habit of trying to find out about its host names and IP
addresses when it starts up. This has, in the past, been an issue for
the Debian packages, since a Debian system might be on a
dial-on-demand modem line with expensive costs and thus should not do
unnecessary DNS lookup when the MTA is started. 

A very similiar mail has been on Debian Planet two weeks ago, but I
haven't received responses that got me clued up. Therefore, I am using
the last resort, debian-devel.

I'd like to solicit opinions from people who are more experienced than
me with Unix, the local resolver library including /etc/hosts and
/etc/nsswitch.conf, DNS, and - especially - the customs that apply on
a system running IPv6. 

To avoid the extra DNS lookups, the Exim packages have a Debconf
option to configure exim for "minimal DNS usage", which hardcodes the
hostname into Exim's configuration at package configuration time. This
was necessary since - without this option - exim looks up its own host
name in the DNS even when a completely local operation is invoked.

In some cases, exim still looks up its IP address when a listening
daemon starts up. This is why the Debian installer configures
127.0.1.1 (not 127.0.0.1) for the local hostname on installation,
yielding /etc/hosts files like 

127.0.0.1       localhost
127.0.1.1       myfoo.localdomain   myfoo

# The following lines are desirable for IPv6 capable hosts
::1     ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
ff02::3 ip6-allhosts

However, in the last few weeks I have heard a few cases where exim
does IPv6 AAAA lookups when a listening daemon starts up. An strace
shows a gethostbyname2 call for AF_INET6, and if we want to continue
the line we went in the past, we'd need an IPv6 address for
myfoo.localdomain in /etc/hosts as well. 

I am now wondering how this could be implemented. In IPv4, we have
127.0.0.0/8 available for the local host and could arbitrarily choose
127.0.1.1 to configure the local host name on. In IPv6, there is only
::1, which is a single address. Would it be possible to choose an
arbitrary "link local" address on lo, the loopback interface? Or is
there any better way? 

This being said, I consider the entire 127.0.1.1 business a horrible
hack which is one of the most ugly things I have ever seen. Do we have
a chance to implement this in a more cleaner way, or is it still the
way to go for the distribution, where we don't know zilch about the
environment where an installed system is going to be used?

This issue leads to people adding their local host name to ::1 in
/etc/hosts, which might re-introduce other issues that we experienced
in a phase when we did the same for 127.0.0.1, eventually ending up
with 127.0.1.1, or to disabling IPv6 altogether, which is a bad thing
in a time where IPv6 should be enabled, not disabled. So I'd like to
find a clean solution which could then be implemented in whatever part
of Debian might be responsible. 

I feel that the IPv6 issue is the same that led us to invoke the
127.0.1.1 hack for IPv4, and if the answer to the IPv6 issue is "fix
exim", then _how_ should exim be fixed, and why wasn't the answer to
the IPv4 version of the issue "fix exim"?

Any hints will be appreciated.

Greetings
Marc

-- 
-------------------------------------- !! No courtesy copies, please !! -----
Marc Haber         |   " Questions are the         | Mailadresse im Header
Mannheim, Germany  |     Beginning of Wisdom "     | http://www.zugschlus.de/
Nordisch by Nature | Lt. Worf, TNG "Rightful Heir" | Fon: *49 621 72739834


Reply to: