Gehaxelts Blog

IT-Security & Hacking

RaspberryPi als Router

Ich möchte in diesem Blogpost beschreiben, wie man einen RaspberryPi in einen Router verwandelt.

Das geht recht einfach und unkompliziert ;)

Voraussetzung

Zunächst müsst ihr einige Voraussetzungen erfüllen:

  1. Einen Pi mit einem LAN-Anschluss (Modell B) besitzen

  2. Einen USB2LAN-Adapter Übersicht; Ich habe mir den Logilink Fast Ethernet Adapter bestellt.

  3. Die Lieferung muss angekommen sein ;)

  4. Falls “ca-certificates” noch nicht installiert ist, dann dieses mittels

    sudo apt-get update && sudo apt-get install ca-certificates && sudo apt-get upgrade

installieren, und nebenbei den Pi auf den neusten Stand bringen.

Netzwerkeinstellungen

Danach müssen wir die “Interfaces” bearbeiten:

sudo nano /etc/network/interfaces

Es gilt dort zwei Sachen einzustellen:

  1. Eth0 (Onboard) soll dynamisch eine IP vom ISP per DHCP bekommen

  2. Eth1 (USB) soll eine statische IP in einem Subnetz erhalten

Ich möchte, dass eth1 dann später über 193.168.3.1 erreichbar ist. Die Konfiguration sollte so ähnlich aussehen:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#Loopback device
auto lo
iface lo inet loopback

#Onboard LAN eth0
auto eth0
iface eth0 inet dhcp

#USB LAN eth1
auto eth1
iface eth1 inet static
address 192.168.3.1
netmask 255.255.255.0
network 192.168.3.0
broadcast 192.168.3.255
gateway 192.168.3.1

#Hotplug wlan0
# ist hier unwichtig
# ...

Danach starten wir “networking” einmal neu:

sudo /etc/init.d/networking restart

DHCP einrichten

Nun müssen wir uns noch um DHCP kümmern, damit die Clients dynamisch ihre IP-Addressen erhalten.

Dazu installieren wir zunächst ein Package:

sudo apt-get install isc-dhcp-server

Falls ihr eine Fehlermeldung erhaltet, dass der Server nicht gestartet werden konnte, ist das nicht schlimm, da wir die Konfiguration jetzt erst anlegen werden.

Daraufhin müssen wir diesen noch konfigurieren:

sudo nano /etc/dhcp/dhcpd.conf

Falls dort irgendwas unkommentiert ist, könnt ihr das auskommentieren.

Danach legt ihr ein Subnetz an:

1
2
3
4
5
6
7
8
9
10
authoritative;
subnet 192.168.3.0 netmask 255.255.255.0 {
  range 192.168.3.10 192.168.3.250;
  option broadcast-address 192.168.3.255;
  option routers  192.168.3.1;
  option domain-name "local";
  option domain-name-servers 8.8.8.8, 8.8.4.4;
  default-lease-time 600;
  max-lease-time 7200;
}

Damit können eure Clients die IP-Adressen 192.168.3.10 bis 192.168.3.250 bekommen.

Als DNS-Server nutze ich die von Google. Falls ihr das nicht wünscht, müsst ihr es ggf. abändern.

Nun folgt ein Neustart vom DHCP-Server:

sudo /etc/init.d/isc-dhcp-server restart

Auch hier kann ein erstmaliger Fehler beim Stoppen des Servers ignoriert werden.

Nun könntet ihr bereits einen Clienten an den zweiten Netzwerkport (eth1) stecken, und dieser sollte erfolgreich eine IP ausgehändigt bekommen.

Hier ist es jedoch noch nicht möglich, aufs Internet zuzugreifen.

Portforwarding

Nun müsst ihr noch drei Schritte vollziehen, bis der erste Versuchsaufbau soweit fertig ist.

sudo echo 1 > /proc/sys/net/ipv4/ip_forward

Danach in der Datei

sudo nano /etc/sysctl.con

das Kommentar vor der Zeile

net.ipv4.ip_forward=1

entfernen.

Zuletzt nur noch eine Regel in den Iptables erstellen:

iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE 

Nun sollte euer Client auf das Internet zugreifen können.

Nachbearbeitung

Damit die Iptables-Regel auch nach einem Neustart bestehen bleibt, bedarf es noch einem kleinen Script.

Zunächst erstellen wir einen Ordner und exportieren die aktuellen Iptables:

1
2
3
mkdir /home/pi/router
cd /home/pi/router
sudo iptables-save > ./iptables.tbl

Danach legen wir ein kleines Shellscript an

sudo nano /etc/network/if-pre-up.d/iptables

und füllen es mit folgendem Inhalt:

1
2
3
4
5
#!/bin/sh

#Iptables wiederherstellen
iptables-restore < /home/pi/router/iptables.tbl
exit 0

Zuletzt noch die Rechte der Datei anpassen:

1
2
3
sudo chmown root:root /etc/network/if-pre-up.d/iptables
sudo chmod +x /etc/network/if-pre-up.d/iptables
sudo chmod 755 /etc/network/if-pre-up.d/iptables

Damit sollte der “Router” soweit fertig konfiguriert sein.

Wenn man vor hat, den Router direkt an die DSL-Buchse zu stecken, so sollte man noch einige Sicherheitsmaßnahmen ergreifen.

Da das bei mir nicht der Fall ist, beende ich hier mal den Blogpost :P

Gegebenenfalls folgt ein Update.

Gruß

Gehaxelt

RaspPi

« Frohes Neues Awesome 3.5-2 & Shifty - remove_signal nil »