5 сентября 2016 г.

DNS + keepalive


Задача: сделать на двух физических серверах отказоустойчивость и балансировку DNS трафика (сервера рекурсивные).



Вешаем VIP на loopback.


Красим входящий трафик:
  iptables -t mangle -I PREROUTING -d 10.10.10.10 -p udp --dport 53 -m mac ! --mac-source ec:b1:d7:09:ea:c4 -j MARK --set-mark 2253
  iptables -t mangle -I PREROUTING -d 10.10.10.10 -p tcp --dport 53 -m mac ! --mac-source ec:b1:d7:09:ea:c4 -j MARK --set-mark 2353


Конфиг keepalive в котором пишем адреса, интерфейсы нод и балансируем крашеный трафик.

/etc/keepalived/keepalived.conf

vrrp_instance dns_rec {
        interface bond0.3
        state MASTER
        virtual_router_id 3
        priority 100
        authentication {
                auth_type PASS
                auth_pass p4ssw0rd
        }
        virtual_ipaddress {
                10.10.10.10/32 dev bond0.3
        }
}

# Check for UDP
virtual_server fwmark 2253 {
  delay_loop 6
  lb_algo rr
  lb_kind DR
  protocol UDP

  real_server 10.10.10.1 53 {
    weight 100
    MISC_CHECK {
      connect_timeout 6
      misc_path "/etc/keepalived/dnscheck.sh -h 10.10.10.1"
    }
  }

  real_server 10.10.10.2 53 {
    weight 100
    MISC_CHECK {
      connect_timeout 6
      misc_path "/etc/keepalived/dnscheck.sh -h 10.10.10.2"
    }
  }

}

# Check for TCP
virtual_server fwmark 2353 {
  delay_loop 6
  lb_algo wlc
  lb_kind DR
  protocol TCP

  real_server 10.10.10.1 53 {
    weight 100
    TCP_CHECK {
      connect_timeout 6
    }
  }

  real_server 10.10.10.2 53 {
    weight 100
    TCP_CHECK {
      connect_timeout 6
    }
  }

}


исключаем бесконечную пересылку пакетов между хостами
/etc/sysctl.d/arp.conf
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2