IPv6 is working, but IPv4 isn't

I've got a new laptop running Ubuntu 16.04 that worked like a charm for a couple of weeks but has now lost its appetite for connecting to the internet via Wi-fi. I know it's not a problem with my router or ISP, because I'm writing this post using my old Windows laptop on the exact same home network by Ubuntu laptop won't connect to.

I'm connecting to my router successfully, and running nmcli dev shows that I'm connected to my wifi device (wlp2s0) and to the wireless network.

Last night I was able to open some pages (Google, Facebook, YouTube), but not others (ubuntu.com, riken.jp). At the time I suspected it was something where IPv6 was working but IPv4 wasn't. Now, however, nothing works. Chromium, ping, wget, dig -- nothing. /etc/resolv.conf/ contains nothing at all (beyond the comment lines telling me not to edit it), and the table returned by route is empty.

UPDATE 1: I used ipconfig /all on my Windows machine to figure out which DNS servers it was using (75.75.75.75, 75.75.76.76., 2001:558:feed::1, 2001:558:feed::2), then used Network Connections to add these as DNS Servers for my home network. cat /etc/resolv.conf now gives me nameserver 127.0.1.1; I'm not entirely sure what this means, but I think it's some kind of alias, right? nmcli dev show | grep DNS shows me as using the two IPv6 DNS servers (2001:558:feed::1 and 2001:558:feed::2).

I can get wget to work with URLs that resolve to an IPv6 address, like so:

craig@craig-XPS-13-9370:~$ wget www.google.com
--2018-04-14 13:06:17--  http://www.google.com/
Resolving www.google.com (www.google.com)... 2607:f8b0:4004:808::2004, 
172.217.13.68
Connecting to www.google.com 
(www.google.com)|2607:f8b0:4004:808::2004|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: unspecified [text/html]
Saving to: ‘index.html.5’

index.html.5            [ <=>                ]  10.41K  --.-KB/s    in 0.003s  

2018-04-14 13:06:17 (3.36 MB/s) - ‘index.html.5’ saved [10659]

I can't get a wget request to work with URLs that resolve to an IPv4 address:

craig@craig-XPS-13-9370:~$ wget www.ubuntu.com
--2018-04-14 13:06:28--  http://www.ubuntu.com/
Resolving www.ubuntu.com (www.ubuntu.com)... 91.189.89.118
Connecting to www.ubuntu.com (www.ubuntu.com)|91.189.89.118|:80... failed: 
Network is unreachable.

Adding the -4 flag to wget to force IPv4 usage gets a similar result:

craig@craig-XPS-13-9370:~$ wget -4 www.google.com
--2018-04-14 13:06:41--  http://www.google.com/
Resolving www.google.com (www.google.com)... 172.217.13.68
Connecting to www.google.com (www.google.com)|172.217.13.68|:80... failed: 
Network is unreachable.

Similarly, ping www.google.com doesn't work, but ping6 www.google.com does. So it's pretty clear that something is wrong with IPv4, but I'm not sure what...

UPDATE 2: I thought my problem looked pretty similar to this question, but the solution suggested there (disabling IPv4 via Network Connections) doesn't seem to have affected anything. It did give me some ideas for what it's useful to share with others, though:

Output from cat /etc/network/interfaces:

craig@craig-XPS-13-9370:~$ cat /etc/network/interfaces
# interfaces(5) file used by ifup(8) and ifdown(8)
auto lo
iface lo inet loopback

Output from ifconfig:

craig@craig-XPS-13-9370:~$ ifconfig
lo        Link encap:Local Loopback  
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:65536  Metric:1
          RX packets:13526 errors:0 dropped:0 overruns:0 frame:0
          TX packets:13526 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1 
          RX bytes:1031920 (1.0 MB)  TX bytes:1031920 (1.0 MB)

wlp2s0    Link encap:Ethernet  HWaddr 9c:b6:d0:8b:4b:c5  
          inet6 addr: fe80::1f3b:5545:508:919a/64 Scope:Link
          inet6 addr: 2601:140:8600:e0:d64b:9272:665f:3734/64 Scope:Global
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:19665 errors:0 dropped:0 overruns:0 frame:0
          TX packets:10262 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:14731745 (14.7 MB)  TX bytes:1722860 (1.7 MB)

Output from iwconfig:

craig@craig-XPS-13-9370:~$ iwconfig
lo        no wireless extensions.

wlp2s0    IEEE 802.11abgn  ESSID:"MOTOROLA-ABD39"  
          Mode:Managed  Frequency:2.447 GHz  Access Point: 34:1F:E4:E4:35:D0   
          Bit Rate=1 Mb/s   Tx-Power=20 dBm   
          Retry short limit:7   RTS thr:off   Fragment thr:off
          Power Management:on
          Link Quality=55/70  Signal level=-55 dBm  
          Rx invalid nwid:0  Rx invalid crypt:0  Rx invalid frag:0
          Tx excessive retries:0  Invalid misc:39   Missed beacon:0

Output from cat /etc/resolv.conf:

craig@craig-XPS-13-9370:~$ cat /etc/resolv.conf
# Dynamic resolv.conf(5) file for glibc resolver(3) generated by resolvconf(8)
#     DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN
nameserver 127.0.1.1

Output from route -n:

craig@craig-XPS-13-9370:~$ route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface

Output from route -6 -n:

craig@craig-XPS-13-9370:~$ route -6 -n
Kernel IPv6 routing table
Destination                    Next Hop                   Flag Met Ref Use If
2601:140:8600:e0::/64          ::                         U    600 0     0 wlp2s0
2601:140:8600:e0::/60          fe80::361f:e4ff:fee4:35cf  UG   600 0     0 wlp2s0
fe80::/64                      ::                         U    256 0     0 wlp2s0
::/0                           fe80::361f:e4ff:fee4:35cf  UG   600 2     4 wlp2s0
::/0                           ::                         !n   -1  1  1495 lo
::1/128                        ::                         Un   0   7    46 lo
2601:140:8600:e0:d64b:9272:665f:3734/128 ::                         Un   0   2   150 lo
fe80::1f3b:5545:508:919a/128   ::                         Un   0   2     4 lo
ff00::/8                       ::                         U    256 7    99 wlp2s0
::/0                           ::                         !n   -1  1  1495 lo

Output from ip neigh:

craig@craig-XPS-13-9370:~$ ip neigh
fe80::361f:e4ff:fee4:35cf dev wlp2s0 lladdr 34:1f:e4:e4:35:cf router REACHABLE

Solution 1:

Not sure if this is a permanent solution, but I managed to get things working again by releasing and renewing my IP address:

sudo dhclient -r wlp2s0
sudo dhclient wlp2s0

Now I see an inet addr line when I run ifconfig (which was never there before) and cat /etc/resolv.conf has added an IPv4 nameserver and a "search" line for my ISP (search hsd1.va.comcast.net). Problem solved!

Solution 2:

Sometimes this can be caused by an incorrect system time. If your system time is too far off, you will not be leased an IPv4 by DHCP -- only an IPv6.

You can check the system time settings by running timedatectl in a terminal.

If you need to reconfigure your system time and/or time zone, run sudo dpkg-reconfigure tzdata in a terminal.

Assigning a static IP/Gateway/DNS could also work regardless, but certain websites will complain.