作为开发人员在工作和学习中通过虚拟机使用 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
- .NET 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
- .NET 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
汇总
根据之前的结果, 我们可以汇总得到现有的网络配置信息:
网卡名: ens33
IP 地址: 192.168.234.130
子网掩码: 255.255.255.0
DNS:192.168.234.2
网关: 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
- .NET 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
- .NET 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
我的 CSDN: https://blog.csdn.net/liweitao7610
我的博客园: https://www.cnblogs.com/aotian/
我的简书: https://www.jianshu.com/u/6b6e162f1fdc
来源: https://www.cnblogs.com/aotian/p/11613494.html