curl: (6) Could not resolve host: google.com; Name or service not known
LinuxCurlTerminalFedoraLinux Problem Overview
when I try to load a web page to terminal it gives curl: (6) Could not resolve host
error.
I have internet in my PC and trying from my home internet connection. So as I there is no any proxy involve here.
[root@localhost kevin]# curl http://google.com
curl: (6) Could not resolve host: google.com; Name or service not known
clean all
and tried again but no lucky.
But if I use IP instead of the domain name, it works fine.
[root@localhost kevin]# curl http://173.194.46.0
any clue please?
Linux Solutions
Solution 1 - Linux
Issues were:
- IPV6 enabled
- Wrong DNS server
Here is how I fixed it:
IPV6 Disabling
- Open Terminal
- Type
su
and enter to log in as the super user - Enter the root password
- Type
cd /etc/modprobe.d/
to change directory to/etc/modprobe.d/
- Type
vi disableipv6.conf
to create a new file there - Press
Esc + i
to insert data to file - Type
install ipv6 /bin/true
on the file to avoid loading IPV6 related modules - Type
Esc + :
and thenwq
for save and exit - Type
reboot
to restart fedora - After reboot open terminal and type
lsmod | grep ipv6
- If no result, it means you properly disabled IPV6
Add Google DNS server
-
Open Terminal
-
Type
su
and enter to log in as the super user -
Enter the root password
-
Type
cat /etc/resolv.conf
to check what DNS server your Fedora using. Mostly this will be your Modem IP address. -
Now we have to Find a powerful DNS server. Luckily there is a open DNS server maintain by Google.
-
Go to this page and find out what are the "Google Public DNS IP addresses"
-
Today those are
8.8.8.8
and8.8.4.4
. But in future those may change. -
Type
vi /etc/resolv.conf
to edit theresolv.conf
file -
Press
Esc + i
for insert data to file -
Comment all the things in the file by inserting # at the begin of the each line. Do not delete anything because can be useful in future.
-
Type below two lines in the file
nameserver 8.8.8.8
nameserver 8.8.4.4
-Type Esc + :
and then wq
for save and exit
- Now you are done and everything works fine (Not necessary to restart).
- But every time when you restart the computer your /etc/resolv.conf will be replaced by default. So I'll let you find a way to avoid that.
Here is my blog post about this: http://codeketchup.blogspot.sg/2014/07/how-to-fix-curl-6-could-not-resolve.html
Solution 2 - Linux
Perhaps you have some very weird and restrictive SELinux rules in place?
If not, try strace -o /tmp/wtf -fF curl -v google.com
and try to spot from /tmp/wtf
output file what's going on.
Solution 3 - Linux
I have today similar problem. But weirder.
- host - works
host pl.archive.ubuntu.com
- dig - works on default and on all other DNS's
dig pl.archive.ubuntu.com
,dig @127.0.1.1 pl.archive.ubuntu.com
- curl - doesn't work! but for some addresses it does. WEIRD! Same in Ruby, APT and many more.
$ curl -v http://google.com/
Trying 172.217.18.78...
Connected to google.com (172.217.18.78) port 80 (#0)
> GET / HTTP/1.1
> Host: google.com
> User-Agent: curl/7.47.0
> Accept: /
>
< HTTP/1.1 302 Found
< Cache-Control: private
< Content-Type: text/html; charset=UTF-8
< Referrer-Policy: no-referrer
< Location: http://www.google.pl/?gfe_rd=cr&ei=pt9UWfqXL4uBX_W5n8gB
< Content-Length: 256
< Date: Thu, 29 Jun 2017 11:08:22 GMT
<
<HTML><HEAD><meta http-equiv="content-type" content="text/html;charset=utf-8">
<TITLE>302 Moved</TITLE></HEAD><BODY>
<H1>302 Moved</H1>
The document has moved
<A HREF="http://www.google.pl/?gfe_rd=cr&ei=pt9UWfqXL4uBX_W5n8gB">here</A>.
</BODY></HTML>
Connection #0 to host google.com left intact
$ curl -v http://pl.archive.ubuntu.com/
Could not resolve host: pl.archive.ubuntu.com
Closing connection 0
curl: (6) Could not resolve host: pl.archive.ubuntu.com
- Could not resolve host: pl.archive.ubuntu.com
Closing connection 0 curl: (6) Could not resolve host: pl.archive.ubuntu.com
Revelation
Eventually I used strace
on curl and found that it was connection to nscd
deamon.
connect(4, {sa_family=AF_LOCAL, sun_path="/var/run/nscd/socket"}, 110) = 0
Solution
I've restarted the nscd service (Name Service Cache Daemon) and it helped to solve this issue!
systemctl restart nscd.service
Solution 4 - Linux
Try nslookup google.com to determine if there's a DNS issue. 192.168.1.254 is your local network address and it looks like your system is using it as a DNS server. Is this your gateway/modem router as well? What happens when you try ping google.com. Can you browse to it on a Internet web browser?
Solution 5 - Linux
There is no need to disable IPv6 as the answer suggests. The reason curl fails is simply because the DNS resolution is missing.
There is one liner solution to this.
If you care about what is inside /etc/resolv.conf
then append it:
echo 'nameserver 1.1.1.1' | sudo tee -a /etc/resolv.conf >/dev/null
I usually don't care and just replace the content of the file:
echo 'nameserver 1.1.1.1' | sudo tee /etc/resolv.conf >/dev/null