A solução simples seria instruir cada instância do strongswan a usar um diretório diferente para armazenar o arquivo PID, definindo o valor correto do IPSEC_PIDDIR
variável de ambiente em seu script de início e parada.
O daemon Strongswan coloca seus arquivos .pid e .ctl em / var / run para detectar se já está em execução.
Eu quero executar vários desses daemons na mesma máquina em namespaces de rede diferentes. Eu estou tentando conseguir isso por bind de montagem de diretórios diferentes (digamos / etc / namespace1 para / var / run e / etc / namespace2 de namespace1 para / var / run de namespace2). / var / run é um link simbólico para / run, então eu vinculo mount a / run como abaixo.
Eu quase posso conseguir isso assim:
"" No namespace padrão ""
$:~ sudo echo "red" >> /etc/red/run/pidfile
$:~ sudo echo "blue" >> /etc/blue/run/pidfile
$:~ sudo ip netns exec red
"" No namespace vermelho ""
$:~ mount --bind /etc/red/run/ /run/
$:~ cat /var/run/pidfile
vermelho
"" No namespace azul ""
$:~ mount --bind /etc/blue/run/ /run/
$:~ cat /var/run/pidfile
azul
Então isso funciona bem. Desta forma, o daemon quando cria /var/run/charon.pid enquanto dentro do vermelho não irá confundir com /var/run/charon.pid do namespace azul e duas instâncias podem começar.
No entanto, aqui está o problema: se eu "sair" do namespace vermelho e, em seguida, entrar novamente via "ip netns exec red bash", a montagem não estará mais presente. Isto é, não existe / var / run / redfile.
Então, a questão é como eu posso fazer isso pegajoso? Preciso de alterações no / etc / fstab? Mas isso não funciona. Se perguntado, posso fornecer detalhes de "não funciona".
Estou perdido. Apreciará alguma ajuda.
Obrigado!
A solução simples seria instruir cada instância do strongswan a usar um diretório diferente para armazenar o arquivo PID, definindo o valor correto do IPSEC_PIDDIR
variável de ambiente em seu script de início e parada.
ip netns exec
já vincular as montagens /etc/netns/<netns name>/*
ao arquivo / diretório correspondente em /etc
. Então você pode compilar strongSwan com, e. --with-piddir=/etc/ipsec.d/run
e, em seguida, crie os diretórios necessários para que cada instância crie seus arquivos PID em diretórios separados:
# mkdir -p /etc/ipsec.d/run
# mkdir -p /etc/netns/<netns name 1>/ipsec.d/run
# mkdir -p /etc/netns/<netns name 2>/ipsec.d/run
Mais detalhes podem ser encontrados no wiki strongSwan .
Tags mount linux filesystems strongswan