当前位置: 首页 > news >正文

Linux小课堂: 网络配置详解之DHCP动态分配与静态IP地址设置

公网 IP 与内网 IP 的核心差异

  • 公网 IP 是互联网唯一标识符,如云服务器(ECS)的公网 IP 可通过 SSH 直接访问(示例:ssh root@公网IP
  • 内网 IP 用于局域网设备通信,如 VirtualBox 虚拟机环境中的服务器(vitserver)与客户机(sentencegunclient)通过内网 IP 互联(示例:ssh root@192.168.0.106

DHCP 动态 IP 分配机制


1 )协议原理

  • DHCP(Dynamic Host Configuration Protocol)基于 UDP 协议

其核心机制为:

  • 动态分配:DHCP服务器为设备分配带租约期限的IP地址(如24小时)
  • IP 地址具有租约期限,到期后地址可能被重新分配(如 192.168.0.106192.168.0.102
  • 参数自动化管理:自动分配IP地址、子网掩码、网关、DNS等参数,无需手动配置

2 ) 配置文件解析
网卡配置文件路径:/etc/sysconfig/network-scripts/ifcfg-<接口名>(如 ifcfg-ens33
关键参数:

BOOTPROTO=dhcp    # 启用 DHCP 模式 
ONBOOT=yes        # 开机自动激活网卡

3 ) 关键验证命令

ifconfig ens33  # 查看当前IP地址 
cat /etc/sysconfig/network-scripts/ifcfg-ens33 | grep BOOTPROTO  # 检查协议类型 

静态 IP 配置实践


为固定服务器IP地址,需切换为静态分配模式。以下提供两种配置方式:

1 ) 方案 1:直接编辑配置文件

修改配置

BOOTPROTO 改为 static,并手动指定参数:

# /etc/sysconfig/network-scripts/ifcfg-ens33 
BOOTPROTO=static         # 从dhcp改为static
IPADDR=192.168.0.106     # 静态 IP 地址 
NETMASK=255.255.255.0    # 子网掩码(等价 /24)
GATEWAY=192.168.0.1      # 网关地址(必需)
DNS1=192.168.1.1         # DNS 服务器(必需)
ONBOOT=yes               # 确保开机自启

补充网关与DNS(否则无法上网):

GATEWAY=192.168.0.1       # 网关地址(需与主机网关一致)
DNS1=192.168.1.1          # 主DNS服务器

重启网络服务

systemctl restart network
ifconfig ens33           # 验证 IP 是否生效 
ping www.baidu.com         # 测试网络连通性

2 )方案2:使用 nmtui 文本界面工具

  • 执行命令进入交互界面:
    nmtui 
    
  • 操作路径,选择 Edit a connection → 选择网卡(如ens33):
    • IPv4 CONFIGURATION 改为 Manual
    • Addresses中输入IP及子网掩码
      • 格式:IP地址/子网掩码位数,如 192.168.0.106/24
    • GatewayDNS servers中填入对应地址
      • Gateway: 192.168.0.1
      • DNS servers: 192.168.1.1
  • 保存退出并重启网络服务:
    systemctl restart NetworkManager
    

注意事项:

  • 网关与DNS必填:缺失将导致无法访问外网(如 ping: baidu.com: Name or service not known
  • 子网掩码格式:NETMASK=255.255.255.0 等价于 PREFIX=24(二进制24位掩码)

关键点:

  • 静态IP必须配置网关和DNS,否则无法访问外部网络
  • 网关(GATEWAY)是跨网段通信的出口,通常是路由器IP(如192.168.0.1
  • DNS(如192.168.1.1)用于域名解析,可通过本地/etc/hosts或公共DNS(如8.8.8.8)替代

网关与DNS的获取与配置

静态IP需手动指定网关和DNS,可通过以下方式查询:

1 ) 查询网关地址

  • Linux/Windows命令:
    ip route show default  # Linux 
    ipconfig /all          # Windows(查看“默认网关”)
    
  • 图形界面:
    • Windows:控制面板 → 网络状态 → 连接详情 → “默认网关”
    • macOS:系统偏好设置 → 网络 → 高级 → TCP/IP → “路由器”

2 ) 查询DNS服务器

  • Linux命令:
    netstat -nr | grep default  # 查看网关 
    cat /etc/resolv.conf  # 查看nameserver字段 
    
  • Windows/macOS:同网关查询路径,定位“DNS服务器”字段

示例配置:

GATEWAY=192.168.0.1     # 网关通常为路由器IP(如192.168.0.1)
DNS1=192.168.1.1         # 主DNS服务器
DNS2=8.8.8.8             # 备用DNS(如Google DNS)

关键故障排查点

  • 网关与 DNS 查询方法:

    • Windows: ipconfig /all → 查看 Default GatewayDNS Servers
    • macOS/Linux:
      route -n | grep 'UG'        # 查看网关 
      cat /etc/resolv.conf        # 查看 DNS 
      
  • 无法访问外网:

    1. 检查网关、DNS是否配置(静态IP必需)
    2. 验证网络服务状态:systemctl status network
    3. 测试网关连通性:ping 192.168.0.1
    4. 静态 IP 必须配置 GATEWAYDNS,否则导致域名解析失败(ping: baidu.com: Name or service not known
  • IP冲突:确保静态IP未被其他设备占用

  • 配置文件生效:修改后必须执行 systemctl restart network

  • 终极验证命令:

    ping 192.168.0.1      # 测试网关可达性 请使用自己的网关ip
    ping 8.8.8.8          # 测试外网连通性
    ping www.baidu.com    # 测试DNS解析 
    
  • 常见问题:

    • ping域名失败但IP成功 → 检查DNS配置
    • 若无法访问外部网络 → 确认网关是否匹配主机所在网络段

网络基础概念解析

  • 网关(Gateway):连接不同网络的关口(如局域网与互联网),通常为路由器IP地址(如 192.168.0.1
  • DNS(Domain Name System):将域名解析为IP地址的服务(如 www.imooc.com117.121.101.134
  • 子网掩码(Netmask):标识IP地址的网络部分与主机部分(如 255.255.255.0 表示前24位为网络地址)

技术细节:

  • DHCP租约机制:IP地址临时性导致变更,静态IP通过固定参数规避此问题
  • 桥接模式:虚拟机网卡需设置为桥接(Bridged),使虚拟机与宿主机在同一局域网段获取IP

DHCP与静态IP的应用场景

模式适用场景优点
DHCP动态IP环境(如办公网络、移动设备)自动管理IP,减少配置负担
Static服务器、需固定IP的服务(如Web、SSH)IP稳定,便于服务访问与端口映射

运维提示:
对于服务器,静态IP是最佳实践,可避免因IP变更导致的服务中断
若需保留DHCP但固定IP,可在路由器中设置

NestJS 网络配置辅助代码示例


1 ) 方案1

模拟网络控制器

import { Controller, Get } from '@nestjs/common';
import { execSync } from 'child_process';@Controller('network')
export class NetworkController {@Get('config')getNetworkConfig() {// 获取当前网络接口配置(Linux 环境)const ifconfig = execSync('ifconfig ens33').toString();const gateway = execSync('route -n | grep "UG" | awk \'{print $2}\'').toString().trim();const dns = execSync('cat /etc/resolv.conf | grep "nameserver" | awk \'{print $2}\'').toString().trim();return {interface: 'ens33',config: ifconfig,gateway,dnsServers: dns.split('\n')};}@Get('restart')restartNetwork() {// 重启网络服务(需 root 权限)try {execSync('systemctl restart network', { stdio: 'inherit' });return { status: 'Network service restarted' };} catch (error) {throw new Error(`Restart failed: ${error.message}`);}}
}

核心总结

  1. DHCP 适用场景:
    适合动态环境(如移动设备),但 IP 变化可能导致服务不可达。
  2. 静态 IP 必要性:
    服务器需固定 IP 确保服务稳定性(如 Web 服务、SSH 连接)。
  3. 配置完整性:
    静态 IP 必须指定网关和 DNS,否则网络功能不全。
  4. 工具选择:
    • 快速修改 → vim /etc/sysconfig/network-scripts/ifcfg-ens33
    • 交互操作 → nmtui

注:虚拟机网络模式(如桥接/NAT)直接影响 IP 分配范围,需与宿主机网络环境匹配

2 )方案2

模拟静态IP配置逻辑,包括网关和DNS验证:

import { Injectable } from '@nestjs/common';@Injectable()
export class NetworkConfigService {private ipAddress: string = '192.168.0.106';private subnetMask: string = '255.255.255.0';private gateway: string | null = null;private dnsServers: string[] = [];// 设置网关和DNS setGatewayAndDns(gateway: string, dns: string[]): void {this.gateway = gateway;this.dnsServers = dns;}// 验证网络连通性validateNetwork(): string {if (!this.gateway || this.dnsServers.length === 0) {return 'Error: Gateway or DNS not configured. Name or service not known.';}return `Success: Ping to external domain resolved via DNS ${this.dnsServers[0]}`;}// 获取当前配置getCurrentConfig(): object {return {ipAddress: this.ipAddress,subnetMask: this.subnetMask,gateway: this.gateway,dnsServers: this.dnsServers,};}
}// 使用示例 
const networkService = new NetworkConfigService();
networkService.setGatewayAndDns('192.168.0.1', ['192.168.1.1']);
console.log(networkService.validateNetwork()); // 输出: Success: Ping to external domain resolved via DNS 192.168.1.1

此代码定义了一个服务类 NetworkConfigService,通过 setGatewayAndDns 方法配置网关和DNS,validateNetwork 方法模拟网络验证逻辑。若未设置网关或DNS,返回错误 Name or service not known;配置正确时返回解析成功消息

总结

  • 动态IP(DHCP):适用于临时设备,自动管理网络参数,但IP可能变化
  • 静态IP:需手动配置 IPADDRNETMASKGATEWAYDNS,适用于服务器等固定设备
  • 核心要点:网关与DNS是静态IP联网的必要参数,缺失将导致网络中断
  • 通过编辑配置文件或 nmtui 工具均可实现配置,后者提供更友好的交互界面
http://www.dtcms.com/a/535918.html

相关文章:

  • 政务AI大模型落地:聚焦四大场景,提升服务效率
  • 微美全息(NASDAQ:WIMI)双向跨链交互,搭建区块链互联互通“生态桥梁”
  • 郑州建网站价jquery 做网站
  • 【Rust实战】打造内存安全的网络代理:深入异步IO与并发编程
  • 公司网站建设是什么意思59一起做网站
  • 想让默认头像不再千篇一律,就顺手复刻了一下 GitHub 的思路
  • 《HTTP 安全与性能优化全攻略》
  • 【Web安全】OAuth2.0框架高频安全漏洞分析总结
  • 算法<C++>——双指针操作链表
  • Linux小课堂: SELinux安全子系统原理与Apache网站目录访问问题解决方案
  • 云计算学习(三)——子网划分
  • 回森统一客服服务 AI+数字技术引领自智网络迈入新阶段
  • 云计算概念及虚拟化
  • 域名信息查询网站广告设计总结
  • qq网站登录入口蒙古文政务网站建设工作汇报
  • Spring Boot3零基础教程,Kafka 的简介和使用,笔记76
  • Rust Web实战:构建高性能并发工具的艺术
  • Kafka 全方位技术文档
  • (场景题)Java 导出 Excel 的两种方式
  • Nacos配置中心动态刷新全解析:从基础配置到源码级调优(二)
  • Excel小技巧:Excel数据带有单位应该如何运算求和?
  • 相机外参初始估计
  • Excel 学习笔记
  • 网站地图模板一站式网络营销
  • 如何检查开源CMS的数据库连接问题?
  • VTK入门:vtkQuadraticHexahedron——会“弯曲”的高精度六面体
  • 基于python大数据的城市扬尘数宇化监控系统的设计与开发
  • MCU定点计算深度解析:原理、技巧与实现
  • 【普中Hi3861开发攻略--基于鸿蒙OS】-- 第 28 章 WIFI 实验-UDP 通信
  • 【C++ string 类实战指南】:从接口用法到 OJ 解题的全方位解析