While trying to configure mail servers, you might want to verify if your MX records are properly setup. This article will show you how to do MX lookup using command-line interface.
Article Contents
MX Lookup
In case you don’t know about MX record, here is a simple explanation.
MX record is an entry defined in the DNS zone configuration to determine what mail server is responsible for handling domain’s email. For that, you should configure at least one MX record in order to receive email for your domain.
Furthermore, you can add many MX records, where each record should point to a different mail server. It is to handle load-balancing on your email infrastructure. However, it is still fine to have only one mail server.
Using nslookup utility
After adding MX record into DNS zone, you can use the nslookup
utility to verify it.
The syntax of nslookup
for MX lookup is very simple. It is following:
$ nslookup -q=MX DOMAIN_NAME
You need to pass one parameter, -q
to specify which type of nameserver record you want to lookup. In this case, we use MX
for MX lookup.
For example, if you want to lookup MX records for gmail domain, then the command would be:
$ nslookup -q=MX gmail.com
You will see similar results like following:
Non-authoritative answer:
gmail.com mail exchanger = 30 alt3.gmail-smtp-in.l.google.com.
gmail.com mail exchanger = 20 alt2.gmail-smtp-in.l.google.com.
gmail.com mail exchanger = 10 alt1.gmail-smtp-in.l.google.com.
gmail.com mail exchanger = 5 gmail-smtp-in.l.google.com.
gmail.com mail exchanger = 40 alt4.gmail-smtp-in.l.google.com.
The last right column of the result is the MX record you’re looking for. Specifically, those are email servers.
You can also access into nslookup
prompt console to make request. The steps are demonstrated in following console logs:
$ nslookup
> set type=mx
> gmail.com
Non-authoritative answer:
gmail.com mail exchanger = 40 alt4.gmail-smtp-in.l.google.com.
gmail.com mail exchanger = 20 alt2.gmail-smtp-in.l.google.com.
gmail.com mail exchanger = 10 alt1.gmail-smtp-in.l.google.com.
gmail.com mail exchanger = 5 gmail-smtp-in.l.google.com.
gmail.com mail exchanger = 30 alt3.gmail-smtp-in.l.google.com.
> exit
To exit the prompt, just type in exit
, you’ll back to the terminal.
This nslookup
utility is available on most of platforms: Windows, Unix, Linux, BSD, Mac by default, so you don’t have to install it.
Using host utility
Beside nslookup
, there is another utility you can use for MX lookup is host
utility.
Typing the command into terminal, if it’s available you can use it. Otherwise, if you’re on Linux/Unix/BSD, you can install by your install command based on distribution.
Specifically, for Debian-based Linux, ex. Ubuntu, you can use following command:
$ apt-get install host
The syntax of host
utility is as simple as nslookup
.
$ host -t MX DOMAIN_NAME
For example, trying to lookup MX records for gmail domain again using `host`.
$ host -t MX gmail.com
gmail.com mail is handled by 5 gmail-smtp-in.l.google.com.
gmail.com mail is handled by 10 alt1.gmail-smtp-in.l.google.com.
gmail.com mail is handled by 20 alt2.gmail-smtp-in.l.google.com.
gmail.com mail is handled by 30 alt3.gmail-smtp-in.l.google.com.
gmail.com mail is handled by 40 alt4.gmail-smtp-in.l.google.com.
The result should be the same as using nslookup
.
Using dig utility
Another utility that is very useful for MX lookup is dig
. Just make sure it is available on your system.
The way to use dig
is no difference from host
and nslookup
at all. However, dig
provides a pretty much verbose output for nameserver record query.
$ dig -t mx gmail.com
; <<>> DiG 9.10.6 <<>> -t mx gmail.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 9056
;; flags: qr rd ra; QUERY: 1, ANSWER: 5, AUTHORITY: 0, ADDITIONAL: 1
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 512
;; QUESTION SECTION:
;gmail.com. IN MX
;; ANSWER SECTION:
gmail.com. 2104 IN MX 40 alt4.gmail-smtp-in.l.google.com.
gmail.com. 2104 IN MX 5 gmail-smtp-in.l.google.com.
gmail.com. 2104 IN MX 20 alt2.gmail-smtp-in.l.google.com.
gmail.com. 2104 IN MX 10 alt1.gmail-smtp-in.l.google.com.
gmail.com. 2104 IN MX 30 alt3.gmail-smtp-in.l.google.com.
;; Query time: 35 msec
;; SERVER: [REMOVED]
;; WHEN: Wed Jan 09 15:38:03 +07 2019
;; MSG SIZE rcvd: 161
Look pretty much details. However, you can filter to make it output only what we need. Here it is
$ dig +short mx gmail.com
5 gmail-smtp-in.l.google.com.
10 alt1.gmail-smtp-in.l.google.com.
40 alt4.gmail-smtp-in.l.google.com.
30 alt3.gmail-smtp-in.l.google.com.
20 alt2.gmail-smtp-in.l.google.com.
Summary
MX lookup is an easy task and should be well-handled if you’re in charge of mail server configuration or DevOps.
So far, nslookup
is more commonly used than host
and dig
utility, because it’s available by default on many systems.
If you know any other methods for MX lookup, please share with me in comments. I’d love to know !