DHCP Server installieren (CentOS)

Einleitung

Dynamic Host Configuration Protocol (DHCP) wird insbesondere genutzt um Clients IP-Adressen zuzuweisen. Zudem können mittels DHCP weitere Netzwerkkonfigurationen zugewiesen, z.B. Gateways, DNS Server, etc.

Benötigte Pakete

Zunächst die Paketdatenbank aktualisieren und DHCP installieren:

yum update
yum install dhcp

Dann kann die Konfiguration beginnen.

Konfiguration

Zunächst sollte der Maschine eine feste IP-Adresse zugewiesen werden, hierzu ist die Datei /etc/sysconfig/network-scripts/ifcfg-eth0 anzupassen:

DEVICE="eth0"
HWADDR="XX:XX:XX:XX:XX:XX"
TYPE="Ethernet"
BOOTPROTO="none"
NAME="eth0"
ONBOOT="yes"
IPADDR=192.168.1.10
NETMASK=255.255.255.0
GATEWAY=192.168.1.1

Im Anschluss wird eine beispielhafte Konfiguration erstellt, die dann angepasst werden kann.

cp /usr/share/doc/dhcp-4.2.5/dhcpd.conf.example /etc/dhcp/dhcpd.conf

Die Konfiguration erfolgt schließlich in /etc/dhcp/dhcpd.conf:

# option definitions common to all supported networks...
option domain-name "krausix.local";
option domain-name-servers 192.168.1.1, 192.168.1.10;
option subnet-mask 255.255.255.0;
option broadcast-address 192.168.1.255;
option routers 192.168.1.1;

default-lease-time 600;
max-lease-time 7200;

# Use this to enble / disable dynamic dns updates globally.
ddns-update-style none;

# If this DHCP server is the official DHCP server for the local
# network, the authoritative directive should be uncommented.
authoritative;

# Use this to send dhcp log messages to a different log file (you also
# have to hack syslog.conf to complete the redirection).
log-facility local7;

# No service will be given on this subnet, but declaring it helps the
# DHCP server to understand the network topology.

subnet 192.168.1.0 netmask 255.255.255.0 {
        range 192.168.1.101 192.168.1.150;
}

# Fixed IP addresses can also be specified for hosts.   These addresses
# should not also be listed as being available for dynamic assignment.
# Hosts for which fixed IP addresses have been specified can boot using
# BOOTP or DHCP.   Hosts for which no fixed address is specified can only
# be booted with DHCP, unless there is an address range on the subnet
# to which a BOOTP client is connected which has the dynamic-bootp flag
# set.
host dbsrv01 {
        hardware ethernet 00:00:c0:5d:bd:95;
        fixed-address 192.168.1.42;
}

Ist die Konfiguration abgeschlossen, kann der Dienst gestartet werden. Wir erstellen die Datenbank, die die Leases, also die vergebenen IP-Adressen, verwaltet und starten den Dienst:

touch /var/lib/dhcpd/dhcpd.leases
service dhcpd start

Zu guter Letzt wird dafür gesorgt, dass der DHCP Server automatisch zum Systemstart gestartet wird.

systemctl enable dhcpd.service

Have fun!

Raspberry Pi als WLAN-Repeater

Einleitung

Viele private WLAN-Betreiber kennen sicherlich das Problem, dass die WLAN-Ausleuchtung nicht überall so hoch ist, wie gerne gewünscht. Sicherlich gibt es jede Menge Hardware, die genau hierfür konzipiert wurde. Wer jedoch einen Raspberry Pi sein eigen nennt, kann ihn auch für solche Zwecke nutzen. Vorab sei angemerkt: in puncto Performance ist der Pi als WiFi-Repeater eher am unteren Ende einzuordnen. Sei’s drum, „Versuch macht kluch!“ 😉

Voraussetzungen

  • Raspberry Pi, Model B
  • Raspbian
  • USB WLAN-Stick

Benötigte Pakete

Wir installieren hostapd zur Authentifikation im WLAN.

sudo apt-get install hostapd iw bridge-utils

Weiter mit der Konfiguration…

Konfiguration von hostapd

Zur Konfiguration wird die Datei /etc/hostapd/hostapd.conf erstellt, der Inhalt muss an diversen Stellen auf die eigenen Bedürfnisse angepasst werden, z.B. bei SSID, Kanal, Passwort etc.

# Bridge
bridge=br0
#
# WLAN-Schnittstelle
interface=wlan0

# Treiber (hier LogiLink USB mit ralink RT5370 Chipsatz)
driver=nl80211

# WLAN-Konfiguration (SSID und Kanal)
ssid=<###SSID_HIER_EINTRAGEN###>
channel=1

# ESSID nicht verstecken
ignore_broadcast_ssid=0

# WDS-Konfiguration
wds_sta=1
# If bridge parameter is set, the WDS STA interface will be added to the same
# bridge by default. This can be overridden with the wds_bridge parameter to
# use a separate bridge.
#wds_bridge=wds-br0

# Ländercode
country_code=DE
ieee80211d=1

# WLAN Modus
hw_mode=g

# weitere optionale Einstellungen
# supported_rates=10 20 55 110 60 90 120 180 240 360 480 540

# Draft-N
ieee80211n=1

# WMM bei Draft-N
wmm_enabled=1

# Übertragungsmodus / Bandbreite 40MHz / siehe iw list
# ht_capab=[HT40+][SHORT-GI-40][DSSS_CCK-40]

# Beacons
beacon_int=100
#dtim_period=2

# MAC-Authentifizierung
macaddr_acl=0

# Anzahl Clients
#max_num_sta=20

# Pakete
#rts_threshold=2347
#fragm_threshold=2346

# Logging
logger_syslog=1
logger_syslog_level=2
logger_stdout=-1
logger_stdout_level=2

# temp. Dateien
#dump_file=/tmp/hostapd.dump
ctrl_interface=/var/run/hostapd
ctrl_interface_group=0

# Authentifizierungsoptionen
auth_algs=3

# Sicherheit / Verschlüsselung WPA2
wpa=2
#rsn_preauth=1
#rsn_preauth_interfaces=wlan0
wpa_key_mgmt=WPA-PSK
wpa_pairwise=CCMP
rsn_pairwise=CCMP

# Schlüsselintervalle / Standardkonfiguration
#wpa_group_rekey=600
#wpa_ptk_rekey=600
#wpa_gmk_rekey=86400

# Zugangsschlüssel (PSK) / hier in Klartext (ASCII)
wpa_passphrase=<###PASSPHRASE_HIER_EINTRAGEN###>

Im Anschluss sind die Netzwerkschnittstellen zu konfigurieren.

Netzwerk

Wir passen /etc/network/interfaces an:

auto lo

iface lo inet loopback
iface eth0 inet dhcp

allow-hotplug wlan0
iface wlan0 inet manual

iface default inet dhcp

# WLAN Bridge
auto br0
iface br0 inet static
address         192.168.100.2
netmask         255.255.255.0
broadcast       192.168.100.255
gateway         192.168.100.1
dns-nameservers 192.168.100.1
bridge_ports    eth0 wlan0
bridge_fd       0
bridge_stp      no

Hiermit ist ein Roaming zwischen verschiedenen Access-Points möglich, sofern der Raspberry Pi zusätzlich per Ethernet im Netzwerk hängt.

Verbindung zum WLAN-Router

Statt der kabelgebundenen Verbindung kann mit einer zweiten WLAN-Verbindung gearbeitet werden. Es wird dann ein weiterer WLAN-Stick benötigt. Wir erstellen die Datei /etc/wpa_supplicant/wpa.conf mit folgendem Inhalt:

network={
        ssid="<###HIER_SSID_EINTRAGEN###>"
        psk="<###HIER_PASSPHRASE_EINTRAGEN###>"
        priority=0

        # Protocol type can be: RSN (for WP2) and WPA (for WPA1)
        proto=WPA
        # Key management type can be: WPA-PSK or WPA-EAP (Pre-Shared or Enterprise)
        key_mgmt=WPA-PSK

        # Pairwise can be CCMP or TKIP (for WPA2 or WPA1)
        pairwise=TKIP

        #Authorization option should be OPEN for both WPA1/WPA2 (in less commonly used are SHARED and LEAP)
        auth_alg=OPEN
}

Nun ist noch /etc/network/interfaces anzupassen, erweitert wird hier um wlan1:

auto lo

iface lo inet loopback
iface eth0 inet dhcp

allow-hotplug wlan0
iface wlan0 inet manual

iface default inet dhcp

auto wlan1
iface wlan1 inet dhcp
wpa-conf /etc/wpa_supplicant/wpa.conf

# WLAN Bridge
auto br0
iface br0 inet static
address         192.168.100.2
netmask         255.255.255.0
broadcast       192.168.100.255
gateway         192.168.100.1
dns-nameservers 192.168.100.1
bridge_ports    eth0 wlan0
bridge_fd       0
bridge_stp      no

Um Daten zwischen den beiden Netzwerkinterfaces durchzuleiten, müssen wir das Forwarding aktivieren und zwei Firewall-Rules erstellen.

Forwarding und Iptables

Zum Forwarding ist /etc/sysctl.conf anzupassen:

net.ipv4.ip_forward=1

Danach mit sysctl -p neu einlesen.

Anschließend noch die Firewall anpassen:

iptables --table nat --append POSTROUTING --out-interface wlan1 -j MASQUERADE
iptables --append FORWARD --in-interface wlan0 -j ACCEPT

Die beiden Skripte können in der /etc/rc.local abgelegt werden, damit stehen sie auch nach jedem Neustart zur Verfügung.

Nun ist auch die Verbindung ohne Kabel möglich, zum Testen einfach die Netzwerkdienste neustarten und das Ethernet-Kabel abziehen:

sudo service networking restart

Have fun!