# OpenWrt 旁路由排障：Google 能访问但国内网站打不开，原来是 LAN NAT 没开

- 原文地址：https://www.kuddy.cn/archives/225
- 发布时间：2026-05-11 00:53:13
- 更新时间：2026-05-18 02:42:17
- 分类：网络
- 标签：OpenClash, OpenWrt, 网络

> # OpenWrt 旁路由排障：Google 能访问但国内网站打不开，原来是 LAN NAT 没开 在 OpenWrt ...

---

# OpenWrt 旁路由排障：Google 能访问但国内网站打不开，原来是 LAN NAT 没开

在 OpenWrt 旁路由 + OpenClash 的全屋代理环境中，一个很典型的问题是：

- Google、YouTube、GitHub 等国外网站可以访问。
- 百度、淘宝、B站、国内 App 反而打不开。
- DNS 查询看起来正常。
- 电脑可能正常，手机可能异常。
- 抓包时只有客户端发出的 TCP SYN，看不到服务器返回的 SYN-ACK。

这类问题很容易被误判为 OpenClash 规则、DNS 污染、Fake-IP、手机网络检测异常。实际上，在旁路由作为全屋默认网关的场景里，最常见的原因是：**OpenWrt 的 LAN 区域没有开启 IP 动态伪装，也就是 NAT。**

## 一、网络环境

本文讨论的是这种结构：


```
主路由 / AP：192.168.1.1
OpenWrt 旁路由：192.168.1.2
可选 DNS / AdGuardHome：192.168.1.3
客户端默认网关：192.168.1.2
客户端 DNS：192.168.1.3
```


示例：


```
主路由 / AP：192.168.1.1
OpenWrt 旁路由：192.168.1.2
AdGuardHome：192.168.1.3
局域网网段：192.168.1.0/24
```


客户端通过 DHCP 拿到：


```
默认网关：192.168.1.2
DNS：192.168.1.3
```


此时客户端所有流量会先进入 OpenWrt 旁路由，再由 OpenWrt 转发到主路由出网。

## 二、典型现象

最迷惑人的地方在于：


```
国外网站能访问
国内网站打不开
```


直觉上很多人会以为是：

- OpenClash 规则错了。
- 国内网站被错误代理了。
- DNS 返回了错误 IP。
- Fake-IP 影响了手机。
- 小米手机网络检测异常。

但如果 Google 能访问，通常说明代理链路是通的。国外网站可能是被 OpenClash 接管后，由 OpenWrt 自己发起代理连接。而国内网站如果走 DIRECT，就需要 OpenWrt 正常转发客户端原始流量。

如果转发链路有问题，就会出现“代理通，直连不通”。

## 三、先确认 DNS 是否正常

先看 DNS 查询结果。以 `baidu.com` 为例，正常返回可能类似：


```
CNAME: www.a.shifen.com
A: 183.2.172.177
```


如果返回的是正常国内 IP，就说明 DNS 本身不是问题。

异常结果通常包括：


```
0.0.0.0
127.0.0.1
198.18.x.x
```


其中 `198.18.x.x` 常见于 Fake-IP。如果国内域名返回了 Fake-IP，就需要回头检查 DNS / OpenClash 模式。但如果已经返回正常国内 IP，问题就不在 DNS。

## 四、抓包确认问题

在 OpenWrt 上抓客户端访问国内 IP 的包：


```
tcpdump -i br-lan host 192.168.1.100 and host 183.2.172.177 and tcp port 443
```


示例：


```
tcpdump -i br-lan host 192.168.1.198 and host 183.2.172.177 and tcp port 443
```


如果看到大量这样的包：


```
192.168.1.198.xxxxx > 183.2.172.177.443: Flags [S]
192.168.1.198.xxxxx > 183.2.172.177.443: Flags [S]
192.168.1.198.xxxxx > 183.2.172.177.443: Flags [S]
```


但没有看到：


```
183.2.172.177.443 > 192.168.1.198.xxxxx: Flags [S.]
```


说明客户端发出了 SYN，但没有收到 SYN-ACK 回包。

这通常意味着：**OpenWrt 旁路由的直连转发/NAT 路径不通。**

## 五、为什么代理网站能访问，国内 DIRECT 反而不能访问？

因为两类流量路径不一样。

国外代理流量大致是：


```
客户端
  → OpenWrt
  → OpenClash 接管
  → 代理节点
  → 目标网站
```


国内 DIRECT 流量大致是：


```
客户端
  → OpenWrt
  → 主路由
  → 目标国内 IP
```


如果 OpenWrt 没有对从 LAN 进来的转发流量做 NAT，主路由或回包路径可能无法正确处理这些流量，于是出现：


```
客户端只发 SYN
服务器回包回不来
```


## 六、解决方法：开启 LAN 区域 IP 动态伪装和 MSS 钳制

进入 OpenWrt：


```
网络 → 防火墙 → 区域 → lan → 编辑
```


开启：


```
IP 动态伪装：开启
TCP MSS 钳制：开启
```


保存并应用。

对应命令方式可以参考：


```
uci show firewall | grep "=zone"
```


找到 `name='lan'` 对应的 zone 编号后，例如是 `firewall.@zone[0]`：


```
uci set firewall.@zone[0].masq='1'
uci set firewall.@zone[0].mtu_fix='1'
uci commit firewall
/etc/init.d/firewall restart
```


注意：实际编号不一定是 `[0]`，请以你系统中的 `lan` 区域为准。

## 七、修复后如何验证

再次抓包：


```
tcpdump -i br-lan host 192.168.1.100 and host 183.2.172.177 and tcp port 443
```


正常应该能看到：


```
客户端 → 目标服务器：Flags [S]
目标服务器 → 客户端：Flags [S.]
```


也就是 TCP 三次握手开始正常。

同时测试：

- 百度
- 淘宝
- B站
- 微信
- Google
- GitHub

如果国内外都正常，说明旁路由转发链路已经修复。

## 八、和 Fake-IP 有没有关系？

这类问题容易被误认为 Fake-IP 导致，但需要分开看。

如果国内网站打不开，且抓包只有 SYN 没有 SYN-ACK，通常是 NAT/MSS 问题。

如果网络实际可用，但手机提示：


```
Wi-Fi 无法访问互联网
网络异常
需要登录认证
```


那可能和 Fake-IP、连通性检测域名、IPv6、私人 DNS 有关。

这两类问题表现有重叠，但根因不同。

## 九、最终检查清单

旁路由作为全屋网关时，建议确认：


```
主路由：继续拨号 / AP
OpenWrt：作为客户端默认网关
OpenWrt LAN 区域：IP 动态伪装开启
OpenWrt LAN 区域：TCP MSS 钳制开启
OpenClash：规则模式
DNS：不要形成循环
```


如果遇到“国外能访问，国内打不开”，优先排查：

1. DNS 是否返回正常国内 IP。
2. OpenClash 里国内网站是否为 DIRECT。
3. 抓包是否只有 SYN，没有 SYN-ACK。
4. LAN 区域是否开启 NAT 和 MSS 钳制。

## 总结

OpenWrt 旁路由做全屋默认网关时，`lan` 区域开启 IP 动态伪装和 TCP MSS 钳制非常关键。

这次问题的核心不是 DNS，不是 OpenClash 规则，也不是手机本身，而是旁路由直连转发路径没有正确处理。只要抓包看到“只有 SYN，没有 SYN-ACK”，就应该优先想到 NAT/MSS 配置。