Konfiguration eines Linux-Rechners als DSL-Router

Dieser Artikel beschreibt wie man unter LINUX einen DSL-Rooter für Windows konfiguriert.

Konfiguration der Netzwerkkarten am Router

Für den Router werden zwei Netzwerkkarten benötigt. Eine für das lokale Netzwerk (eth0) und eine für die Verbindung zum DSL-Modem (eth1). Das Interface eth0 bekommt bei mir die IP-Adresse 192.168.100.1. Die zweite Karte bekommt die Adresse 192.168.101.1 zugewiesen. Die IP-Adresse des zweiten Interfaces spielt für den Datenaustausch keine Rolle, beide Adressen dürfen jedoch nicht im selben (Sub-)Netz liegen!

Melden Sie sich als Benutzer "root" an.

[root@Router root]# vi /etc/sysconfig/network-scripts/ifcfg-eth0

DEVICE=eth0
BOOTPROTO=static
BROADCAST=192.168.100.255
IPADDR=192.168.100.1
NETMASK=255.255.255.0
NETWORK=192.168.100.0
ONBOOT=yes

[root@Router root]# vi /etc/sysconfig/network-scripts/ifcfg-eth1

DEVICE=eth1
BOOTPROTO=static
BROADCAST=192.168.101.255
IPADDR=192.168.101.1
NETMASK=255.255.255.0
NETWORK=192.168.101.0
ONBOOT=yes

Anschließend werden noch die Einstellungen für Hostname und Gateway festgelegt:

[root@Router root]# vi /etc/sysconfig/network

NETWORKING=yes
HOSTNAME=Router
GATEWAY=192.168.100.1

Anschließend werden die Einstellungen durch den Neustart des Netzwerks übernommen:

[root@Router root]# service network restart

Mit dem Befehl "ifconfig" kann die aktuelle Konfiguration anschließend kontrolliert werden.

Konfiguration der Netzwerkkarte am Client

Das Netzwerk-Interface am Client erhält bei mir die Adresse 192.168.100.101.

In der Netzwerkumgebung die Eigenschaften von TCP/IP für die betroffene Netzwerkkarte bearbeiten;
IP-Adresse festlegen: 192.168.100.101.

Als Standard-Gateway trägt man hier die gleiche IP-Adresse ein wie zuvor am Router - also 192.168.100.1.

Danach braucht Windows nicht neu gestartet zu werden. Es reicht, die Netzwerkkarte einmal zu deaktivieren und anschließend wieder zu aktivieren. Mit dem Aufruf des Befehls "ipconfig /all" in der DOS-Box kann anschließend kontrolliert werden, ob die Änderungen übernommen wurden.

Abschließend kontrolliert man am besten erst mal, ob alles soweit korrekt funktioniert.

am Router:

[root@Router root]# ping -c5 192.168.100.1

bzw.

[root@Router root]# ping -c5 192.168.101.1

am Client:

C:> ping 192.168.100.101

bzw.

C:> ping 192.168.100.1

Geht nicht? Dann bleibt nichts anderes übrig, als nochmal die Konfigurationsdateien auf mögliche Fehler zu prüfen. Eine evtl. installierte Firewall sollte man zum Testen sowieso erst mal beenden.

Eine gute Hilfe bei der Suche nach Fehlern bietet hier auch die Seite www.linuxforen.de.

Festlegen der DNS-Server zur Namensauflösung

Diese Einstellung muß sowohl am Router als auch am Client vorgenommen werden, damit die Namensauflösung klappt.

Unter Linux werden die DNS-Server in der Datei resolv.conf eingetragen:

[root@Router root]# vi /etc/resolv.conf

nameserver 194.25.2.129
nameserver 194.25.2.130

Unter Windows erfolgt der Eintrag in den TCP/IP-Einstellungen der Netzwerkkarte:

Auch hier reicht es, die Netzwerkkarte zu deaktivieren und anschließend wieder zu aktivieren, um die Einstellungen zu übernehmen.

Im nächsten Schritt wird dann endlich die ADSL-Verbindung hergestellt.

Herstellen der ADSL-Verbindung

Zuerst prüft man, ob das notwendige PPPoE-Protokoll auf dem Router auch installiert ist:

[root@Router root]# rpm -qa rp-pppoe

Die Ausgabe sollte so oder so ähnlich aussehen:

rp-pppoe-3.5-2

Erscheint hier keine Ausgabe, so ist das Paket nicht installiert. Mit der Anweisung

[root@Router root]# rpm -ivh rp-pppoe-3.5-2

wird es von der CD nachinstalliert.

Als nächstes wäre dann die Verbindung zwischen Netzwerkkarte und DSL-Modem zu testen:

[root@Router root]# pppoe -I eth1 -A

Die Ausgabe sollte so ähnlich aussehen:

Access-Concentrator: WUBX12-erx
Got a cookie: 02 55 ce 66 d6 ca d3 f0 fb 27 a3 33 da de 74 5a
AC-Ethernet-Address: 00:90:1a:40:20:3e
--------------------------------------------------

Falls hier nichts ausgegeben wird, sollte man prüfen, ob die Netzwerkkabel am richtigen Anschluß eingesteckt sind. Im Gegensatz zu Windows ist für das DSL-Modem kein zusätzlicher Treiber erforderlich.

Die Zugangsdaten werden in die Datei "pap-secrets" eingetragen:

[root@Router root]# vi /etc/ppp/pap-secrets

# Secrets for authentication using PAP
# client	server	secret			IP addresses
"[Benutzername]" * "[Passwort]"
[Benutzername]  ersetzt man durch die vom Provider erhaltene Login-Kennung
[Passwort]  ersetzt man durch sein Zugangs-Passwort

Einstellungen für die Verbindung festlegen

Die Festlegung der Verbindung-Parameter erfolgt in der Datei "options":

[root@Router root]# vi /etc/ppp/options

connect /bin/true
ipcp-accept-remote
ipcp-accept-local
defaultroute
persist
holdoff 60
idle 600
noipdefault
user "[Benutzername]"
hide-password
noaccomp
nopcomp
novj
novjccomp
nobsdcomp
nodeflate
noccp
nocrtscts
local
noauth
mru 1492
mtu 1492
lcp-echo-interval 10
lcp-echo-failure 3
lock

[Benutzername] ist auch hier wieder durch die vom Provider mitgeteilte Login-Kennung zu ersetzen.

Die Anweisung "persist" hält die Verbindung offen und "holdoff 60" wählt sich 60 Sekunden nach der automatischen Trennung erneut ins Internet ein.

Testen der Internet-Einwahl

Zuerst lohnt sich ein Blick auf die Routing-Tabelle

[root@Router root]# route

Bei mir sieht das Ergebnis so aus:

Kernel IP Routentabelle
Ziel            Router          Genmask         Flags Metric Ref    Use Iface
192.168.100.0   *               255.255.255.0   U     0      0        0 eth0
192.168.101.0   *               255.255.255.0   U     0      0        0 eth1
169.254.0.0     *               255.255.0.0     U     0      0        0 eth1
127.0.0.0       *               255.0.0.0       U     0      0        0 lo
default         Router          0.0.0.0         UG    0      0        0 eth0

Die letzte Zeile der Tabelle bezeichnet die sog. Default-Route, welche besagt, daß alle Pakete, für die keine explizite Route definiert ist, über diese Route geleitet werden.

Bei einer Verbindung zum Internet erfolgt die Weiterleitung solcher Pakete allerdings über das DSL-Modem. Um die Konsistenz der Routing-Tabelle zu gewährleisten, muß deshalb die Default-Route vor dem Verbindungsaufbau zuerst gelöscht werden:

[root@Router root]# route del default

Mit dem Befehl

[root@Router root]# pppd pty "/usr/sbin/pppoe -I eth1"

wird die Verbindung zum Internet aufgebaut.

Ein erneuter Blick auf die Routingtabelle liefert nun folgendes Ergebnis:

Kernel IP Routentabelle
Ziel            Router          Genmask         Flags Metric Ref    Use Iface
217.5.98.102    *               255.255.255.255 UH    0      0        0 ppp0
192.168.100.0   *               255.255.255.0   U     0      0        0 eth0
192.168.101.0   *               255.255.255.0   U     0      0        0 eth1
169.254.0.0     *               255.255.0.0     U     0      0        0 eth1
127.0.0.0       *               255.0.0.0       U     0      0        0 lo
default         217.5.98.102    0.0.0.0         UG    0      0        0 ppp0

Die Default-Route wurde automatisch auf das virtuelle Interface "ppp0" gesetzt. Dieses existiert nur für die Dauer der Verbindung. In der letzten Zeile ist auch die vom Provider zugeteilte IP-Adresse zu sehen.

Der Befehl

[root@Router root]# ping -c5 194.25.2.129

prüft nun die Verbindung zum DNS,

[root@Router root]# ping -c5 web-ts.de

zeigt, daß die Namensauflösung funktioniert.

Mit der Anweisung

[root@Router root]# killall pppd

kann die Internet-Verbindung wieder getrennt werden

Routing konfigurieren

Nachdem jetzt hoffentlich alles soweit funktioniert, zeige ich noch, wie das Routing unter Linux letztendlich aktiviert werden kann.

Durch Eingabe von

[root@Router root]# echo "1" > /proc/sys/net/ipv4/ip_forward

schaltet man die Paket-Weiterleitung, das "IP-Forwarding", ein.

Für die abschließenden Schritte muß "iptables" installiert sein.

[root@Router root]# iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE

[root@Router root]# iptables -A FORWARD -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmt

[root@Router root]# iptables -A INPUT -i ppp0 -m state --state ESTABLISHED,RELATED -j ACCEPT

Das war´s!

Zur Vereinfachung des Ganzen packe ich alles ein ein kleines Skript:

#!/bin/bash
#
# routing.sh - Skript zum Aktivieren des Routings
#
# Es werden fuer den Betrieb des Rechners als Router noetige,
# vorbereitende Einstellungen gemacht.
# 
# Die Verbindung zum Internet wird hier nicht hergestellt!
#
######################################################################

case "$1" in
  start)
    echo "Routing wird aktiviert..."

    # IP-Forwarding aktivieren:
    echo "1" > /proc/sys/net/ipv4/ip_forward

    # IP-Masquerading aktivieren:
    iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE
    iptables -A FORWARD -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmt
    iptables -A INPUT -i ppp0 -m state --state ESTABLISHED,RELATED -j ACCEPT

    echo "fertig!"
  ;;

  stop)
    echo "Routing wird deaktiviert..."

    # IP-Forwarding deaktivieren:
    echo "0" > /proc/sys/net/ipv4/ip_forward

    echo "fertig!"
  ;;

  *)
    echo "Fehlerhafter Aufruf!"
    echo "Syntax $0 {start | stop}"
    exit 1
  ;;

esac

Kopieren Sie das Skript in das Verzeichnis "/usr/local/bin".

Skript zum Herstellen der Verbindung

Natürlich ist es ziemlich umständlich, bei jeder Einwahl ins Internet alle Schritte wieder erneut auszuführen. Ich bediene mich deshalb des folgenden Skriptes:

#!/bin/bash
# connectadsl.sh - Skript zum Herstellen einer ADSL-Verbindung
#
# Aufgerufen wird das Skript mit
# connectadsl.sh start
# um die Verbindung herzustellen und mit
# connectadsl.sh stop
# um die Verbindung zu trennen.
#
# Um ggf. das Routing zu aktivieren wird das Skript
# 'routing.sh' eingebunden.
#
# Zur Festlegung div. Regeln fuer die Firewall wird das Skript
# 'firewall.sh' eingebunden - Das Firewall-Skript wurde mit Hilfe des 
# 'iptables-Generator' von Harry's Linux-Seite
# <http://www.harry.homelinux.org/> erstellt.
#
######################################################################

# Einstellungen fuer das lokale Netzwerk:
LAN_IF="eth0" # Interface fuer LAN
LAN_IP="192.168.100.1" # IP fuer LAN

# Einstellungen fuer das Internet:
INET_IF="eth1" # Interface fuer Internet

# Einstellungen fuer DSL:
PPPD="/usr/sbin/pppd"
PPPOE="/usr/sbin/pppoe"

case "$1" in
  start)
    echo "Herstellen der Verbindung..."

    # Default-Route loeschen:
    route del default

    # Routing aktivieren:
    /usr/local/bin/routing.sh start

    # Firewall starten:
    /usr/local/bin/firewall.sh start

    # Verbindung herstellen:
    $PPPD pty "$PPPOE -I $INET_IF -m 1452"
  ;;

  stop)
    echo "Trennen der Verbindung..."

    # Verbindung trennen:
    killall pppd

    # Firewall beenden:
    /usr/local/bin/firewall.sh stop

    # Routing deaktivieren:
    /usr/local/bin/routing.sh stop

    # Default-Route wieder herstellen:
    route add default gw $LAN_IP dev $LAN_IF
  ;;

  *)
    echo "Falscher Aufruf!"
    echo "Syntax: $0 {start | stop}"
    exit 1
  ;;

esac>

Kopieren Sie das Skript in das Verzeichnis "/usr/local/bin" - dann können Sie es von jedem Ort aus ohne Angabe des kompletten Pfades ausführen.

Beim regelmäßigen Gang in´s Internet sollte unbedingt eine Firewall eingesetzt werden! Die einfachste Lösung bietet hier der "iptables-Generator" von Harry´s Linux-Seite (harry.homelinux.org)

Ratings

There are no comments available yet.

Here you can write a comment


Please enter at least 10 characters.
Loading... Please wait.
* Pflichtangabe

Related topics

Gewichtete SQL-Abfragen

Gewichtete Abfragen werde häufig im Banner-Umfeld benötigt. Also überall da, wo Banner nach bestimmten Kriterien einblendet werden sollen. Wenn man davon ausgeht, das Banner unterschiedlichen Klick-Erfolg haben, dann liegt der Gedanke nahe, genau diese Ba ...

admin

Autor : admin
Category: mySQL-Tutorials

Eigene Web Services mit PHP5 bereitstellen? Kein Problem!

PHP5 bietet das nötige Rüstzeug, um bequem und schnell den eigenen Web Service auf die Beine zu stellen. ...

beebob

Autor : beebob
Category: PHP-Tutorials

Variablen über mehrere Seiten hinweg verwenden - der Session-Befehl macht 's möglich!

Oberste Voraussetzung um Session-Befehle korrekt auszuführen ist, dass der Provider a) PHP und b) das speichern von Sessions auf dem Server überhaupt erlaubt. Wird der Session-Befehl unterstützt jedoch nicht das direkte speichern von Sessions bzw. Sess ...

ndo@

Autor : ndo@
Category: PHP-Tutorials

Anzeige des letzten Besuchers auf der Website

PHP und MySQL ermöglichen es, mit wenig Aufwand Datum und Uhrzeit des letzten Besuchers auf der Homepage anzeigen zu lassen. ...

Lukas Beck

Autor : Lukas Beck
Category: PHP-Tutorials

MySQL für Anfänger einfach erklärt

Dieses Tutorial richtet sich an Anfänger, die noch nie mit SQL gearbeitet haben. Vielleicht ist aber auch für Fortgeschrittene das Eine oder Andere dabei. ...

admin

Autor : admin
Category: mySQL-Tutorials

Login mit Hilfe von PHP und mySQL

Dieses Tutorial soll die Grundzüge eines Login-Systems auf der Basis von PHP und mySQL unter Zuhilfenahme von Sessions klären. ...

razorblade

Autor : razorblade
Category: PHP-Tutorials

Templates mit PHP

Dieses Tutorial beschreibt in mehreren Teilen wie man Templates in PHP verwendet. Ferner erhält man eine Einführung in die Entwicklung eines eigenen Templatesystems. ...

mortalan@

Autor : mortalan@
Category: PHP-Tutorials

Gewichtete SQL-Abfragen

Gewichtete Abfragen werde häufig im Banner-Umfeld benötigt. Also überall da, wo Banner nach bestimmten Kriterien einblendet werden sollen. Wenn man davon ausgeht, das Banner unterschiedlichen Klick-Erfolg haben, dann liegt der Gedanke nahe, genau diese Ba ...

admin

Autor : admin
Category: mySQL-Tutorials

Publish a tutorial

Share your knowledge with other developers worldwide

Share your knowledge with other developers worldwide

You are a professional in your field and want to share your knowledge, then sign up now and share it with our PHP community

learn more

Publish a tutorial