整个局域网访问不上外网

经过一宿断电

经过一宿断电,公司内网所有设备都无法访问到公网。

(base) xlh626@xlh626-OEM:~$ 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=292 ms
64 bytes from 192.168.1.1: icmp_seq=2 ttl=64 time=328 ms
^C
--- 192.168.1.1 ping statistics ---
3 packets transmitted, 2 received, 33.3333% packet loss, time 2002ms
rtt min/avg/max/mdev = 292.278/310.015/327.753/17.737 ms
(base) xlh626@xlh626-OEM:~$ ping 192.168.1.2
PING 192.168.1.2 (192.168.1.2) 56(84) bytes of data.
64 bytes from 192.168.1.2: icmp_seq=1 ttl=64 time=0.312 ms
64 bytes from 192.168.1.2: icmp_seq=2 ttl=64 time=0.569 ms
^C
--- 192.168.1.2 ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1016ms
rtt min/avg/max/mdev = 0.312/0.440/0.569/0.128 ms
(base) xlh626@xlh626-OEM:~$
(base) xlh626@xlh626-OEM:~$ ping baidu.com
ping: baidu.com: 域名解析出现暂时性错误
(base) xlh626@xlh626-OEM:~$ ping 8.8.8.8
PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data.
From 192.168.1.2 icmp_seq=152 Destination Net Unreachable
(base) xlh626@xlh626-OEM:~$ ping 223.5.5.5
PING 223.5.5.5 (223.5.5.5) 56(84) bytes of data.
From 192.168.1.2 icmp_seq=1 Destination Net Unreachable
From 192.168.1.2 icmp_seq=2 Destination Net Unreachable
^C
--- 223.5.5.5 ping statistics ---
2 packets transmitted, 0 received, +2 errors, 100% packet loss, time 1047ms

可见,内网能访问,但是主路由访问延迟很高,就不正常,旁路由的访问延迟就很合理。
域名无法访问呢,谷歌的DNS服务器无法访问,阿里的DNS无法访问。

查看路由表

(base) xlh626@xlh626-OEM:~$ ip route
default via 192.168.1.2 dev enp2s0 proto static metric 20100
172.17.0.0/16 dev docker0 proto kernel scope link src 172.17.0.1 linkdown
192.168.1.0/24 dev enp2s0 proto kernel scope link src 192.168.1.4 metric 100
(base) xlh626@xlh626-OEM:~$ ^C

可见我的ip是1.4,查看的这个旁路由ip是1.2
接着登录到旁路由查看。

root@BleachWrt:~# ip route
default via 192.168.1.1 dev br-lan
10.32.134.0/24 dev ztp6nf4n7e proto kernel scope link src 10.32.134.1
172.17.0.0/16 dev docker0 proto kernel scope link src 172.17.0.1 linkdown
192.168.1.0/24 dev br-lan proto kernel scope link src 192.168.1.2
root@BleachWrt:~# ^C

旁路由指定的网关是主路由1.1,并且有两条规则

  1. 10.32.134.0/24网段的流量走ztp6nf4n7e网卡发送到10.32.134.1设备上
  2. 192.168.1.0/24网段的流量走br-lan发送到1.2设备(旁路由自己,不转发)

尝试探测一下主路由上网能力。

C:\Users\Administrator>ping 223.5.5.5

正在 Ping 223.5.5.5 具有 32 字节的数据:
来自 223.5.5.5 的回复: 字节=32 时间<1ms TTL=128
来自 223.5.5.5 的回复: 字节=32 时间<1ms TTL=128
来自 223.5.5.5 的回复: 字节=32 时间<1ms TTL=128
来自 223.5.5.5 的回复: 字节=32 时间<1ms TTL=128

223.5.5.5 的 Ping 统计信息:
    数据包: 已发送 = 4,已接收 = 4,丢失 = 0 (0% 丢失),
往返行程的估计时间(以毫秒为单位):
    最短 = 0ms,最长 = 0ms,平均 = 0ms
C:\Users\Administrator>ipconfig

找来台window设备直连主路由,拔掉了旁路由和主路由的lan相连,让windows的网关指定为主路由。发现可以正常访问dns,说明刚才unreachable是因为旁路由的网络策略。

查看旁路由上网能力

root@BleachWrt:~# ping -c 4 223.5.5.5
PING 223.5.5.5 (223.5.5.5): 56 data bytes
64 bytes from 223.5.5.5: seq=0 ttl=51 time=15.518 ms
64 bytes from 223.5.5.5: seq=1 ttl=51 time=14.408 ms
64 bytes from 223.5.5.5: seq=2 ttl=51 time=9.070 ms
64 bytes from 223.5.5.5: seq=3 ttl=51 time=12.672 ms

--- 223.5.5.5 ping statistics ---
4 packets transmitted, 4 packets received, 0% packet loss
round-trip min/avg/max = 9.070/12.917/15.518 ms
root@BleachWrt:~# ping -c 4 8.8.8.8
PING 8.8.8.8 (8.8.8.8): 56 data bytes
64 bytes from 8.8.8.8: seq=0 ttl=110 time=78.296 ms
64 bytes from 8.8.8.8: seq=1 ttl=110 time=82.841 ms

--- 8.8.8.8 ping statistics ---
4 packets transmitted, 2 packets received, 50% packet loss
round-trip min/avg/max = 78.296/80.568/82.841 ms
root@BleachWrt:~# nslookup baidu.com

旁路由能请求也有返回,且还算正常,说明可能问题在旁路由到其他设备上。

尝试追踪路由

//普通主机上
(base) xlh626@xlh626-OEM:~$ traceroute 223.5.5.5
traceroute to 223.5.5.5 (223.5.5.5), 30 hops max, 60 byte packets
 1  * * *
 2  * * *
 3  * * *
 4  * * *
 5  * * *
 6  * * *
 7  * * *
 8  * * *
 9  * * *
10  * * *
11  * * *
12  * * *
13  * * *
14  * * *
15  * * *
16  * * *
17  * * *
18  * * *
19  * * *
20  * * *
21  * * *
22  * * *
23  * * *
24  * * *
25  * * *
26  * * *
27  * * *
28  * * *
29  * * *
30  * * *


//旁路由上
root@BleachWrt:~# traceroute 223.5.5.5
traceroute to 223.5.5.5 (223.5.5.5), 30 hops max, 46 byte packets
 1  192.168.1.1 (192.168.1.1)  60.605 ms  42.107 ms  49.355 ms
 2  *  *  *
 3  122.231.1.19 (122.231.1.19)  42.286 ms  125.118.13.85 (125.118.13.85)  15.716 ms  115.227.150.241 (115.227.150.241)  5.661 ms
 4  *  *  *
 5  *  61.164.31.190 (61.164.31.190)  15.185 ms  61.164.31.202 (61.164.31.202)  7.878 ms
 6  115.236.101.213 (115.236.101.213)  8.195 ms  122.224.214.70 (122.224.214.70)  5.616 ms  115.238.21.117 (115.238.21.117)  11.087 ms
 7  *  *  *
 8  *  *  *
 9  *  *  *
10  *  *  *
11  *  *  *
12  *  *

这里更是佐证了之前的猜测,旁路由正常跑出主路由,访问公网。主机一个跃点都没有。

解法

这样有两种解法:

  1. 让局域网所有流量都走主路由发送到旁路由,由旁路由转发,这样的缺点是旁路有出问题,整个局域网无法上网。
    1. 主机->旁路有->主路由->外网->主路由->旁路有->主机
    2. 主机->主路由->外网->主路由->旁路有->主机
  2. 让旁路有改写经过它的流量的源地址,让主路由知道原路返回。
    1. 主机->旁路有->主路由->外网->主路由->旁路有->主机
    2. 主机->主路由->外网->主路由->主机
      这里我选了方案二。
//旁路由上。
%% 旁路有清理下缓存 %%
iptables -t nat -F
%% 添加策略 %%
iptables -t nat -A POSTROUTING -o br-lan -j SNAT --to-source 192.168.1.2
%% 查看路由表 %%
iptables -t nat -L -n -v

此时在再主机上已经能traceroute 8.8.8.8了。

(base) xlh626@xlh626-OEM:~$ traceroute 8.8.8.8
traceroute to 8.8.8.8 (8.8.8.8), 30 hops max, 60 byte packets
 1  192.168.1.2 (192.168.1.2)  0.332 ms  0.280 ms  0.254 ms
 2  192.168.1.1 (192.168.1.1)  60.694 ms  60.667 ms  60.646 ms
 3  * * *
 4  * 122.231.1.3 (122.231.1.3)  107.804 ms 115.227.150.237 (115.227.150.237)  107.781 ms
 5  * 122.231.1.26 (122.231.1.26)  107.735 ms *
 6  220.191.198.197 (220.191.198.197)  107.689 ms 220.191.198.173 (220.191.198.173)  17.701 ms 61.164.8.86 (61.164.8.86)  18.132 ms
 7  202.97.101.25 (202.97.101.25)  28.658 ms * 202.97.23.229 (202.97.23.229)  269.975 ms
 8  202.97.62.114 (202.97.62.114)  268.694 ms * *
 9  202.97.39.61 (202.97.39.61)  269.582 ms 202.97.12.201 (202.97.12.201)  269.469 ms 202.97.74.1 (202.97.74.1)  270.492 ms
10  202.97.53.242 (202.97.53.242)  313.603 ms 202.97.58.114 (202.97.58.114)  313.308 ms 202.97.25.230 (202.97.25.230)  313.458 ms
^C
(base) xlh626@xlh626-OEM:~$ ping baidu.com
PING baidu.com (220.181.7.203) 56(84) bytes of data.
64 bytes from 220.181.7.203: icmp_seq=1 ttl=52 time=80.1 ms
64 bytes from 220.181.7.203: icmp_seq=2 ttl=52 time=56.4 ms
64 bytes from 220.181.7.203: icmp_seq=3 ttl=52 time=114 ms
^C
--- baidu.com ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2001ms
rtt min/avg/max/mdev = 56.435/83.395/113.687/23.491 ms
(base) xlh626@xlh626-OEM:~$

持久化路由策略

# 编辑防火墙自定义脚本
vi /etc/firewall.user
#添加
iptables -t nat -A POSTROUTING -o br-lan -j SNAT --to-source 192.168.1.2

给nas用的端口转发也down了

//添加端口转发到1.160
iptables -t nat -A PREROUTING -p tcp --dport 3690 -j DNAT --to-destination 192.168.1.160:3690

//查看监听服务
netstat -tulnp | grep LISTEN

//查看端口转发规则
iptables -t nat -L PREROUTING -n -v

持久化端口转发

vi /etc/firewall.user
%% 添加 %%
iptables -t nat -A PREROUTING -p tcp --dport 3690 -j DNAT --to-destination 192.168.1.160:3690
posted @ 2025-08-27 16:08  抓泥鳅的小老虎  阅读(14)  评论(0)    收藏  举报