Je sais que je peux attribuer une adresse IP statique manuellement à l'aide de /etc/network/interfaces
.
Je sais également que je peux lire l'adresse MAC du conteneur LXC (par exemple en recherchant l' lxc.network.hwaddr
entrée dans /var/lib/lxc/<container-name>/config
et en attribuant l'IP en utilisant les entrées dhcp-host=<mac-addr>,10.0.3.3
dans /etc/dnsmasq.d/<some file>
.
Dans le dossier que /etc/default/lxc-net
j'ai lu
# 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
Cela conviendrait à mes besoins; malheureusement, cela n'a aucun effet.
lxc-net
n'aide pas si vous ne supprimez pas votre pont lxcbr0. Voir ma réponse.Réponses:
Je l'ai rencontré récemment et je pense avoir trouvé une solution simple. Je l'ai (uniquement) testé sur Ubuntu 14.04.
Tout d'abord, décommentez cette ligne / etc / default / lxc-net:
Dans /etc/lxc/dnsmasq.conf, définissez un fichier dhcp-hosts:
Ajoutez ensuite des entrées dans /etc/lxc/dnsmasq-hosts.conf comme ceci:
Attention: les modifications ne seront effectives qu'après le redémarrage de lxc-net (qui redémarre dnsmasq):
Ensuite, vous pouvez modifier /etc/lxc/dnsmasq-hosts.conf et envoyer le signal SIGHUP à dnsmasq:
Alors oui, vous devez redémarrer lxc-net, mais une seule fois. J'espère que cela t'aides.
la source
killall -s SIGHUP dnsmasq
. Je suis d'accord, que juste "SIGHUP-ing" dnsmasq est plus efficace que de redémarrer tout le démon (surtout s'il ne fonctionne pas sans patcher ses scripts parvenus).lxc-net
n'est nécessaire que pour permettre au dnsmasq d'utiliser la configuration à partir de /etc/lxc/dnsmasq.conf (et cette information est présente dans le/etc/default/lxc-net
qui est inconnu dudnsmasq
). Si vous l'aviez réglé auparavant, un autre SIGHUP devrait suffire.kill -HUP $(cat /var/run/lxc/dnsmasq.pid)
si vous ne voulez pas installerkillall
ou recharger d'autresdnsmasq
instancesCela fonctionne bien dans Ubuntu 14.04.1
Décommenter cette ligne
/etc/default/lxc-net
arrêtez tous les conteneurs, redémarrez lxc-net:
Configurer les adresses IP dans
/etc/lxc/dnsmasq.conf
où
{NAME}
est le nom de votre conteneur LXC:la source
/var/lib/lxc/<container-name>/rootfs/etc/network/interfaces
fichier et attribuer une adresse IP statique au conteneur.La réponse de Tombart fonctionne si vous êtes assez patient pour attendre le rafraîchissement DNS ET que vous êtes prêt à redémarrer le conteneur (l'invité) par la suite.
Ce qui suit est la recette qui nécessite que tous les autres conteneurs lxc éventuellement en cours d'exécution soient arrêtés . Si vous ne pouvez pas vous le permettre, je ne vois aucun moyen de forcer une nouvelle configuration dnsmasq. (Pour certains reasone signalant HUP au pid de dnsmasq trouvé dans
/run/lxc/dnsmasq.pid
ne fonctionne pas non plus.)Donc, si vous voulez que quelque chose fonctionne instantanément et qu'aucun autre conteneur lxc ne fonctionne, suivez ma réponse.
$name
est le nom du nœud pour lequel nous voulons réinitialiser l'affectation, et$internalif
est le nom de l'adaptateur ponté du LXC. Vous pouvez obtenir la valeur de$internalif
avec par exempleaugtool -L -A --transform "Shellvars incl /etc/default/lxc-net" get "/files/etc/default/lxc-net/LXC_BRIDGE" | sed -En 's/\/.* = (.*)/\1/p'
si vous installez,augeas-tools
mais généralement c'est justelxcbr0
.Malheureusement, il existe un bogue (fonctionnalité?) Dans
/etc/init/lxc-net.conf
Ubuntu 14.04 qui empêche le rechargement du àdnsmasq
moins que le périphérique de pont ne soit en panne pour l'hôte.la source
Cette solution fonctionne en corrigeant les scripts lxc upstart. Il divise la tâche complexe consistant à mettre en place le pont lxcbr0 et à démarrer un
dnsmasq
en deux travaux distincts. Maintenant, vous n'avez pas besoin de redémarrer l'ensemble dulxc-net
pont pour simplement recharger lednsmasq
- recharger lesudo service restart lxc-dnsmasq
est suffisant et ne nécessite pas d'arrêter le pont.sudo service lxc-net stop
et assurez-vous qu'il n'y a pas de pont lxcbr0 (ou équivalent)./etc/init/lxc-net.conf
par le contenu suivant:.
/etc/init/lxc-dnsmasq
avec le contenu suivant:.
la source
Voici un script python simple qui libère le bail LXC dnsmasq. Vous pouvez l'exécuter à partir de la machine hôte ou le forger à partir d'un autre conteneur - oui cela fonctionne!:
La condition préalable à ce qui précède est la bibliothèque de python scapy:
Une fois exécuté, vous devriez voir dans le journal système quelque chose comme:
Pour confirmer, vérifiez simplement si l'entrée est supprimée de
/var/lib/misc/dnsmasq.lxcbr0.leases
. Le conteneur lui-même conservera l'IP, il doit donc être arrêté avant de démarrer tout nouveau conteneur qui devrait réutiliser l'IP.la source
Je réalise que ma réponse a des années de retard, mais peut-être que cela aide quelqu'un d'autre. Le problème était que vous avez édité du code spécifique au package Ubuntu LXC (
write_lxc_net
fonction) qui devait être écrit dans une autre destination sous forme de chaîne, non traité dans lelxc-net
script lui-même!Par conséquent, le processus dnsmasq n'a pas reçu le fichier de configuration que vous avez essayé de le transmettre, vous laissant "sans effet", comme vous le dites.
Au lieu de cela, vous souhaitez définir cette variable près du haut du script, parmi les autres:
la source