GNU/Linux >> LINUX-Kenntnisse >  >> Cent OS

So legen Sie ein externes Netzwerk für Container in Linux-Containern (LXC) fest

Das Ziel des Beitrags ist die Einrichtung eines LXC-Containers, der eine Verbindung zu externen Netzwerken herstellen kann. Es gibt mehrere Netzwerkmodi, die beim Einrichten von LXC verwendet werden können.

Standardmäßig richtet das Vorlagenskript lxc-oracle das Netzwerk ein, indem es eine Veth-Bridge einrichtet. In diesem Modus erhält ein Container seine IP-Adresse vom dnsmasq-Server, den libvirtd im privaten virtuellen Bridge-Netzwerk (virbr0) zwischen dem Container und dem Host ausführt. Der Host erlaubt einem Container, sich mit dem Rest des Netzwerks zu verbinden, indem er NAT-Regeln in iptables verwendet, aber diese Regeln lassen keine eingehenden Verbindungen zum Container zu. Sowohl der Host als auch andere Container auf der Veth-Bridge haben über die Bridge Netzwerkzugriff auf den Container.

Wenn Sie zulassen möchten, dass Netzwerkverbindungen von außerhalb des Hosts eine Verbindung zum Container herstellen können, muss der Container eine IP-Adresse im selben Netzwerk wie der Host haben. Eine Möglichkeit, diese Konfiguration zu erreichen, ist die Verwendung einer macvlan-Bridge um ein unabhängiges logisches Netzwerk für den Container zu erstellen.

Dies kann durch die Verwendung von Macvlan Bridge erreicht werden und das folgende Szenario zeigt, wie es eingestellt wird. Das Szenario basiert auf CentOS/RHEL 6 und sollte auch für CentOS/RHEL 7 funktionieren.

1. Auf dem Host-Knoten gibt es zwei Schnittstellen und derzeit keine Brücke erstellt.

[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. So erstellen Sie eine neue Bridge auf dem Host-Knoten:

[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. Starten des lxc-Containers:

[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. Aus dem lxc-Container, um die Konfiguration anzuzeigen und zu versuchen, das externe Netzwerk zu erreichen

[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

Jetzt können Sie die externe Host-IP anpingen, um die Verbindung zu überprüfen.

Hinweis :Für Container in VMware-Hosts ändern Sie bitte die „Forge-Übertragungen“-Einstellungen auf Akzeptieren auf vswitch, wo diese VM verbunden ist. Wenn die Option auf „Akzeptieren“ gesetzt ist, vergleicht ESXi keine Quell- und effektive MAC-Adressen.


Cent OS
  1. So legen/ändern Sie einen Hostnamen unter CentOS 7 Linux

  2. Linux – Wie kann ich die Netzwerkfreigabe für den aktuellen Prozess aufheben?

  3. Wie richte ich ein NFS-Netzwerk ein?

  4. So legen Sie die Prozess-ID in Linux für ein bestimmtes Programm fest

  5. So stellen Sie die bevorzugte Netzwerkschnittstelle unter Linux ein

So richten Sie tlog auf Linux-Hosts für die Terminalprotokollierung ein

So richten Sie einen Pacemaker-Cluster für Linux mit hoher Verfügbarkeit ein

So legen Sie eine statische IP-Adresse in CentOS Linux fest

So legen Sie in Linux für jeden Monitor ein anderes Hintergrundbild fest

So führen Sie LXC/LXD-Container auf AlmaLinux oder Rocky Linux 8 aus

So richten Sie einen Linux-Killswitch für VPNs ein