作为开发人员在工作和学习中通过虚拟机使用 linux 的情况肯定会非常多,但是 Linux 自带的终端使用体验较差,所以绝大多数使用者都会在宿主机上使用第三方 SSH工具(例如 Xshell)进行连接,然而在虚拟机中如果使用的是动态 IP 则会出现这次连接可以但下次连不上的情况,因为 IP 动态获取的嘛,是会变的。所以这篇文章的目的也就在于解决此问题。
确定虚拟机使用的网络配置
在设置静态 IP 之前,我们需要确定当前系统动态获取到的一些配置信息,以便我们后续使用。
IP地址及网卡名称
作者新装的一台虚拟机,执行的是最小化安装,所以什么工具也没有,使用 ip 来查看,执行结果如下:
[root@192 ~]# ip addr 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo valid_lft forever preferred_lft forever inet6 ::1/128 scope host valid_lft forever preferred_lft forever 2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000 link/ether 00:0c:29:90:03:54 brd ff:ff:ff:ff:ff:ff inet 192.168.234.130/24 brd 192.168.234.255 scope global noprefixroute dynamic ens33 valid_lft 1650sec preferred_lft 1650sec inet6 fe80::a120:30fb:6867:daed/64 scope link noprefixroute valid_lft forever preferred_lft forever
分析以上结果,我们可以看到网卡名称为 ens33,IP 地址为 192.168.234.130,根据 IP 地址后的 /24 可以得知为 C 类地址,子网掩码为 255.255.255.0 (可参考 ip地址后边加个/8(16,24,32)是什么意思?)
DNS 地址
centos 使用的 DNS 配置放置在 /etc/resolv.conf 文件中,可以通过查看此文件内容获取当前 DNS 地址。
[root@192 ~]# cat /etc/resolv.conf # Generated by NetworkManager search localdomain nameserver 192.168.234.2
根据文件内容可以知道 DNS 服务器地址为 192.168.234.2
网关地址
网关地址同样可以使用 ip 命令进行查看
[root@192 ~]# ip route show default via 192.168.234.2 dev ens33 proto dhcp metric 100 192.168.234.0/24 dev ens33 proto kernel scope link src 192.168.234.133 metric 100
根据执行结果我们可以看到使用的网关地址为 192.168.234.2
汇总
根据之前的结果,我们可以汇总得到现有的网络配置信息:
修改 CentOS 系统设置
相比于查看来说,设置部分相对会简单很多,修改一个文件就可以了,文件路径 /etc/sysconfig/network-scripts,之前我们查看到虚拟机的网卡名为 ens33,在这个目录下有个文件为 ifcfg-ens33,这个就是网卡对应的配置文件。
文件内包含当前网卡的网络配置,默认的是通过 DHCP 来动态获取 IP 地址,我们需要修改为静态 IP。
# 默认内容 BOOTPROTO="dhcp" # 修改后的内容 BOOTPROTO="static" # 检查以下内容,必须为 “yes” ONBOOT="yes"
在文件中添加以下内容,其中地址除 IP 地址为手动指定外,其他的均为之前动态获取的内容
IPADDR="192.168.234.71" NETMASK="255.255.255.0" GATEWAY="192.168.234.2" DNS1="192.168.234.2"
修改后重新启动网络服务
[root@192 ~]# systemctl restart network
之后重新查看地址(如果使用三方 SSH 工具则需要重新连接),可以看到 IP 地址已经变更为我们指定的地址,以后连接就不会出现获取的地址和之前不一样的情况了
[root@192 ~]# ip addr 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo valid_lft forever preferred_lft forever inet6 ::1/128 scope host valid_lft forever preferred_lft forever 2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000 link/ether 00:0c:29:90:03:54 brd ff:ff:ff:ff:ff:ff inet 192.168.234.71/24 brd 192.168.234.255 scope global noprefixroute ens33 valid_lft forever preferred_lft forever inet6 fe80::a120:30fb:6867:daed/64 scope link noprefixroute valid_lft forever preferred_lft forever