curl: (6) Could not resolve host: google.com; Name or service not known

LinuxCurlTerminalFedora

Linux 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:

  1. IPV6 enabled
  2. 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 then wq 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 and 8.8.4.4. But in future those may change.

  • Type vi /etc/resolv.conf to edit the resolv.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&amp;ei=pt9UWfqXL4uBX_W5n8gB"&gt;here&lt;/A&gt;.
</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

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionNayana AdassuriyaView Question on Stackoverflow
Solution 1 - LinuxNayana AdassuriyaView Answer on Stackoverflow
Solution 2 - LinuxSathishView Answer on Stackoverflow
Solution 3 - LinuxChris SuszyńskiView Answer on Stackoverflow
Solution 4 - LinuxBenjamin BView Answer on Stackoverflow
Solution 5 - LinuxHoumanView Answer on Stackoverflow