当OpenWrt设备连接的PC能正常上网,但OpenWrt自身命令行(如通过SSH登录的系统终端)无法上网时,通常是OpenWrt系统自身的网络配置、DNS或防火墙规则出现了问题。以下是具体的排查思路和解决步骤:

一、先确认问题现象

在OpenWrt命令行中执行以下命令,判断具体故障点:

# 测试能否ping通外网IP(如百度DNS:180.76.76.76)
ping -c 3 180.76.76.76

# 测试能否解析域名(如ping百度)
ping -c 3 www.baidu.com
  • 若IP能ping通,但域名不能:问题出在 DNS配置
  • 若IP和域名都不能ping通:问题出在 网络接口配置、路由表或防火墙

二、针对性排查与解决

1. 排查DNS配置(域名无法解析)

OpenWrt命令行依赖DNS服务器解析域名,若DNS配置错误,会导致“能访问IP但不能访问域名”。

(1)查看当前DNS配置
# 查看系统DNS配置(临时生效,重启可能失效)
cat /etc/resolv.conf

# 查看OpenWrt持久化DNS配置(由dhcp服务管理)
cat /etc/config/dhcp
  • 正常情况下,/etc/resolv.conf 应包含有效的DNS服务器(如 nameserver 114.114.114.114 或运营商提供的DNS)。
  • 若文件为空或DNS服务器不可用(如 nameserver 127.0.0.1 但本地DNS服务未运行),则需要手动配置。
(2)临时修复DNS(立即生效)
# 手动添加公共DNS(如114DNS或阿里云DNS)
echo "nameserver 114.114.114.114" >> /etc/resolv.conf
echo "nameserver 223.5.5.5" >> /etc/resolv.conf
(3)持久化配置DNS(重启不失效)

OpenWrt的DNS通常由 dnsmasq 服务管理,需在配置文件中指定:

# 编辑dhcp配置
vi /etc/config/dhcp

# 在config dnsmasq部分添加或修改以下内容(指定上游DNS)
list server '114.114.114.114'
list server '223.5.5.5'

# 重启dnsmasq服务生效
/etc/init.d/dnsmasq restart

2. 排查网络接口与路由(IP无法ping通)

若IP也无法ping通,说明OpenWrt系统自身未正确连接外网,需检查 WAN接口配置路由表

(1)检查WAN接口是否获取到IP

OpenWrt的外网通常通过 wan 接口连接(可能是eth0.2、pppoe-wan等,根据实际配置而定):

# 查看所有接口状态(注意wan接口的IP、网关)
ip addr show
ip route show  # 查看路由表,重点看默认路由(default via ...)
  • 正常情况下,wan 接口应分配到IP(如 192.168.100.xxx 或公网IP),且路由表中有 默认路由(如 default via 192.168.100.1 dev wan)。
  • wan 接口无IP:可能是DHCP获取失败(如上级路由器未分配IP)或静态IP配置错误。
(2)修复WAN接口配置
  • 若WAN使用DHCP(自动获取IP):

    # 重启wan接口的DHCP客户端
    ifup wan
    
    # 查看DHCP获取日志,确认是否成功
    logread | grep -i dhcp
    • 若日志显示“无法获取IP”,检查上级设备(光猫、主路由器)是否正常,或网线是否插对(WAN口需连接上级设备的LAN口)。
  • 若WAN使用静态IP

    # 编辑网络配置
    vi /etc/config/network
    
    # 找到config interface 'wan'部分,确保配置正确:
    config interface 'wan'
        option ifname 'eth0.2'  # 接口名称,根据实际修改
        option proto 'static'
        option ipaddr '192.168.100.2'  # 与上级同网段的IP
        option netmask '255.255.255.0'
        option gateway '192.168.100.1'  # 上级设备网关
        option dns '114.114.114.114'    # 手动指定DNS
    
    # 重启网络生效
    /etc/init.d/network restart
(3)手动添加默认路由(临时应急)

若路由表中无默认路由,可临时手动添加(重启后失效,需持久化到 /etc/config/network):

# 假设网关为192.168.100.1,wan接口为eth0.2
ip route add default via 192.168.100.1 dev eth0.2

3. 排查防火墙规则(阻止系统出站流量)

OpenWrt的防火墙默认允许内网设备访问外网,但可能误配置了阻止系统自身(即路由器系统)访问外网的规则。

(1)查看防火墙配置
# 查看防火墙规则(重点看output链是否允许出站)
iptables -L OUTPUT
iptables -L zone_wan_output  # WAN区域的出站规则
  • 正常情况下,OUTPUT 链和 zone_wan_output 链应允许 ACCEPT 状态(即允许系统自身向WAN发送流量)。
  • 若规则为 DROPREJECT,则会阻止系统上网。
(2)临时允许WAN出站流量
# 允许系统向WAN发送所有流量(临时生效)
iptables -A zone_wan_output -j ACCEPT
iptables -A OUTPUT -j ACCEPT
(3)持久化防火墙配置
# 编辑防火墙配置
vi /etc/config/firewall

# 确保wan区域的output策略为ACCEPT
config zone
    option name 'wan'
    option input 'REJECT'
    option output 'ACCEPT'  # 允许出站
    option forward 'REJECT'
    option masq '1'
    option mtu_fix '1'

# 重启防火墙生效
/etc/init.d/firewall restart

4. 检查网络服务是否正常

部分核心服务(如 networkfirewall)未运行也可能导致问题:

# 检查关键服务状态
/etc/init.d/network status
/etc/init.d/firewall status
/etc/init.d/dnsmasq status

# 若服务未运行,手动启动
/etc/init.d/network start
/etc/init.d/firewall start
/etc/init.d/dnsmasq start

三、总结排查流程

  1. ping IPping 域名 区分是DNS问题还是网络连接问题。
  2. DNS问题:检查 /etc/resolv.confdnsmasq 配置,添加公共DNS。
  3. 网络连接问题:检查WAN接口IP、路由表默认路由,修复接口配置。
  4. 防火墙问题:确保WAN区域允许出站流量,避免规则阻止系统自身上网。

通过以上步骤,基本可以解决OpenWrt命令行无法上网的问题。若排查后仍有问题,可通过 logread 查看系统日志,进一步定位错误原因。

标签: none

添加新评论