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.1 (
default 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/ 自建网络:网关应当在建网络时指定,如:bashdocker 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. 还需要确认的几个点(可以按顺序试)
-
宿主机能否从 192.168.11 段上网
在宿主机上(不是容器):
ip addr看 eth1/IP 是不是和容器类似ping 192.168.11.5ping 8.8.8.8
如果宿主机本身就上不了网,那是中继路由器/上游网络的问题,不是容器的问题。
-
DNS
当你能 ping 通 8.8.8.8,但
ping www.baidu.com不行时,在容器里设定 DNS,例如编辑/etc/resolv.conf:bashnameserver 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.5 和 ip route 之后的结果),我可以帮你继续分析:
- 是中继路由器没网
- 还是容器网络模式/路由没配对
- 或者还存在 NAT/DNS 其他问题。