Debian-OPSI-samba4
Inhaltsverzeichnis
- 1 Herausforderung
- 2 Ziel
- 3 Installation LXC-Host
- 3.1 Server mit GRML starten
- 3.2 System starten
- 3.2.1 Keyboard layout einstellen
- 3.2.2 Sprache einstellen
- 3.2.3 Bash-completion
- 3.2.4 Farbiges Promt
- 3.2.5 Hostname
- 3.2.6 /etc/network/interfaces
- 3.2.7 LXC installieren
- 3.2.8 LVM für LXC einbinden
- 3.2.9 Netzwerk für LXC vorbereiten
- 3.2.10 Packet Forwarding einschalten
- 3.2.11 MASQUERADE der Firewall einschalten
- 3.3 Container backup
- 3.4 Container samba4.test2.local erstellen
- 3.5 Container opsi-1.test2.local erstellen
- 3.5.1 Container opsi-1.test2.local erzeugen
- 3.5.2 Auf dem Host Container opsi-1.test2.local einrichten
- 3.5.3 Im Container opsi-1.test2.local einrichten
- 3.5.4 Packet Forwarding einschalten
- 3.5.5 MASQUERADE der Firewall einschalten
- 3.5.6 DHCP Server installieren und einrichten
- 3.5.7 /etc/default/isc-dhcp-server
- 3.5.8 OPSI-Repo einbinden
- 3.5.9 OPSI-Abhängigkeiten installieren =
- 3.5.10 Samba konfigurieren
Herausforderung
OPSI und Samba4 als AD/DC verstehen sich nicht wirklich gut.
Der Ansatz dieses Postings ist es, beide relativ unabhängig von ein ander im Netzwerk arbeiten zu lassen.
Der OPSI-Server soll kein Teil der Domäne werden. Der OPSI-Agent auf den Clienten soll sich beim Systemstart am OPSI-Server im Workgroup-Mode anmelden, wenn er Daten für Installationen benötigt.
Beim Anmelden des Users am Clienten geschieht Authentifizierung über den Samba4 AD DC.
Arbeitsteilung:
- Container Samba4 wird DNS zu Verfügung stellen.
- Container OPSI-1 wird DHCP zu Verfügung stellen.
Soweit die Theorie. Dieses Posting soll klären, ob die Idee etwas wert ist.
Ziel
- LXC-Host auf Debian Jessie Basis.
- Zwei Container
- OPSI - Nicht Teil der Domäne. Es soll Software installieren, bevor die Domäne in Kraft tritt.
- Samba4 - AD/DC
Installation LXC-Host
Server mit GRML starten
Festplatten partitionieren
fdisk /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-get 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)
- Meine 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-1-lnx01
vim /etc/hostname
host-1-lnx01 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
apt-get install lxc lxctl
LVM für LXC einbinden
LVM auf /var/lib/lxc einbinden.
mkfs.ext4 /dev/vg_lxc/lv_lxc blkid |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 lxcbr0 iface lxcbr0 inet static address 10.0.0.1 netmask 255.255.255.0 pre-up (ip addr show |grep lxcbr0) || brctl addbr lxcbr0 # eth1 verbindet den Host physikalisch mit dem Intranet auto eth1 iface eth1 inet manual # Per Bridge steht eth1 den Containern zur Verfügung auto lxc-out iface lxc-out inet manual 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-get install -y iptables
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
Dauerhaft abspeichern und nach jedem Hoststart laden
apt-get -y install iptables-persistent
Änderungen an der Firewall speichern mit
iptables-save > /etc/iptables/rules.v4
Container backup
Immer eine gute Idee, bevor mensch weitere Schritte im Container unternimmt.
cd /var/lib/lxc cp -a <container-name> <container-name>-$(date +%Y-%m-%d_%H.%M) vim /var/lib/lxc/<container-name>-Datum/config
# Autostart des Containers ( 0 steht für kein Autostart) lxc.start.auto = 0
Einspielen des Backup:
rm -rf <container-name> cp -a <container-name>-Datum <container-name> vim /var/lib/lxc/<container-name>-Datum/config
# Autostart des Containers ( 0 steht für kein Autostart) lxc.start.auto = 0
- Das Backup lässt sich nicht einfach starten. Dazu müssen sämtliche Pfade in der config angepasst werden.
Alternativ steht lxc-clone zur Verfügung, dass auch die config an den neuen Namen anpasst.
Der geclonte Container ist sofort startbereit.
- Bitte beachten: die erzeugte config sieht anders aus, z.B. sind alle Kommetare weg.
lxc-backup
Ein sehr simples Script für das Container Backup
cd /var/lib/lxc lxc-backup <container-name>
Er wird automatisch im selben Verzeichniss eine Kopie mit Zeitstempel erzeugt.
autostart muss händisch abgeschaltet werden. Kommt noch.......
LXC-Scripte von code.netz.coop
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 # Der OPSI-Container bekommt 10s verzögerung nützt nichts, das interene Netz baut sich fehlerhaft auf. # lxc-stop und lxc-start schaft Abhilfe. Nicht gut. lxc.start.delay = 5 # Optional lxc.start.order = 100 # 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:21:01 lxc.network.ipv4 = 10.0.0.5/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=samba4-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: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 # 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 = samba4
Im Container samba4.test2.local einrichten
In einem Container, der mit lxc-create erzeugt wurde, ist viel weniger Software installiert als auf dem Host, der mit grml-debootstrab erzeugt wurde.
apt-get update apt-get -y install bash-completion vim less iputils-* dnsutils
- Zeitzone anpassen
dpkg-reconfigure tzdata
Die Zeit übernimmt der Container vom Host, die Zeitzone nicht.
- /etc/hosts
127.0.0.1 localhost 10.8.190.5 samba4.test2.local samba4
Testen mit
getent hosts $(hostname -f)
Ausgabe muss bei unserem Beispiel so aussehen
10.8.190.5 samba4.test2.local samba4
Samba4 AD DC installieren und einrichten
apt-get install samba krb5-config smbclient
- Samba4 AD DC install
- Genutzt zur Ersteinrichtung des AD DCs, sehr knapp. Bitte in einem zweiten Tab öffnen
- # set realm: die Anleitung scheint den fqdn des Servers als REALM zu nutzen.
- REALM: test2.local
- # specify the hostname ... of Kerberos servers for your Kerberos realm:
- samba4.test2.local
- # specify the hostname ... Administrative server for your Kerberos realm:
- samba4.test2.local
- # rename or remove the default config file
root@smamba4:~# mv /etc/samba/smb.conf /etc/samba/smb.conf.bak => Die Endung .bak ist ein MUSS für alte Leute :-)
- Erzeugen des REALMs. VORHER den Abschnitt auf server-world.info lesen!
root@smb:~# samba-tool domain provision
- # restart system
root@samba4:~# reboot
Ab jetzt steht ein DNS-Server zur Verfügung. Der OPSI-Server wird ihn auch nutzen.
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
Rest wie beim Container samba4.test2.local. config anpassen.
- Die MACs und IPs müssen verschieden sein!
- Unser Beispiel:
10.0.0.10 => lxc-in lxc.network.veth.pair = opsi-in 10.8.190.1 => lxc-out lxc.network.veth.pair = opsi-out lxc.utsname = opsi-1 MACs beliebig, aber unterschiedlich zum samba4 Container.
Im Container opsi-1.test2.local einrichten
In einem Container, der mit lxc-create erzeugt wurde, ist viel weniger Software installiert als auf dem Host, der mit grml-debootstrab erzeugt wurde.
apt-get update apt-get -y install bash-completion vim less iputils-* dnsutils wget
- Zeitzone anpassen
dpkg-reconfigure tzdata
Die Zeit übernimmt der Container vom Host, die Zeitzone nicht.
- /etc/hosts
127.0.0.1 localhost 10.8.190.1 opsi-1.test2.local samba4
Testen mit
getent hosts $(hostname -f)
Ausgabe muss bei unserem Beispiel so aussehen
10.8.190.1 opsi-1.test2.local opsi-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
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
Dauerhaft abspeichern und nach jedem Hoststart laden
apt-get install iptables-persistent
Änderungen an der Firewall speichern mit
iptables-save > /etc/iptables/rules.v4
DHCP Server installieren und einrichten
apt-get -y install isc-dhcp-server
/etc/default/isc-dhcp-server
In /etc/default/isc-dhcp-server das etsprechende Netzwerkinterface eintragen, auf dem der DHCP-Server auf Anfragen lauschen soll.
vim /etc/default/isc-dhcp-server
In die Zeile
INTERFACES=""
das entsprechende Interface eintragen.
WICHTIG: Nur ein Interface darf rein, da die nc-opsi Tools darauf zurückgreifen!
INTERFACE="eth1"
/etc/dhcp/dhcpd.conf
Einträge für das Netzwerksegment 10.8.190.0/24.
dhcpd.conf leeren
echo > /etc/dhcp/dhcpd.conf
vim /etc/dhcp/dhcpd.conf
ddns-update-style none; # Ist der offizielle DHCP-Server für alles in 10.8.190.0/24 authoritative; # DNS-Domain-Name in der /etc/resolv.conf des Clienten # Das ist nicht die Windows Domain option domain-name "test2.local"; # Nameserver ist samba4.test.local option domain-name-servers 10.8.190.5; default-lease-time 600; max-lease-time 7200; log-facility local7; subnet 10.8.190.0 netmask 255.255.255.0 { # Der Range für nicht unten aufgeführte Computer per default abgeschaltet. # range 10.8.190.230 10.8.190.245; option routers 10.8.190.1; option broadcast-address 10.8.190.255; default-lease-time 600; max-lease-time 7200; } # Bei dieser Config werden die IPs über den nameserver aufgelöst. # Die Namensauflösung und configuration geschieht auf samba4.test2.local, siehe oben. host win01 { hardware ethernet 00:00:00:00:00:00; fixed-address win01.test2.local; } host win02 { hardware ethernet 00:00:00:00:00:00; fixed-address win02.test2.local; } host win03 { hardware ethernet 00:00:00:00:00:00; fixed-address win03.test2.local; } host win04 { hardware ethernet 00:00:00:00:00:00; fixed-address win04.test2.local; }
root@samba4:~# systemctl restart isc-dhcp-server.service
OPSI-Repo einbinden
vim /etc/apt/sources.list.d/opsi.list
deb http://download.opensuse.org/repositories/home:/uibmz:/opsi:/opsi40/Debian_8.0 ./
Key importieren
wget -O - http://download.opensuse.org/repositories/home:/uibmz:/opsi:/opsi40/Debian_8.0/Release.key | apt-key add -
OPSI-Abhängigkeiten installieren =
apt-get install -y wget lsof host python-mechanize p7zip-full cabextract openbsd-inetd samba samba-common smbclient cifs-utils samba-doc
Samba konfigurieren
vim /etc/samba/smb.conf
interfaces = 127.0.0.0/8 eth1 #=> oder dem System entsprechendes bind interfaces only = yes
Optional die Workgroup umbenennen.
workgroup = OPSI