[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 -smv /etc/network/interfaces /etc/network/interfaces_altvi /etc/network/interfaces

    dann in die neue Datei folgendes rein:
    auto loiface lo inet loopback

    auto eth0iface 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 -Fiptables -t nat -F

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

    # Routing von ppp0 nach eth0 + NATiptables -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 rausiptables -A INPUT -i lo -j ACCEPTiptables -A OUTPUT -o lo -j ACCEPT

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

    # Im LAN ist auch alles erlaubtiptables -A OUTPUT -o eth0 -j ACCEPTiptables -A INPUT -i eth0 -j ACCEPT

    # Sonstige eingehende Pakete ablehneniptables -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/bashpoff -apon 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 Chainiptables -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 FACEBOOKiptables -I FORWARD -m tcp -p tcp -m iprange --dst-range 69.63.176.0-69.63.191.255 --dport 443 -j FACEBOOKiptables -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 FACEBOOKiptables -I FORWARD -m tcp -p tcp -m iprange --dst-range 66.220.144.0-66.220.159.255 --dport 80 -j FACEBOOKiptables -I FORWARD -m tcp -p tcp -m iprange --dst-range 69.63.176.0-69.63.191.255 --dport 80 -j FACEBOOKiptables -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 ACCEPTiptables -A FACEBOOK -s 192.168.1.3 -j ACCEPT

    # Die anderen Rechner vor Facebook schützeniptables -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-Karteinterface=wlan0

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

    # Logging aktivierenlogger_stdout=­1logger_stdout_level=2

    # Unsere Einstellungen für das WLANssid=MerlinNethw_mode=gchannel=4auth_algs=3

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

    # Verschlüsselungwpa=2wpa_passphrase=rennmausfutterwpa_key_mgmt=WPA­PSKwpa_pairwise=TKIP CCMPrsn_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/hosts192.168.1.1 poco.euda.lan poco192.168.1.2 sternchen.euda.lan sternchen192.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 loiface lo inet loopback

    auto eth0iface eth0 inet static address 192.168.1.1 netmask 255.255.255.0 network 192.168.1.0 [b]dns-nameservers 8.8.8.8[/b]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 restartsudo /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.gztar -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!)
  • Jo. Mit Sonderregelung, damit bestimmte Leute im LAN die es doch wollen es dann nutzen können :)

    Aber eins nach dem anderen.


  • 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? :)

    Einmal editiert, zuletzt von fynn (7. Juli 2012 um 16:05)


  • 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.


    Achja kommt auch noch wlan? :)


    Kommt auch noch :)

    Eins nach dem andern ;)


  • Manche Leute im Netz wollen ihre Ruhe vor Facebook, andere wollen es nutzen, beide muss man berücksichtigen.


    Kommt auch noch :)

    Eins nach dem andern ;)

    Die Frage ist wieso kämpft man gegen Internet Zensur wenn man sich am ende selbst zensiert.. :)


  • 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.

  • Jetzt gibts auch DHCP.



    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.


  • Jetzt gibts auch DHCP.



    Mit einem Targa WR500. Die gibt es sehr günstig auf Ebay. Kann man Bitswitcher als Firmware drauftun, dann fluppt das.

    Naja ich dachte jetzt daran das ich den 2. speedport per Lan mit dem Internet Verbinde(Zundest das geht) und dann da voip einrichte ab kp ob das geht :(

  • Probiers doch einfach mal aus, dann siehst dus ja. Eventuell geht das sogar.



    So, nun ist auch der Facebook-Blocking-Teil mit dabei.

  • Wie kann ich das auf dem debain vom Pi anwenden? Ich habe gelesen, das der WLAN Stich einen sogenannten "Master" Mode können muss. Ausserdem fehlt dem Debain Synaptic, alles von Hand einzubinden wäre zu stressig.

    Den RasPi habe ich gestern bekommen :D

  • Hat inzwischen mal jemand von euch die Anleitung getestet? Wenns irgendwo Probleme gebt, helfe ich gerne.

  • Welche "paar Mausklicks" denn. Wie sieht die daraus resultierende Konfiguration aus? Beinhaltet sie auch Zusatzdienste wie DHCP und DNS? Ist die Firewall gut konfigurierbar?

Jetzt mitmachen!

Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!