排查一个多网卡的机器上不了网的问题(更改默认路由)

1. 首先查看自己的网关

先用inconfig查看自己的ip,如果ip已经被分配到了,网关肯定已经配好了。最简单的几个方法如下(任选一个在终端执行):

1. 用 ip route

推荐这个:

bash 复制代码
ip route

输出里类似会有一行:

text 复制代码
default via 192.168.11.1 dev wlp4s0 ...

via 后面的地址就是你的网关,比如这里就是:
192.168.11.1(示例)


2. 用 ip r | grep default

简化版:

bash 复制代码
ip r | grep default

同样看 via 后面的地址。


3. 用 route -n(旧命令)

有些系统还带这个命令:

bash 复制代码
route -n

输出里会有一行:

text 复制代码
Destination  Gateway        Genmask        Flags Iface
0.0.0.0      192.168.11.1   0.0.0.0        UG    wlp4s0

Gateway 那一列就是网关地址。


4. 用 nmcli(如果用 NetworkManager)

bash 复制代码
nmcli device show wlp4s0 | grep IP4.GATEWAY

会显示:

text 复制代码
IP4.GATEWAY:                         192.168.11.1

2. 查看自己的默认网关以及相关信息

shell 复制代码
这是一个容器内的设备,使用一个网线接在一个座位无线中继的路由器上,这个路由器的ip是192.168.11.5,也应该是网关,但是这个设备现在上不了网,它的信息输出如下:
bash-5.2# ip route
default via 192.168.2.1 dev eth0 proto static 
192.168.2.0/24 dev eth0 proto kernel scope link src 192.168.2.100 
192.168.11.0/24 dev eth1 proto kernel scope link src 192.168.11.20 
bash-5.2# route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         192.168.2.1     0.0.0.0         UG    0      0        0 eth0
192.168.2.0     0.0.0.0         255.255.255.0   U     0      0        0 eth0
192.168.11.0    0.0.0.0         255.255.255.0   U     0      0        0 eth1
bash-5.2# ifconfig
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.2.100  netmask 255.255.255.0  broadcast 192.168.2.255
        inet6 fe80::c22b:31ff:fe0d:6e64  prefixlen 64  scopeid 0x20<link>
        ether c0:2b:31:0d:6e:64  txqueuelen 1000  (Ethernet)
        RX packets 250442  bytes 75435281 (71.9 MiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 125  bytes 19412 (18.9 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
        device interrupt 17  base 0x2000  

eth1: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.11.20  netmask 255.255.255.0  broadcast 192.168.11.255
        inet6 240a:429a:200:7640:6076:3371:13f0:bbc7  prefixlen 64  scopeid 0x0<global>
        inet6 240a:429a:200:7640:c22b:31ff:fe0d:6e65  prefixlen 64  scopeid 0x0<global>
        inet6 fe80::c22b:31ff:fe0d:6e65  prefixlen 64  scopeid 0x20<link>
        ether c0:2b:31:0d:6e:65  txqueuelen 1000  (Ethernet)
        RX packets 187400  bytes 172449194 (164.4 MiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 552762  bytes 589704680 (562.3 MiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
        device interrupt 18  base 0x2000  

lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        inet6 ::1  prefixlen 128  scopeid 0x10<host>
        loop  txqueuelen 1000  (Local Loopback)
        RX packets 689976  bytes 705456856 (672.7 MiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 689976  bytes 705456856 (672.7 MiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

从你贴的信息看,现在这个容器或主机的默认网关配置和你实际的物理连接是不一致的,这就是"上不了网"的主要原因。

先把现状理一下:

  • eth0: 192.168.2.100/24,默认网关指向 192.168.2.1default via 192.168.2.1 dev eth0
  • eth1: 192.168.11.20/24,接在你的"无线中继路由器"上,这个路由器 IP 是 192.168.11.5

你说"用一根网线接在一个无线中继路由器上",那么真正能通外网的那条链路大概率是:

设备 eth1 (192.168.11.20)中继路由器 192.168.11.5 → 上级 Wi‑Fi/AP → 互联网

但当前路由表的默认路由走的是另外一个网络:

text 复制代码
default via 192.168.2.1 dev eth0

也就是说:所有去外网的包都从 eth0 发给 192.168.2.1,而不是从 eth1 发给 192.168.11.5,所以肯定上不了网(或者走的是一个根本不存在/不通的网关)。


1. 先确认 192.168.11.5 在 eth1 上是否可达

在容器里:

bash 复制代码
ping -c 4 192.168.11.5
  • 如果 ping 不通:

    • 要么你接线的那端 IP 没配成 192.168.11.5
    • 要么中继路由器 LAN 口不是 192.168.11.x 网段 / 被关机 / 接错口
    • 需要先在"无线中继路由器"上确认:
      • 它 LAN 口 IP 是否确实是 192.168.11.5/24
      • DHCP 开/关无所谓,但 IP 必须在 192.168.11.0/24 内
  • 如果 ping 得通,说明二层/三层直连是好的,只是默认路由错了。


2. 临时改默认网关到 192.168.11.5

在容器里,先删掉原来的默认路由,再加上新的(以 eth1 为出口):

bash 复制代码
ip route del default
ip route add default via 192.168.11.5 dev eth1

然后测试外网:

bash 复制代码
ping -c 4 8.8.8.8
ping -c 4 www.baidu.com
  • 8.8.8.8 能 ping 通但域名不行 → DNS 问题
  • 都不行 → 再排查中继路由器本身是否能上网

可以再看下路由表是否已经改对:

bash 复制代码
ip route

应该变成类似:

text 复制代码
default via 192.168.11.5 dev eth1
192.168.2.0/24 dev eth0 ...
192.168.11.0/24 dev eth1 ...

3. 容器里如何做"持久化"配置

这取决于你怎么启动容器的:

3.1 如果是 Docker,默认网络模式(bridge)

通常容器内部的 192.168.2.100 / 192.168.11.20 这种地址是你额外做了 macvlan 或 host 网络才会看到的。

常见几种情况:

  • --network host:那实际上你看到的是宿主机的网络配置,路由应该在宿主机上改,而不是容器里。

  • --network macvlan0 / 自建网络:网关应当在建网络时指定,如:

    bash 复制代码
    docker network create -d macvlan \
      --subnet=192.168.11.0/24 \
      --gateway=192.168.11.5 \
      -o parent=eth1 mynet

    然后用这个 network 启容器。

  • 如果你是通过某些编排(docker‑compose / k8s)指定了静态 IP,那么也要在对应 yml 里设置 gateway。

你可以把 docker ps / docker inspect <容器> 的网络配置贴出来,我可以按你实际环境给一套准确的配置方法。

3.2 如果容器是直接 chroot / LXC

那可能路由跟一个"轻量级系统"一样,用:

  • Alpine:/etc/network/interfaces 或 openrc 的 net scripts
  • Debian/Ubuntu:/etc/network/interfaces 或 netplan
  • CentOS/Rocky:NetworkManager / ifcfg

可以先看一下容器里是哪个发行版:

bash 复制代码
cat /etc/os-release

我可以根据这个告诉你要改哪一个配置文件、写什么内容来把默认网关改成 192.168.11.5。


4. 还需要确认的几个点(可以按顺序试)

  1. 宿主机能否从 192.168.11 段上网

    在宿主机上(不是容器):

    • ip addr 看 eth1/IP 是不是和容器类似
    • ping 192.168.11.5
    • ping 8.8.8.8

    如果宿主机本身就上不了网,那是中继路由器/上游网络的问题,不是容器的问题。

  2. DNS

    当你能 ping 通 8.8.8.8,但 ping www.baidu.com 不行时,在容器里设定 DNS,例如编辑 /etc/resolv.conf

    bash 复制代码
    nameserver 223.5.5.5
    nameserver 8.8.8.8

    然后再试。


5. 总结你现在最应该做的操作

在容器里立刻尝试:

bash 复制代码
ping -c 4 192.168.11.5      # 确认中继路由器可达

ip route del default        # 删除原来的 default via 192.168.2.1
ip route add default via 192.168.11.5 dev eth1

ping -c 4 8.8.8.8
ping -c 4 www.baidu.com

把这三步的输出贴出来(特别是 ping 192.168.11.5ip route 之后的结果),我可以帮你继续分析:

  • 是中继路由器没网
  • 还是容器网络模式/路由没配对
  • 或者还存在 NAT/DNS 其他问题。
相关推荐
2401_873587822 小时前
Linux——网络编程套接字
linux·服务器·网络
德迅云安全—珍珍2 小时前
什么是 DNS 缓存投毒攻击,有什么防护措施
网络·缓存
乾元2 小时前
兵器谱——深度学习、强化学习与 NLP 在安全中的典型应用场景
运维·网络·人工智能·深度学习·安全·自然语言处理·自动化
举手2 小时前
UDP Echo Server(学习版)
linux·服务器·网络·网络协议·学习·udp
上海云盾安全满满2 小时前
网络安全威胁是什么,类型有哪些
网络·安全·web安全
码农水水11 小时前
国家电网Java面试被问:TCP的BBR拥塞控制算法原理
java·开发语言·网络·分布式·面试·wpf
qq_3363139311 小时前
java基础-网络编程-TCP
java·网络·tcp/ip
testpassportcn12 小时前
UiPath-ADPV1 認證介紹|Automation Developer Professional v1
网络·学习·改行学it
不凉帅13 小时前
NO.2计算机基础
网络·嵌入式·硬件·软件·计算机基础