告别DHCP!手把手教你为VMware里的RockyLinux 9配置固定IP,实现稳定SSH连接 告别DHCP手把手教你为VMware里的RockyLinux 9配置固定IP实现稳定SSH连接在虚拟化环境中IP地址的频繁变动常常让开发者头疼不已。想象一下当你正在通过SSH连接进行重要操作时突然因为DHCP租约到期导致IP变更连接中断所有工作被迫暂停——这种体验无疑令人沮丧。RockyLinux 9作为RHEL的替代品继承了其稳定性和企业级特性但在默认安装后网络配置往往采用DHCP动态分配这对于需要长期稳定连接的开发环境显然不够理想。本文将聚焦于解决这一痛点详细介绍如何在VMware的NAT模式下为RockyLinux 9配置静态IP地址。不同于简单的命令罗列我们会深入理解每个配置参数的含义确保你不仅能完成设置还能在遇到问题时自主排查。无论你是Linux初学者还是有一定经验的运维人员这篇指南都将帮助你建立一个可靠的开发环境。1. 为什么需要固定IP动态分配的局限性在开始配置之前理解为什么需要固定IP至关重要。DHCP动态主机配置协议虽然简化了网络管理但在开发环境中却可能带来诸多不便连接稳定性SSH、FTP等远程服务依赖IP地址建立连接IP变更会导致会话中断服务依赖本地搭建的Web服务、数据库等需要固定IP供其他应用调用调试困难日志中的IP地址频繁变化会增加问题追踪的复杂度安全策略防火墙规则通常基于IP设置动态IP会破坏这些规则VMware的NAT模式为虚拟机提供了与主机共享IP的能力同时允许虚拟机访问外部网络。在这种模式下配置静态IP既能保持网络连通性又能确保地址不变是开发环境的理想选择。提示虽然桥接模式也可以配置静态IP但NAT模式更适合个人开发环境它能避免与局域网中其他设备的IP冲突。2. 环境准备确认网络配置在修改任何网络设置前我们需要先了解当前的网络状态。打开RockyLinux 9的终端执行以下命令收集必要信息# 查看网络接口信息 ip addr # 检查当前网络连接状态 nmcli connection show # 查看路由信息 ip route典型的输出可能如下以ens160网卡为例1: ens160: BROADCAST,MULTICAST,UP,LOWER_UP mtu 1500 qdisc fq_codel state UP group default qlen 1000 link/ether 00:0c:29:3a:5b:7c brd ff:ff:ff:ff:ff:ff inet 192.168.122.128/24 brd 192.168.122.255 scope global dynamic noprefixroute ens160 valid_lft 3456sec preferred_lft 3456sec inet6 fe80::20c:29ff:fe3a:5b7c/64 scope link noprefixroute valid_lft forever preferred_lft forever关键信息包括网卡名称本例为ens160可能是ens33、eth0等当前IP192.168.122.128子网掩码/24表示255.255.255.0分配方式dynamic表示DHCP分配同时我们需要记录VMware的NAT网络配置在VMware中点击编辑→虚拟网络编辑器选择NAT模式对应的网络通常是VMnet8记录子网IP和子网掩码如192.168.122.0/24点击NAT设置记录网关IP如192.168.122.23. 配置静态IPNetworkManager详解RockyLinux 9使用NetworkManager管理网络连接我们将通过修改配置文件来设置静态IP。以下是详细步骤3.1 定位并备份配置文件NetworkManager的连接配置文件通常位于/etc/NetworkManager/system-connections/找到对应网卡的配置文件如ens160.nmconnection首先创建备份sudo cp /etc/NetworkManager/system-connections/ens160.nmconnection ~/ens160.nmconnection.bak3.2 编辑网络配置文件使用文本编辑器如nano或vim修改配置文件sudo vim /etc/NetworkManager/system-connections/ens160.nmconnection找到[ipv4]部分将其从DHCP模式修改为手动配置。以下是完整的配置示例[connection] idens160 uuid1a8c3d7e-2b4f-4c9d-a1b2-3c4d5e6f7a8b typeethernet interface-nameens160 [ipv4] address1192.168.122.150/24,192.168.122.2 dns8.8.8.8;8.8.4.4 methodmanual [ipv6] addr-gen-modestable-privacy methodauto关键参数说明address1格式为IP地址/子网前缀,网关如192.168.122.150/24,192.168.122.2dns指定DNS服务器多个用分号分隔methodipv4设为manual表示静态IPipv6通常保持auto注意IP地址应选择与当前DHCP分配范围不冲突的地址避免可能的IP冲突。可以在VMware的DHCP设置中查看分配范围。3.3 应用配置更改保存文件后需要重新加载网络配置# 重新加载配置文件 sudo nmcli connection reload ens160 # 重启网络连接 sudo nmcli connection down ens160 sudo nmcli connection up ens160 # 验证配置 ip addr show ens160如果一切顺利你应该能看到ens160网卡已经使用了指定的静态IP地址。4. 验证与故障排除配置完成后需要进行全面测试以确保网络功能正常4.1 基础连通性测试# 测试网关连通性 ping 192.168.122.2 -c 4 # 测试外部网络 ping 8.8.8.8 -c 4 # 测试DNS解析 ping google.com -c 44.2 常见问题解决如果遇到连接问题可以按照以下步骤排查无法ping通网关检查IP地址和子网掩码是否与VMware NAT设置匹配确认虚拟机网络适配器设置为NAT模式在VMware中重置虚拟网络编辑→虚拟网络编辑器→恢复默认能ping通IP但无法解析域名检查/etc/resolv.conf是否包含正确的DNS服务器尝试使用不同的DNS如114.114.114.114配置不生效确保没有语法错误特别是逗号、分号的使用检查NetworkManager服务状态systemctl status NetworkManager4.3 持久性验证重启虚拟机后再次检查IP地址确认静态配置仍然有效sudo reboot ip addr show ens1605. 高级配置与优化对于需要更精细控制的用户可以考虑以下增强配置5.1 多IP地址绑定有时一个网卡需要绑定多个IP地址可以在address1后继续添加[ipv4] address1192.168.122.150/24,192.168.122.2 address2192.168.122.151/24 methodmanual5.2 自定义DNS配置除了在NetworkManager配置中指定DNS还可以修改resolv.confsudo vim /etc/resolv.conf添加如下内容nameserver 8.8.8.8 nameserver 8.8.4.4 options timeout:1 attempts:1为防止NetworkManager覆盖此文件可以禁用自动更新sudo vim /etc/NetworkManager/NetworkManager.conf在[main]部分添加dnsnone然后重启NetworkManagersudo systemctl restart NetworkManager5.3 防火墙配置确保SSH端口默认22在防火墙中开放# 查看当前防火墙规则 sudo firewall-cmd --list-all # 永久开放SSH端口 sudo firewall-cmd --permanent --add-servicessh sudo firewall-cmd --reload6. SSH连接最佳实践配置好静态IP后SSH连接将变得更加可靠。以下是一些优化建议6.1 使用密钥认证相比密码认证SSH密钥更安全且方便# 在客户端生成密钥对如果尚未生成 ssh-keygen -t ed25519 # 将公钥复制到RockyLinux服务器 ssh-copy-id root192.168.122.1506.2 客户端配置优化在本地SSH客户端如~/.ssh/config中添加以下配置Host rocky-dev HostName 192.168.122.150 User root IdentityFile ~/.ssh/id_ed25519 Compression yes ServerAliveInterval 60这样只需输入ssh rocky-dev即可连接无需每次指定IP和用户。6.3 保持SSH连接稳定为防止连接超时可以在服务器端修改SSH配置sudo vim /etc/ssh/sshd_config添加或修改以下参数ClientAliveInterval 30 ClientAliveCountMax 5 TCPKeepAlive yes然后重启SSH服务sudo systemctl restart sshd