尧图建网站 尧图建网站 YAOTU WEB BUILD 免费咨询
ARTICLE DETAIL

资讯详情

深耕网站建设与建站编程的一线实战洞察。

Linux网络配置全攻略:从nmcli到netplan,解决无法访问外网问题

Linux网络配置全攻略:从nmcli到netplan,解决无法访问外网问题 1. 项目概述与核心需求解析最近在后台和社群里经常看到有刚接触Linux的朋友特别是那些在本地虚拟机或者新装的服务器上折腾的小伙伴遇到一个非常基础但又很关键的问题系统装好了命令行也打开了但ping www.baidu.com没反应curl也连不上网。这感觉就像新房子装修好了水电也通了但发现大门钥匙不对出不去也进不来非常憋屈。这个“如何在Linux下配置网络访问外网”的问题看似简单实则背后涉及了从网络接口识别、地址分配、路由设置到DNS解析等一系列环节任何一个环节卡壳都会导致“与世隔绝”。今天我就结合自己这些年从桌面到服务器运维踩过的各种坑把Linux下配置网络特别是让系统能顺畅访问外部互联网的完整流程、不同场景下的方案选择以及那些官方手册里不会写的排错心法给大家系统地捋一遍。无论你是在用CentOS、Ubuntu、Debian还是其他主流发行版无论你的网络环境是动态获取IPDHCP的办公室/家庭网络还是需要手动配置固定IP的服务器机房甚至是笔记本电脑上通过Wi-Fi连接这篇文章的目标就是让你能对照着操作一步步把你的Linux系统“接入世界”。我们会从最基础的“检查当前状态”开始到“配置核心参数”再到“验证与深度排错”最后分享一些在特殊网络环境如代理后面下的处理技巧。放心我不会只扔给你几条命令我会详细解释每一条命令在干什么、为什么要这么干以及如果出错了屏幕上的提示到底在说什么。2. 网络配置基础核心概念与工具扫盲在动手敲命令之前花几分钟理解几个核心概念和工具能让你在后续配置和排错时心里更有底而不是机械地复制粘贴。2.1 关键网络概念快速理解网络接口Network Interface这是你的网卡在系统里的逻辑表示。有线网卡通常命名为eth0,ens33,enp0s3等不同发行版和系统版本命名规则可能不同。无线网卡则可能是wlan0,wlp2s0等。虚拟网卡如lo是回环接口用于本机内部通信。第一步永远是先搞清楚你有几个接口哪个是连接外网的。IP地址与子网掩码这是设备在网络中的“门牌号”。192.168.1.100/24这样的表示法中192.168.1.100是IP地址/24或子网掩码255.255.255.0定义了该IP所在的本地网络范围。只有同在一个子网内的设备才能直接通信二层通信。默认网关Default Gateway想象一下你要寄一封信给另一个城市的朋友你得先把信投递到本地的邮局。默认网关就是你本地网络的“邮局”所有目的地不在你本地子网的网络数据包都会被发送到默认网关由它决定下一步往哪走。通常网关地址就是你路由器内网口的IP比如192.168.1.1。DNS服务器域名系统服务器。电脑擅长记数字IP地址人擅长记名字如baidu.com。DNS的作用就是帮你把baidu.com翻译成110.242.68.66这样的IP地址。如果DNS配置错误你可能会遇到“能ping通IP但打不开网页”的诡异情况。2.2 新旧两代网络配置工具Linux世界在网络配置上经历了从传统命令到新式管理工具的演变了解它们有助于你应对不同系统。传统“网络脚本”体系ifcfg系列常见于CentOS/RHEL 7及更早版本以及一些较旧的Debian/Ubuntu。核心配置文件在/etc/sysconfig/network-scripts/ifcfg-接口名。管理命令主要是ifconfig查看配置、route查看路由、service network restart重启服务。这套工具直接、底层但不同发行版文件位置略有差异。新式“网络管理器”与systemd-networkdNetworkManager现代桌面版Linux如Ubuntu Desktop, Fedora Workstation的默认选择它也支持服务器。它通过nmcli命令行或nmtui文本界面工具管理能更好地处理Wi-Fi、移动宽带等动态连接。配置文件通常位于/etc/NetworkManager/system-connections/。systemd-networkd一个更轻量级、专注于服务器和嵌入式系统的方案常见于较新的CoreOS、Container Linux以及一些最小化安装的服务器系统中。配置文件在/etc/systemd/network/目录下。netplanUbuntu 17.10之后引入的网络配置抽象层。它本身不配置网络而是提供了一个统一的YAML格式配置文件通常在/etc/netplan/目录下然后由它来驱动后端的NetworkManager或systemd-networkd去实际执行配置。这是目前Ubuntu服务器的推荐方式。对于新手我建议先通过ip addr或ifconfig如果已安装查看当前接口和IP然后根据你的发行版确定使用哪种工具。下面我们将分场景进行实操。注意在生产服务器上修改网络配置前务必确保你拥有通过串口控制台Console或带外管理如iDRAC、iLO的访问方式。因为一旦配置错误导致网络中断你将无法通过SSH远程连接进行修复。如果只有SSH一种方式修改时请万分小心或者准备一个能在短时间内自动回滚的配置脚本。3. 场景一使用NetworkManagernmcli配置动态与静态IP如果你的系统有图形界面或者你使用的是现代发行版的服务器版并安装了NetworkManager那么nmcli是一个非常强大且统一的管理工具。它几乎可以完成所有网络配置工作。3.1 查看当前连接与设备状态首先让我们看看系统识别到了什么。nmcli device status这条命令会列出所有网络设备DEVICE、其类型TYPE、状态STATE以及关联的连接CONNECTION。STATE显示为connected表示已连接并激活。CONNECTION列显示的是当前激活的配置文件名。如果想看更详细的当前连接信息包括IP、网关、DNSnmcli connection show --active或者查看某个特定连接如Wired connection 1的详细配置nmcli connection show Wired connection 13.2 配置动态获取IPDHCP这是最常见的情况家庭或办公室网络通常由路由器自动分配IP。假设你的有线网卡设备名是ens33并且系统已经为其创建了一个默认的连接配置通常安装时或首次插入网线时会自动创建。修改连接配置为自动DHCPsudo nmcli connection modify Wired connection 1 ipv4.method auto这条命令将名为Wired connection 1的连接的IPv4方法设置为auto即DHCP。可选如果希望连接同时自动获取IPv6地址sudo nmcli connection modify Wired connection 1 ipv6.method auto关闭并重新启动该连接以应用更改sudo nmcli connection down Wired connection 1 sudo nmcli connection up Wired connection 1或者使用一条命令重启sudo nmcli connection reload sudo nmcli connection up Wired connection 1验证再次运行nmcli connection show Wired connection 1查看ipv4.addresses和ipv4.gateway字段应该已经获取到了由路由器分配的IP和网关。同时用ping -c 4 8.8.8.8测试基础连通性。3.3 配置静态IP地址在服务器环境或需要固定IP的场景下需要手动配置静态地址。假设我们要将ens33配置为192.168.1.100/24网关192.168.1.1DNS服务器为223.5.5.5和223.6.6.6。修改连接配置sudo nmcli connection modify Wired connection 1 \ ipv4.method manual \ ipv4.addresses 192.168.1.100/24 \ ipv4.gateway 192.168.1.1 \ ipv4.dns 223.5.5.5 223.6.6.6ipv4.method manual指定为手动配置。ipv4.addresses设置IP地址和子网掩码用CIDR格式/24表示。ipv4.gateway设置默认网关。ipv4.dns设置DNS服务器多个DNS用空格隔开。重启连接sudo nmcli connection down Wired connection 1 sudo nmcli connection up Wired connection 1验证静态配置ip addr show ens33 # 查看IP是否配置正确 ip route show default # 查看默认路由网关是否正确 cat /etc/resolv.conf # 查看DNS配置是否生效注意此文件可能由NetworkManager管理直接编辑可能无效3.4 使用nmtui文本界面工具如果你不习惯命令行或者觉得参数太多容易记错几乎所有带有NetworkManager的系统都提供了一个非常友好的文本用户界面工具——nmtui。在终端直接输入sudo nmtui你会看到一个简单的菜单。选择“Edit a connection”然后选择你要编辑的连接如ens33回车后就可以在一个表单里直观地修改IP获取方式Automatic/Manual、地址、网关、DNS等。修改完成后选择“OK”保存回到主菜单选择“Activate a connection” - “Deactivate” - “Activate”来重新激活连接即可。对于新手来说nmtui避免了命令拼写错误是快速配置的利器。4. 场景二在Ubuntu Server上使用Netplan配置网络从Ubuntu 17.10开始Netplan成为了默认的网络配置工具。它的思路是“声明式”配置你写一个YAML文件描述你想要的网络状态Netplan将其翻译成后端NetworkManager或systemd-networkd的配置。4.1 定位与编辑Netplan配置文件Netplan的配置文件存放在/etc/netplan/目录下文件名可能是01-netcfg.yaml、50-cloud-init.yaml或00-installer-config.yaml等。使用ls命令查看ls -lh /etc/netplan/通常只有一个YAML文件。备份原文件后使用sudo权限编辑它例如sudo cp /etc/netplan/00-installer-config.yaml /etc/netplan/00-installer-config.yaml.bak sudo nano /etc/netplan/00-installer-config.yaml4.2 配置动态IPDHCP示例一个最简单的DHCP配置可能如下所示network: version: 2 renderer: networkd # 或 network-manager 服务器版常用networkd ethernets: ens33: dhcp4: trueversion: 2必须指定Netplan配置的版本。renderer指定后端渲染器。对于Ubuntu Server通常是networkd使用systemd-networkd对于Ubuntu Desktop可能是NetworkManager。ethernets定义有线以太网设备。ens33你的网络接口名。dhcp4: true为IPv4启用DHCP。4.3 配置静态IP地址示例将ens33配置为静态地址192.168.1.100/24网关192.168.1.1DNS服务器8.8.8.8和8.8.4.4。network: version: 2 renderer: networkd ethernets: ens33: addresses: - 192.168.1.100/24 routes: - to: default via: 192.168.1.1 nameservers: addresses: [8.8.8.8, 8.8.4.4]addresses指定IP地址列表CIDR格式。routes定义路由。to: default表示默认路由via指定网关。nameservers定义DNS服务器地址。4.4 应用Netplan配置编辑并保存YAML文件后使用以下命令测试配置语法并应用sudo netplan try这条命令会应用新配置并给你一个回滚的倒计时通常120秒。如果在倒计时内网络工作正常按回车确认配置。如果网络断了倒计时结束后配置会自动回滚到之前的状态。这是一个非常安全的功能。或者直接应用配置如果确信配置正确sudo netplan apply应用后使用ip addr和ping命令验证网络是否已按预期配置并可以访问外网。实操心得Netplan的YAML格式对缩进非常敏感必须使用空格不能使用Tab键。一个缩进错误就可能导致配置无法生效。建议使用能高亮YAML语法的编辑器如nano,vim并仔细检查缩进层级。另外netplan try是你的安全绳在物理机或唯一网络通道上操作时务必优先使用它。5. 场景三在传统系统如CentOS 7中使用网络脚本如果你的系统是CentOS 7、RHEL 7或类似使用传统网络脚本的发行版网络接口的配置文件位于/etc/sysconfig/network-scripts/目录下文件名形如ifcfg-ens33。5.1 配置动态IPDHCP编辑或创建对应接口的配置文件sudo vi /etc/sysconfig/network-scripts/ifcfg-ens33文件内容应类似如下TYPEEthernet BOOTPROTOdhcp NAMEens33 DEVICEens33 ONBOOTyesBOOTPROTOdhcp关键参数指定通过DHCP获取IP。ONBOOTyes确保系统启动时自动激活该接口。5.2 配置静态IP地址将BOOTPROTO改为static或none并添加IP、网关等参数TYPEEthernet BOOTPROTOstatic # 或 none NAMEens33 DEVICEens33 ONBOOTyes IPADDR192.168.1.100 NETMASK255.255.255.0 # 或者使用PREFIX24 GATEWAY192.168.1.1 DNS1223.5.5.5 DNS2223.6.6.65.3 应用配置并重启网络服务保存文件后重启网络服务以使更改生效sudo systemctl restart network或者使用传统命令sudo service network restart然后使用ifconfig ens33或ip addr show ens33检查IP是否配置成功并使用ping测试连通性。注意事项在CentOS 8/RHEL 8及更新版本中network-scripts包已被弃用默认使用NetworkManager。虽然仍可安装network-scripts来使用旧方式但建议迁移到nmcli。6. 网络连通性深度诊断与排错实录配置完成后如果还是无法访问外网别慌。按照以下层次化的排查流程绝大多数问题都能定位。6.1 排查流程四步法第一步检查物理层与接口状态ip link show查看接口状态。state UP表示链路层已启动网线插好无线已关联。如果显示state DOWN需要先激活接口sudo ip link set ens33 up # 对于有线接口对于无线接口可能需要使用nmcli或wpa_supplicant进行连接。第二步检查IP层配置ip addr show确认你的接口是否分配到了正确的IP地址。如果没有IP回顾你的配置是DHCP还是静态。如果是DHCP可以尝试手动触发一下sudo dhclient -v ens33 # 释放并重新获取DHCP租约如果是静态IP检查配置文件是否有拼写错误。第三步检查局域网内连通性网关假设你的网关是192.168.1.1。ping -c 4 192.168.1.1如果通说明你的主机到路由器网关的物理和IP层都是好的问题可能出在网关本身或更上层。如果不通确认网关IP地址是否正确。有时网关可能是.2或.254。检查子网掩码是否配置正确。错误的掩码会导致主机误判某个IP是否在同一子网。使用arp -an查看ARP缓存看是否能解析出网关的MAC地址。如果看不到可能是二层通信问题交换机端口、VLAN隔离等。第四步检查路由与外部连通性ip route show查看路由表确保有一条默认路由default via 网关IP dev 接口指向正确的网关。ping -c 4 8.8.8.8尝试ping一个公网IP如Google的DNS8.8.8.8。如果通恭喜你的IP层和路由是完全正常的。无法通过域名访问如打开网页的问题大概率出在DNS。如果不通但能ping通网关问题可能出在网关的NAT/防火墙设置、运营商的线路或者你ping的公网IP本身禁用了ICMP回应。可以尝试curl -v http://某个公网IP:80测试TCP连接。6.2 DNS问题专项排查如果ping 8.8.8.8通但ping www.baidu.com不通或者浏览器无法打开网页基本就是DNS问题。检查当前使用的DNS服务器cat /etc/resolv.conf查看nameserver行。注意在NetworkManager或systemd-resolved管理的系统上这个文件可能是自动生成的或是一个软链接直接编辑它可能无效。使用nslookup或dig测试DNS解析nslookup www.baidu.com # 或 dig www.baidu.com如果返回server can‘t find或超时说明配置的DNS服务器无法工作。临时修改DNS进行测试 可以临时在/etc/resolv.conf中添加一个可靠的公共DNS如nameserver 223.5.5.5然后再次测试nslookup。如果解析成功说明原DNS配置有问题你需要回到网络配置工具nmcli,netplan,ifcfg文件中永久修改DNS设置。检查防火墙是否拦截了DNS查询DNS通常使用UDP 53端口。检查本地防火墙规则是否放行了出站的UDP 53请求。6.3 常见问题速查表现象可能原因排查命令/步骤接口状态为DOWN网线未插/无线未连接接口被手动关闭ip link showsudo ip link set 接口 up无IP地址DHCPDHCP服务器未响应防火墙阻止DHCP请求客户端未运行sudo dhclient -v 接口检查网络内其他设备能否获取IP无IP地址静态配置文件错误子网掩码错误导致IP无效检查ifcfg文件或netplanYAML语法和缩进能ping通网关但ping不通外网IP网关未配置NAT或路由网关出口防火墙规则限制ip route show default登录路由器检查WAN口状态和防火墙能ping通外网IP但无法解析域名DNS服务器配置错误防火墙拦截DNS查询cat /etc/resolv.confnslookup www.baidu.com临时更换DNS测试间歇性断网或速度极慢网线/水晶头故障交换机端口问题IP冲突MTU设置问题更换网线/端口arping检查IP冲突ping -s 1472 -M do 8.8.8.8测试MTU7. 进阶与特殊场景处理7.1 配置多个IP地址别名有时一台服务器需要承载多个服务每个服务绑定不同的IP。可以为单个物理网卡配置多个IP别名。使用ip命令临时添加sudo ip addr add 192.168.1.101/24 dev ens33 label ens33:0使用NetworkManager永久配置sudo nmcli connection modify Wired connection 1 ipv4.addresses 192.168.1.101/24 sudo nmcli connection up Wired connection 1使用Netplan配置在YAML文件的addresses列表中添加多个地址即可。7.2 在代理服务器后方配置系统级代理如果你的Linux主机需要通过公司或学校的HTTP/HTTPS代理才能访问外网除了在浏览器或应用内设置还可以配置系统级的环境变量让大部分命令行工具如curl,wget,apt自动使用代理。编辑用户配置文件如~/.bashrc或~/.zshrc或系统配置文件如/etc/environmentexport http_proxyhttp://proxy-server-ip:port export https_proxyhttp://proxy-server-ip:port # 注意很多HTTPS代理也使用http://协议 export ftp_proxyhttp://proxy-server-ip:port export no_proxylocalhost,127.0.0.1,.internal-domain.com # 排除不需要代理的地址保存后执行source ~/.bashrc使配置生效。之后curl www.baidu.com就会通过代理服务器进行访问。对于aptDebian/Ubuntu需要单独配置sudo tee /etc/apt/apt.conf.d/95proxies EOF Acquire::http::Proxy http://proxy-server-ip:port; Acquire::https::Proxy http://proxy-server-ip:port; EOF7.3 无线网络Wi-Fi连接配置对于带有无线网卡的笔记本或迷你主机使用nmcli连接Wi-Fi非常方便。扫描可用的Wi-Fi网络sudo nmcli device wifi list连接到一个开放的Wi-Fi网络sudo nmcli device wifi connect SSID名称连接到使用WPA/WPA2加密的Wi-Fi网络sudo nmcli device wifi connect SSID名称 password 密码查看已保存的Wi-Fi连接nmcli connection show你可以像修改有线连接一样使用nmcli connection modify来修改Wi-Fi连接的IP配置静态/DHCP。对于没有图形界面且NetworkManager可能未安装的服务器连接Wi-Fi会更复杂通常需要配置wpa_supplicant这超出了本文的基础范围但思路是类似的配置SSID和密码 - 关联到无线接口 - 获取IP。网络配置是Linux系统管理的基石之一看似繁琐但一旦理解了其层次物理层 - IP层 - 路由 - DNS和掌握了对应的工具ip,nmcli,netplan就能从容应对绝大多数场景。记住修改网络配置前做好备份使用安全的应用方式如netplan try并遵循从底层到高层的排查逻辑你就能让每一台Linux设备都稳定地连接到更广阔的网络世界。
返回列表