Sé que puedo asignar IP estática manualmente, usando /etc/network/interfaces
.
También sé que puedo leer la dirección MAC del contenedor LXC (por ejemplo, buscando la lxc.network.hwaddr
entrada /var/lib/lxc/<container-name>/config
y asignando la IP utilizando las entradas dhcp-host=<mac-addr>,10.0.3.3
en /etc/dnsmasq.d/<some file>
.
En el archivo /etc/default/lxc-net
leí
# 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
Eso satisfaría mis necesidades; desafortunadamente hacerlo no tiene efecto.
lxc-net
no ayuda si no quitas tu puente lxcbr0. Mira mi respuesta.Respuestas:
Me encontré con esto recientemente y creo que encontré una solución fácil. (Solo) lo probé en Ubuntu 14.04.
Primero, descomente esta línea / etc / default / lxc-net:
En /etc/lxc/dnsmasq.conf, defina un archivo dhcp-hosts:
Luego agregue entradas en /etc/lxc/dnsmasq-hosts.conf así:
Cuidado: los cambios se harán efectivos después de reiniciar lxc-net (que reinicia dnsmasq):
Luego puede modificar /etc/lxc/dnsmasq-hosts.conf y enviar la señal SIGHUP a dnsmasq:
Entonces sí, necesita reiniciar lxc-net, pero solo una vez. Espero que esto ayude.
fuente
killall -s SIGHUP dnsmasq
. Estoy de acuerdo, que solo "SIGHUP-ing" dnsmasq es más eficiente que reiniciar todo el demonio (especialmente si no funciona sin parchear sus scripts de inicio).lxc-net
solo es necesario para que dnsmasq use la configuración de /etc/lxc/dnsmasq.conf (y esta información está presente en lo/etc/default/lxc-net
que es desconocido para eldnsmasq
). Si lo configuró antes, solo bastará con otro SIGHUP.kill -HUP $(cat /var/run/lxc/dnsmasq.pid)
si no desea instalarkillall
o volver a cargar otrasdnsmasq
instanciasFunciona bien en Ubuntu 14.04.1
Descomenta esta línea
/etc/default/lxc-net
Detenga todos los contenedores, reinicie lxc-net:
Configurar direcciones IP en
/etc/lxc/dnsmasq.conf
donde
{NAME}
está el nombre de su contenedor LXC:fuente
/var/lib/lxc/<container-name>/rootfs/etc/network/interfaces
archivo y asignar una dirección IP estática al contenedor.La respuesta de Tombart funciona si tiene la paciencia suficiente para esperar la actualización de DNS Y está dispuesto a reiniciar el contenedor (el invitado) después.
Lo que sigue es la receta que requiere que todos los demás contenedores lxc que se estén ejecutando estén cerrados . Si no puede permitirse eso, entonces no veo forma de forzar una nueva configuración de dnsmasq. (Para algunos HUP de señalización razonable al pid de dnsmasq que se encuentra
/run/lxc/dnsmasq.pid
tampoco funciona).Entonces, si desea tener algo que funcione instantáneamente y no hay otros contenedores lxc ejecutándose, siga mi respuesta.
$name
es el nombre del nodo para el que queremos restablecer la asignación y$internalif
es el nombre del adaptador puenteado de LXC. Puede obtener el valor de$internalif
con, por ejemplo,augtool -L -A --transform "Shellvars incl /etc/default/lxc-net" get "/files/etc/default/lxc-net/LXC_BRIDGE" | sed -En 's/\/.* = (.*)/\1/p'
si instala,augeas-tools
pero generalmente es justolxcbr0
.Desafortunadamente, hay un error (¿característica?) En
/etc/init/lxc-net.conf
Ubuntu 14.04 que impide la recarga adnsmasq
menos que el dispositivo puente esté inactivo para el host.fuente
Esta solución funciona parcheando los scripts de inicio lxc. Divide la compleja tarea de levantar el puente lxcbr0 y comenzar un
dnsmasq
en dos trabajos separados. Ahora no necesita reiniciar todo ellxc-net
puente para volver a cargarlo: ladnsmasq
recargasudo service restart lxc-dnsmasq
es suficiente y no requiere cerrar el puente.sudo service lxc-net stop
y asegúrese de que no haya un puente lxcbr0 (o equivalente)./etc/init/lxc-net.conf
con el siguiente contenido:.
/etc/init/lxc-dnsmasq
con los siguientes contenidos:.
fuente
Aquí hay una secuencia de comandos simple de Python que lanza el contrato de arrendamiento dnsmasq de LXC. Puede ejecutarlo desde la máquina host o falsificarlo desde otro contenedor, ¡sí, eso funciona !:
El requisito previo para lo anterior es la biblioteca de python scapy:
Una vez ejecutado, debería ver en el registro del sistema algo como:
Para confirmar, simplemente verifique si se eliminó la entrada de
/var/lib/misc/dnsmasq.lxcbr0.leases
. El contenedor mismo mantendrá la IP, por lo que debe detenerse antes de comenzar cualquier contenedor nuevo que deba reutilizar la IP.fuente
Me doy cuenta de que mi respuesta lleva años de retraso, pero tal vez ayude a alguien más. ¡El problema fue que editó el código específico del paquete (
write_lxc_net
función) Ubuntu LXC que estaba destinado a escribirse en otro destino como una cadena, no procesado dentro dellxc-net
script mismo!Como resultado, el proceso dnsmasq no recibió el archivo de configuración que intentó pasar, dejándolo "sin efecto", como usted dice.
En su lugar, desearía establecer esta variable cerca de la parte superior del script, entre el resto:
fuente