问题描述
环境
飞牛环境
飞牛nas 0.9.32
飞牛nas app 1.23.1
飞牛相册最新版
网络环境
总共只有两个设备:
- 路由器,ip:192.168.1.1
- nas,ip:192.168.1.100
服务:
- cudy路由器刷openwrt软路由
- 软路由上的Lucky做ipv6的ddns,并且在Lucky上做反向代理
- 在nas上使用docker部署了一个雷池waf,用来做安全防护,功能上也属于反向代理
- 在nas上使用docker起了一个nginx用来做反向代理
在nas上搭建的服务,ip都是192.168.1.100,只是端口不同
最终实现的流量走向是:公网流量 --> 解析域名到路由器 -->匹配端口及host反代到雷池waf -->匹配host反代到nginx --> 匹配host反代到真实服务,参加下图(狠狠码住host)

那么这时候就有人要问了:你整这么复杂是做什么?搞这么多反代?
很好的问题
起初是没想搞这么多的,可以看到上图中的waf也是后来加的,最开始的计划是路由器上做端口转发到nginx,nginx反代到真实服务就行,这样只有一层反代,可部署起来又觉得光秃秃的一个飞牛nas放在公网,万一哪天爆出0day岂不是鼠鼠家里的所有设备都要被拿下了?
所以在路由器和nginx之间又加了一个waf,这时候路由器的端口转发到waf,waf反代到nginx,nginx反代到真实服务,测试下来也是ok的,此时只有2层反代,但是跑起来发现waf上的攻击ip都成了路由器ip,也就是端口转发无法获取真实来源ip,这怎么行呢?真被打了都不知道谁打的~
怎么办?改吧,把路由器和waf之间的端口转发也换成反向代理,这样在waf上只需要从请求头的x-forwarded-for头就能拿到真实来源ip,测试下来也是非常ok的,此时就达成3层反代的成就。
所以搞这么麻烦就是想实现对外只暴漏一个路由器的一个端口,而根据不同的host也就是不同的二级域名来转发到真实服务上,中间还有一个雷池waf,非常安全~鼠鼠真的怕
可这样就真的好了吗?
问题
当鼠鼠部署好3层反代并且沉浸于自己3层反代的逆天成果时,相册备份却出了问题。在部署好的几个月后也就是昨天,第一次用相册备份功能时发现上传照片总是会不停地上传某几张,并且在重复几次后会上传失败,80%的照片都是这样,网上找了张一模一样的报错图:

卸载、更新、重装都无法解决,网上也没找到解决办法,只能自己试试了~
解决过程
经过测试发现:
动了动脑子判断大概率是太多nginx反代导致回包出现问题,ok改吧,看了下拓扑很明显waf到真实服务之间的nginx属于多余了,waf本身就是反代的原理,所以删掉nginx,让waf直接反带到真实服务上,路由器到waf上不做变动,试了下终于是ok了~很完美,鼠鼠又可以沉浸在自己的世界
Lucky:

雷池waf:
