更新后无法连接网络

更新后无法连接网络

我的情况如下:我在 GCE 上运行默认的 Google Compute Engine Ubuntu 16.04 映像。一切基本都是默认设置,我允许连接到 SSH、HTTP 和 HTTPS。一切正常,直到重新启动,此时网络停止工作。这已经是第二次发生了,第一次我刚刚从头开始,但我想知道现在发生了什么。

据我所知,这种情况发生在无人值守升级或手动升级之后,即内核升级时,但我不能 100% 确定。一切看起来都很正常,但传入和传出网络流量都不起作用。我无法 ping 计算机,也无法通过 SSH 进入。我可以通过 Google Cloud Console 通过串行终端登录。在这里,当我尝试从外部 ping 计算机时,我确实在控制台中收到以下消息:

Nov  1 11:40:17 instance-2 kernel: [  409.306083] IPv4: martian source 10.128.0.2 from *x.x.x.x (my ip)*, on dev ens4
Nov  1 11:40:17 instance-2 kernel: [  409.306100] ll header: 00000000: 42 01 0a 80 00 02 42 01 0a 80 00 01 08 00        B.....B.......

我在启动时还看到一些与 cloud-init 相关的错误,例如:

[   26.780358] cloud-init[1177]: 2017-11-01 11:24:42,023 - util.py[WARNING]: No instance datasource found! Likely bad things to come!
[FAILED] Failed to start Initial cloud-init job (metadata service crawler).

但这可能与没有任何网络连接有关?

我无法访问任何内容,包括默认网关 10.128.0.1

ifconfig 的输出

ens4      Link encap:Ethernet  HWaddr 42:01:0a:80:00:02  
          inet addr:10.128.0.2  Bcast:10.128.0.2  Mask:255.255.255.255
          inet6 addr: fe80::4001:aff:fe80:2/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1460  Metric:1
          RX packets:11 errors:0 dropped:0 overruns:0 frame:0
          TX packets:24 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:2186 (2.1 KB)  TX bytes:2980 (2.9 KB)

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:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)

/var/lib/dh​​cp/dhclient.ens4.leases 的内容

lease {
  interface "ens4";
  fixed-address 10.128.0.2;
  option subnet-mask 255.255.255.255;
  option routers 10.128.0.1;
  option dhcp-lease-time 86400;
  option dhcp-message-type 5;
  option domain-name-servers 169.254.169.254;
  option dhcp-server-identifier 169.254.169.254;
  option interface-mtu 1460;
  option domain-search "c.green-torus-124415.internal.", "google.internal.";
  option ntp-servers 169.254.169.254;
  option rfc3442-classless-static-routes 32,10,128,0,1,0,0,0,0,0,10,128,0,1;
  option host-name "instance-5.c.green-torus-124415.internal";
  option domain-name "c.green-torus-124415.internal";
  renew 3 2017/11/01 16:33:45;
  rebind 3 2017/11/01 16:33:45;
  expire 3 2017/11/01 16:33:45;
}
lease {
  interface "ens4";
  fixed-address 10.128.0.2;
  option subnet-mask 255.255.255.255;
  option routers 10.128.0.1;
  option dhcp-lease-time 86400;
  option dhcp-message-type 5;
  option domain-name-servers 169.254.169.254;
  option dhcp-server-identifier 169.254.169.254;
  option interface-mtu 1460;
  option domain-search "c.green-torus-124415.internal.", "google.internal.";
  option ntp-servers 169.254.169.254;
  option rfc3442-classless-static-routes 32,10,128,0,1,0,0,0,0,0,10,128,0,1;
  option host-name "instance-5.c.green-torus-124415.internal";
  option domain-name "c.green-torus-124415.internal";
  renew 4 2017/11/02 01:52:41;
  rebind 4 2017/11/02 13:33:46;
  expire 4 2017/11/02 16:33:46;
}

因此看起来数据包到达了虚拟机,但由于某种原因,虚拟机认为这是一个火星数据包并忽略/拒绝了它?

这些软件包昨天已更新:

  • libgnutls-openssl27:amd64
  • Linux-标头-4.10.0-38-通用:amd64
  • Linux-标头-虚拟-hwe-16.04:amd64

我已经尝试更新 DHCP 租约,并删除新内核并启动以前的内核,但无济于事。

怎样才能解决这个问题?

答案1

所以问题出在 ddclient 上。我在 Azure 上也遇到了同样的问题,但在 AWS 上从未发生过。

我使用 ddclient 来更新此服务器的域记录。似乎 GCE 和 Azure 在实例的 cloud-init 设置期间使用 ddclient,但 AWS 不这样做。我认为这是让网关知道实例已启动等所必需的。当我安装并为 ddclient 制作自己的配置时,这似乎会覆盖实例启动期间发生的情况,从而导致网络无法正常工作。卸载 ddclient 并删除 /etc/ddclient.conf 解决了该问题。

相关内容