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

Re: Configuring Exim for mail delivery






I'll assume you have a home network and are trying to connect to send
mails between machines on that network, and additionally be able to send
email to domains outside your network.

That is right ;)

I'm also assuming that you don't have specific domains for your own
machines, so that when you send mail outside you want to use an email
provider such as gmail, or hover, etc.

Also true ;)


I just figured out how to get this working myself a week or two back, so
it's fresh in my mind. The key trick is the use of "hubbed hosts".

Did you follow a specific book or guide?

Exim configuration has the concept of "routers" and "transports".
Routers basically decide what to do with a message, and transports do
it. One of the routers configured by default in the Debian exim
configuration is for "hubbed hosts". What this means, is machines
capable of sending and receiving email ("hosts" in exim speak) that are
on the same LAN as this machine (connected by a "hub"). Note that this
"hub" could be your local home network router, and for these purposes
machines on WiFi and machines on a wired LAN would be considered on the
same hub, even though that isn't strictly true. The point is that
network packets can be addressed directly between the machines, they
don't require a router in between.


As far as i do understand this is that only machines which are defined as hubbed hosts can be send mail in the local LAN? Or am i misunderstanding something here? :)

In Debian, this is achieved with Avahi. This is what allows you, if you
have MachineA and MachineB on your network, to do for example "ping
MachineA.local" from MachineB and expect MachineA.local to be resolved
into an IP address.


I'm not a friend of avahi to be honest, i much rather ignore it :D

In /etc/exim4, create a file owned by root called hubbed_hosts. In the
file, each line maps a "domain" (the part after the @ sign in an email
address) to a "host" (the name of a machine on your network, as it can
be reached from this machine). Put the domain first, then a tab
character (spaces may also be OK) and then the host. So for example I
have a machine on my network called affinity, and so in the hubbed_hosts
file on the machine I am sitting in front of now, I have two lines, one
saying "affinity.local<TAB>affinity.local", and the other saying
"affinity<TAB>affinity.local" (no quotes in the file). This tells the
local exim installation that any email address with @affinity.local as
the domain should be forwarded on to a machine called affinity.local,
and any mail with @affinity as the domain should be forwarded on to a
machine called affinity.local. Exim4 will then say "Connect to
affinity.local!" with no attempt to translate that into an IP address,
and Avahi daemon will answer "that is IP address WW.XX.YY.ZZ!" to which
exim will say "very well, connect to WW.XX.YY.ZZ!" and the exim4 on
affinity will wake up and co-operate to deliver the mail.

I just did that and now mailing works flawlessly :D
Just one questions: Why do i need hubbed_host entries? Should it not be fine alone to make a entry in /etc/hosts for the machines i want to send mail to (I do not operate a dedicated DNS server).
This is something i dont really understand...

If the target email domain is not present in hubbed_hosts, then a
default "smarthost" configuration will fall through the hubbed hosts
router and arrive at the smarthost router, which in my case then tries
to use my mail provider to send a mail to a local machine, which is
doomed to failure because the outside provider cannot see my individual
machines on my local network.

If you really should be using the "internet" configuration, you still
need hubbed_hosts for local mails because whereas the hubbed_hosts
option just leaves it to the local network to figure out what it is
talking about, an internet-configured exim will attempt to find and send
to the target machine. To do so, it will send out a DNS request to
resolve the ip address of the target host. Avahi won't catch this, and
unless you are running a DNS server locally on your network (most people
don't, and many home network routers don't include one) that request
will go out of your network to the DNS server provided by your ISP. That
DNS server, being outside your network, won't be able to resolve your
local machine names and so won't be able to give you back an IP address
to use, unless your target machines are publicly individually visible on
the Internet, which is unlikely if this is a home configuration we are
talking about here.

So the configuration you are after is local domains specified in
hubbed_hosts, and everything else falls through to either a smarthost or
a dns-based attempt to send outside your network.

Hope that helps, let us know if you need more help.

Your explanation helped a lot ;)

Mark



Greets

mo


Reply to: