Debian als Router

Aus unterschiedlichen Gründen, kommt es vor, dass man sich einen router basteln möglichte. In den meisten Fällen kann man auf Alternativen wie pfsense oder m0n0wall oder andere firewall-Distributionen zurück greifen.

Manchmal sind die Umstände aber so, dass das nicht langt.
In meinem Fall tut es das nicht.

Ich benötige ein System, was meine Virtuellen XEN-Clients öffentlich verfügbar macht.
Wenn man dann natürlich nicht genug IP-Adressen zur Verfügung hat, muss man sich etwas überlegen.

Update vom 04.10.2015:
Mittlerweile weiß ich, dass ich das auch mit pfsense ohne Probleme hätte konfigurieren können 🙂

Meine Lösung hierfür ist das Aufsetzten eines “Gatekeepers” (ich nenn das einfach mal so, auch wenn das nicht so wirklich passt)

Um sich also auf den Clients nicht zwingend um Netzwerk-Einstellungen zu kümmen zu müssen (das möchte man aber trotzem) wollen wir einen Router aufsetzten, der per NAT Verbindungen an die Clients dahinter ausliefert. (Z.B. das Internet).

Um die Verbindung in die andere Richtung zu realisieren, verwende ich nginx für http-requests (d.h. nginx wird als reverse-proxy fungieren) und socat für “normale” ports.

Dafür müssen wir gar nicht so viel machen. Dank Debian und seinen packages ist das schnell installiert 🙂

1. Status:

Unser Debian besitzt 2 LAN-Interfaces.
eth0
eth1
eth0 stellt die Verbindung ins Internet und eth1 die Seite mit unseren VMs.
Ich nehme an, dass eth0 entsprechend konfiguriert ist.

eth1 sollten wir manuell Konfigurieren, da dieser ja als Router dienen soll:

Zu aller erst, schalten wir das interface aus (sicher ist sicher)

ifdown eth0

Und öffnen dann die Config der Netzwerke

nano /etc/network/interfaces

und editieren das eth1:

allow-hotplug eth1
iface eth1 inet static
 address 192.168.170.1
 netmask 255.255.255.0
 network 192.168.170.0
 broadcast 192.168.170.255

2. DHCP-Server installieren:

Installation per apt-get:

apt-get install dhcp3-server

ihr werdet einen Fehler bei der Installation sehen. Das ist normal, denn wir haben ja noch nichts konfiguriert.
Das machen wir jetzt:

3. DHCP-Server Konfigurieren:

nano /etc/dhcp/dhcpd.conf

dort am Ende folgenden Code einfügen:

#
# Internal network
#
subnet 192.168.170.0 netmask 255.255.255.0 {
interface eth1;
range 192.168.170.100 192.168.170.200;
option broadcast-address 192.168.170.255;
option routers 192.168.170.1;
default-lease-time 600;
max-lease-time 7200;
}

danach starten wir den DHCP-Server (neu)

/etc/init.d/isc-dhcp-server start

ggf. auch restart verwenden – je nachdem. Im Normalfall ist der Server aber nicht hoch gekommen und daher langt ein start

jetzt sollte der DHCP-Server ohne Fehler starten.

4. Forwording Aktivieren

Damit die Daten auch in beide Richtungen laufen können, müssen wir unserem Debian sagen, dass er als NAT-Router agiert.
Dafür aktivieren wir das forwoarding von Traffic sowie die NAT-Regeln in den iptables:

in /proc/sys/net/ipv4/ip_forward solltet ihr eine Null finden.

cat /proc/sys/net/ipv4/ip_forward 0

Diese müssen wir ersetzten:

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

damit das ganze aber auch nach einem Neustart noch funktioniert müssen wir das manuell in der sysctl nachtragen:

nano /etc/sysctl.conf

Dort nach dem net.ipv4.ip_forward suchzen (sollte im oberen drittel sein) und es auskommentieren bzw. entsprechend anpassen:

net.ipv4.ip_forward = 1

zuletzt aktivieren wir noch die iptables, damit debian diese Verbindung nicht blockiert:

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

5. Testen

am einfachsten ist es, wenn man ein System per DHCP attachen lässt und danach einen ping ausführen lässt.

ping google.de
PING google.de (173.194.70.94) 56(84) bytes of data.
64 bytes from fa-in-f94.1e100.net (173.194.70.94): icmp_req=1 ttl=47 time=27.2 ms
64 bytes from fa-in-f94.1e100.net (173.194.70.94): icmp_req=2 ttl=47 time=27.0 ms
64 bytes from fa-in-f94.1e100.net (173.194.70.94): icmp_req=3 ttl=47 time=27.8 ms
^C
--- google.de ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2003ms
rtt min/avg/max/mdev = 27.051/27.391/27.885/0.405 ms

Sollte das Funktionieren, habt ihr alles richtig gemacht.

6. Troubleshooting

1. kein ping auf google.de Möglich
-> Versuche auf 8.8.8.8 zu pingen (das ist der DNS-Server von google) sollte dies funktionierne, fehlt der DNS-Eintrag in eurem Client. Diesen einfach in die /etc/resolv.conf nachtragen:

nameserver 8.8.8.8

Sollte die datei nicht existieren, erstellt sie einfach.

Leave a Reply

Your email address will not be published. Required fields are marked *