Eu sei que posso atribuir IP estático manualmente, usando /etc/network/interfaces
.
Também sei que posso ler o endereço MAC do contêiner LXC (por exemplo, procurando lxc.network.hwaddr
entrada /var/lib/lxc/<container-name>/config
e atribuir o IP com base dhcp-host=<mac-addr>,10.0.3.3
nas entradas /etc/dnsmasq.d/<some file>
.
No arquivo /etc/default/lxc-net
que li
# Uncomment the next line if you'd like to use a conf-file for the lxcbr0
# dnsmasq. For instance, you can use 'dhcp-host=mail1,10.0.3.100' to have
# container 'mail1' always get ip address 10.0.3.100.
#LXC_DHCP_CONFILE=/etc/lxc/dnsmasq.conf
Isso atenderia às minhas necessidades; infelizmente fazê-lo não tem efeito.
lxc-net
não ajuda se você não remover a ponte lxcbr0. Veja minha resposta.Respostas:
Eu me deparei com isso recentemente e acho que encontrei uma solução fácil. Eu (apenas) testei no Ubuntu 14.04.
Primeiro, remova o comentário desta linha / etc / default / lxc-net:
Em /etc/lxc/dnsmasq.conf, defina um arquivo dhcp-hosts:
Em seguida, adicione entradas no /etc/lxc/dnsmasq-hosts.conf assim:
Cuidado: as alterações entrarão em vigor depois que você reiniciar o lxc-net (que reinicia o dnsmasq):
Depois, você pode modificar o /etc/lxc/dnsmasq-hosts.conf e enviar o sinal SIGHUP para o dnsmasq:
Então, sim, você precisa reiniciar o lxc-net, mas apenas uma vez. Espero que isto ajude.
fonte
killall -s SIGHUP dnsmasq
. Concordo que apenas o dnsmasq "SIGHUP-ing" é mais eficiente do que reiniciar o daemon inteiro (especialmente se ele não funcionar sem corrigir os scripts iniciais).lxc-net
é necessária apenas para permitir que o dnsmasq use a configuração em /etc/lxc/dnsmasq.conf (e essa parte da informação está presente na/etc/default/lxc-net
que é desconhecidadnsmasq
). Se você o configurou antes, apenas outro SIGHUP deve ser suficiente.kill -HUP $(cat /var/run/lxc/dnsmasq.pid)
se você não deseja instalarkillall
ou recarregar outrosdnsmasq
casosFunciona bem no Ubuntu 14.04.1
Remova o comentário desta linha
/etc/default/lxc-net
pare todos os contêineres, reinicie o lxc-net:
Configure endereços IP em
/etc/lxc/dnsmasq.conf
Onde
{NAME}
está o nome do seu contêiner LXC:fonte
/var/lib/lxc/<container-name>/rootfs/etc/network/interfaces
Arquivo e endereço IP estático atribuído ao recipiente.A resposta do Tombart funciona se você for paciente o suficiente para aguardar a atualização do DNS E estiver disposto a reiniciar o contêiner (o convidado) posteriormente.
A seguir, é apresentada a receita que exige que todos os outros contêineres lxc possivelmente em execução sejam desligados . Se você não puder pagar por isso, não vejo como forçar a nova configuração do dnsmasq. (Para alguns usuários que sinalizam o HUP para o pid do dnsmasq encontrado em,
/run/lxc/dnsmasq.pid
também não funciona.)Portanto, se você quiser ter algo que funcione instantaneamente e não houver outros contêineres lxc em execução, siga minha resposta.
$name
é o nome do nó para o qual queremos redefinir a atribuição e$internalif
é o nome do adaptador em ponte do LXC. Você pode obter o valor de$internalif
com, por exemplo,augtool -L -A --transform "Shellvars incl /etc/default/lxc-net" get "/files/etc/default/lxc-net/LXC_BRIDGE" | sed -En 's/\/.* = (.*)/\1/p'
se você instalar,augeas-tools
mas geralmente é justolxcbr0
.Infelizmente, existe um bug (recurso?) No
/etc/init/lxc-net.conf
Ubuntu 14.04 que impede o recarregamento, adnsmasq
menos que o dispositivo bridge esteja inativo para o host.fonte
Essa solução funciona corrigindo os scripts iniciais do lxc. Ele divide a tarefa complexa de ativar a ponte lxcbr0 e iniciar um
dnsmasq
em dois trabalhos separados. Agora você não precisa reiniciar alxc-net
ponte inteira para apenas recarregar adnsmasq
- recarregar asudo service restart lxc-dnsmasq
é suficiente e não requer o desligamento da ponte.sudo service lxc-net stop
e verifique se não há ponte lxcbr0 (ou equivalente)./etc/init/lxc-net.conf
seguinte pelo seguinte:.
/etc/init/lxc-dnsmasq
com o seguinte conteúdo:.
fonte
Aqui está um script python simples que libera a concessão do LXC dnsmasq. Você pode executá-lo na máquina host ou forjá-lo em outro contêiner - sim, isso funciona!
O requisito acima é a biblioteca python scapy:
Uma vez executado, você deverá ver no log do sistema algo como:
Para confirmar, basta verificar se a entrada foi removida
/var/lib/misc/dnsmasq.lxcbr0.leases
. O próprio contêiner manterá o IP, pelo que deve ser parado antes de iniciar qualquer novo contêiner que deva reutilizá-lo.fonte
Sei que minha resposta está atrasada anos, mas talvez ajude outra pessoa. O problema foi que você editou o código específico do pacote (
write_lxc_net
função) do LXC Ubuntu, que deveria ser gravado em outro destino como uma sequência, não processada nolxc-net
próprio script!Como resultado, o processo dnsmasq não recebeu o arquivo de configuração que você tentou passar, deixando-o "sem efeito", como você diz.
Em vez disso, você deseja definir essa variável na parte superior do script, entre as demais:
fonte