Dienste auf Linux-Server mit NAT

Aus Freifunk Halle
Zur Navigation springen Zur Suche springen

Vorbedingungen

Im folgenden wird davon ausgegangen, dass wir einen http Dienst, auf einem RasPi unter Port 80 auf einer eigenen IP anbieten wollen. Die IP die im Beispiel verwendet wir ist die 10.62.X.X. Der Server (Raspi) wird also unter http://10.62.X.X erreichbar sein. Der Router, an dem der RasPi über einen gelben LAN Port verbunden ist, hat im Beispiel die IP 10.62.Y.Y. Diese IP's müßt ihr vorher wissen und vor allem im Wiki registriert haben.


Nochmal zur Sicherheit:

  • IP 10.62.X.X = Im Wiki registrierte Adresse unter der der Server erreichbar sein soll
  • IP 10.62.Y.Y = Im Wiki registrierte Adresse des Routers an dem Der Server am LAN Port angeschlossen ist


Die LAN Schnittstelle des Routers arbeitet im Adressbereich 192.168.1.x und damit fangen wir an:

Server auf eine feste IP einstellen.

Der DHCP auf dem LAN vergibt default Adressen von 192.168.1.100 - 192.168.1.250. Die IP des Raspi sollte also außerhalb des Bereiches liegen. Ich gehe im weiteren Verlauf davon aus, das dem Raspberry die 192.168.1.50 fest zugeordnet wird wie folgt: (Bei Debianbasierten Systemen ist dies unter /etc/network/interfaces zu finden.)

iface eth0 inet static
	address 192.168.1.50
	netmask 255.255.255.0
	gateway 192.168.1.1
	dns-nameservers 192.168.1.1 8.8.8.8

Anmerkung: auf meinem Raspi funktionierte die Namensauflösung nicht. Ich habe daher das Paket resolvconf nachinstalliert und die Nameserver hart verdrahtet

IP bekanntmachen

Auf dem Router bearbeiten wir nun, auf der SSH Konsole, die Datei /etc/config/network mit dem Editor vi. Wir suchen uns das Interface wireless0. Dieses wollen wir verändern. Im Original sieht das so aus:

config interface 'wireless0'
	option dns '8.8.8.8 212.204.49.83 141.1.1.1'
	option netmask '255.255.255.255'
	option proto 'static'
	option ipaddr '10.62.Y.Y'

Wir möchten diesem Interface eine zweite IP zuweisen, nämlich die, unter der der Service später erreichbar sein soll. Wir müssen dem Interface mitteilen, das es statt mit einer IP Adresse mit einer Liste von IP Adressen arbeiten soll. Das sieht dann so aus. Oben die IP des Routers und unten die IP unseres neuen Dienstes

config interface 'wireless0'
    option dns '8.8.8.8 212.204.49.83 141.1.1.1'
    option netmask '255.255.255.255'
    option proto 'static'
    list ipaddr '10.62.Y.Y'
    list ipaddr '10.62.X.X'

Nach dem Abspeichern ist dann der Exkurs auf die Konsolen auch schon beendet und der Rest der Arbeit findet im Webinterface des Routers statt.

Firewall Regeln

Im Webinterface des Routers gehen wir unter Netzwerk -> Firewall -> Benutzerdefinierte Regeln. Dort tragen wir die Routing Regeln vom Router zum Raspi und zurück ein. (Hinweg = NAT, Rückweg = SNAT)

Anmerkung: Wenn du die Umleitung zu weiteren oder anderen IP-Adressen machern möchtest, kann das auch in der rc.local auf dem raspi eingetragen werden.

iptables -t nat -I PREROUTING -d 10.62.X.X -j DNAT --to-destination 192.168.1.50
iptables -t nat -I POSTROUTING -s 192.168.1.50 -j SNAT --to 10.62.X.X

Damit werden die Pakete, die auf 10.62.X.X reinkommen auf 192.168.1.50 weitergeleitet und rückwärts genauso. Nach dem Speichern der Regeln wird ein Neustart des Routers fällig, den ihr jetzt durchführt. Nach dem Neustart sollte ein "Ping 10.62.X.X" vom Raspi beantwortet werden und der Raspi ebenfalls auf Allen Ports aus dem Freifunknetz erreichbar sein.

IP Adresse im Netz bekannt machen (HNA Ankündigung)

Im Webinterface gehen wir unter OLSR -> HNA-Ankündigungen und erstellen einen neuen Eintrag mit 10.62.X.X und Subnetzmaske 255.255.255.255

Dienst im Freifunk Netz bekannt machen

Im Webinterface gehen wir unter OLSR -> OLSR IPv4 -> Plugins und öffnen die Konfiguration des Plugins olsrd_nameservice.so.0.3. In dem Dropdownfeld unten, fügen wir ein zusätzliches Feld "service" hinzu. Als Parameter geben wir eine Zeichenkette in folgender Reihenfolge ein Adresse:Port|Protokoll|Beschreibung ein. Der Port ist hierbei Pflicht, auch wenn es Port 80 ist. (Bespiel http://10.62.X.X:80|tcp|Dessau-Info)