跨子网的Keepalived VIP在TTL上失败

时间:2018-07-02 17:17:34

标签: virtual-ip-address unicast

我正在尝试使用带有单播vrrp消息的dockerized keepalived(osixia / keepalived:1.4.5)在两个运行于不同子网上的VM之间创建虚拟ip。
不幸的是,由于数据包是从远程子网路由而来,因此由于ttl值而导致vrrp消息被丢弃(来自VM1的日志片段):

Mon Jul  2 12:41:56 2018: (VI_1): invalid ttl. 252 and expect 255
Mon Jul  2 12:41:56 2018: bogus VRRP packet received on ens160 !!!
Mon Jul  2 12:41:56 2018: VRRP_Instance(VI_1) Dropping received VRRP packet...

如果我正确理解了此变更日志说明,则应该从1.2.10版本开始解决该问题(来源:http://www.keepalived.org/changelog.html):

  

vrrp:禁用单播用例的TTL完整性检查。为了防止任何数据包注入,VRRP通过IP标头TTL提供完整性检查。此TTL务必等于255,这意味着发送方和接收方都连接在同一以太网段上。现在,由于单播扩展,必须禁用此保护,因为VRRP广告将大部分遍历不同的网段。 !!!警告 !!!当在单播用例中使用VRRP来防止任何数据包注入时,最佳实践是使用IPSEC-AH auth方法,否则您将面临潜在的攻击者!

这真的可以直接使用吗?还是应该以某种方式配置ttl的健全性检查?

我的设置
VM1 ip:172.31.245.109
VM2 ip:172.31.205.162
虚拟ip:172.31.245.10

VM1 keepalived.conf:

vrrp_script chk_live {  
        script "curl 172.31.245.109:8080"
        interval 2                      # check every 2 seconds
        weight 2                        # add 2 points of prio if OK
}

vrrp_instance VI_1 {
        interface ens160
        state MASTER
        virtual_router_id 51
        priority 101                    # 101 on master, 100 on backup
        virtual_ipaddress {
            172.31.245.10
        }
        track_script {
            chk_live
        }
        unicast_peer {
          172.31.205.162
        }
}

VM2 keepalived.conf:

vrrp_script chk_live {
        script "curl 172.31.205.162:8080"
        interval 2                      # check every 2 seconds
        weight 2                        # add 2 points of prio if OK
}

vrrp_instance VI_1 {
        interface eth0
        state MASTER
        virtual_router_id 51
        priority 100                    # 101 on master, 100 on backup
        virtual_ipaddress {
            172.31.245.10
        }
        track_script {
            chk_live
        }
        unicast_peer {
          172.31.245.109
        }
}

0 个答案:

没有答案