Configuration de conteneurs LXC pontés avec des adresses IP statiques

15

J'essaie de configurer plusieurs conteneurs LXC sur un hôte, chacun avec ses propres adresses IP publiques publiques.

Mon hôte exécute la dernière version d'Ubuntu. Il possède une seule interface réseau nommée eth0. Les adresses IP statiques peuvent faire l'objet d'un ping depuis Internet et sont nommées eth0: 210, eth0: 211 ... Les nombres après les deux points sont l'octet le moins significatif des adresses. En plus de ces interfaces, j'ai configuré br0 sur l'adresse IP publique de l'hôte. Il existe également les interfaces lo, veth2LPP9A et lxcbr0. Le lxcbr0 a l'adresse d'une adresse IP privée.

L'hôte / etc / network / interfaces ressemble à:

auto br0
iface br0 inet static
        bridge_ports eth0
        bridge_fd 0
        [...]

Jusqu'à présent, j'ai utilisé diverses sources en ligne, y compris des conteneurs Bridging LXC pour héberger eth0 afin qu'ils puissent avoir une adresse IP publique pour m'aider à configurer cela.

Le fichier de configuration du conteneur a:

lxc.network.type = veth
lxc.network.link = br0

J'ai supprimé la configuration statique lxc.network.ipv4 de ce fichier car cela a causé des problèmes. Lorsque j'ai exécuté lxc-ls --fancy avec cette configuration, je voyais deux fois la même IP publique dans la sortie. De plus, cela perturberait la configuration de sous-réseau des interfaces / etc / network / du conteneur.

En parlant du fichier d'interface du conteneur, il ressemble un peu à:

auto eth0
iface eth0 inet static
        address [...]
        netmask 255.255.255.255
        #gateway [...]
        dns-nameservers 8.8.8.8

        post-up route add [...] dev eth0
        post-up route add default gw [...]
        post-down route del [...] dev eth0
        post-down route del default gw [...]

J'ai dû commenter la passerelle et ajouter les commandes route add à ce fichier. Sinon, le conteneur prendrait quelques minutes pour démarrer.

Les fichiers / proc / sys / net / bridge / bridge-nf- * sur l'hôte sont tous définis sur 0. La valeur / proc / sys / net / ipv4 / ip_forward est 1.

Le problème est que, même si "route -n" du conteneur semble devoir le faire, je ne peux pas sortir du conteneur. SSH à ce qui devrait être l'IP du conteneur, me connecte à l'hôte.

EDIT: La suppression de l'IP statique du conteneur de l'hôte a aidé, mais maintenant je reçois une nouvelle erreur. Une tentative de ping sur le conteneur à partir de l'hôte entraîne la redirection de HostFrom, New nexthop. Les paquets vont simplement de la passerelle à l'hôte, à plusieurs reprises. L'exécution d'un traceroute à partir de l'hôte montre que le premier arrêt est à la passerelle. Ensuite, toutes les autres routes sont * * *. Je reçois le même problème, que le conteneur soit en ligne ou non.

Câble Ethernet
la source

Réponses:

17

En fait, vous pouvez définir l'adresse et la passerelle de l' intérieur l' hôte et configurer le conteneur de ne pas toucher l'interface du tout en utilisant le mot - clé manual.

Placez-le parmi les invités /etc/network/interfaces:

auto eth0
iface eth0 inet manual

Laissez également le soin au fichier de configuration du conteneur de configurer l'interface:

lxc.network.type = veth
lxc.network.flags = up
lxc.network.link = lxc-bridge-nat
lxc.network.ipv4 = 192.168.100.16/24
lxc.network.ipv4.gateway = auto

L'invité se comportera comme si le BIOS avait déjà configuré l'interface et l'utilisait simplement.

Explorez particulièrement lxc.network.ipv4.gateway.

sebastianwagner
la source
THX! Cela m'a sauvé la vie ... mon conteneur essaierait toujours d'obtenir une nouvelle adresse DHCP ... en le définissant sur une valeur fixe à l'intérieur du conteneur (statique), le conteneur ne démarre même plus!
Dominik Dorn
Notez que cela ne fonctionne pas bien si l'hôte est suspendu et repris. Le lxc continue avec son adresse IP allouée mais l'hôte pense qu'il n'a plus d'adresse IP. J'ai trouvé qu'il est préférable de configurer le dnsmasq pour lxc-net et de lui remettre une adresse fixe.
HRJ
@HRJ - Vous devriez inclure le «comment» dans votre commentaire ou un lien vers la référence plutôt que de simplement dire «faites-le». Il s'agit d'un site technique et vous devez dire quelque chose de réellement utilisable.
Ian Macintosh
2
Il semble que le bon endroit pour le faire soit à la fois dans / etc / default / lxc où vous pouvez définir votre plage (voir LXC_DHCP_RANGE) et dans /etc/dnsmasq.d-available/lxc selon les documents ou la page de manuel dnsmasq
Ian Macintosh
4

Puisque vous établissez un pont, vous devez définir les adresses IP dans le conteneur uniquement , et non sur l'hôte. L'hôte ne doit avoir que sa ou ses propres adresses IP.

Michael Hampton
la source
2

Je viens de le faire l'autre jour avec Ubuntu 14.04. C'est simple. Il vous suffit de modifier le /etc/network/interfacesfichier à l'intérieur de votre conteneur et de définir ceci:

auto eth0
iface eth0 inet static
 address $IP
 netmask $NETMASK
 gateway $GW
 dns-nameservers $DNS

Remplacez chaque variable par la valeur souhaitée.

Vous NE devez faire quoi que ce soit d' autre!

PS: Remarquez l'espace avant certaines lignes. C'est obligatoire.

Tente Enrique Moreno
la source
cela a fait que mon conteneur ne démarre plus (serveur ubuntu 14.04) .. la réponse de sebastianwagner fonctionne pour moi.
Dominik Dorn
2

La meilleure façon que je trouve et la plus rapide est d'utiliser les profils lxc

lxc profile list - commander la liste de tous les profils que vous avez

lxc profile copy default minecraft(c'est le nom de votre nouveau profil)

alors lxc profile edit minecraft

Cela viendra

devices:
  eth0:
    ipv4.address: 192.168.1.114/24  - add this line and enter any ip address you like
    name: eth0
    nictype: macvlan - this is my setting
    parent: enp0s25
    type: nic
  root:
    path: /
    pool: lxc_zfs
    type: disk
name: mine
used_by:

puis enregistrez-le

attribuez ensuite le profil à votre conteneur LXC comme ceci

lxc profile assign YOUR_CONTAINER_NAME YOUR_NEW_PROFILE_NAME

puis redémarrez le conteneur et votre nouvelle adresse IP est définie sur ce conteneur

Jayferret
la source
1

Je pourrais configurer correctement mes conteneurs lxc après avoir suivi la réponse de @Enrique Moreno Tent, je vais donc expliquer quoi faire plus en détail au cas où vous ne savez pas comment configurer les autres éléments.

1. Accédez à votre conteneur LXC via lxc-attach commande

Commander:

$ lxc-attach -n YOUR-CONTAINER-NAME

2. Consultez vos configurations actuelles avec ifconfig

Commander

root@mycontainer:~# ifconfig
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 10.0.3.160  netmask 255.255.255.0  broadcast 10.0.3.255
        inet6 fe80::216:3eff:fec9:2fa0  prefixlen 64  scopeid 0x20<link>
        ether 00:16:3e:c9:2f:a0  txqueuelen 1000  (Ethernet)
        RX packets 62  bytes 7142 (7.1 KB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 60  bytes 9788 (9.7 KB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        inet6 ::1  prefixlen 128  scopeid 0x10<host>
        loop  txqueuelen 1  (Local Loopback)
        RX packets 20285  bytes 175021803 (175.0 MB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 20285  bytes 175021803 (175.0 MB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

`` ''

3. Obtenir l'adresse, le masque de réseau et la passerelle

En voyant le résultat de la ifconfig commande ci-dessus, on voit alors:

Adresse est l'adresse que vous souhaitez, vous pouvez la changer en 10.0.3.166.

Masque de réseau est là: 255.255.255.0

Passerelle : pour la passerelle que vous utilisez la diffusion adresse de , voici 10.0.3.255

Comme vous pouvez le voir ci-dessus, vous disposez actuellement de toutes les informations nécessaires pour remplir votre invité (conteneur) /etc/network/interfaces .

4. Obtenir dns-nameservers la valeur.

Exécutez la commande:

cat /etc/resolv.conf

Mais est peut - être mieux utiliser Google DNS, qui Asre 8.8.8.8et8.8.4.4

5. Édition /etc/network/interfacesDANS LE CONTENANT

auto eth0 iface eth0 inet static address 10.0.3.166 netmask 255.255.255.0 gateway 10.0.3.255 dns-nameservers 8.8.8.8

Iacchus
la source
ifconfiga été remplacé par ip adans les versions plus récentes de Debian / Ubuntu linuxconfig.org/…
rvazquezglez