GNU/Linux >> Tutoriels Linux >  >> Cent OS

Comment définir un réseau externe pour les conteneurs dans les conteneurs Linux (LXC)

L'objectif du poste est de configurer un conteneur LXC qui peut se connecter à des réseaux externes. Plusieurs modes réseau peuvent être utilisés pour configurer LXC.

Par défaut, le script de modèle lxc-oracle configure la mise en réseau en configurant un pont veth. Dans ce mode, un conteneur obtient son adresse IP du serveur dnsmasq que libvirtd exécute sur le réseau de pont virtuel privé (virbr0) entre le conteneur et l'hôte. L'hôte permet à un conteneur de se connecter au reste du réseau en utilisant les règles NAT dans iptables, mais ces règles n'autorisent pas les connexions entrantes vers le conteneur. L'hôte et les autres conteneurs sur le pont veth ont un accès réseau au conteneur via le pont.

Si vous souhaitez autoriser les connexions réseau depuis l'extérieur de l'hôte à pouvoir se connecter au conteneur, le conteneur doit avoir une adresse IP sur le même réseau que l'hôte. Une façon de réaliser cette configuration est d'utiliser un pont macvlan pour créer un réseau logique indépendant pour le conteneur.

Ceci peut être réalisé en utilisant le pont macvlan et le scénario ci-dessous montre comment le configurer. Le scénario est basé sur CentOS/RHEL 6 et devrait également fonctionner pour CentOS/RHEL 7.

1. Sur le nœud hôte, il existe deux interfaces et aucun pont n'est actuellement créé.

[root@centos6-LXC container]# ifconfig

eth1 Link encap:Ethernet HWaddr 08:00:27:B2:16:F7
inet addr:XX.XX.22.189 Bcast:XX.XX.23.255 Mask:255.255.252.0

eth2 Link encap:Ethernet HWaddr 08:00:27:1C:2C:5F
inet6 addr: 2606:b400:c11:68:a00:27ff:fe1c:2c5f/64 Scope:Global

virbr0 Link encap:Ethernet HWaddr 52:54:00:3F:E9:36
inet addr:192.168.122.1 Bcast:192.168.122.255 Mask:255.255.255.0
UP BROADCAST MULTICAST MTU:1500 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:0 (0.0 b) TX bytes:0 (0.0 b)

2. Comment créer un nouveau pont sur le nœud hôte :

[root@centos6-LXC container]# brctl addbr lxcbr1
[root@centos6-LXC container]# brctl addif lxcbr1 eth2
[root@centos6-LXC container]# brctl show
bridge name   bridge id          STP enabled   interfaces
lxcbr1        8000.0800271c2c5f  no            eth2
virbr0        8000.5254003fe936  yes           virbr0-nic
[root@centos6-LXC container]# ip link set lxcbr1 up
[root@centos6-LXC container]# ip link

2: eth1: [BROADCAST,MULTICAST,UP,LOWER_UP] mtu 1500 qdisc pfifo_fast state UP qlen 1000
link/ether 08:00:27:b2:16:f7 brd ff:ff:ff:ff:ff:ff
3: eth2: [BROADCAST,MULTICAST,UP,LOWER_UP] mtu 1500 qdisc pfifo_fast master lxcbr1 state UP qlen 1000
link/ether 08:00:27:1c:2c:5f brd ff:ff:ff:ff:ff:ff

6: lxcbr1: [BROADCAST,MULTICAST,UP,LOWER_UP] mtu 1500 qdisc noqueue state UP
link/ether 08:00:27:1c:2c:5f brd ff:ff:ff:ff:ff:ff
[root@centos6-LXC ~]# egrep -v "^$|#" /container/contnr01/config
lxc.rootfs = /container/contnr01/rootfs
lxc.include = /usr/share/lxc/config/oracle.common.conf
lxc.arch = x86_64
lxc.utsname = contnr01
lxc.cap.drop = sys_resource
lxc.cap.drop = setfcap setpcap
lxc.network.type = macvlan
lxc.network.flags = up
lxc.network.link = lxcbr1
lxc.network.macvlan.mode = bridge
lxc.network.name = eth0
lxc.network.mtu = 1500
lxc.network.hwaddr = fe:71:08:9d:10:58

3. Démarrage du conteneur lxc :

[root@centos6-LXC ~]# lxc-start --name contnr01
lxc-start: cgfs.c: handle_cgroup_settings: 2077 Device or resource busy - failed to set memory.use_hierarchy to 1; continuing
INIT: version 2.86 booting
Welcome to Oracle Linux Oracle Linux Server release 5.9
Press 'I' to enter interactive startup.
Setting hostname contnr01: [ OK ]
Checking filesystems
WARNING: Your /etc/fstab does not contain the fsck passno
field. I will kludge around things for you, but you
should fix your /etc/fstab file as soon as you can.

[ OK ]
Mounting local filesystems: [ OK ]
Enabling /etc/fstab swaps: [ OK ]
INIT: Entering runlevel: 3
Entering non-interactive startup
Bringing up loopback interface: [ OK ]
Bringing up interface eth0:
Determining IP information for eth0... done.
[ OK ]
Mounting other filesystems: [ OK ]
Starting system logger: [ OK ]
Starting sshd: [ OK ]

Oracle Linux Server release 5.9
Kernel 3.8.13-98.2.1.el6uek.x86_64 on an x86_64

contnr01 login:

4. À partir du conteneur lxc, affichez la configuration et essayez d'accéder au réseau externe

[root@centos6-LXC ~]# lxc-attach -n contnr01
[root@contnr01 ~]# hostname
contnr01
[root@contnr01 ~]# ifconfig
eth0 Link encap:Ethernet HWaddr FE:71:08:9D:10:58
inet addr:XX.XX.22.192 Bcast:XX.XX.23.255 Mask:255.255.252.0
inet6 addr: 2606:b400:c11:68:fc71:8ff:fe9d:1058/64 Scope:Global
inet6 addr: fe80::fc71:8ff:fe9d:1058/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:8950 errors:0 dropped:0 overruns:0 frame:0
TX packets:16 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:1217259 (1.1 MiB) TX bytes:2003 (1.9 KiB)

lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
inet6 addr: ::1/128 Scope:Host
UP LOOPBACK RUNNING MTU:65536 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:0 (0.0 b) TX bytes:0 (0.0 b)
[root@contnr01 ~]# cat /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0
BOOTPROTO=dhcp   ### Can assign a dedicated or static IP
ONBOOT=yes
HOSTNAME=contnr01
DHCP_HOSTNAME=contnr01
TYPE=Ethernet
[root@contnr01 ~]# route -n
Kernel IP routing table
Destination       Gateway       Genmask       Flags   Metric Ref Use Iface
0.0.0.0           XX.XX.20.1    0.0.0.0       UG      0      0   0   eth0
XX.XX.20.0        0.0.0.0       255.255.252.0 U       0      0   0   eth0
169.254.0.0       0.0.0.0       255.255.0.0   U       0      0   0   eth0

Vous pouvez maintenant envoyer un ping à l'adresse IP de l'hôte externe pour vérifier la connexion.

Remarque  :Pour les conteneurs dans les hôtes VMware, veuillez modifier les paramètres "Forge transmet" sur Accepter sur vswitch où la VM est connectée. Lorsque l'option est définie sur Accepter, ESXi ne compare pas les adresses MAC source et effective.


Cent OS
  1. Dans les coulisses avec les conteneurs Linux

  2. Comment définir/modifier un nom d'hôte sur CentOS 7 Linux

  3. Comment définir une adresse IP statique et configurer le réseau sous Linux

  4. Ubuntu - Comment configurer des adresses IP externes pour les invités Lxc ?

  5. Comment définir l'ID de processus sous Linux pour un programme spécifique

Comment configurer tlog sur les hôtes Linux pour la journalisation du terminal

Comment configurer un cluster Pacemaker pour Linux haute disponibilité

Comment définir une adresse IP statique dans CentOS Linux

Comment définir un fond d'écran différent pour chaque moniteur sous Linux

Comment exécuter des conteneurs LXC/LXD sur AlmaLinux ou Rocky Linux 8

Comment configurer un killswitch Linux pour les VPN