DNS
DNS Overview
In this episode, Wes and Don discuss how to obtain information from a DNS server with the NSLookup command. They explain the different modes interactive and non-interactive that an administrator can use and what these modes are used for.
0h 23m
Welcome to ITProTV.
I'm your host, Don Pezet [CROSSTALK]
[MUSIC]
You're watching ITProTV.
Welcome back to another
exciting episode here at ITProTV.
I'm your host, Wes Bryan, and today, we've
got a really good subject coming at you.
We're gonna be talking about one of the
most important services on the Internet
that really makes us get
around the Internet.
And joining me in the studios today for
that topic is none other than Mr.
Don Pezet.
Don, how are you doing sir?
I'm doing great, Wes.
Ready to dive right back into DNS.
In this episode, we're moving on
with our command line utilities,
some of our utilities
that we can use with DNS.
And in this particular episode,
we're gonna look at nslookup,
which is probably one of the most useful
command line utilities when it comes to
working with DNS.
Anytime you're doing
configuration changes,
anytime you're putting entries in, we
need to be able to verify that they work.
You need to be able to test to make
sure that our names are resolving, and
that's where nslookup comes in.
So, just a real brief
synopsis on nslookup.
The name stands for name server lookup.
Just a command line utility that we can
reach out and it talks to DNS servers, so
that we can recreate the queries that
all of our other servers are doing in
the background.
Nice thing about nslookup, it's present
on Windows, Linux, Unix, MacOS.
Pretty much every system these
days has nslookup baked in.
And to be honest with you,
I can't remember the last time that I
encountered a system that didn't have it.
There's some of those really stripped
down Linux distros that might not have it
installed by default, but you can throw it
right on there pretty easily through one
of the repositories and have access to it.
The other nice thing about nslookup
is the command line syntax
is pretty much identical between
all the operating systems.
So, if you know how to use it on Windows,
then, you know how to use it on a Mac.
And if you know how to use it on a Mac,
you know how to use it on Unix and Linux.
So, it's all kinda tied together and
that makes this one really robust.
So, that's what we're gonna take
a look at right here in this episode.
All right, so, enough talking about it.
All right, let's get in here and
take a look and see it.
You know you have nslookup, well,
it's actually pretty easy to see.
We know we have it in pretty much
every operating systems out there.
You can just run it and see.
If you don't have it for some reason,
which really would just be like kind of
some Linux distributions that
might not have it, most of us,
we should have this, no big deal, right?
But if you just run it, what you should
see is basically what I got right here.
It's gonna jump in and you should end up
with a greater than prompt like that,
all right?
What I just did is I entered what's called
the interactive command line for nslookup.
So, once I'm in here, I'm technically
still in the nslookup utility.
And now,
I can start running commands against it,
as many commands as I want, all right.
But for most of us, we're not gonna
go with the interactive mode.
We're going to stick with
the non-interactive mode,
where we run a command, it does what we
ask it to do, and then it's done, right?
It just gets in, gets out,
and in, that's it.
So, let me exit out of that,
back to my prompt.
And the non-interactive mode
is the most straight forward.
It is the one I use most of the time.
We're just trying to do something
like simple name resolution.
So, if I wanna find out what the IP
address of the ITProTV website is, right?
What I can do is I can jump in here and
I can just say, nslookup itpro.tv.
And it's gonna reach out to that DNS
server and it's gonna do a lookout, okay.
Now, when it did the lookup, notice I
got this DNS request timed out, right?
Timeout was 2 seconds.
What does that mean?
Well, whatever my main DNS
server is wasn't answering.
And so,
it skipped forward to the next one, right?
I can see that progression
that just happened and
it moved forward to a Google server,
to 8.8.8.8.
Right, so, I hit that one and
that one was fine.
And then,
I was able to resolve my address.
So, I get some feedback about that
query process and what happened.
But it's not terribly detailed, right?
It didn't tell me what it timed out on.
So, what was my primary DNS server?
I don't know.
It also says here that it's
a non-authoritative answer.
Now, remember, with non-authoritative,
that means the server that I asked
didn't actually have the answer for me.
It had to do a recursive lookup
against some other server.
And so, it reached out and talked to other
servers and hid all that from me and
gave me this answer.
When we use the non-interactive mode, you
get a really simplified output like this.
If we want really detailed output
where we see all the different steps,
that's where the interactive
mode comes in.
So, that's a real simple
lookup right there.
You provided a domain name or a host name,
and it gives you back an IP address.
There's really only one other thing we can
do here from the non-interactive mode.
Notice how I get the server that
I did a lookup against, right?
I can override that server.
I can say instead of looking
up against 8.8.8.8, maybe,
I wanna lookup against 4.2.2.1, all right?
And when we do that,
we're overriding the server.
Now, why would we wanna do that?
Well, have you ever made
a change to a public DNS record?
So, if you go on GoDaddy or
Hover or Register,
or whatever it is that you
purchase your domain name.
You log in to the website and
you make a change to an A record.
The real message it'll say, this could
take up to 48 hours to take effect.
But what does that mean?
In computers, what takes 48 hours?
Well, your change actually takes effect
immediately, right the moment you do it.
But people around the world will cache
your DNS record and they can cache it for
up to 48 hours.
So, that's why they warn you about that.
Hey, it can take up to two days for
everybody to purge their cache and
learn your new address.
So, if you ever wanna see how
far you've propagated out,
you might do what I just did.
Do a lookup against Google server.
Do a lookup against Level Three server.
Do a lookup against your ISP,
other people's ISPs and
see whether they've received the change
already or not, and you'd be surprised.
It's a rare change that takes more than
like an hour to propagate out these days.
Don, now, when you said override,
is that taking the interface assigned
DNS server and saying,
hey we're not gonna use this.
We're gonna use the IP address of
what you've just put there at the end
of nslookup?
Yeah, on Windows,
it's whatever DNS server you have
assigned to your network adapter.
If you're running Mac or Linux,
it's whatever DNS servers
are in your resolve.com file.
So, that's what a stuff's defined, and
that's all nslookup does is
it looks up those things.
I guess, important thing to mention
here is that some operating
systems have a DNS cache built in to them,
right?
Windows has it, it's super annoying,
where [LAUGH] Windows will do a lookup and
it will cache a record.
And then,
when you go to browse that webpage again,
it doesn't actually go
out to the DNS server.
It just uses its own cache, right?
This is where the whole
40-hour thing comes in.
So, if we wanna override that,
well, in Windows,
some of you guys might be
familiar with the command.
Let me show you.
It's ipconfig /flushdns and
that will wipe your DNS cache, right?
Well, nslookup doesn't use
the DNS cache in Windows.
So, it's actually bypassing that cache.
Now, the reason I bring that up is
you might fire up a web browser, and
try and go to web page,
and you can't get there.
And you drop to a command prompt and
use nslookup, but it show us the right IP.
And the problem is that Chrome,
Firefox, Internet Explorer,
whatever, might be using the DNS cache and
NSlookup isn't.
And so, they have two different records.
That's where you might have
to flush the cache here.
But nslookup does not use
the DNS cache on your system.
So, if you want just a quick
answer from a DNS server,
you can just use nslookup, you said,
in the non-interactive mode.
Now, you mentioned that term
interactive mode, you said,
that's where the actions at.
Tell us a little bit about that, Don.
All right, so,
pretty limited options here, right?
I can provide a host name or DNS name and
I can override the server, and
that's really about it.
But if we get into the interactive mode,
there are a ton
of options that we can jump in there and
start to manipulate it and change.
So, if I just run nslookup by itself,
that's gonna take me
into that interactive prompt and
I'll get my DNS timed out again.
[LAUGH] So
i'll just switch over to the other server.
So, anyhow, once I'm in there, now, I
could start to change the way things work.
If you just do a question mark, you'll get
a list of all the different commands and
things that we can put in there.
And right off the bat, you'll notice
that you can do a lookup for a name or
a host name just by typing it in.
So, I just type in whatever that name is.
Type in ITProTV and it will resolve it.
But then, there's all these
set options that we can do.
To override the way that
things are working.
And way down here we'll see where
we can set the server also.
So earlier I was overriding
the server from the command line.
From here, anytime I do a look up,
right now it's using 8.8.8.8, right?
So if I do a look up for
itpro.tv It's using 8.8.8.8.
But if I do server 4.2.2.1, right?
Now it's changing my resolver.
I'm now changed over to 4.2.2.1,
and every look up I do from here on out,
it's gonna do against that resolver.
So if I look up itpro.tv.
There we go, it ran it, and
it ran it against 4.2.2.1 and
I didn't have to tell it.
And then I could jump in and say cnn.com,
and there it goes, again off of 4.2.2.1.
If I do a server, let's see 8.8.
What's the other one, 8.8.4.4?
4.4
That's it, the other Google one.
There we are,
I'll switch to the other Google one.
And now I can run that lookup for
itpro.tv, and
there it goes doing that lookup.
And it didn't make me have to
provide the server every time.
Now Don, with all those options,
who are the demographic?
Who would really be using this with all
those, all that flexibility and power?
All right, so an end user or
a Help Desk technician might use the basic
NsLookup just to test DNS resolution or
to find out the IP of a host, all right?
But beyond that,
it's really gonna be DNS administrators.
If you're administering a DNS server,
NS lookup has some incredible features in
it that will let us
troubleshoot the server.
Let me just give you an example.
So there are some denial of service
attacks that can be pulled off against DNS
servers using TCP.
And so you might decide to block TCP and
only allow UDP
lookups against your server, or vice
versa, you might want to go the other way.
So maybe you configure your server to only
answer on UDP, or only answer on TCP.
How do you test that?
Well, in NS lookup, let me just
do that question mark again, or
actually you can do,
well there's a few ways.
I'll do the question mark.
If you look,
there's all these set OPTIONs in here.
And if you look at the set OPTIONs,
and kinda look down at the list,
you'll see where you can override
all sorts of different things.
How you do the transfer, the class, the
type of query, the timeout, the domain,
the search list.
And just all sorts of really
interesting things here to tweak.
And so, you can see how you're
talking to that server.
One of my favorite options
is this debug option.
The debug option gives you a ton of
output about that lookup, right?
Let me show you that in action.
I'm gonna do a lookup for itpro.tv.
Very simple, I get the server that
I do the look up against, and
then I see the host name and the IP
address that I got back, and that's it.
It was non-authoritative so I know other
stuff happened in the background, but
I don't see it, all right?
Let me just clear a little bit of this.
And what I'm gonna do now,
is I'm gonna say, set debug, all right?
Set debug, that turns on the debug mode.
And now I'm going to get
a very verbose output.
When I do a look up for itpro.tv,
I get a lot more information.
Look at all this, right?
I do see that I reached out
to google server 8.8.4.4,
and then here's my answer that came back,
right?
I got a header.
I got a query, is what I performed.
I got no error on the query.
Sometimes you can have
a malformed query and
it'll show up if there
was an error right there.
I can see there was a response.
We wanted recursion, and
recursion was available.
This server didn't have the answer so
it's gonna have to go somewhere else.
I see I sent one question.
I got one answer.
And I guess this is kind of off my
screen here, but authority record 0.
We didn't have the record for it,
we had to go somewhere else, right?
And then,
here's the question that I asked, and
here's the answer that I got with a ttl,
and how long it took.
So it's laying all that out for
me, and kinda putting it in here.
And as I look at it, if you see a little
bit here as far as like a four A record,
which should be IPv6.
We actually don't have one,
and so this came back empty.
But it looks like I did IPv4,
as well as an IPv6 look up for
that host, for itpro.tv.
And that's cuz I'm on Windows,
not every operating system does that.
Now Don, right there in that last bit
of output you've talked about in other
episodes, about the start of authority.
Is that what we're seeing,
the authoritative information for
this response?
Absolutely, so ITPro.TV,
if I remember right,
that domain is registered with
a registrar called Hover.com.
And so if I were to do a lookup
against Hover's DNS servers,
then I would get
an authoritative response on it.
But if I ask any other
DNS server on the planet,
it's not gonna be authoritative, right?
It's going to have to send that
query up through the tuple,
the domain chain, right?
So it's gotta start at a root hint server,
and it's gotta find the servers for
.TV, right?
TV's a country code, so it's gotta go and
find that country code and
who manages that.
And once it finds that, then it can find
where the actual SOA for ITPro.tv is,
and then it can go there to get
the authoritative answer, and
pass that back over to me.
So there's gonna be at least three more
lookups that are kind of on the back-end
of this query that I sent,
assuming it's not cached.
It could already be in the DNS cache for
Google, and they'll respond.
That's the advantage of
using Google servers,
is that they've cached
darn near everything.
So you can get those
responses back really quick.
All right, so that's debug.
With the debug option we saw
a lot of good output but
there are a lot of things that
you don't necessarily see, and
we'll see other utilities later on
that will let us see even more.
But there's another thing that I find
kind of useful in the Windows world.
Windows, if you have a Windows
machine joined to a domain,
you'll have a default suffix list.
So when you do a search for
a single name, it will append onto
the end of it what your search list is.
So for example,
if I have a domain called domain.net.
And I do a lookup for ITPro.tv,
the lookup might actually get
formed as ITPro.tv.domain.net.
It sticks it on the end,
which is kind of annoying.
And so you'll notice in my set options
that we can do this enabling and
disabling of the search, right?
That's the suffix list.
And do we wanna search this list or not?
Do I just wanna search for what I typed?
Or do we wanna add the search
list to the end, right?
You can do the same thing with recursion.
So maybe I don't want to do recursion.
Either this server is gonna have
the answer I want, or they're not.
Now by default that's on.
We ask for recursive quarries, right?
So set recurs is the default.
So me entering that in is
gonna have no effect, right?
But if I do set norecurs, now I'm
disabling recursive queries, right?
And if I do a look up against Google for
example, my debug is still on.
I'm gonna do a set nodebug.
All these set commands, to turn them on,
you do set and the name of the command.
To turn them off you do set, and
then no followed by the command.
The part I always forget,
cuz I'm from the Sysco stuff, I always
forget to leave the space out, right?
It does need to be nodebug all one word.
If you put the space in there,
it doesn't work.
So I just turned that off.
But if I do a lookup now for
itpro.tv, it's gonna reach out.
And see how I got can't find itpro.tv,
server failed?
It worked a minute ago.
Why isn't it working now?
Well, because I turned off recursion.
If I do a set debug.
And I redo that look up,
I can look in here and
I can see I got a code that
said server fail, all right?
I ask one question, I sent it there, but
not notice I've got, I want a response.
Recursion is available but
I didn't ask for recursion.
And so it didn't do it, and
as a result I didn't get the answer,
because I blocked it.
If I do a set recurse and turn that
back on, now I can do that lookup.
And it should work this time, there we go.
So it worked, and if I scroll back,
there's that want recursion,
that's the key part right
there that we're changing.
So I'm manipulating the way
the query actually runs.
And that's very powerful.
Because if you're trying to test,
is your SOA working?
You could point to the SOA server,
and you would wanna turn off your
recursion there and make sure you
are getting the authoritative
answer right from that server.
All right, other things we can do here.
Let me turn off some of this
stuff that I've got on.
So I'm gonna do a nodebug and
I'm gonna set recurse back on.
All right, when I did my lookup for
itvpro.tv and I had debug turned on,
you saw where I asked for an a record and
a fora record, IPV4 and IPV6.
When you do a lookup, and
we don't have an IPv6 record for ITProTV.
So let me pick somebody who does,
like Google.
If I do a lookup for Google.com,
right, I get all their addresses.
And notice here's IPv4 addresses and
an IPv6 address.
It looked up both.
But you can manipulate that.
If you look at all the set
commands that we can run,
one of the set commands is type.
And there's actually an old
format which is Query Type.
It's actually the same thing,
just more typing.
So if you type equals you
can tell it exactly what
kind of record you're looking for.
So if I do a set type equals A,
I'm only going to look for the A records.
And now when I do Google dot com I
don't get the IP B six record, right?
Likewise, I could say set type=AAAA.
And now when I query Google,
I only get the IPv6 record, right?
Now I'll be honest with you guys,
I don't do this one very often
because I normally want both., right?
But where I use this are other records.
Hey, I wanna find out who's
the authoritative DNS Server for ITProTV?
I don't know, right?
So if I want to find out,
I can set my type to NS to show
me the name server records.
And let me pull that up for itpro.tv.
All right, so I'll punch that in itpro.tv,
and it's going to reach out and
it's going to find out.
Here is the authorised DNS server
where it's supposed to be and
you'll see ours is hosted
in the m zone web services.
So we've got awsdns server
listed right there.
So if I were to look up
against one these guys,
they could give me an authorated
answer for our domain, right?
Because I changed that type,
these records aren't normally shown to me.
I could also do set type=MX, right?
I want to see the mail
exchange records for itpro.tv.
And so I can punch that in.
And now I can see right there.
There's the
Itpro-tv.mail.protection.outlook.com.
It's in Office 365.
So that's an easy way to spot who's using
Office 365, or Google apps for work or
whatever.
I can see those mail exchanger records.
Right there, okay.
Now my favorite set type command is one
that actually I'm not even sure
if it's in the documentation.
Let's see if it shows up.
But it's set type equals all,
enter or any, any or
all is the same thing,
they get processed the same way.
But we can punch that in.
And so if you do a set type=ALL,
now when I do that lookup for
itpro.tv it's gonna return
everything that it can, okay?
And all and any, they work the same way.
So you can punch in either one,
I did all because that's what I'm used to,
any was in the documentation.
But if I look,
I'm getting the name server records.
I'm getting the MX records,
I'm also getting text records down here.
Which are really handy if you working for
like a sender policy framework SPF,
like you're doing anti spam measures and
your DNS record.
You can come and you can see those text
records and see what is my SPF set to and
you will start to see the approved
email servers For ITPro.TV.
You can really get some
good data right in here.
All just by viewing that domain.
And that's a pretty handy thing to see.
All right, let's see what else do we
have in here that we can tinker with?
Let me show an older command.
This one is not incredibly
useful on public DNS servers.
It's the ls command.
The ls command is the list command, and
what you used to be able to do back in the
day when the Internet was very small was
that you could connect to a DNS server and
you could say ls itpro.tv.
And that would say give me the listing for
the itpro.tv DNS server.
Give me everything you've
got in the DNS file format.
And it would output it on the screen in a
file format that you could save as a text
file and load right into bind or
Windows DNS or whatever.
Now you could host that zone.
What you're effectively doing is
what's called a zone transfer, right?
A zone transfer is when we synchronize
a zone between two DNS servers.
They're using the ls command.
You used to be able to do
something pretty much any domain.
Now when you do it,
you'll get the error restricted, right?
Can't list domain server failed.
So, not useful on a public server, but on
a private server, in your own business if
you've got Microsoft Active Directory,
or Bind running on your own Linux and
Unix servers, you might want to
connect up and do a zone transfer.
Connect and download the whole
zone file to back it up.
And that way if you ever lose the server
you've got a backup on the zone file
right here in this ls command.
And you can do ls for
whatever your domain is, right, so
maybe you have like company.com.
And then you can pipe that into a file, so
you might call it company.com.dns
that's the normal file name.
It's just a text file,
call it whatever you want but
most people do end them with dot-dns and
if you're running bind or
Window DNS they actually look for
a file like that for domain.
And I can dump into a file
copy that to a DNS server and
bring that zone right back up
on a new DNS server very easily.
All right, so on private servers
that works if you are approved for
doing zone transfers.
On public servers, you’re not normally
approved for doing zoned transfers.
You at least have to be listed
as a NS record but most of them
actually require you to put it into
some security profile on the back end.
So that's neat command that's there that
just not you really don't see it
really in use all that often anymore.
Because you've gotta be approved, right?
Security is far different in the world
of DNS today than what it used to be.
Don, that's a lot of great information,
in fact now I'm gonna be using that set
command now that I know
it a little bit better.
It does look like we're gonna wrap
this one up soon, but before we do,
do you got any additional
words on using NS lookup?
Any tips or tricks?
There are more commands in there,
and you probably notice like when I did
the question mark there were
a handful like setting the class and
setting route and so on.
Those are useful in very,
very few scenarios.
Class is pretty much useless.
There's really only one class these days.
The IN, or the internet class.
The other ones are like the chaos class,
the class, the test class.
Those are all way back in
the early days of DNS, and
they aren't really used anymore.
Other ones like manipulating how
the internet transfers work,
again there's really only
one way in use anymore, so
there's not really a reason
to override those.
Root can be kind of handy, if you're
overriding the root hint servers on
the internet, if you're not using those,
you can connect to any server and
use the set root command.
To flag it as the root and
you won't use root hints anymore.
Everything will go
against that one server.
Not something I've ever had to use
in production, but it is there.
So the commands that I
didn't show are ones that
just we're not really gonna use that much.
There's the search list command,
where you can create
a suffix search list if you want,
right there inside of NSLookup.
We've usually already got
that defined on our systems,
we don't necessarily need it there.
And then timeouts and retries.
You can override the timeout time and
the retry time.
They're the amount of retries,
and the interval of the timeout,
to use the right terminology
to kinda manipulate those.
Again, less common use scenario.
What we saw through the whole beginning of
this is really kinda the important meat
and potatoes of NS hookup.
Well, Don, that's a wealth of
information and we appreciate it.
We appreciate the viewers, so we're gonna
go ahead and sign out here at ITProTV.
I've been your host, Wes Brian.
And I'm Don Pozet.
And we'll see you next time.
[MUSIC]
Thank you for watching, IT Pro TV.
[BLANK AUDIO]
Overview
This series explores the practical application of DNS, the Domain Naming System. We demonstrate using DNS records to support websites, mail servers, and other services. Other topics addressed include DNS security, replication, and popular server software including BIND and Microsoft Windows DNS.
Learning Style
On Demand
Length of course
13h 25m
28 Episodes
Here are the topics we'll cover
- DNS Utilities
- Configuring Host Records
- Configuring Email Services
- Public Domains
- Configuring Zones
- Zone Replication
- Microsoft DNS Server
- BIND DNS Server
- Unbound DNS Server
Learning Options