在上一篇 JuniperSSG140使用PBR实现双线路接入 文档中,我们在总公司SSG140通过启用PBR功能完成了双线路的接入。但近期发现一个使用联通线路的子公司只能和总公司的电信线路建立×××。众所周知电信和联通的互通性不是太好,因此这种方式建立的×××延迟非常大,检测发现最大延迟能到200ms。
排查过程:
    1.首先怀疑是×××设置错误,登陆两端防火墙重新建立基于联通线路的×××,重复尝试了3次×××依旧不通,而相同的设置在电信线路则正常.分公司防火墙日志中提示如下错误:
Phase 1: Retransmission limit has been reached. 按照网上的相关排查方式逐一检查后,故障依旧(参考:http://www.liusuping.com/juniper/juniper-dongtai-***-guzhang-jiejue.html)
    2. 从第一步的结果来看问题产生的根源很可能在总公司一方,但总公司防火墙上新增的线路内部是可以正常使用的,多方检测后也没有发现任何问题。
    3. 求助网友后,有位朋友提示这个就是路由的问题,写一条路由指定出去的线路就可以了。但当时自己太忙也没有去仔细思考和分析. 后来因为需要和分公司进行大量数据传输,超高的延迟使得解决这个问题变得非常迫切,于是仔细分析了问题产生的原因,并最终解决的这个看似奇怪的故障。      总公司接入了联通和电信两条线路,默认所有数据包都是通过电信线路转发数据,只有符合PBR的EACL条件的数据包才会通过联通线路转发。所以当分公司的×××_Request数据包正常到达总公司后,总公司的×××_Response数据包却是被默认的电信线路转发出去的,当分公司防火墙收到来自电信线路的×××_Response数据包时,拆包一看发现是源地址是一个奇怪的电信线路的签名,防火墙就自动给忽略了,×××通道也就无法建立并一直处于尝试建立阶段。
    打个比方:B向A借钱,A说没有问题但是你要先给写一个借据,然后我就网上转账给你,B在家写好借据后忘记签字就让朋友C给送出去了,C看到没有忘记签字就顺手签署自己的名字然后送给了A,A收到借据后仔细一看发现上面写着B向A借钱XX元,但最后的签名却是C,A非常愤怒也就没给B转钱过去。
解决方式:
    在总公司防火墙上路由表添加一条Destination是分公司防火墙公网端口IP的路由,并指定通过联通线路转发,添加完成后,再次建立基于联通线路的×××,一切正常