> I have setup a OpenSuse 11.1 server with DNS.
>
> When I try to nslookup a host an error appears:
>
> nslookup hostx
> ;; Got recursion not available from 192.168.99.26, trying next server
> Server: 192.168.99.126
> Address: 192.168.99.126#53
>
> Name: hostx.xx.xx.local
> Address: 192.168.99.41
>
> When I setup the /etc/resolv.conf with one nameserver no problem…
Do you have “recursion” disabled (recursion no;) in named.conf at
server “192.168.99.26”, by any chance?
If yes, try commenting that line (# recursion no;), restart named service
(rcnamed restart) and try “nslookup” again.
> We use OpenSuse 11.1 and there is no named.conf…
Is server at 192.168.99.26 running opensuse? :-?
If no, whatever dns server is installed there has to be confired to disable
recursion. But unless you are the admin of that server, there is noting you
can “directly” do
> The problem is on an OpenSuse client 11.1 the DNS server is on an
> Windows 2003 server.
So openSUSE has no problem at all
openSUSE is acting as client, not server, so the “problem” is on w2003 dns
server. You have to look there.
If you run that same lookup query on a windows computer
using “192.168.99.26” as dns server, you should get the same response
(“recursion not available”).
> I only have the problem on two OpenSuse 11.1 clients.
That’s interesting.
Are you sure these 2 clients are using the same dns server configuration
and making the same query than the others? All computers should receive
the same answer.
> Is it possible to disable recursion on OpenSuse 11.1??
On client side? I don’t think so.
Of course, to perform a query with “nslookup” you can try “nslokup -norec
hostx” and see what happens (if dns server has no record for that query, it
should stop with an error similar to “cannot find the server… no
answer”).
But that message you are getting is not an error “per se”, is just an soft
warning telling you the server you are querying has not enabled that option
and so, jumping to the next dns server available.
Just a brief explanation on what recursion in a server means. If a server receives a request for a domain it is not authoritative for, and recursion is enabled, it will behave as client and get the answer for that domain and return the answer to the original client. This is the normal behaviour for DNS servers that are meant to act both as server for a domain and as a DNS proxy.
You have to ask your sysadmin why 192.168.99.26 has recursion disabled. One reason could be that it’s not meant to be queried directly by clients, i.e. not meant to be a proxy, and that it’s there only to serve requests to other resolvers, perhaps for example 192.168.99.126. In that case, 192.168.99.126 would pass requests to 192.168.99.26 or outside servers. In this case 192.168.99.26 doesn’t get queries for other domains.
So maybe you shouldn’t be using 192.168.99.26 in /etc/resolv.conf.
Maybe you are just not seeing the warnings from the resolver stub libraries on the other clients.
Both DNS servers have no Internet connection because they are used internally.
In that case you should not have recursion turned on. However it also means you should not be sending requests for non-internal domains to it in the first place. The correct way to do it would be to install a resolver that does recursion and point your clients to that, and let this resolver recursively query either your internal server or the Internet.
However if neither of your two DNS servers has Internet connectivity, how are you resolving external domains?
I have the same problem even when .126 is the first host in /etc/resolv.conf.
Try nslookup with -d2 to turn on debugging to see what it is doing.
But if you ask for an external domain, say openSUSE.org in your Linux client, it will ask your DNS server to recurse to find the address. This is where the recursion comes from. It’s not the fault of your Linux client, because it has no idea that it is not supposed to ask for an external domain, or even which domains are external. So you’ll have to live with the warning from the DNS server.
setup_system()
create_search_list()
ndots is 1.
copy_server_list()
make_server(192.168.99.26)
make_server(192.168.99.126)
lock_lookup dighost.c:3276
success
start_lookup()
setup_lookup(0xb8037688)
resetting lookup counter.
cloning server list
clone_server_list()
make_server(192.168.99.26)
make_server(192.168.99.126)
trying origin xx.yy.local
recursive query
add_question()
starting to render the message
done rendering
create query 0xb7929010 linked to lookup 0xb8037688
create query 0xb79291a8 linked to lookup 0xb8037688
do_lookup()
send_udp(0xb7929010)
bringup_timer()
have local timeout of 1
working on lookup 0xb8037688, query 0xb7929010
sockcount=1
recving with lookup=0xb8037688, query=0xb7929010, sock=0xb792b008
recvcount=1
sending a request
unlock_lookup dighost.c:3278
lock_lookup dighost.c:2102
success
send_done()
sendcount=0
check_if_done()
list empty
unlock_lookup dighost.c:2131
recv_done()
lock_lookup dighost.c:2789
success
recvcount=0
lookup=0xb8037688, query=0xb7929010
before parse starts
sending query 0xb79291a8
send_udp(0xb79291a8)
bringup_timer()
have local timeout of 5
working on lookup 0xb8037688, query 0xb79291a8
sockcount=2
recving with lookup=0xb8037688, query=0xb79291a8, sock=0xb792b168
recvcount=1
sending a request
;; Got recursion not available from 192.168.99.26, trying next server
clear_query(0xb7929010)
sockcount=1
check_next_lookup(0xb8037688)
still have a worker
unlock_lookup dighost.c:3022
lock_lookup dighost.c:2102
success
send_done()
sendcount=0
check_if_done()
list empty
unlock_lookup dighost.c:2131
recv_done()
lock_lookup dighost.c:2789
success
recvcount=0
lookup=0xb8037688, query=0xb79291a8
before parse starts
after parse
printmessage()
Server: 192.168.99.126
Address: 192.168.99.126#53
printsection()
Name: hostx
Address: 192.168.99.41
still pending.
cancel_lookup()
check_if_done()
list empty
clear_query(0xb79291a8)
sockcount=0
check_next_lookup(0xb8037688)
try_clear_lookup(0xb8037688)
destroy
freeing server 0xb8039a00 belonging to 0xb8037688
freeing server 0xb803a218 belonging to 0xb8037688
start_lookup()
check_if_done()
list empty
shutting down
dighost_shutdown()
unlock_lookup dighost.c:3230
done, and starting to shut down
cancel_all()
lock_lookup dighost.c:3292
success
unlock_lookup dighost.c:3322
destroy_libs()
freeing task
freeing taskmgr
lock_lookup dighost.c:3352
success
flush_server_list()
freeing commctx
freeing socketmgr
freeing timermgr
destroy DST lib
detach from entropy
unlock_lookup dighost.c:3405