LXC-Host aufsetzen: Unterschied zwischen den Versionen

Aus Vosp.info
Wechseln zu:Navigation, Suche
(Auf dem Host Container fs.test2.local einrichten)
 
(8 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt)
Zeile 3: Zeile 3:
 
== Server mit GRML starten ==
 
== Server mit GRML starten ==
 
=== Festplatten partitionieren ===
 
=== Festplatten partitionieren ===
  fdisk /dev/sda
+
  f# disk /dev/sda
 
   * /  5G
 
   * /  5G
 
   * swap 1G
 
   * swap 1G
Zeile 9: Zeile 9:
  
 
=== LVM nur für die Container ===
 
=== LVM nur für die Container ===
  pvcreate /dev/sda3
+
  # pvcreate /dev/sda3
  vgcreate vg_lxc /dev/sda3
+
  # vgcreate vg_lxc /dev/sda3
  lvcreate -L 20G -n lv_lxc vg_lxc
+
  # lvcreate -L 20G -n lv_lxc vg_lxc
  
  grml-debootstrap --target /dev/sda1 --grub /dev/sda
+
  # grml-debootstrap --target /dev/sda1 --grub /dev/sda
  
  reboot
+
  # reboot
 
== System starten ==
 
== System starten ==
 
=== Keyboard layout einstellen ===
 
=== Keyboard layout einstellen ===
  dpkg-reconfigure console-data
+
  # dpkg-reconfigure console-data
 
Im ncurses-Menu auswählen.
 
Im ncurses-Menu auswählen.
 
* Select keymap from arch list => O.K.
 
* Select keymap from arch list => O.K.
Zeile 27: Zeile 27:
  
 
=== Sprache einstellen ===
 
=== Sprache einstellen ===
  dpkg-reconfigure locales
+
  # dpkg-reconfigure locales
 
''de_DE.UTF-8'' auswählen und als default einstellen
 
''de_DE.UTF-8'' auswählen und als default einstellen
  
 
=== Bash-completion ===
 
=== Bash-completion ===
  apt-get install bash-completion
+
  # apt install bash-completion
 
=== Farbiges Promt ===
 
=== Farbiges Promt ===
vim ~/.bashrc
+
# vim ~/.bashrc
  
 
  export PS1='\[\033[0;31m\]\u\[\033[0;36m\]@\h:\[\033[0m\]\w\$ '
 
  export PS1='\[\033[0;31m\]\u\[\033[0;36m\]@\h:\[\033[0m\]\w\$ '
Zeile 41: Zeile 41:
 
* [0;31m] Rot (red)  
 
* [0;31m] Rot (red)  
  
* Meine Farbregeln
+
* Vorschlag Farbregeln
 
** Vor dem Promt: ''rot'' für root und ''grün'' für user.
 
** Vor dem Promt: ''rot'' für root und ''grün'' für user.
 
** Hinter dem Promt: ''rot'' für Produktivserver, ''türkis'' für Testrechner und ''grün'' für Privatrechner/Workstations.
 
** Hinter dem Promt: ''rot'' für Produktivserver, ''türkis'' für Testrechner und ''grün'' für Privatrechner/Workstations.
Zeile 64: Zeile 64:
  
 
Damit PATH wirksam werden kann:
 
Damit PATH wirksam werden kann:
  mkdir ~/bin
+
  # mkdir ~/bin
 
Dort leben alle custom-scripts.
 
Dort leben alle custom-scripts.
  
 
=== Hostname ===
 
=== Hostname ===
Wir nennen diesen Rechner ''host-1-lnx01''
+
Wir nennen diesen Rechner ''host''
  vim /etc/hostname
+
  # vim /etc/hostname
''host-1-lnx01'' eintragen
+
''host'' eintragen
 
 
=== /etc/network/interfaces ===
 
Die ''interfaces'' Datei anpassen.
 
vim /etc/network/interfaces
 
 
 
eth1 ist hier das Interface zum Intranet
 
 
 
# interfaces(5) file used by ifup(8) and ifdown(8)
 
auto lo
 
iface lo inet loopback
 
 
auto eth0
 
iface eth0 inet dhcp
 
 
auto eth1
 
iface eth1 inet static
 
        address 10.8.190.1
 
        broadcast 10.8.190.255
 
        netmask 255.255.255.0
 
 
 
  
 
=== LXC installieren ===
 
=== LXC installieren ===
  apt-get install lxc lxctl
+
  # apt install lxc lxctl
  
 
=== LVM für LXC einbinden ===
 
=== LVM für LXC einbinden ===
 
LVM auf /var/lib/lxc einbinden.
 
LVM auf /var/lib/lxc einbinden.
  
  mkfs.ext4 /dev/vg_lxc/lv_lxc
+
  # mkfs.ext4 /dev/vg_lxc/lv_lxc
  blkid |grep mapper >> /etc/fstab
+
  b# lkid |grep mapper >> /etc/fstab
  vim /etc/fstab
+
  # vim /etc/fstab
  
Am Ende muss die Zeile so außsehen. Der UUID weicht natürlich ab.<br>
+
Am Ende muss die Zeile so außsehen. Der UUID weicht natürlich ab.
 
  /dev/disk/by-uuid/2c58a476-7b09-428c-8277-b80889443220 /var/lib/lxc ext4        defaults        0      0
 
  /dev/disk/by-uuid/2c58a476-7b09-428c-8277-b80889443220 /var/lib/lxc ext4        defaults        0      0
  
Zeile 108: Zeile 88:
 
=== Netzwerk für LXC vorbereiten ===
 
=== Netzwerk für LXC vorbereiten ===
  
  vim /etc/network/interfaces
+
  # vim /etc/network/interfaces
  
 
  # interfaces(5) file used by ifup(8) and ifdown(8)
 
  # interfaces(5) file used by ifup(8) and ifdown(8)
Zeile 119: Zeile 99:
 
    
 
    
 
  # Mit diese Bridge werden die Container verbunden, damit sie Verbindung zum Internet bekommen.
 
  # Mit diese Bridge werden die Container verbunden, damit sie Verbindung zum Internet bekommen.
  auto lxcbr0
+
  auto lxc-in
  iface lxcbr0 inet static
+
  iface lxc-in inet static
 
         address 10.0.0.1
 
         address 10.0.0.1
 
         netmask 255.255.255.0
 
         netmask 255.255.255.0
         pre-up (ip addr show |grep lxcbr0) || brctl addbr lxcbr0
+
         pre-up (ip addr show |grep lxc-in) || brctl addbr lxc-in
 
 
   
 
   
 
  # eth1 verbindet den Host physikalisch mit dem Intranet
 
  # eth1 verbindet den Host physikalisch mit dem Intranet
Zeile 130: Zeile 109:
 
  iface eth1 inet manual
 
  iface eth1 inet manual
 
   
 
   
 +
# Durch die IP wird der Host auch aus dem Intranet erreichbar.
 
  # Per Bridge steht eth1 den Containern zur Verfügung
 
  # Per Bridge steht eth1 den Containern zur Verfügung
 
  auto lxc-out
 
  auto lxc-out
  iface lxc-out inet manual
+
  iface lxc-out inet static
 +
        address 10.8.190.10
 +
        broadcast 10.8.190.255
 +
        netmask 255.255.255.0
 
         bridge_ports    eth1
 
         bridge_ports    eth1
 
         bridge_maxwait 1
 
         bridge_maxwait 1
Zeile 138: Zeile 121:
 
=== Packet Forwarding einschalten ===
 
=== Packet Forwarding einschalten ===
  
  vim /etc/sysctl.conf  
+
  # vim /etc/sysctl.conf  
  
 
Die folgende Zeile suchen und einkommentieren (# vor der Zeile entfernen)
 
Die folgende Zeile suchen und einkommentieren (# vor der Zeile entfernen)
Zeile 145: Zeile 128:
 
=== MASQUERADE der Firewall  einschalten ===
 
=== MASQUERADE der Firewall  einschalten ===
  
  apt-get install -y iptables
+
  # apt install -y iptables
  
  iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
+
  # iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
  
 
Dauerhaft abspeichern und nach jedem Hoststart laden
 
Dauerhaft abspeichern und nach jedem Hoststart laden
  apt-get -y install iptables-persistent  
+
  # apt -y install iptables-persistent  
  
 
Änderungen an der Firewall speichern mit
 
Änderungen an der Firewall speichern mit
  iptables-save > /etc/iptables/rules.v4
+
  # iptables-save > /etc/iptables/rules.v4
 +
= LXC-Container erzeugen und auf dem Host konfigurieren =
 +
== Gilt für alle Container ==
 +
=== Reihenfolge der Containerkonfiguration ===
 +
* Bevor die anderen Container ins Netz kommen können, muss im OPSI-Container Forwarding und Masquerading eingerichtet werden.
 +
=== Provisorische Namensauflösung ===
 +
* Die Namensauflösung wird am Ende vom Samba-AD/DC übernommen. Da er noch nicht installiert ist, muss eine Übergangslösung genutzt werden.
 +
# vim <containername>/rootfs/etc/resov.conf
 +
z.b. "8.8.8.8"
 +
 
 +
== Container opsi-1.test2.local erstellen ==
 +
=== Container opsi-1.test2.local erzeugen ===
 +
# lxc-create --name opsi-1.test2.local -t debian
 +
 
 +
===  Auf dem Host Container opsi-1.test2.local einrichten ===
 +
 
 +
* Als erstes wird die erzeugte Conf bearbeitet.
 +
# vim /var/lib/lxc/opsi.test2.local/config
 +
 
 +
* Entfernen
 +
lxc.network.type = empty
 +
 
 +
* Hinzufügen
 +
# Autostart des Containers ( 0 steht für kein Autostart)
 +
lxc.start.auto = 1
 +
 +
# Netzwerk
 +
# Erzeugt tun-device, dass in die Bridge lxcbr0 eingefügt wird (Internet)
 +
lxc.network.type=veth
 +
# Bridge, in der das Interface eingefügt wird
 +
lxc.network.link=lxc-in
 +
lxc.network.hwaddr = 00:FF:AA:00:31:01
 +
lxc.network.ipv4 = 10.0.0.10/24
 +
# Gateway des Containers
 +
lxc.network.ipv4.gateway  = 10.0.0.1
 +
lxc.network.flags=up
 +
# Name des TUN-Devices auf dem Host
 +
lxc.network.veth.pair=opsi-in
 +
 
 +
# Erzeugt tun-device, dass in die Bridge lxc-out eingefügt wird (Intranet)
 +
lxc.network.type=veth
 +
  # Bridge, in der das Interface eingefügt wird
 +
lxc.network.link=lxc-out
 +
lxc.network.hwaddr = 00:FF:AA:00:31:11
 +
lxc.network.ipv4 = 10.8.190.1/24
 +
lxc.network.flags=up
 +
# Name des TUN-Devices auf dem Host
 +
lxc.network.veth.pair=opsi-out
 +
 +
# OpenVPN
 +
# Damit OpenVPN im Container genutzt werden kann.
 +
lxc.cgroup.devices.allow = c 10:200 rwm
 +
 +
#Setzt den Hostnamen mittels <Container>/rootfs/etc/hosts
 +
lxc.utsname = opsi
 +
 
 +
== Container samba4.test2.local erstellen ==
 +
=== Container samba4.test2.local erzeugen ===
 +
# lxc-create --name samba4.test2.local -t debian
 +
 
 +
=== Auf dem Host Container samba4.test2.local einrichten ===
 +
* Als erstes wird die erzeugte Conf bearbeitet.
 +
# vim /var/lib/lxc/samba4.test2.local/config
 +
 
 +
* Entfernen
 +
lxc.network.type = empty
 +
 
 +
* Hinzufügen
 +
# Autostart des Containers ( 0 steht für kein Autostart)
 +
lxc.start.auto = 1
 +
 
 +
# Erzeugt tun-device, dass in die Bridge lxc-out eingefügt wird (Intranet)
 +
lxc.network.type=veth
 +
  # Bridge, in der das Interface eingefügt wird
 +
lxc.network.link=lxc-out
 +
lxc.network.hwaddr = 00:FF:AA:00:21:11
 +
lxc.network.ipv4 = 10.8.190.5/24
 +
lxc.network.flags=up
 +
# Name des TUN-Devices auf dem Host
 +
lxc.network.veth.pair=samba4-out
 +
# Hostname
 +
lxc.utsname = samba4
 +
 
 +
== Container fs.test2.local erstellen ==
 +
=== Container fs.test2.local erzeugen ===
 +
# lxc-create --name fs.test2.local -t debian
 +
 
 +
=== Auf dem Host Container fs.test2.local einrichten ===
 +
* Als erstes wird die erzeugte Conf bearbeitet.
 +
# vim /var/lib/lxc/fs.test2.local/config
 +
 
 +
* Entfernen
 +
lxc.network.type = empty
 +
 
 +
* Hinzufügen
 +
# Autostart des Containers ( 0 steht für kein Autostart)
 +
lxc.start.auto = 1
 +
 
 +
# Erzeugt tun-device, dass in die Bridge lxc-out eingefügt wird (Intranet)
 +
lxc.network.type=veth
 +
  # Bridge, in der das Interface eingefügt wird
 +
lxc.network.link=lxc-out
 +
lxc.network.hwaddr = 00:FF:AA:01:21:11
 +
lxc.network.ipv4 = 10.8.190.4/24
 +
lxc.network.flags=up
 +
# Name des TUN-Devices auf dem Host
 +
lxc.network.veth.pair=fs-out
 +
# Hostname
 +
lxc.utsname = fs

Aktuelle Version vom 25. Januar 2019, 13:34 Uhr

ZUrück zu Server_aufsetzen

Installation LXC-Host

Server mit GRML starten

Festplatten partitionieren

f# disk /dev/sda
  * /  5G
  * swap 1G
  * lvm Rest

LVM nur für die Container

# pvcreate /dev/sda3
# vgcreate vg_lxc /dev/sda3
# lvcreate -L 20G -n lv_lxc vg_lxc
# grml-debootstrap --target /dev/sda1 --grub /dev/sda
# reboot

System starten

Keyboard layout einstellen

# dpkg-reconfigure console-data

Im ncurses-Menu auswählen.

  • Select keymap from arch list => O.K.
  • qwertz => O.K.
  • German => O.K.
  • Standard => O.K.
  • latin1 => O.K.

Sprache einstellen

# dpkg-reconfigure locales

de_DE.UTF-8 auswählen und als default einstellen

Bash-completion

# apt install bash-completion

Farbiges Promt

# vim ~/.bashrc
export PS1='\[\033[0;31m\]\u\[\033[0;36m\]@\h:\[\033[0m\]\w\$ '
  • [0;36m] Türkis (cyan)
  • [0;32m] Grün (green)
  • [0;31m] Rot (red)
  • Vorschlag Farbregeln
    • Vor dem Promt: rot für root und grün für user.
    • Hinter dem Promt: rot für Produktivserver, türkis für Testrechner und grün für Privatrechner/Workstations.


Meine .bashrc für root auf einem Testrechner.

# ~/.bashrc: executed by bash(1) for non-login shells.

export PS1='\[\033[0;31m\]\u\[\033[0;36m\]@\h:\[\033[0m\]\w\$ '
export LS_OPTIONS='--color=auto'
eval "`dircolors`"
alias ls='ls $LS_OPTIONS'
alias ll='ls $LS_OPTIONS -l'
alias l='ls $LS_OPTIONS -lA'

# Some more alias to avoid making mistakes:
alias rm='rm -i'
# bash-completion
. /etc/bash_completion

PATH=$PATH:~/bin

Damit PATH wirksam werden kann:

# mkdir ~/bin

Dort leben alle custom-scripts.

Hostname

Wir nennen diesen Rechner host

# vim /etc/hostname

host eintragen

LXC installieren

# apt install lxc lxctl

LVM für LXC einbinden

LVM auf /var/lib/lxc einbinden.

# mkfs.ext4 /dev/vg_lxc/lv_lxc
b# lkid |grep mapper >> /etc/fstab
# vim /etc/fstab

Am Ende muss die Zeile so außsehen. Der UUID weicht natürlich ab.

/dev/disk/by-uuid/2c58a476-7b09-428c-8277-b80889443220 /var/lib/lxc ext4        defaults        0       0


Netzwerk für LXC vorbereiten

# vim /etc/network/interfaces
# interfaces(5) file used by ifup(8) and ifdown(8)
auto lo
iface lo inet loopback

# eth0 verbindet den Host mit dem Internet
auto eth0
iface eth0 inet dhcp
 
# Mit diese Bridge werden die Container verbunden, damit sie Verbindung zum Internet bekommen.
auto lxc-in
iface lxc-in inet static
       address 10.0.0.1
       netmask 255.255.255.0
       pre-up (ip addr show |grep lxc-in) || brctl addbr lxc-in

# eth1 verbindet den Host physikalisch mit dem Intranet
auto eth1
iface eth1 inet manual

# Durch die IP wird der Host auch aus dem Intranet erreichbar.
# Per Bridge steht eth1 den Containern zur Verfügung
auto lxc-out
iface lxc-out inet static
       address 10.8.190.10
       broadcast 10.8.190.255
       netmask 255.255.255.0
       bridge_ports    eth1
       bridge_maxwait 1

Packet Forwarding einschalten

# vim /etc/sysctl.conf 

Die folgende Zeile suchen und einkommentieren (# vor der Zeile entfernen)

net.ipv4.ip_forward=1

MASQUERADE der Firewall einschalten

# apt install -y iptables
# iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

Dauerhaft abspeichern und nach jedem Hoststart laden

# apt -y install iptables-persistent 

Änderungen an der Firewall speichern mit

# iptables-save > /etc/iptables/rules.v4

LXC-Container erzeugen und auf dem Host konfigurieren

Gilt für alle Container

Reihenfolge der Containerkonfiguration

  • Bevor die anderen Container ins Netz kommen können, muss im OPSI-Container Forwarding und Masquerading eingerichtet werden.

Provisorische Namensauflösung

  • Die Namensauflösung wird am Ende vom Samba-AD/DC übernommen. Da er noch nicht installiert ist, muss eine Übergangslösung genutzt werden.
# vim <containername>/rootfs/etc/resov.conf
z.b. "8.8.8.8"

Container opsi-1.test2.local erstellen

Container opsi-1.test2.local erzeugen

# lxc-create --name opsi-1.test2.local -t debian

Auf dem Host Container opsi-1.test2.local einrichten

  • Als erstes wird die erzeugte Conf bearbeitet.
# vim /var/lib/lxc/opsi.test2.local/config
  • Entfernen
lxc.network.type = empty
  • Hinzufügen
# Autostart des Containers ( 0 steht für kein Autostart)
lxc.start.auto = 1 

# Netzwerk
# Erzeugt tun-device, dass in die Bridge lxcbr0 eingefügt wird (Internet)
lxc.network.type=veth
# Bridge, in der das Interface eingefügt wird
lxc.network.link=lxc-in 
lxc.network.hwaddr = 00:FF:AA:00:31:01
lxc.network.ipv4 = 10.0.0.10/24
# Gateway des Containers
lxc.network.ipv4.gateway  = 10.0.0.1 
lxc.network.flags=up
# Name des TUN-Devices auf dem Host
lxc.network.veth.pair=opsi-in 
 
# Erzeugt tun-device, dass in die Bridge lxc-out eingefügt wird (Intranet)
lxc.network.type=veth
 # Bridge, in der das Interface eingefügt wird
lxc.network.link=lxc-out 
lxc.network.hwaddr = 00:FF:AA:00:31:11
lxc.network.ipv4 = 10.8.190.1/24
lxc.network.flags=up
# Name des TUN-Devices auf dem Host
lxc.network.veth.pair=opsi-out 

# OpenVPN
# Damit OpenVPN im Container genutzt werden kann.
lxc.cgroup.devices.allow = c 10:200 rwm

#Setzt den Hostnamen mittels <Container>/rootfs/etc/hosts
lxc.utsname = opsi

Container samba4.test2.local erstellen

Container samba4.test2.local erzeugen

# lxc-create --name samba4.test2.local -t debian

Auf dem Host Container samba4.test2.local einrichten

  • Als erstes wird die erzeugte Conf bearbeitet.
# vim /var/lib/lxc/samba4.test2.local/config
  • Entfernen
lxc.network.type = empty
  • Hinzufügen
# Autostart des Containers ( 0 steht für kein Autostart)
lxc.start.auto = 1
 
# Erzeugt tun-device, dass in die Bridge lxc-out eingefügt wird (Intranet)
lxc.network.type=veth
 # Bridge, in der das Interface eingefügt wird
lxc.network.link=lxc-out 
lxc.network.hwaddr = 00:FF:AA:00:21:11
lxc.network.ipv4 = 10.8.190.5/24
lxc.network.flags=up
# Name des TUN-Devices auf dem Host
lxc.network.veth.pair=samba4-out 
# Hostname 
lxc.utsname = samba4

Container fs.test2.local erstellen

Container fs.test2.local erzeugen

# lxc-create --name fs.test2.local -t debian

Auf dem Host Container fs.test2.local einrichten

  • Als erstes wird die erzeugte Conf bearbeitet.
# vim /var/lib/lxc/fs.test2.local/config
  • Entfernen
lxc.network.type = empty
  • Hinzufügen
# Autostart des Containers ( 0 steht für kein Autostart)
lxc.start.auto = 1
 
# Erzeugt tun-device, dass in die Bridge lxc-out eingefügt wird (Intranet)
lxc.network.type=veth
 # Bridge, in der das Interface eingefügt wird
lxc.network.link=lxc-out 
lxc.network.hwaddr = 00:FF:AA:01:21:11
lxc.network.ipv4 = 10.8.190.4/24
lxc.network.flags=up
# Name des TUN-Devices auf dem Host
lxc.network.veth.pair=fs-out 
# Hostname 
lxc.utsname = fs