Neue Antwort schreiben 
 
Themabewertung:
  • 0 Bewertung(en) - 0 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
[Anleitung] Linux-Rechner als DSL-Router
mrshadowtux
Unregistered

 
Beitrag #1
[Anleitung] Linux-Rechner als DSL-Router
Eins vorweg: Diese Anleitung ist noch nicht fertig, wird aber, wie die Bootserver-Anleitung, noch wachsen. Feedback und konstruktive Kritik sind erwünscht.


Moin,
in dieser Anleitung möchte ich euch zeigen, wie ihr einen Linux-Rechner als DSL-Router einsetzen könnt. Der Router routet dann nicht nur, sondern macht direkt auch Firewalling.


Was wird gebraucht? / Hardware
  • Computer mit Linux, in diesem Falle Ubuntu Server 12.04
  • Zwei Netzwerkkarten
  • DSL-Modem
  • Switch

Wenn wir das nun alles zusammen haben, verbinden wir die eine Netzwerkkarte mit dem Switch (an dem dann auch die anderen Rechner hängen) sowie dem DSL-Modem.

In diesem Beispiel ist eth0 für unser LAN zuständig und eth1 hängt am DSL-Modem. Sobald die DSL-Verbindung hergestellt wird, kommt das Internet über PPP0.

Im Voraus MUSS das Paket pppoeconf installiert werden: sudo apt-get install pppoeconf


Die Netzwerkeinstellungen
Ich gehe einfach mal davon aus, dass unser LAN einen IP-Adressbereich von 192.168.1.0/24 haben soll (also von 192.168.1.1 bis 192.168.1.254). Dazu passen wir die Datei /etc/network/interfaces an.

sudo -s
mv /etc/network/interfaces /etc/network/interfaces_alt
vi /etc/network/interfaces


dann in die neue Datei folgendes rein:

auto lo
iface lo inet loopback

auto eth0
iface eth0 inet static
address 192.168.1.1
netmask 255.255.255.0
network 192.168.1.0

auto eth1


Und das ganze mittels restart networking übernehmen. Damit ist dann schon mal die Netzwerkkarte konfiguriert, die für das LAN genutzt wird.


Die PPP-Verbindung
Nun richten wir die eigentliche DSL-Verbindung ein. Debian und Ubuntu bieten hierfür einen hervorragenden Assistenten namens pppoeconf. Die Fragen des Assistenten sind eigentlich selbsterklärend. Wir starten den Einrichtungsassistenten mittels pppoeconf

Wichtig ist hier der Benutzername. Bei T-Online lautet er AnschlusskennungTonlineNummer#0001@t-online.de
Bei anderen Providern am besten mal in deren FAQs gucken.

Falls Fehler auftreten, stehen nach Eingabe des Befehls plog weitere Infos zur Verfügung.

Hergestellt wird die DSL-Verbindung mittels pon dsl-provider (das heißt wirklich dsl-provider, hier mus sman nichts einsetzen)

Trennen kann man die Verbindung mittels poff -a

Damit die Verbindung bei jedem Boot automatisch hergestellt wird, machen wir wieder die /etc/rc.local im Editor auf und setzen eine Zeile über exit 0 die Zeile pon dsl-provider ein.


Das Routing-Script
Damit unser Router brav routet, müssen wir ein kleines Script mit Routing- und Firewallregeln erstellen. Ich nenne es in diesem Falle einfach mal /usr/local/bin/routing.sh.

vi /usr/local/bin/routing.sh

Folgendes kommt rein:

#!/bin/bash

# Erstmal alle Regeln flushen/leeren...
iptables -F
iptables -t nat -F

# ...und Forwarding aktivieren
echo 1 > /proc/sys/net/ipv4/ip_forward

# Routing von ppp0 nach eth0 + NAT
iptables -t nat -A POSTROUTING -o ppp0 -d 0.0.0.0/0 -j MASQUERADE

# Antworten auf Paketanfragen erlauben (Kann man prima am State nachschauen lassen)
iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT

# ICMP erlauben (wichtig für ping, traceroute und co)
iptables -A INPUT -p icmp -j ACCEPT

# Auf Loopback darf alles rein und raus
iptables -A INPUT -i lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT

# Raus ins Internet darf alles
iptables -A OUTPUT -o ppp0 -j ACCEPT

# Im LAN ist auch alles erlaubt
iptables -A OUTPUT -o eth0 -j ACCEPT
iptables -A INPUT -i eth0 -j ACCEPT

# Sonstige eingehende Pakete ablehnen
iptables -A INPUT -i ppp0 -j REJECT


Nachdem wir das ganze gespeichert haben, müssen wir es noch ausführbar machen.
chmod +x /usr/local/bin/routing.sh

Damit das Routing nach jedem Boot läuft, tragen wir unser Script noch in die /etc/rc.local ein.
vi /etc/rc.local

Hier setzen wir vor der Zeile "exit 0" noch folgende Zeile ein:
/usr/local/bin/routing.sh
(den Dateinamen natürlich anpassen, wenn ihr das Script anders genannt habt)


Erster Test
Jetzt wollen wir das ganze mal testen. Am besten den Server mal kurz neu starten, dann sieht man auch, ob die rc.local durchläuft. Wenn der Server hochgefahren ist, gehen wir mal an einen der Client-PCs und stellen dort als IP einfach mal 192.168.1.2 ein, als Gateway dient die 192.168.1.1 und als DNS-Server 8.8.8.8
Nachdem wir das eingetragen haben, prüfen wir einfach mal, ob wir das Internet nutzen können.



DSL-Reconnect nach Zwangstrennung
Nach 24 Stunden machen die DSL-Provider eine Zwangstrennung, das ist unvermeidlich. Wir werden diese Zwangstrennung auf 3 Uhr morgens verlegen und dann um diese Zeit einen Reconnect durchführen.
Dazu legen wir als erstes ein kleines Script an.
vi /usr/local/bin/zwangstrennung.sh

Folgender Inhalt kommt rein:

#!/bin/bash
poff -a
pon dsl-provider


Und noch ausführbar machen: chmod +x /usr/local/bin/zwangstrennung.sh

Jetzt müssen wir noch dafür sorgen, dass das Script jedes Mal um 3 Uhr morgens ausgeführt wird.
vi /etc/crontab
Und folgendes in eine neue Zeile rein:
* 3 * * * root /usr/local/bin/zwangstrennung.sh

Und den cron-Daemon neu starten: restart cron



Portweiterleitungen
Oft kommt es vor, dass wir auf einem der Clients Serverdienste laufen lassen wollen, die von außen erreichbar sein sollen. Hierzu ist eine Portweiterleitung nötig. Diese fügen wir einfach in unsere /usr/local/bin/routing.sh hinzu:
Beispiel:

iptables -t nat -A PREROUTING -i ppp0 -p tcp --dport 80 -j DNAT --to-destination 192.168.1.2:80

Hier wird der Port 80 (TCP) der Maschine 192.168.1.2 weitergeleitet, sodass auf Port 80 (TCP) der öffentlichen IP vom DSL der Port 80 (TCP) von 192.168.2.2 erreichbar ist. Für UDP einfach udp statt tcp hinschreiben.



Portfreigaben direkt am Router
Wenn irgendwelche auf dem Router laufende Serverdienste aus dem Internet erreichbar sein sollen, kann man folgendermaßen Ports freigeben:
iptables -A INPUT -p tcp -m tcp --dport 80 -j ACCEPT
In diesem Fall handelt es sich um Port 80 (TCP). Für UDP einfach udp statt tcp hinschreiben.



DHCP-Server
Da viele sicherlich keine Lust haben, auf den Clients die IP manuell einzustellen, bietet es sich an, einen DHCP-Server laufen zu lassen. Das ist einfacher als es klingt und schnell erledigt.
Erstmal installieren: apt-get install isc-dhcp-server

Und folgendes rein in die /etc/dhcp3/dhcpd.conf:
ddns-update-style none;
default-lease-time 315360000;
max-lease-time 315360000;
authoritative;
log-facility local7;

# Später hilfreich, sobald wir DNS haben: Domain (jetzt noch auskommentiert, später wirds gebraucht)
# option domain-name "meinnetz.lan";

subnet 192.168.1.0 netmask 255.255.255.0
{
range 192.168.1.2 192.168.1.254;
option routers 192.168.1.1;
# später wenn wir DNS haben kommt da natürlich 192.168.1.1 hin.
option domain-name-servers 8.8.8.8;
}


Wenn wir für einen Rechner eine IP reservieren wollen (sprich dafür sorgen, dass er immer diese bekommt), geht das mit folgendem Vierzeiler:
host milka
{
hardware ethernet 08:00:ca:ff:ee;
fixed-address 192.168.1.23;
}

In diesem Fall wird dem Host Milka mit der MAC-Adresse 08:00:ca:ff:ee die IP 192.168.1.23 zugewiesen.

Schlussendlich starten wir noch den DHCP-Server neu: restart isc-dhcp-server



Facebook blockieren
Hier mal kurz ein paar Zeilen für die /usr/local/bin/routing.sh, um Facebook zu blockieren:

# Für Facebook gibts eine extra Chain
iptables -N FACEBOOK

# Die IP-Ranges könnten sich ändern, dann anpassen ;)
iptables -I FORWARD -m tcp -p tcp -m iprange --dst-range 66.220.144.0-66.220.159.255 --dport 443 -j FACEBOOK
iptables -I FORWARD -m tcp -p tcp -m iprange --dst-range 69.63.176.0-69.63.191.255 --dport 443 -j FACEBOOK
iptables -I FORWARD -m tcp -p tcp -m iprange --dst-range 69.171.224.39-69.171.224.39 --dport 80 -j FACEBOOK
iptables -I FORWARD -m tcp -p tcp -m iprange --dst-range 69.171.224.39-69.171.224.39 --dport 443 -j FACEBOOK
iptables -I FORWARD -m tcp -p tcp -m iprange --dst-range 204.15.20.0-204.15.23.255 --dport 443 -j FACEBOOK
iptables -I FORWARD -m tcp -p tcp -m iprange --dst-range 66.220.144.0-66.220.159.255 --dport 80 -j FACEBOOK
iptables -I FORWARD -m tcp -p tcp -m iprange --dst-range 69.63.176.0-69.63.191.255 --dport 80 -j FACEBOOK
iptables -I FORWARD -m tcp -p tcp -m iprange --dst-range 204.15.20.0-204.15.23.255 --dport 80 -j FACEBOOK

# Sonderregelung für Kisten die dürfen (nach belieben erweitern oder ganz weglassen)
iptables -A FACEBOOK -s 192.168.1.2 -j ACCEPT
iptables -A FACEBOOK -s 192.168.1.3 -j ACCEPT

# Die anderen Rechner vor Facebook schützen
iptables -A FACEBOOK -j DROP




WLAN-Accesspoint
Hierfür benötigen wir eine WLAN-Karte, die sich unter Linux in den Master-Modus bringen läßt. Am besten mal beim jeweiligen Hersteller nachfragen.

Als erstes installieren wir das Paket hostapd
apt-get install hostapd

Und folgendes in die Datei /etc/hostapd.conf schreiben:

# Das Interface der WLAN-Karte
interface=wlan0

# Der zu verwendende Treiber (hängt von der Karte ab)
driver=nl80211

# Logging aktivieren
logger_stdout=­1
logger_stdout_level=2

# Unsere Einstellungen für das WLAN
ssid=MerlinNet
hw_mode=g
channel=4
auth_algs=3

# Maximale Clientanzahl. Wenn keine Begrenzung da sein soll, die Zeile einfach weglassen
max_num_sta=5

# Verschlüsselung
wpa=2
wpa_passphrase=rennmausfutter
wpa_key_mgmt=WPA­PSK
wpa_pairwise=TKIP CCMP
rsn_pairwise=CCMP


Anschließend starten wir hostapd mittels restart hostapd neu.


DNS-Server
Natürlich wollen wir die Rechner in unserem LAN auch mit Namen ansprechen! Dazu brauchen wir einen DNS-Server.
Also installieren wir das Paket dnsmasq mittels sudo apt-get install dnsmasq
Nun brauchen wir einen Domänen-Namen. Ich nenne die Domain einfach mal euda.lan

Jetzt tragen wir die DNS-Einträge einfach in die /etc/hosts des Servers ein. In diesem Beispiel einfach mal zwei Einträge.
sudo vi /etc/hosts
192.168.1.1 poco.euda.lan poco
192.168.1.2 sternchen.euda.lan sternchen
192.168.1.3 merlin.shadownet.lan merlin


Nun brauchen wir noch einen DNS-Server, den unser DNS fragt, wenn er Einträge nicht kennt (etwa vom Internet)
Also bearbeiten wir wieder unsere /etc/network/interfaces und ändern sie entsprechend ab (in diesem Falle mit Googles DNS-Server, siehe fettgedrucktes):

auto lo
iface lo inet loopback

auto eth0
iface eth0 inet static
address 192.168.1.1
netmask 255.255.255.0
network 192.168.1.0
dns-nameservers 8.8.8.8
auto eth1


Nun noch mit sudo /etc/init.d/networking restart den Netzwerkkram neu starten.

Jetzt haben wir zwar einen DNS-Server, aber die andern Rechner wissen garnicht, dass sie diesen nutzen sollen. Also bearbeiten wir noch schnell unsere /etc/dhcp3/dhcpd.conf:
Hier ändern wir
option domain-name-servers 8.8.8.8;
in
option domain-name-server 192.168.1.1;
ab und speichern sie.

Nun noch DHCP und DNS neu starten:
sudo /etc/init.d/isc-dhcp-server restart
sudo /etc/init.d/dnsmasq restart

Und nun haben wir auch DNS :D



Dynamisches DNS mittels No-IP.org
Jetzt wo alles fertig ist, möchten wir vielleicht auch noch Serverdienste betreiben. Da nervt es natürlich unglaublich, jedes mal die IP durchzugeben, die sich auch noch alle 24 Stunden ändert. Da wäre es doch toll, den Server immer unter einer Domain erreichbar zu haben, die immer die aktuelle IP hat. Nichts leichter als das! Wir registrieren und zunächst auf der Webseite http://www.no-ip.org für einen Account. Wenn wir das gemacht haben, brauchen wir den passenden Client. Also denn:

wget http://www.no-ip.com/client/linux/noip-duc-linux.tar.gz
tar -xvf noip-duc-linux.tar.gz


Bei x86-Systemen:
sudo cp noip-2.1.9-1/binaries/noip2-i686 /usr/local/bin/noip2
Bei x86_64-Systemen:
sudo cp noip-2.1.9-1/binaries/noip2-x86_64 /usr/local/bin/noip2

sudo chmod +x /usr/local/bin/noip2

Jetzt konfigurieren wir noip2:
sudo noip2 -C

Wenn wir alle Fragen beantwortet haben, machen wir uns noch einen Eintrag in unsere /etc/rc.local (natürlich eine Zeile über dem exit 0):
/usr/local/bin/noip2

Das wars dann auch schon, nun sollte es funzen.



Coming soon (ohne feste Reihenfolge):
  • Basteln eines Webinterfaces (Au je, das wird noch Arbeit!)
07.07.2012 14:53
Diese Nachricht in einer Antwort zitieren
fynn Offline
Windows Profi

Beiträge: 3.470
Registriert seit: Apr 2012
Beitrag #2
RE: [Anleitung] Linux-Rechner als DSL-Router
Facebook per Firewall Regel blockieren? :D
07.07.2012 14:56
Alle Beiträge dieses Benutzers finden Diese Nachricht in einer Antwort zitieren
mrshadowtux
Unregistered

 
Beitrag #3
RE: [Anleitung] Linux-Rechner als DSL-Router
Jo. Mit Sonderregelung, damit bestimmte Leute im LAN die es doch wollen es dann nutzen können :)

Aber eins nach dem anderen.
07.07.2012 14:58
Diese Nachricht in einer Antwort zitieren
fynn Offline
Windows Profi

Beiträge: 3.470
Registriert seit: Apr 2012
Beitrag #4
RE: [Anleitung] Linux-Rechner als DSL-Router
(07.07.2012 14:58)mrshadowtux schrieb:  Jo. Mit Sonderregelung, damit bestimmte Leute im LAN die es doch wollen es dann nutzen können :)

Aber eins nach dem anderen.

Wozu für manche Leute trotzdem? Ist doch voll unnötig :D

Achja kommt auch noch wlan? :)
(Dieser Beitrag wurde zuletzt bearbeitet: 07.07.2012 15:05 von fynn.)
07.07.2012 14:59
Alle Beiträge dieses Benutzers finden Diese Nachricht in einer Antwort zitieren
mrshadowtux
Unregistered

 
Beitrag #5
RE: [Anleitung] Linux-Rechner als DSL-Router
(07.07.2012 14:59)fynnk schrieb:  Wozu für manche Leute trotzdem? Ist doch voll unnötig :D
Manche Leute im Netz wollen ihre Ruhe vor Facebook, andere wollen es nutzen, beide muss man berücksichtigen.

(07.07.2012 14:59)fynnk schrieb:  Achja kommt auch noch wlan? :)
Kommt auch noch :)

Eins nach dem andern ;)
07.07.2012 17:29
Diese Nachricht in einer Antwort zitieren
fynn Offline
Windows Profi

Beiträge: 3.470
Registriert seit: Apr 2012
Beitrag #6
RE: [Anleitung] Linux-Rechner als DSL-Router
(07.07.2012 17:29)mrshadowtux schrieb:  
(07.07.2012 14:59)fynnk schrieb:  Wozu für manche Leute trotzdem? Ist doch voll unnötig :D
Manche Leute im Netz wollen ihre Ruhe vor Facebook, andere wollen es nutzen, beide muss man berücksichtigen.

(07.07.2012 14:59)fynnk schrieb:  Achja kommt auch noch wlan? :)
Kommt auch noch :)

Eins nach dem andern ;)

Die Frage ist wieso kämpft man gegen Internet Zensur wenn man sich am ende selbst zensiert.. :)
07.07.2012 17:37
Alle Beiträge dieses Benutzers finden Diese Nachricht in einer Antwort zitieren
PacMani
Unregistered

 
Beitrag #7
RE: [Anleitung] Linux-Rechner als DSL-Router
Was hat Facebook blocken mit Zensur zu tun.
Sowas nennt sich Wohltat
07.07.2012 17:41
Diese Nachricht in einer Antwort zitieren
mrshadowtux
Unregistered

 
Beitrag #8
RE: [Anleitung] Linux-Rechner als DSL-Router
(07.07.2012 17:37)fynnk schrieb:  Die Frage ist wieso kämpft man gegen Internet Zensur wenn man sich am ende selbst zensiert.. :)
Deshalb ja die Möglichkeit, es für bestimmte IPs freizugeben. Damit niemand der es haben möchte unter Zensur leiden muss. Du kannst die Implementierung dieses Punktes aber auch ganz sein lassen ;)

Habe nun btw die Anleitung um das Thema Zwangstrennung, Portweiterleitungen und Portfreigaben erweitert.
07.07.2012 17:47
Diese Nachricht in einer Antwort zitieren
fynn Offline
Windows Profi

Beiträge: 3.470
Registriert seit: Apr 2012
Beitrag #9
RE: [Anleitung] Linux-Rechner als DSL-Router
Super.. :)

Das einzige das mich davon abhällt ist das ich keine Ahnung hat wie ich das mit VoIp hinkriegen soll :(
07.07.2012 17:51
Alle Beiträge dieses Benutzers finden Diese Nachricht in einer Antwort zitieren
mrshadowtux
Unregistered

 
Beitrag #10
RE: [Anleitung] Linux-Rechner als DSL-Router
Jetzt gibts auch DHCP.

(07.07.2012 17:51)fynnk schrieb:  Das einzige das mich davon abhällt ist das ich keine Ahnung hat wie ich das mit VoIp hinkriegen soll :(
Mit einem Targa WR500. Die gibt es sehr günstig auf Ebay. Kann man Bitswitcher als Firmware drauftun, dann fluppt das.
07.07.2012 17:57
Diese Nachricht in einer Antwort zitieren
Neue Antwort schreiben 


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 3 Gast/Gäste