一.问题描述
1.虚拟机配置远程访问
在虚拟机上搭建好一台服务器,配置好SSH访问和允许一些特定端口,如远程ssh 22端口,mysql服务3306端口,设置ufw防火墙允许端口访问。
通过配置虚拟网络后,配置远程SSH访问端口为22
2.重启网络失效,无法自启动网络服务
虚拟机重启后,使用ifconfig发现只有本地环回地址,无法使用网络
ifconfig eth0
root@tao-virtual-machine:/# ifconfig etho0
etho0: 获取接口信息时发生错误: Device not found
二.问题分析
该系统服务器搭建已经有一段时间了,使用是正常的,突然网络就无法启动,外部配置未发生改变
第一个思路,考虑的是网络环境的变化,是否连接的外部网络做了限制(因为本人在保密单位工作,对网络环境很敏感)
第二个思路,系统配置因为切换过某些未注意的事务,其实大概率可能是这个原因,最后还是未完美定位到底是哪块出现问题
网卡未随系统启动而启动,导致无法访问外部网络,这是主要问题
三.解决方案
1.临时解决
在root用户下执行网络命令,默认为只要能启动网卡,皆为解决方案
/sbin/dhclient
其实不是接口不存在,只是接口没有UP。回到图形界面,发现联网时要先启用网络,启用网络时会调用/sbin/dhclient
执行该命令后网卡启动
缺点是,网卡启动仅是当次,重启后若要连接网络需要重新执行该命令,这只是暂时的解决方案
3.永久解决
永久解决的思路已经确定了,就是设置服务器重启后,网卡设置自启动
关于dhclient:
1.dhclient是一个在Linux系统上实现DHCP协议的客户端程序。它是ISC DHCP客户端的一部分,用于在系统启动时或网络环境变化时向DHCP服务器请求并获取配置信息。 2.dhclient负责与DHCP服务器通信,协商IP地址、子网掩码、网关等配置参数,并将这些配置应用到系统网络接口。
可以使用systemd来实现开机自动开启网卡并启动dhclient服务。以ens33网卡为例,步骤如下:
1.打开终端,并切换到root用户或使用sudo命令以管理员权限运行以下命令。创建一个systemd单位文件,用于自定义开机启动服务。
2.使用文本编辑器(如vi、nano等)创建一个新的文件,并命名为ens33-dhclient.service。命令如下:
vi /etc/systemd/system/ens33-dhclient.service
3.在打开的文件中,输入以下内容:
[Unit]
Description=Enable ens33 network interface and start dhclient
After=network.target
[Service]
Type=oneshot
ExecStart=/sbin/ifconfig ens33 up
ExecStart=/sbin/dhclient ens33
[Install]
WantedBy=default.target
上述配置文件中,ExecStart指定了需要执行的命令。第一个ExecStart命令用于启动ens33网卡,第二个ExecStart命令用于启动dhclient服务。
4.保持并关闭该文件;
5.运行以下命令,重新加载systemd单位文件系统:
systemctl daemon-reloa
6.运行以下命令,启用并启动新创建的服务:
systemctl enable ens33-dhclient.service
systemctl start ens33-dhclient.service
7.确认服务是否开启成功,可以使用如下命令:
systemctl status ens33-dhclient.service