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.
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
.
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.
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
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.
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.
lxc-attach
commandeCommander:
$ lxc-attach -n YOUR-CONTAINER-NAME
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
`` ''
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
.
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
/etc/network/interfaces
À L'INTÉRIEUR DU RÉCIPIENTauto 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