本帖最后由 我爱AC 于 2019-8-16 21:57 编辑
最近一段时间给某客户做网络割接时遇到了一个奇怪的问题,网络割接完成后访问AC时输入用户名密码之后无法登录页面直接刷新了一下,用户名密码框为空要求继续输入(确定不是用户名密码输入错误)。抽象后的拓扑示意如下:
下属企业新上了一台华为的防火墙,电信双出口。2条默认路由指向ISP,采用逐流的流量负载均衡算法。集团公司在华三防火墙上做端口映射将某公司AC通过电信地址C发布出去。现在问题来了,割接之后远程访问AC就出现刚刚所描述的登录页面输入正确用户名密码无法登录,页面刷新的问题。通过在下属企业华为防火墙上修改配置由
改为
问题解决。 一般情况下2条默认路由采用逐流的模式,哈希算法基于源和目标IP,但为了使流量分担更均衡,加入了端口作为哈希因子,没想到反而弄巧成拙。(A和B属于不同地址块,2条默认路由下一跳不同,等价默认路由的负载均衡)
理解: 第一种情况 端口参与哈希运算 主机访问AC过程 数据包达到FW,由源ip 源端口 目标ip 目标端口 通过哈希算法选择一个出接口,比如NAT到电信A地址上访问对端,那么OK。当你输入用户名密码时,还是这台主机访问相同的地址和端口,但由于tcp短连接的原因,源端口已经发生变化,此时数据包到达FW选择了一条与之前不同的路径,也就是NAT到电信B地址上去了,这就导致AC要求重新登录。
第二种情况 端口不参与 主机访问AC时,FW在数据包出站选路时只对源ip 目标ip做哈希运算选择出接口,那么这台主机无论怎么访问AC都只会走同一条路径,那么NAT之后地址固定。(实际上NAT也有一个基于源ip,基于源ip和目标ip的哈希算法,不过这里不影响),所以登录成功。 简单的说就是源端口参与哈希运算,由于tcp短连接导致源端口变化以至于选路不同引起NAT之后地址变化导致的http重定向问题。 由此看来AC在web登录时也要求会话保持(源ip不能变)。 |