web-dev-qa-db-fra.com

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

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, notamment Bridging LXC containers to Host eth0 so they can have a public IP 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. SSHing à 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. La 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, tous les autres itinéraires sont * * *. Je reçois le même problème, que le conteneur soit en ligne ou non.

15
EthernetCable

En fait, vous pouvez définir l'adresse et la passerelle à partir de dans le Hébergez et configurez le conteneur pour ne pas toucher du tout l'interface 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 en particulier lxc.network.ipv4.gateway .

17
sebastianwagner

Puisque vous établissez un pont, vous devez définir les adresses IP dans le conteneur niquement, et non sur l'hôte. L'hôte ne doit avoir que la sienne adresse (s) IP.

4
Michael Hampton

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

lxc profile list - commande la liste de tous les profils que tu as

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

2
Jayferret

Je l'ai fait l'autre jour avec Ubuntu 14.04. C'est simple. Il vous suffit de modifier le /etc/network/interfaces fichier à l'intérieur de votre conteneur, et définissez 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 PAS devez faire autre chose!

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

2

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 si 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. Affichez 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 commande ifconfig ci-dessus, nous voyons alors:

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

Netmask est là: 255.255.255.0

Gateway: Pour la passerelle, vous utilisez l'adresse broadcast avec ici 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 valeur.

Exécutez la commande:

cat /etc/resolv.conf

Mais il vaut peut-être mieux utiliser Google DNS, qui _8.8.8.8 et 8.8.4.4

5. Modification /etc/network/interfaces À L'INTÉRIEUR DU RÉCIPIENT

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

1
Iacchus