Debian 9.6.0 Strech + KeepAlived + CONNTRACKD com problema na inicialização

1. Debian 9.6.0 Strech + KeepAlived + CONNTRACKD com problema na inicialização

Perfil removido
removido

(usa Nenhuma)

Enviado em 03/01/2019 - 18:59h

Olá, pessoal! Tudo bem?

Tenho duas redes (192.168.1.0/24 e 192.168.2.0/24) e a rede 192.168.2.0/24 é uma sub-rede da 192.168.1.0/24.
Tenho 2 servidores que fazer a conexão entre as duas redes.
Fiz a instalação do Debian 9.6.0 nos dois servidores (que funcionam como master e slave), instalei e configurei os serviços BIND9 DNS, ISC-DHCP, KeepAlived (para IP virtual/flutuante) e CONNTRACKD. Os serviços de DNS, DHCP e KeepAlived estão rodando perfeitamente bem.
Faço as consultas DNS, os clientes pegam os IPs do DHCP e quando eu "derrubo" um dos servidores, o KeepAlived coloca o IP virtual no outro servidor.
Coloquei um script de firewall para inicializar no sistema (script: /etc/init.d/sysadmin-firewall.sh / link simbólico: /etc/rc{2..5}.d/S02sysadmin-firewall.sh) e o sistema está inicializando/rodando o script (sei disso pelo retorno do comando "sudo iptables -L"). Além disso, as regras do script, permitem que os clientes tenham acesso à Internet.

Os problemas que estou tendo são os seguintes:
1) O serviço do CONNTRACKD está falhando na hora da inicialização do sistema. O systemd tenta iniciar o serviço por 4 ou 5 vezes seguidas (até 6 vezes), e sempre com status FAILED. Para inicializar o serviço, tenho duas opções: ou inicializo manualmente (sudo systemctl restart conntrackd.service) ou altero o serviço uma opção do conntrackd e reinicio o servidor (sudo systemctl edit --full conntrackd.service / campo Type=notify alterado para Type=idle).
2) Se o servidor master é "derrubado", o slave deveria assumir e permitir que os clientes continuassem acessando a Internet, mas infelizmente, isso não acontece. O servidor slave recebe o IP flutuante (através do KeepAlived) e as regras de firewall já estão carregadas desde a inicialização, mas, ainda assim, os clientes "perdem" a conexão com a Internet.
Seguem minhas configurações de KeepAlived, CONNTRACKD e script firewall (se for necessário, me peçam que envio as minhas configurações de DNS e DHCP):

KeepAlived (/etc/keepalived/keepalived.conf)
namespace_with_ipsets
linkbeat_use_polling

global_defs {
notification_email
{
sysadmin@dominio.tld
}
notification_email_from sysadmin@dominio.tld
smtp_server localhost
smtp_connect_timeout 120
router_id LVS_DEVEL

vrrp_mcast_group4 225.0.0.50

default_interface enp0s8 // Placa da rede interna/intranet

lvs_sync_daemon enp0s8 1 id 51 maxlen 65535 port 3780 ttl 255 group 192.168.2.0/24

vrrp_garp_master_delay 5
vrrp_garp_master_repeat 5
vrrp_garp_lower_prio_delay 10
vrrp_garp_lower_prio_repeat 1
vrrp_garp_master_refresh 60

vrrp_iptables keepalived

// No slave, as prioridades estão como -19 (menos 19)
vrrp_priority -20
checker_priority -20
bfd_priority -20

// No slave, as prioridades estão como 2
vrrp_rt_priority 1
checker_rt_priority 1
bfd_rt_priority 1
}

vrrp_sync_group G1 {
group {
VI1
}
notify_master "/etc/conntrackd/primary-backup.sh primary"
notify_backup "/etc/conntrackd/primary-backup.sh backup"
notify_fault "/etc/conntrackd/primary-backup.sh fault"
}

vrrp_instance VI1 {
interface enp0s8 // Interface da rede 192.168.2.0/24
state MASTER // No servidor slave, esta opção está como BACKUP
virtual_router_id 51
priority 100 // No slave, a prioridade está como 99
advert_int 1
authentication {
auth_type PASS
auth_pass MinhaSenha
}
virtual_ipaddress {
192.168.2.3/24
}
}


CONNTRACKD (/etc/conntrackd/conntrackd.conf)
Sync {
Mode FTFW {
ResendQueueSize 131072
CommitTimeout 180
PurgeTimeout 60
ACKWindowSize 300
DisableExternalCache off
}

Multicast {
IPv4_address 225.0.0.50
Group 3780
IPv4_interface 192.168.2.1 // IP do servidor master, o slave tem IP final 2
Interface enp0s8
SndSocketBuffer 1249280
RcvSocketBuffer 1249280
Checksum on
}

Options {
TCPWindowTracking on
ExpectationSync on
}
}

General {
Systemd on

Nice -20 // No slave, nice é -19 (menos 19)

HashSize 32768
HashLimit 32768

LogFile on
Syslog on

LockFile /var/lock/conntrack.lock

NetlinkOverrunResync 5
NetlinkEventsReliable on
PollSecs 5

EventIterationLimit 200

UNIX {
Path /var/run/conntrackd.ctl
Backlog 50
}

Filter From Kernelspace {
Protocol Accept {
TCP
SCTP
DCCP
}

Address Ignore {
IPv4_address 127.0.0.1
IPv4_address 192.168.2.1 // Master
IPv4_address 192.168.2.2 // Slave
IPv4_address 192.168.2.3 // IP Virtual
IPv4_address 192.168.2.0/24 // Meu bloco IP da intranet
}
}

Scheduler {
Type FIFO
Priority 99
}
}


Script /etc/init.d/sysadmin-firewall.sh
#!/bin/sh

# Carregando os módulos do IPTables
modprobe ip_tables
modprobe iptable_nat
modprobe iptable_filter
modprobe iptable_mangle
modprobe iptable_nat
modprobe ipt_CLUSTERIP
modprobe ipt_LOG
modprobe ipt_MASQUERADE
modprobe ipt_REJECT
modprobe nf_conntrack
modprobe nf_conntrack_ipv4
modprobe nf_conntrack_ftp
modprobe nf_conntrack_h323
modprobe nf_conntrack_sip
modprobe nf_nat
modprobe nf_tables
modprobe nf_tables_ipv4
modprobe nft_masq
modprobe nft_masq_ipv4
modprobe nft_nat
modprobe nft_redir
modprobe nft_redir_ipv4

# Habilitando IP_FORWARD
echo 1 > /proc/sys/net/ipv4/ip_forward

# O IP externo seria para receber as informações da primeira rede: 192.168.1.0/24
# O IP interno é para a segunda rede: 192.168.2.0/24
if [ $(hostname) = "alpha" ]; then
EXTERNAL_IP=192.168.1.181
INTERNAL_IP=192.168.2.1
else
EXTERNAL_IP=192.168.1.182
INTERNAL_IP=192.168.2.2
fi

# Limpando as regras
iptables -F
iptables -t filter -F
iptables -t mangle -F
iptables -t nat -F
iptables -t raw -F
iptables -t security -F
iptables -X

# Alterando as regras padrão
iptables -P INPUT DROP
iptables -P OUTPUT DROP
iptables -P FORWARD ACCEPT

# LOOPBACK
iptables -A INPUT -i lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT

# Rede primaria
iptables -A INPUT -i enp0s3 -j ACCEPT
iptables -A OUTPUT -o enp0s3 -j ACCEPT
iptables -A FORWARD -i enp0s3 -j ACCEPT

# Rede secundaria
iptables -A INPUT -i enp0s8 -j ACCEPT
iptables -A OUTPUT -o enp0s8 -j ACCEPT
iptables -A FORWARD -i enp0s8 -j ACCEPT

iptables -A INPUT -m conntrack --ctstate NEW,ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -m conntrack --ctstate NEW,ESTABLISHED,RELATED -j ACCEPT

# Permitindo conexões SSH pela porta 1024
iptables -A INPUT -d $EXTERNAL_IP -i enp0s3 -p tcp --dport 1024 -j ACCEPT
iptables -A OUTPUT -s $EXTERNAL_IP -o enp0s3 -p tcp --dport 1024 -j ACCEPT

# Se um pacote sai da rede secundaria, esse pacote deve voltar para a mesma rede
iptables -A FORWARD -s 192.168.2.0/24 -p tcp -j ACCEPT
iptables -A FORWARD -d 192.168.2.0/24 -p tcp -j ACCEPT

# Permitindo NAT com MASQUERADE
iptables -t nat -A POSTROUTING -s 192.168.2.0/24 -o enp0s3 -j MASQUERADE
iptables -A FORWARD -s 192.168.2.0/24 -i enp0s8 -j ACCEPT

# Conntrackd Multicast
iptables -I INPUT -i enp0s8 -d 225.0.0.50 -p tcp --dport 3780 -j ACCEPT
iptables -I INPUT -i enp0s8 -d 225.0.0.50 -p udp --dport 3780 -j ACCEPT
iptables -I OUTPUT -o enp0s8 -d 225.0.0.50 -p tcp --sport 3780 -j ACCEPT
iptables -I OUTPUT -o enp0s8 -d 225.0.0.50 -p udp --sport 3780 -j ACCEPT

iptables -A FORWARD -s 192.168.2.0/24 -p udp --dport 53 -j ACCEPT # DNS (rede 192.168.2.0/24)
iptables -A FORWARD -d 192.168.2.0/24 -p udp --sport 53 -j ACCEPT # DNS (rede 192.168.2.0/24)
iptables -A FORWARD -s 192.168.2.0/24 -m multiport -p tcp --dport 80,443 -j ACCEPT # WWW + WWWS
iptables -A FORWARD -d 192.168.2.0/24 -m multiport -p tcp --sport 80,443 -j ACCEPT # WWW + WWWS


O que devo fazer para que os servidores possam continuar compartilhando o acesso a Internet com os clientes?


  






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts