Não é possível alterar o endereço IP de origem (para ip flutuante) para pacotes de saída do udp

3

Estou tendo problemas para fazer com que um cluster funcione usando o marca-passo e o corosync. Aqui está minha configuração de hardware:

  • Rede: 192.168.3.0/255.255.255.0
  • Gateway: 192.168.3.1
  • node1 (servidor do Ubuntu 12.04 x64) IP estático: 192.168.3.34
  • node2 (Ubuntu Server 12.04 x64) IP estático: 192.168.3.35

Esta rede está por trás de um firewall.

Eu tenho dois recursos que se comunicam com dispositivos externos por meio do udp:

  • resource1 - > porta udp 16500
  • resource2 - > porta udp 16501

O comando do pacemaker que usei:

crm configure primitive res1-srv upstart:resource1 \
op monitor interval=10s timeout=120 on-fail="restart" \
meta is-managed="true" failure-timeout=300 migration-threshold=5 allow-migrate=true

crm configure primitive res2-srv upstart:resource2 \
op monitor interval=10s timeout=120 on-fail="restart" \
meta is-managed="true" failure-timeout=300 migration-threshold=5 allow-migrate=true

resource1 e resource2 não estão relacionados entre si e deve haver apenas uma instância ativa de cada um deles no cluster (no node1 ou no node2).

Eu criei 2 endereços IP flutuantes, um para cada processo:

  • res1-ipin - > 192.168.3.130
  • res2-ipin - > 192.168.3.131

Eu fiz isso usando:

crm configure primitive res1-ipin ocf:heartbeat:IPaddr2 \
params ip="192.168.3.130" cidr_netmask="24" op monitor interval="10s" meta is-managed="true"

crm configure primitive res2-ipin ocf:heartbeat:IPaddr2 \
params ip="192.168.3.131" cidr_netmask="24" op monitor interval="10s" meta is-managed="true"

No firewall, o administrador configurou duas regras de NAT:

  • [PUBLIC IP]: 16500 - > 192.168.3.130:16500
  • [IP PÚBLICO]: 16501 - > 192.168.3.130:16501

Eu fiz um grupo para cada um deles:

crm configure group resource1 res1-ipin res1-srv
crm configure group resource2 res2-ipin res2-srv

Para que eu possa ter cada recurso em nós diferentes. O marcapasso gerencia esses recursos sem problemas.

Os pacotes udp de entrada funcionam perfeitamente, ambos os recursos processam-nos sem problemas.

No entanto, os pacotes udp de saída não passam pelo firewall porque o endereço IP de origem é o estático do nó. Aqui está um exemplo:

  • resource1 está sendo executado no node1 - > o endereço IP de saída e porta é 192.168.3.34:16500
  • o resource2 está sendo executado no node2 - > o endereço IP de saída e porta é 192.168.3.35:16501

Ambos estão bloqueados pelo firewall. E eu não tenho privilégios para configurar novas regras no firewall (não posso pedir ao administrador para configurá-las, ele argumenta que o firewall não permite isso).

Eu tentei configurar o NAT em cada nó usando o iptables:

iptables -t nat -A POSTROUTING -p udp --sport 16500 -j SNAT --to-source 192.168.3.130:16500
iptables -t nat -A POSTROUTING -p udp --sport 16501 -j SNAT --to-source 192.168.3.131:16501

Quando eu fiz isso, o resource1 e o resource2 escrevem em seus logs que não podem enviar o pacote:

Client ERROR *** Terminal nro:XXX writing 1Operation not permitted

Eu não sei o que fazer. Eu também tentei adicionar o recurso ocf: heartbeat: IPsrcaddr mas ele falha com:

IPsrcaddr[6200]: ERROR: command 'ip route replace 192.168.3.0/24 dev eth0 src 192.168.3.130' failed

Eu entendo que usar 2 endereços IP flutuantes não fará nenhum bem.

Se alguém puder apontar para mim o que estou fazendo de errado, ficarei muito grato.

Obrigado antecipadamente

    
por Dedalo 09.06.2015 / 19:58

2 respostas

0

O agente de recurso IPsrcaddr deve funcionar para isso. Configure os recursos IPsrcaddr , conforme mostrado abaixo:

# crm configure
crm(live)configure# primitive res1_srcaddr IPsrcaddr \
    params ipaddress=192.168.3.130
crm(live)configure# primitive res2_srcaddr IPsrcaddr \
    params ipaddress=192.168.3.131

Em seguida, salte para o seu editor e adicione os novos recursos do IPsrcaddr aos grupos apropriados APÓS os recursos do IPaddr2:

crm(live)configure# edit
...snip...
group resource1 res1-ipin res1_srcaddr res1-srv
group resource2 res2-ipin res2_srcaddr res2-srv
...snip...
crm(live)configure# verify
crm(live)configure# commit

Se você ainda vir o erro referente ao IPsrcaddr , tente executar o comando manualmente para entender melhor por que ele está falhando.

Você pode até mesmo tentar modificar o agente de recursos IPsrcaddr para se adequar melhor aos seus nós; é um agente de recursos relativamente simples:

# vi /usr/lib/ocf/resource.d/heartbeat/IPsrcaddr
    
por 10.06.2015 / 19:26
0

Tente isso.

vi /usr/lib/ocf/resource.d/heartbeat/IPsrcaddr

remover

NETWORK='ip route list dev $INTERFACE scope link match $ipaddress|grep -o '^[^  ]*''

e substitua por

NETWORK='ip route list dev $INTERFACE scope link match $ipaddress|grep -o '^[^ ]*'|head -1'
    
por 28.09.2015 / 17:04