我的情况如下:我在 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/dhcp/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 解决了该问题。