Donnerstag, August 6 2009

Multipath Routing und 2 DSL Leitungen

routingDie Anschaffung einer 2. DSL Leitung stellte mich vor folgendes Problem: Wie schaffe ich es, beide Leitungen zu benutzen und ihre Routen gemäß der Bandbreiten zu gewichten? Der Server, der diese Aufgabe erledigen sollte, war sowieso schon lange in Betrieb und benötigte nur eine kleine Umkonfiguration sowie ein wenig zusätzliche Hardware, sprich 2 Netzwerkkarten. Mein erster Versuch, das Multipath Routing mit 2 Netzkarten zu bewerkstelligen stellte sich als schwieriges Unterfangen ein und so baute ich kurzerhand eine 3. NIC ein. Was soll nun passieren und was passiert nicht? Multipath Routing bedeutet, dass die Daten die Möglichkeit bekommen, mehrere Wege (Paths) in ein Netz zu bekommen. Das suchen sie sich jedoch nicht selbst aus, sondern der Router (in diesem Fall der Server) entscheidet, welche Pakete über welche Route also welchen Internetanschluss laufen. Hierfür gibt es verschiedene Gewichtungsmöglichkeiten der einzelnen Routen die man nach Lust und Laune oder Bandbreite einstellen kann. Man nutzt also nur beide Leitungen abwechselnd nach festen Kriterien, bündelt aber nicht die Anschlüsse (bonding)! Ein Download nutzt weiterhin immer nur eine Leitung (load balancing)! Aber zum Technischen: Konfiguration: Vorneweg: Für sämtliche Befehle werden root Rechte benötigt! Es bietet sich also an, direkt in einer root-shell zu arbeiten! Vorraussetzung ist ein Linux PC / Server mit installiertem Paket iproute2. Zuerst legt man 2 neue Routing Tables in der Datei /etc/iproute2/rt_tables an, indem man am Ende folgendes einfügt 200     se555     #Routingtable für Verbindungen zu Router 1 201     v721      #Routingtable für Verbindungen zu Router 2 Die Namen für die einzelnen Tables können natürlich auch anders vergeben werden. Nun kommt die eigentliche Arbeit, das Einstellen der Routen. Hier gibt es mehrere Ansätze wo die Informationen hinterlegt werden sollen. Die einen plädieren für ein Script, ich konnte mich mehr mit dem Ansatz anfreunden, die Informationen direkt in die /etc/network/interfaces Datei einzutragen. Bei mir sieht die Datei wie folgt aus: iface eth0 inet static address 192.168.1.200 netmask 255.255.255.0 # Connection zu SE555 iface eth1 inet static address 192.168.1.199 netmask 255.255.255.0 post-up ip route add 192.168.1.1 dev eth1 src 192.168.1.199 table se555 post-up ip route add default via 192.168.1.1 table se555 post-up ip rule add from 192.168.1.199 table se555 post-down ip rule del from 192.168.1.199 table se555 # Connection V721 auto eth2 iface eth2 inet static address 192.168.1.198 netmask 255.255.255.0 post-up ip route add 192.168.1.2 dev eth2 src 192.168.1.198 table v721 post-up ip route add default via 192.168.1.2 table v721 post-up ip rule add from 192.168.1.198 table v721 post-down up rule del from 192.168.1.198 v721 Dabei gehören folgende IPs zu folgenden Geräten: eth0 192.168.1.200        LAN Interface eth1 192.168.1.199        Uplink zu Router 1 eth2 192.168.1.198        Uplink zu Router 2 192.168.1.1                       Router 1 192.168.1.2                       Router 2 Ist alles eingestellt, können die Interfaces hochgefahren werden mittels ifconfig eth1 up bzw. ifconfig eth2 up. eth0 sollte ja bereits up sein, sofern man per ssh verbunden ist. Sind nun alle Schnittstellen aktiv, kann die Konfiguration schnell mit ifconfig überprüft werden. Der Befehl ip route gibt Übersicht über das Routing der einzelnen Interfaces. Nun muss dem System nur noch mitgeteilt werden über welche Route, was geroutet werden soll und in welchem Verhältnis. In meinem Fall ist Anschluss 1 eine DSL6000 Leitung und Anschluss 2 eine DSL25000 Leitung. Die Bandbreite von A1 ist also knapp 1/4 von A2, darum sollen Pakete in diesem Verhältnis auf die Leitungen aufgeteil werden. Das Routing, bzw. die Verteilung der Pakete erfolgt nach Eingabe von: ip route add default scope global nexthop via 192.168.1.1 dev eth1 weight 25 nexthop via 192.168.1.2 dev eth2 weight 75 Damit sollte nun alles Funktionieren. Die default route wird nun auch angezeigt, wenn man ip route erneut zu rate zieht. Bei mir siehts wie folgt aus: 192.168.1.0/24 dev eth2 proto kernel scope link src 192.168.1.198 192.168.1.0/24 dev eth0 proto kernel scope link src 192.168.1.200 192.168.1.0/24 dev eth1 proto kernel scope link src 192.168.1.199 192.168.122.0/24 dev virbr0 proto kernel scope link src 192.168.122.1 default nexthop via 192.168.1.1 dev eth1 weight 25 nexthop via 192.168.1.2 dev eth2 weight 75 Nun muss nur noch der DHCP Server so eingestellt werden, das als Router bzw. Gateway die 192.168.1.200, also das LAN Interface benutzt wird. Und voila, das Multipath Routing konfiguriert! Folgeartikel: http://maltekueppers.de/wp/?p=1356 ENDGÜLTIGE LÖSUNG: http://maltekueppers.de/wp/?p=1363 Quellen: http://lartc.org/howto/lartc.rpdb.multiple-links.html http://www.debian-administration.org/articles/377 http://wiki.ubuntuusers.de/Multiple_Uplink_Routing

Donnerstag, Mai 14 2009

Tanze Samba mit mir...

Wie man vielleicht vermutet möchte ich mich heute nicht über das berühmte Lied auslassen, sondern über die Software Samba. Die ist für Netzwerkfreigaben verantwortlich, sodass auch Windows PCs auf Dateien auf Linux Rechnern zugreifen können. Die Einrichtung von Samba ist wirklich ganz simpel, zunächst muss das Paket samba aus den Repositiories installiert werden. Das geschieht durch zb. sudo apt-get install samba in der Konsole. Natürlich kann das je nach System auch mit einem beliebigen anderen Paketmanager geschehen. Ist Samba installiert, kann es mit der Konfiguration weitergehen. Dazu öffnen wir die Datei /etc/samba/smb.conf in unserem favourite Editor. Zum Beispiel so sudo gedit /etc/samba/smb.conf. Wer möchte kann sich vorher eine Sicherheitskopie der Datei anlegen. In den [global settings] legen wir zuerst die Arbeitsgruppe fest in der das Share zu finden sein soll, also zum Beispiel workgroup = Arbeitsgruppe. Zusätzlich gibts hier noch viele andere Einstellungen, die uns aber für unsere Freigaben erstmal nicht interessieren. Um also ein Share anzulegen legen wir ganz unten in der Datei folgenden Beispieleintrag an: [Meine-Freigabe] comment = Dies ist meine Sambafreigabe path = /home/user/freigabe read only = no guest ok = yes Damit sind wir schon fast fertig. Wichtig ist, dass read only auf no steht, denn ansonsten haben wir kein Schreibrecht auf der Freigabe, auch guest ok muss zwingend auf yes stehen, denn sonst können wir die Freigabe zwar sehen aber nicht auf sie zugreifen. Jetzt können wir die Datei speichern und schließen. Damit die neue Freigabe nun auch erscheint, muss der samba Dienst neugestartet werden. Das tun wir mit sudo /etc/init.d/samba restart. Jetzt sollte unsere Freigabe in der definierten Workgroup erscheinen und ein Zugriff darauf möglich sein. Natürlich ist es nicht immer von Vorteil einen Ordner freizugeben, auf den "Hinz und Kunz" zugreifen darf. Aus diesem Grund sollten wir die Freigabe schützen und zwar mit Benutzernamen und Kennwort. Ich gehe hier mal davon aus, dass der Benutzer auf dem Linux System schon existiert. Falls nicht, muss der vorher noch angelegt werden. Im Prinzip sieht unsere Freigabendefinition in der /etc/samba/smb.conf ähnlich aus wie vorher, allerdings gibts ein paar kleine Änderungen: [Home Malte] comment = Maltes Remote Directory path = /home/malte valid users = malte create mask = 0770 directory mask = 0770 writeable = yes guest ok = no browsable = yes valid user steht hier für den lokalen User auf dem Linuxsystem, der Zugriff auf das Share bekommen soll. In obigem Falle bin das ich. Mit create mask und directory mask weisen wir dem Share Berechtigungen a la chmod zu, also volle Berechtigung für root und für mich (770). Die 0 am Anfang gibt an ob es sich um ein Verzeichnis handelt, oder nicht. Natürlich ist in diesem Falle guest ok = no, denn das ist ja genau das was ich nicht möchte. Mit der Option force group = <gruppe> , die ich jetzt hier nicht verwendet habe, ist es möglich einer bestimmten Gruppe Zugriff auf das Share zu gewähren. Natürlich gibt es noch etliche weitere Optionen um Zugriffe zu gewähren oder einzuschränken, jedoch sollten die in normalen privaten Umgebungen nicht von nöten sein. Das richtet sich mehr an Firmen mit einer Vielzahl von Benutzern und Active Directory usw.

Donnerstag, September 11 2008

Ipod Touch on Ubuntu

Kopie eines Artikels, den ich früher mal geschrieben habe. Da es mittlerweile andere Firmwareversionen gibt, trifft manches vielleicht nicht mehr zu! In der angegebenen Firmwareversion 1.3 funktioniert allerdings alles einwandfrei! UPDATE 17.09.08: Wie ich gelesen habe funktioniert das syncen ab Firmware Version sowieso nicht mehr unter Ubuntu, daher sollte der Artikel auch seine Gültigkeit behalten ;) Because I had various problems getting my iPod Touch to work correctly with my Ubuntu PC, I decided to share all information I gathered with you folks. Here we go: What do I need to get my iPod Touch working with Linux? At first you will have to jailbreak you iPod. Use google for more information on that, there are tons of good howtos on the net, for example: http://rupertgee.wordpress.com/2008/02/08/jailbreak-113-official-gui-2/
1. Issues with Firmware 1.1.3 Until you do the following you wont be able to sync you iPod with a Linux PC if you are using firmware 1.1.3. Because some directories have changed and so on... To be able to sync 1.1.3 iPod with Amarok for example follow these steps. At first
Copy a song to the iPod using iTunes with Mac or PC
Now open an FTP-connection to your iPod by typing in Dolphin i.e. or any other program of your choice:
 sftp://<YourDeviceIP>
If you have configured passwordless access you should be logged in, if not enter "root" as username and "alpine" as your password. Locate
     /var/mobile/Media/com.apple.itunes.lock_sync
and copy the file to
    /var/root/Media
Now DELETE the complete folder
    var/mobile/Media
on the iPod. If you are done close the FTP connection. Connect to your iPod via SSH in the Terminal by typing:
ssh root@<YourDeviceIP>
Create a symbolic link on the iPod by entering
ln -s /var/root/Media /var/mobile/Media
Now disconnect, reboot your iPod and you should be able to sync again. 2. Passwordless Access to your Ipod At first create a new RSA key pair by typing
ssh-keygen -t rsa
Leave the path untouched and DO NOT entern a password. Simply press ENTER. After that a private and a public RSA Key will be found in ~/.ssh Now copy the public key to your ipod device by using the following command:
ssh-copy-id -i ~/.ssh/id_rsa.pub root@<device ip>
Log into the iPod from a terminal by typing
ssh root@<device ip>
You will be still asked for a password. Thats ok! Now we have to edit the sshd_config file on the ipod using the pico editor. But before we do this first set the right permissions to the ssh folder. Otherwise the ssh-deamon will refuse to read the keyfile. Set the following:
chmod 0755 ~ ~/.ssh
chmod 0644 ~/.ssh/*
Now we must change the authentication settings by editing the sshd_config. Open it with
pico /etc/sshd_config
Note: This file is NOT empty! Scroll down until you find #RSAAuthentication. Change the 3 lines to:
RSAAuthentication yes
PubkeyAuthentication yes
AuthorizedKeysFile	%h/.ssh/authorized_keys
Save the file pressing CTRL+O and then exit the editor using CTRL+X. Then type
reboot
and we are done! When the ipod is up again try to login via ssh like above. This should work without entering a password now.