无法通过网络连接到 Azure Linux VM

适用于:✔️ Linux VM

原始 KB 数: 4010059

注意

本文中引用的 CentOS 是 Linux 分发版,将达到生命周期结束(EOL)。 请相应地考虑使用和规划。 有关详细信息,请参阅 CentOS 生命周期指南

本文修复了网络错误阻止连接到 Azure Linux 虚拟机的问题。

现象

Azure Linux 虚拟机(VM)上的主接口为 eth0。 如果未配置 eth0,即使其他工具指示 VM 已启动,也无法通过网络连接访问 VM。

出现问题时,具有正确权限的安全外壳(SSH)连接可能会开始连接到 VM。 但是,由于网络问题,它最终无法访问 VM。

网络错误通常记录在串行控制台日志中。 具体而言,你可能会看到以下错误。

串行控制台日志中的错误

CentOS Linux 分发错误

错误 1

Bringing up interface eth0:
Device eth0 does not seem to be present, delaying initialization.
[FAILED]

错误 2

Bringing up loopback interface: [ OK ]
Bringing up interface eth0: Device eth0 has different MAC address than expected, ignoring.
[FAILED]

错误 3

YYYY/MM/DD HH:MM:SS Discovered Windows Azure endpoint: ###.##.###.##
/usr/sbin/waagent:2275: DeprecationWarning: BaseException.message has been deprecated as of Python 2.6
Error('socket IOError ' + e.message + ' args: ' + repr(e.args))
YYYY/MM/DD HH:MM:SS ERROR:socket IOError args: (113, 'No route to host')

YYYY/MM/DD HH:MM:SS ERROR:socket IOError args: (113, 'No route to host')
Failed services in runlevel 3:network

错误 4

login: YYYY/MM/DD HH:MM:SS ERROR:timed out

YYYY/MM/DD HH:MM:SS ERROR:Traceback (most recent call last):
YYYY/MM/DD HH:MM:SS ERROR: File "/usr/sbin/waagent", line 3395, in DoDhcpWork
YYYY/MM/DD HH:MM:SS ERROR: receiveBuffer = sock.recv(1024)
YYYY/MM/DD HH:MM:SS ERROR:timeout: timed out
YYYY/MM/DD HH:MM:SS ERROR:
YYYY/MM/DD HH:MM:SS DoDhcpWork: Setting socket.timeout=10, entering recv
YYYY/MM/DD HH:MM:SS ERROR:timed out
YYYY/MM/DD HH:MM:SS ERROR:Traceback (most recent call last):
YYYY/MM/DD HH:MM:SS ERROR: File "/usr/sbin/waagent", line 3395, in DoDhcpWork
YYYY/MM/DD HH:MM:SS ERROR: receiveBuffer = sock.recv(1024)
YYYY/MM/DD HH:MM:SS ERROR:timeout: timed out

Customer changed the IP from DHCP to FIXED

SUSE Linux 分发错误

Setting up (localfs) network interfaces:
 lo 
 lo IP address: 127.0.0.1/8 
 IP address: 127.0.0.2/8 
done eth4 
 No configuration found for eth4
unused Waiting for mandatory devices: eth0 
29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 

eth0 No interface found

Ubuntu

错误 1

cloud-init-nonet waiting 120 seconds for a network device.
cloud-init-nonet gave up waiting for a network device.
ci-info: lo : 1 127.0.0.1 255.0.0.0 .
ci-info: eth1 : 0 . . 00:0d:3a:10:6a:53
route_info failed
Waiting for network configuration...
Waiting up to 60 more seconds for network configuration...
Booting system without full network configuration...

错误 2

ci-info: | eth0 | False | . | . | 00:0d:3a:21:f9:ad |
ci-info: +--------+-------+-----------+-----------+-------------------+
ci-info: !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!Route info failed!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+ i=eth0
+ x=0
+ ifdown eth0
ifdown: interface eth0 not configured
+ ifup eth0
Missing required variable: address
Missing required configuration variables for interface eth0/inet.
Failed to bring up eth0.
+ exit 0x\

解决方法

对于 CentOS

ifcfg-eth0 文件中删除 HWADDR 指令。/etc/sysconfig/network-script

对于 SUSE Linux

删除包含 eth0 或 eth1 下 /etc/udev/rules.d条目的文件。

对于 Ubuntu

错误 1

此错误指示已配置 aneth1 接口而不是 eth0。 如果 VM 上的操作系统未安装 udev 的某些更新,则可能会发生此情况。 在这种情况下, udev 错误地保存了以前的网络接口。 当 VM 调整大小或移动时,它会收到一个不同的 MAC 地址,该地址将分配给 eth1。

注意

可以从串行日志验证映像的版本。 如果发现一个非常旧的 Ubuntu 内核(例如 3.2.0-58.88,于 2014 年 1 月发布),则表示操作系统尚未更新。

若要解决此问题,请将 OS 磁盘附加到另一个正在运行的 VM,然后删除 udev 规则文件。/etc/udev/rules.d/70-persistent-net.rules

若要避免将来出现此问题,建议更新 VM 上的 udev 包。 例如,运行以下命令:

sudo apt-get update
sudo apt-get install udev

错误 2

若要解决此问题,请将 /etc/network/interfaces.d/eth0.cfg 文件重置为默认值,并使其请求 Azure DHCP 获取 IP 地址。 然后,删除包含缓存 DHCP 设置的文件夹中的 /var/lib/dhcp 文件。 下面是默认 eth0.cfg 文件的示例:

# The primary network interface
auto eth0
iface eth0 inet dhcp

解决自定义 Linux 操作系统上的问题

如果存在网络问题的 VM 使用上传的 VHD,则可以尝试基于工作库映像配置网络。 为此,可将有问题的磁盘作为数据磁盘附加到库 VM,然后运行以下命令。

fdisk -l
df -h
mount /dev/sdc1 /temporary
df -h
cd /temporary/etc/udev/rules.d
ls -ltr
mv 70-persistent-net.rules /temporary/root/
cd ../../network

ls
mv interfaces interfaces.org
ls -ltr

从工作 VM 复制到当前文件夹文件:

cp /etc/network/interfaces . 
cp -R /etc/network/interfaces
cp -R /etc/network/interfaces.d .
cp -R /etc/network/interfaces.dynamic.d .
ls -ltr
cd ..
cd
umount /mnt

有关如何将数据磁盘附加到库 VM 的详细信息,请参阅如何在Azure 门户中将数据磁盘附加到 Windows VM。

参考:操作系统的网络文件

网卡配置

/etc/sysconfig/network-scripts/ifcfg-eth0 ..ifcfg-eth0:1 (Centos, Oracle)
/etc/sysconfig/network/ifcfg-eth0 (SuSE)
/etc/network/interfaces (Ubuntu)  

主机名配置

/etc/sysconfig/network (Centos , Oracle)
/etc/HOSTNAME (SuSE)
/etc/hostname (Ubuntu)  

DNS 配置文件

/etc/resolv.conf
/etc/nsswitch.conf  

默认网关的配置文件

set in ifcfg-ethn or /etc/sysconfig/network
/etc/sysconfig/network/route (SuSE)
/etc/network/interfaces (Ubuntu)  

静态路由

/etc/sysconfig/network-scripts/route-ethX (Centos, Oracle)
/etc/sysconfig/network/routes (SuSE)
/etc/network/interfaces (Ubuntu)  

防火墙规则

/etc/sysconfig/iptables (centos, Oracle)
/etc/sysconfig/SuSEfirewall2.d/services (SuSE)
/etc/ufw/ufw.conf (Ubuntu)

联系我们寻求帮助

如果你有任何疑问或需要帮助,请创建支持请求联系 Azure 社区支持。 你还可以将产品反馈提交到 Azure 反馈社区