markus-gsottberger.de Rotating Header Image

IPsec VPN zwischen ScreenOS und einer FRITZ!Box

Kürzlich wollte ich ein IPsec VPN zwischen einem ScreenOS und einer FRITZ!Box bauen. Das IPsec auf der FRITZ!Box ist dabei ziemlich hässlich zu konfigurieren. Man muss ein Konfigurationsfile auf die Fritzbox hochladen und im Anschluss rebootet diese sich um die Konfiguration zu aktivieren. Das ganze war dadurch etwas “Trial & Error” und nervig bis es mit meiner ScreenOS Gegenstelle lief. Anbei meine funktionierende Konfiguration. Vielleicht hilft’s ja jemanden.

Die Variablen $FQDN_FRITZ, $FQDN_SCREENOS, $IP_SCREENOS, $PRESHAREDKEY muss man natürlich durch seine eigenen Werte ersetzen. Desweiteren muss man das Routing und die Accesslist noch an sein Setup anpassen.

Konfiguration auf dem ScreenOS:

set interface "tunnel.2" zone "Trust"
set interface tunnel.2 ip unnumbered interface trust
set ike gateway "p1-fritzbox" address $FQDN_FRITZ Main local-id "$IP_SCREENOS" outgoing-interface "untrust" preshare "$PRESHAREDKEY" proposal "pre-g2-aes128-sha" "rsa-g2-3des-sha" "pre-g2-aes256-sha"
set vpn "p2-fritzbox" gateway "p1-fritzbox" no-replay tunnel idletime 0 proposal "g2-esp-3des-sha"
set vpn "p2-fritzbox" id 0x1 bind interface tunnel.2
set vpn "p2-fritzbox" proxy-id local-ip 0.0.0.0/0 remote-ip 0.0.0.0/0 "ANY"
set vpn "p2-fritzbox" id 0x1 bind interface tunnel.2
set route 192.168.1.0/24 interface tunnel.2

Jetzt kommt der eigentlich spannende Teil. Die Konfigurationsdatei für die FRITZ!Box (z.b. als fritzbox.cfg abspeichern):

pncfg {
connections {
enabled = yes;
conn_type = conntype_lan;
name = "$FQDN_SCREENOS";
always_renew = no;
reject_not_encrypted = no;
dont_filter_netbios = yes;
localip = 0.0.0.0;
local_virtualip = 0.0.0.0;
remoteip = 0.0.0.0;
remote_virtualip = 0.0.0.0;
remotehostname = "$FQDN_SCREENOS";
localid {
fqdn = "$FQDN_FRITZ";
}
remoteid {
fqdn = "$FQDN_SCREENOS";
}
mode = phase1_mode_idp;
phase1ss = "all/all/all";
keytype = connkeytype_pre_shared;
key = "$PRESHAREDKEY";
cert_do_server_auth = no;
use_nat_t = yes;
use_xauth = no;
use_cfgmode = no;
phase2localid {
ipnet {
ipaddr = 0.0.0.0;
mask = 0.0.0.0;
}
}
phase2remoteid {
ipnet {
ipaddr = 0.0.0.0;
mask = 0.0.0.0;
}
}
phase2ss = "esp-3des-sha/ah-no/comp-no/pfs";
accesslist = "permit ip any 213.95.XX.XXX 255.255.255.224";
} ike_forward_rules = "udp 0.0.0.0:500 0.1.0.0:500",
"udp 0.0.0.0:4500 0.0.0.0:4500";
}

Kalendersynchronisation mit syncevolution

Ich möchte einen Kalender (2-way) zwischen der Groupware meiner Wahl (SOGO – CalDAV Backend) und einem vorgegebenen Oracle Calendar (SyncML Backend) automatisch synchronisieren.

Möglich ist dies mit der Software SyncEvolution. Der CalDAV Support ist erst kürzlich mit der Version 1.2 hinzugekommen. Bei meinem Ubuntu 10.4 ist allerdings nur die Version 1.0 dabei. Zum Glück gibt es allerdings ein Repository mit fertigen Paketen. Als root einfach folgendes ausführen:

# echo "deb http://downloads.syncevolution.org/apt stable main" >> /etc/apt/sources.list
# apt-get update
# apt-get install syncevolution-evolution
Nun müssen wir das ganze noch konfigurieren. Als erstes die Synchronisation mit dem Oracle Kalender:
$ syncevolution --configure --sync-property "syncURL=<KALENDERURL>" \
  --sync-property "username=xxxxxx" \
  --sync-property "password=xxxxxx" \
  --source-property "sync=two-way" \
  --source-property "type=file:text/calendar:2.0" \
  --source-property "evolutionsource=/home/<BENUTZERNAME>/calendar" \
  --source-property "uri=./Calendar/Events" oracle calendar
Und dann noch die Synchronisation zum CalDAV Server:
$ syncevolution --configure \
--template webdav username="xxxxxx" password="xxxxxx" \
--sync-property "syncURL=<KALENDERURL>"  target-config@sogo
$ syncevolution --configure \
--template SyncEvolution_Client syncurl=local://@sogo  username=xxxxxx password=xxxxxx sogo calendar
Initial einmal den Sync von Hand starten:
$ syncevolution --sync slow oracle
$ syncevolution --sync slow sogo

Das wars eigentlich auch schon. Die Konfiguration wird im Home des Benutzers unter .config/syncevolution/” abgespeichert. Im screen habe ich dann folgende Schleife laufen was dafür sorgt das alle 5 Minuten meine Kalender automatisch synchronisiert werden:

#!/bin/bash

while true; do
 syncevolution oracle
 syncevolution sogo
 syncevolution oracle
sleep 300
done

Das ganze ist zwar ziemlich hässlich aber es funktioniert und erfüllt seinen Zweck. Was auch unschön ist das das ganze einen laufendes Gnome benötigt. Ohne Dbus habe ich es jedenfalls nicht zum laufen bekommen, bzw. habe es mir dann nicht weiter angesehen. Wenn jemand eine bessere Idee hat bitte in den Kommentaren melden.

XenServer, Management Interface und VLAN

Beim Citrix XenServer (zumindest bis zur aktuellen Version 5.5)  ist es leider nicht möglich das Management Interface auf einem VLAN zu konfigurieren. Laut Dokumentation wird dies nicht unterstützt:

4.2.8.5. Management interface
Warning
Putting the management interface on a VLAN network is not supported.

Dies ist leider sehr schade. Denn man müßte nun eine extra Netzwerkkarte nur für das Management Interface verwenden wenn man mehrere VLANs auf seinem XenServer benutzen möchte bzw. muss.

Nun hat man mehrere Möglichkeiten:

1) Eine weitere Netzwerkkarte nur für das Management Interface verwenden. Dies ist nicht nur teuer, sondern im Falle von Bladeservern u.U. auch schwer umzusetzen.

2) Eine andere Möglichkeit suchen. :-)

Im Netz habe ich zwar eine Lösung gefunden um das Problem zu umgehen, allerdings finde ich diese nicht schön da man am XenServer selbst herumkonfigurieren muss. Bei XenServer Pools funktioniert dieser Workaround wohl außerdem nicht.

Im Citrix Forum habe ich einen anderen, m.E. schöneren Ansatz, gefunden:

Der Switchport wird ganz normal als Trunk konfiguriert mit allen VLANs die man benötigt.  Zusätzlich konfiguriert man allerdings noch ein Native VLAN für sein Management Interface. Die Pakete im Native VLAN kommen untagged am Server an. Damit ist es nun möglich das Management Interface am XenServer – ohne basteln – zu konfigurieren und zu verwenden.

Bei einem Cisco Switch sieht die Konfiguration dann z.b. wie folgt aus:

#show running-config interface gi0/1
Building configuration...
Current configuration : 260 bytes
!
interface GigabitEthernet0/1
[...]
switchport trunk native vlan 10
switchport trunk allowed vlan 10,11,12
switchport mode trunk
[...]
end

In diesem Beispiel kommen die VLANs 11 und 12 tagged an und VLAN 10 untagged. VLAN 10 kann man dann für sein Management Interface verwenden.

Eventuell hilft es jemanden. Mir hat das ganze jedenfalls ein paar graue Haare gekostet. :-)

PuTTY Connection Manager – PuTTY mit Tabs

PuTTY ist meiner Meinung nach der beste SSH-Client für Windows. Was mir allerdings immer fehlte war die Unterstützung für Tabs. Durch Zufall bin ich auf den PuTTY Connection Manager gestoßen, welcher genau dies ermöglicht. Ich bin begeistert! :)

PuTTY Connection Manager

Partitionen > 2TB unter Linux anlegen

Kürzlich habe ich einen neuen Server installiert und wollte eine Partition mit einer Größe von ca. 2,6TB anlegen. Mit fdisk ist dies leider nicht möglich da der Master Boot Record (MBR) nur Festplatten mit einer maximalen Größe von 2TB richtig verwalten kann. Die Alternative wäre hier die GUID Partition Table (GPT), quasi der Nachfolger der MBR-Partitionstabelle. Leider unterstützt fdisk kein GPT.

Abhilfe schafft hier das Tool parted (GNU Parted) welches GPT unterstützt. Damit können auch Partitionen > 2TB angelegt werden.

Nachdem man parted gestartet hat erstellt man mit “mklabel gpt” erstmal ein GPT Label.  Anschließend kann man mit “mkpart” und den passenden Parametern eine Partition anlegen.  Mit “help” erhält man eine Übersicht aller Befehle. Eine ausführliche Dokumentation zu parted findet man hier.

Das ganze sieht am Schluss dann z.b. so aus:

# parted /dev/sdb
GNU Parted 1.8.8
Using /dev/sdb
Welcome to GNU Parted! Type 'help' to view a list of commands.
(parted) print
Model: DELL PERC 6/i (scsi)
Disk /dev/sdb: 2697GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt

Number  Start   End     Size    File system  Name  Flags
 1      17.4kB  2697GB  2697GB                     lvm

(parted)

Mit fdisk sollte man anschließend die Festplatte allerdings nicht mehr bearbeiten:

# fdisk -l /dev/sdb

WARNING: GPT (GUID Partition Table) detected on '/dev/sdb'! The util fdisk doesn't support GPT. Use GNU Parted.

Disk /dev/sdb: 2696.9 GB, 2696971026432 bytes
255 heads, 63 sectors/track, 327888 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Disk identifier: 0x00000000

   Device Boot      Start         End      Blocks   Id  System
/dev/sdb1               1      267350  2147483647+  ee  EFI GPT

Mittels der GUID Partition Table (GPT) ist es also möglich auch Partitionen > 2TB anzulegen.  Aufpassen muss man allerdings wenn man von GPT Partitionen booten möchte. Noch nicht alle Bootloader kommen damit problemlos klar.

Links:

Citrix XenServer kostenlos

Der Citrix XenServer ist seit kurzem kostenlos verfügbar. Ich habe ihn mir nun mal heruntergeladen und zuhause auf einem Testsystem installiert. Die Installation verlief ohne Probleme und eine erste VM war schnell eingerichtet. In nächster Zeit werde ich mir den XenServer mal genauer ansehen.

Update auf Debian Lenny

Vor 2 Wochen am Valentinstag wurde ja endlich Debian 5.0 (Lenny) released. Heute bin ich dazugekommen meinen Server, auf welchem  u.a. auch dieses Blog läuft, von Etch auf Lenny zu aktualisieren.

Wie von Debian gewöhnt verlief das Update ohne nennenswerte Schwierigkeiten. :)

MySQLTuner

MySQLTuner ist ein schönes Tool um eine schnelle Übersicht über die Konfiguration eines MySQL Servers zu erhalten. Desweiteren erhält man einige allgemeine Empfehlungen zur Optimierung der Einstellungen.

Die Benutzung ist sehr einfach:

wget mysqltuner.pl
chmod 0700 mysqltuner.pl
./mysqltuner.pl

Das Tool macht im Prinzip eine Auswertung von “show global variables” und “show global status”.

Weniger Spam

Seitdem einer Spam-Schleuder der Stecker gezogen wurde ging das Spam-Aufkommen auf meinem privaten Mailserver fast um die Hälfte zurück. Wie sieht’s bei euch aus?

Blog online

Nun hab ich auch mal ein Blog installiert :-)