我将服务器从 14.04 升级到 16.04,而后者又从 12.04 升级,所有升级都使用命令行 do-release-upgrade。这是一个服务器版本,完全没有 GUI。它运行 apache2、bind9、nfs 和其他一些与网络相关的服务。升级过程中,除了网络之外,大部分都没有出现任何问题。现在,我必须运行
sudo /etc/init.d/networking start
每次重启后都要让它连接到网络。这对服务器来说没什么帮助。我猜网络脚本只是没有在启动时运行;通常,我可以通过运行
sudo update-rc.d networking defaults
但是上述命令只是给出无法连接到 upstart 的错误。
我该怎么做才能修复我的网络?
编辑:/etc/network/interfaces 的内容:
#loopback
auto lo
iface lo inet loopback
#eth0
auto eth0
iface eth0 inet dhcp
答案1
同样在这里。
我认为在安装过程中从 upstart 迁移到 systemd 时出现了问题?
我将描述我如何修复它
按照本指南,我启用了 systemd 网络: http://xmodulo.com/switch-from-networkmanager-to-systemd-networkd.html
我执行的步骤:
$ sudo systemctl enable systemd-networkd
$ sudo systemctl enable systemd-resolved
$ sudo systemctl start systemd-resolved
$ sudo rm /etc/resolv.conf
$ sudo ln -s /run/systemd/resolve/resolv.conf /etc/resolv.conf
$ sudo vi /etc/systemd/network/20-dhcp.network
内容:
[Match]
Name=e*
[Network]
DHCP=yes
现在一切都正常了:-)
答案2
静态地址解决方案:
补充 HerrTaschenbier 的回答:如果您的服务器上有静态地址,则应检查 NIC 是否已重命名,方法是:ifconfig -a
我发现 eth0 已重命名为ens32
。使用该信息并将其应用于 HerrTaschenbier 的回答。您还需要按照他的指示创建新文件 。sudo vi /etc/systemd/network/20-ens32.network
内容略有不同。
[Match]
Name=ens32
[Network]
DNS=xxx.xxx.xxx.xxx
Domains=somedomain.com
Address=xxx.xxx.xxx
Gateway=xxx.xxx.xxx
请注意,文件名格式中包含网络适配器名称。不要忘记在 /etc/network/interfaces 文件中更改适配器名称。我从 14.04 升级到 16.04 时就遇到了这种情况。
答案3
在长期使用 16.04 后,我遇到了同样的问题,可能是某些更新搞乱了事情。
运行systemctl status networking.service
显示,由于调用错误,服务无法启动ifup -a
。ifup -a
单独运行显示,它正在尝试使用eth0
接口,而ifconfig -a
仅列出enp0s31f6
和lo
接口。检查/etc/network/interfaces
显示:
# interfaces(5) file used by ifup(8) and ifdown(8)
auto lo
iface lo inet loopback
auto eth0
iface eth0 inet dhcp
将接口名称更正为ifconfig
解决问题所发现的名称:
# interfaces(5) file used by ifup(8) and ifdown(8)
auto lo
iface lo inet loopback
auto enp0s31f6
iface enp0s31f6 inet dhcp
答案4
就像我的情况一样,您可以尝试在 /etc/network/interfaces 文件中将“eth0”更改为“ens32”。重启,就完成了。