情况是这样的,家里有一个 openwrt 路由器作为主路由, 以前安装科学上网不大稳定,估计还是路由器性能有限,处理数据包转发什么的没问题,但是涉及软件就老是不稳定,访问外网无响应,bypass 插件是由 dnsmasq + smartDNS +xray 组成的。
后来安装了 PVE 虚拟机后,专门装了个 openwrt 的 x86 版,只安装 v2raya 插件,因为只有一个虚拟网口,所以采用单臂路由方案。
整体思路:
光猫拨号——openwrt 主路由( DHCP )——PVE 虚拟机( openwrt 单臂路由)
|------------------下面 PC/手机。
要求是下面所有 PC/手机连接主路由,采用主路由的 IP 和网关和 DNS 设置,也就是说单臂路由挂了,不影响任何 pc 终端(最多 gfw 网上不了)。
咨询了 deepseek ,它给出了 主路由上配置( dnsmasq + ipset )方案,原理就是利用 dnsmasq 对需要翻墙的网站加入海外列表,并用 ipset 设置海外列表 table , 并打上标签。
当终端访问海外网站时,域名解析在海外列表里时,自动将 ipset 设置到海外列表组;并自动转发给单笔路由
单臂路由上只需添加一条回流路由
搞完以后,发现主路由上访问海外网站是正常了,但是下面 PC 访问还是不行。然后问 deepseek ,它让我用 tcpdump 监控单臂路由流量,将日志给他,它发现了问题,pc 发起的请求已经转发到海外,但是海外回来后回不到 pc 上,由于主路由不需要转发,所以没问题。确认是回流问题。
然后 deepseek 搞了一些策略和测试方案,倒腾半天还是不行,最后我分析并提了问题:
iptables -t nat -A POSTROUTING -s 192.168.1.128/24 -d 192.168.1.1 -j MASQUERADE
这一条规则是:只有当数据包来自我们家庭内部的任何一个设备(192.168.1.128/24 网段)(并且目标是 OpenWrt2 )时,才进行 MASQUERADE ,但是实际上终端 192.168.1.151 发出数据包目标是 192.168.1.139 ,而不是 192.168.1.133 ,只有 openwrt1 才会转发给 192.168.1.133 ,所以上述规则有无问题?
然后 deepseek 终于发现问题了,并给出了正确方案,即基于 mark 的 MASQUERADE
由于您已经使用防火墙标记来识别境外流量,可以基于这个标记进行 MASQUERADE 。
最后终于 ok ,讲了这么多,我分析原因如下:
1. 大多数情况下,我们给的条件不充分,而 deepseek 会基于已知条件给出通用解决方案。而实际上相当于条件不充分,所以方案是错的。
2. 这个时候,应该继续细化条件,并且要让 deepseek 解释它的实际用途,这样有助于你理解它的思路是否跟你需求不同。
3. 最后不断细化完善。单纯让 deepseek 改来改去不解决问题,而且改到最后它也混乱了,改出一个不知道什么怪玩意儿来。。。
