Memcached escuta nas interfaces selecionadas

8

Eu estou configurando o Memcached em um servidor Debian que possui duas interfaces - eth0 (public) e eth1 (private).

Eu quero que o Memcached ouça em eth1 e lo (loopback) para que ele possa ser acessado mesmo se a rede privada ficar inativa, mas NÃO eth0 (pública).

Na página man do memcached, entendo que a opção -l pode receber apenas um endereço IP. Eu pensei em usar sockets UNIX para conexões locais, mas a página man diz

-s
Unix socket path to listen on (disables network support).

O único outro método que eu sei é bloquear conexões via eth0 usando IPTables. Existe alguma outra solução que não faça uso do firewall?

    
por A.Jesin 02.07.2014 / 11:32

2 respostas

7

Não é tão conveniente quanto listar uma interface e obter todos os seus endereços vinculados, e requer conhecer todos os endereços vinculados a uma interface, mas isso pode ser feito. (Observe que você não pode listar apenas algumas interfaces, como você descobriu - uma única interface, todas as interfaces ou uma lista de IPs.)

A opção -l pode ter uma interface, INADDR_ANY (que significa todos os endereços em todas as interfaces) ou uma lista de endereços IP separados por vírgulas. Um endereço IP pode ter uma especificação de porta opcional. Então, por exemplo

memcached -l 127.0.0.1:11211,127.0.0.1:11212,10.1.2.3

terá o memcached escutando lo0 somente em 127.0.0.1 nas portas 11211 e 11212 e também no endereço 10.1.2.3 (na interface que estiver) em qualquer porta definida por -p ou -U .

Você é obrigado a saber / ter todos os endereços que deseja vincular. Este é talvez um grande intervalo entre lo0 e uma lista de IPs (já que as limitações de recursos internos padrão do memcached não permitirão a ligação aos endereços ~ 2 ^ 24 nessa interface)

    
por 02.07.2014 / 17:27
8

Como apontado na resposta aceita, versões mais recentes suportam:

memcached -l 127.0.0.1:11211,127.0.0.2:11211  

ou

memcached -l 127.0.0.1:11211 -l 127.0.0.2:11211  

Versões mais antigas (fornecidas com o CentOS 6.5 ou anterior) ainda não suportam isso, elas podem escutar em todas as interfaces , um único endereço IP ou um soquete.
Não é uma combinação desses.

Sua única maneira de resolver isso é ligá-lo a todas as interfaces e fazer o firewall da interface pública ou vinculá-lo apenas ao 127.0.0.1 e encaminhar os pedidos para a eth1: 11211 para lo0: 11211 via iptables.

    
por 02.07.2014 / 11:40

Tags