解决linux不能上外网

本文描述了在Linux系统中遇到无法访问外网的问题,即能ping通内网和网关,但无法ping通DNS及外部网站。作者尝试了检查网络连接、设置DNS、确认网关设置等步骤,最终发现是/etc/sysconfig/network和/etc/sysconfig/network-scripts/ifcfg-eth0文件中网关地址不一致导致的问题。修复这一配置并重启网络服务后,Linux成功连接到外网。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

问题的提出:

       最近用VMware 9.0虚拟机装了一个linux系统,但奇怪的是:linux能ping通网关、能ping通局域网内的所有windows机器,但就是ping不同DNS地址、不能ping通任何外网,例如:执行如下命令时

           ping   www.baidu.com

则始终弹出:

           unknown  host www.baidu.com

       从网上搜到如下解决方案,并按其操作,依然不行,如下红色字体为网上提供的解决方案(转自:http://blog.youkuaiyun.com/xionglang7/article/details/7341653):

解决linux ping: unknown host www.baidu.com 
ping: unknown host www.baidu.com" 
解决方案: 
   如果某台Linux服务器ping不通域名, 如下提示: 
[root@localhost ~]# ping www.baidu.com
ping: unknown host www.baidu.com

首先确定已经连接上路由器,并且路由器能够访问外网,可以通过访问网关进行确定

[root@localhost ~]# ping 192.168.1.1
PING 192.168.1.1 (192.168.1.1) 56(84) bytes of data.
64 bytes from 192.168.1.1: icmp_seq=1 ttl=64 time=2.96 ms
64 bytes from 192.168.1.1: icmp_seq=2 ttl=64 time=1.75 ms

如果确定网络没问题的情况下, 可以通过如下步骤寻找解决办法: 
1) 确定设置了域名服务器, 没有的话, 建议设置Google的公共DNS服务, 它应该不会出问题的 
[root@localhost ~]# cat /etc/resolv.conf

search localdomain

因为我的DNS没有设置所以导致了ping外网ping不通。将dns添加到该文件中

[root@localhost ~]# vi /etc/resolv.conf

search localdomain
nameserver 202.98.96.68
nameserver 61.139.2.69
~

2) 确保网关已设置 
# grep GATEWAY /etc/sysconfig/network-scripts/ifcfg* 
------------------------------------------------------------------- 
/etc/sysconfig/network-scripts/ifcfg-eth0:GATEWAY=192.168.40.1 
------------------------------------------------------------------- 
如果未设置, 则通过如下方式增加网关: 
# route add default gw 192.168.40.1 
或者手工编写/etc/sysconfig/network-scripts/ifcfg*文件后, 重启network服务: 
# service network restart 
3) 确保可用dns解析 
# grep hosts /etc/nsswitch.conf 
------------------------------------------------------------------- 
hosts:      files dns 
------------------------------------------------------------------- 
如果以上哪个有问题, 修正后, 再测试, 应该就没问题了: 
#ping -c 3 www.baidu.com 
PING www.a.shifen.com (220.181.6.175) 56(84) bytes of data. 
64 bytes from 220.181.6.175: icmp_seq=0 ttl=50 time=9.51 ms 
64 bytes from 220.181.6.175: icmp_seq=1 ttl=50 time=8.45 ms 
64 bytes from 220.181.6.175: icmp_seq=2 ttl=50 time=8.97 ms 
--- www.a.shifen.com ping statistics --- 
3 packets transmitted, 3 received, 0% packet loss, time 2002ms 
rtt min/avg/max/mdev = 8.450/8.977/9.511/0.446 ms, pipe 2 
--End--  
按照上述红色字体一步一步操作完成后依然ping不通外网,经过艰苦排查,最后发现是/etc/sysconfig/network-scripts/ifcfg-eth0中GATEWAY中的地址和/etc/sysconfig/network中GATEWAY中的地址不一致导致,/etc/sysconfig/network-scripts/ifcfg-eth0中GATEWAY中的地址为网关的IP,但/etc/sysconfig/network中GATEWAY中的地址则不是网关的IP,将
/etc/sysconfig/network-scripts/ifcfg-eth0中GATEWAY中的地址和/etc/sysconfig/network中GATEWAY中的地址都设置为网关的IP,重启Linux或执行service network restart命令后再执行 ping   www.baidu.com,此时发现才能联通外网了

### 可能的原因分析 当遇到虚拟机 CentOS 7 能够 ping 通外网却无法被本地主机 ping 通的情况时,这通常涉及到网络配置或防火墙设置方面的问题。具体原因可能有如下几种: - **网络适配器模式不匹配**:如果虚拟机使用的网络适配器模式不适合当前环境,则可能导致此类通信障碍[^1]。 - **防火墙阻止 ICMP 请求**:CentOS 默认的安全策略可能会阻挡来自外部设备的 ICMP Echo Request (即 `ping` 命令),即使这些请求来自于同一局域网内的其他机器[^2]。 ### 解决方案 #### 方法一:调整 VMWare 的网络适配器模式 对于 VMware 中运行的 Linux 客户端而言,建议将网络适配器设为桥接模式(Bridged Mode)而非 NAT 或仅限主机(Host-only)[^3]。这样做的好处在于它使得虚拟机能像物理计算机一样直接接入实际的物理网络中,从而获得独立 IP 地址并与其他联网设备平等交流。 ```bash # 打开VMware Workstation, 编辑 -> 虚拟网络编辑器 -> 更改适配器设置为桥接模式 ``` #### 方法二:修改防火墙规则允许 ICMP 流量通过 为了确保能够接收到来自本地主机或其他内部网络节点发出的数据包,在确认网络连接无误之后还需要检查系统的防火墙设定。可以通过临时关闭 firewalld 来验证是否为此因素引起;如果是的话再考虑永久开放特定类型的流量访问权限。 ```bash sudo systemctl stop firewalld.service # 关闭firewall服务用于初步排查问题所在 sudo iptables -A INPUT -p icmp --icmp-type echo-request -j ACCEPT # 添加ICMP接受规则 sudo firewall-cmd --add-rich-rule='rule protocol value="icmp" accept' --permanent # 使用Firewalld添加持久化规则 sudo systemctl restart network # 重启网络使更改生效 ``` #### 方法三:核查 SELinux 设置 有时安全增强型 Linux(Security Enhanced Linux)也会干扰正常的网络通讯行为。可通过查看 `/etc/selinux/config` 文件来了解其状态,并适当放宽控制级别以便排除潜在影响。 ```bash cat /etc/selinux/config | grep ^SELINUX= # 查看现有selinux配置 setenforce 0 # 将强制执行模式切换至宽容模式(Permissive) ``` 以上措施应该可以帮助解决大多数情况下发生的 "Linux 系统可 Ping 外网但不可 Ping 本地主机" 的现象。不过需要注意的是每种情况都有所差异,因此还需根据实际情况灵活运用上述方法进行调试。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值