C#: XML-Serialisierung mit dem XmlSerializer Teil 1

Mit dem XmlSerializer können auf einfache Weise XML-Dokumente erstellt werden. Zum Beispiel wollen wir eine XML-Datei mit Adressdaten generieren, die folgendermassen aussehen soll:




    Musterstrasse
    77a
    In einem Land
    1234
    Musterhausen
    Max
    Mustermann

Dazu erstellen wir zuerst einmal eine einfache Adressklasse, in der die Adressdaten gespeichert werden können:


namespace XML_Serialisierung
{
    public class Address
    {
        public int AddressNumber { get; set; }        
        public string Street { get; set; }
        public string HouseNumber { get; set; }
        public string Country { get; set; }
        public string ZIP { get; set; }
        public string City { get; set; }
    }
}

Würden man diese Klasse jetzt serialisieren, hätten die XML-Tags nicht die gewünschten Namen. Der XmlSerializer würde die Namen der Properties verwenden.

Mit Hilfe von Attributen kann man die Ausgabe der XML-Datei steuern. Im obigen XML ist die Adressnummer ein Attribut des Wurzelelment Adresse. Um dies zu erreichen, wird das Attribut [XmlAttribute] verwendet. Das Attribut [XmlElement(“”)] wird verwendet um den Namen des XML-Tag festzulegen.


using System.Xml.Serialization;

namespace XML_Serialisierung
{
    public class Address
    {
        [XmlAttribute("Adressenummer")]
        public int AddressNumber { get; set; }
        
        [XmlElement("Strasse")]
        public string Street { get; set; }

        [XmlElement("Hausnumer")]
        public string HouseNumber { get; set; }

        [XmlElement("Land")]
        public string Country { get; set; }

        [XmlElement("Postleitzahl")]
        public string ZIP { get; set; }

        [XmlElement("Stadt")]
        public string City { get; set; }
    }
}

In unserer Adressklasse fehlen uns aber noch ein paar Angaben wie Name, Vorname, Firmenname.. usw. Dazu werden wir 2 neue Klassen erstellen. Eine Klasse für Firmenadressen (B2B) und Privatadressen (B2C).


using System.Xml.Serialization;

namespace XML_Serialisierung
{
    [XmlRoot("Adresse")]
    public class AddressB2C: Address
    {
        [XmlElement("Vorname")]
        public string Firstname { get; set; }

        [XmlElement("Nachname")]
        public string Lastname { get; set; }
    }
}

Das Attribut [XmlRoot(“”)] wird verwendet um den Namen des Wurzelelements (Rootelement) festzulegen.


using System.Xml.Serialization;

namespace XML_Serialisierung
{
    [XmlRoot("Adresse")]
    public class AddressB2B:Address
    {
        [XmlElement("Firmenname")]
        public string CompanyName { get; set; }

        [XmlElement("Abteilung")]
        public string Division { get; set; }

        [XmlElement("Kontaktperson")]
        public string ContactPerson { get; set; }
    }
}

Klasse mit dem XmlSerializer serialisieren

Das serialisieren der erstellten Adressklassen kann nun mit sehr wenig Code-Zeilen erledigt werden.
Dazu wird zuerst das gewünschte Objekt AddressB2B oder AddressB2C erstellt und dann die Werte zugewiesen. Damit der XmlSerializer den Typ der zu serialsierenden Klasse kennt, muss dieser beim Instanziieren des XmlSerializer mitgegeben werden.


/*********************************************************/
//example 1
/*********************************************************/
/*b2c addresse*/
AddressB2C addressB2C = new AddressB2C();
addressB2C.AddressNumber = 123456789;
addressB2C.Firstname    = "Max";
addressB2C.Lastname     = "Mustermann";
addressB2C.Address1     = "Musterstrasse";
addressB2C.HouseNumber  = "77a";
addressB2C.City         = "Musterhausen";
addressB2C.ZIP          = "1234";
addressB2C.Country      = "In einem Land";

/*Create a XmlSerializer from type AddressB2C*/
XmlSerializer xmls = new XmlSerializer(typeof(AddressB2C));
StreamWriter mwriter = new StreamWriter("b2cAddress.xml");
xmls.Serialize(mwriter, addressB2C);
mwriter.Close();

Als Ergebnis erhalten wir in der Datei “b2cAddress.xml” die gewünschte XML-Struktur.

Nützliche Links:

msdn: xml.serialization
C#: XML-Serialisierung mit dem XmlSerializer Teil 2

pfSense: Erweitern mit Zusatzpaketen (Erweiterungen)

Installieren

pfSense Package Manager
pfSense Package Manager
Die Firewall Distribution pfSense lässt sich sehr einfach mit Zusatzpaketen erweitern. Im “Package Manager” findet man im Register “Available Packages” die Erweiterungen, welche sich mit einem Mausklick installieren lassen. Den “Package Manager” findet man über das Menü “System > Packages”.

Wichtig: Beachten sollte man die Spalte “Status”. Dort wird angegeben für welche Plattform (pfSense Version) das Paket erstellt wurde. Oft funktionieren die älteren Pakete auch auf neueren Versionen, jedoch muss dies nicht so sein.

Deinstallieren

Die installierten Erweiterungen lassen sich auch sehr einfach wieder deinstallieren. Um eine Erweiterung zu deinstallieren, wechselt man in das Register “Installed Packeges”. Sucht die betreffende Zeile und kann mit einem Mausklick auf den oberen Button (“Remove this Package”) das Zusatzpaket entfernen.

pfSense Package Manager - Installed Packages
pfSense Package Manager – Installed Packages

Updaten der Zusatzpakete

Gelegentlich sollte man im “Package Manager” prüfen, ob eine neue Version für ein installiertes Paket vorhanden ist. Ist eine neuere Version vorhanden, wird die Spalte “Package Version” in rot hervorgehoben.

Neue Version eines Paketes vorhanden
Neue Version eines Paketes vorhanden
Die neue Version kann nun mit einem Mausklick auf den Button “pkg” automatisch installiert werden.

Nützliche Links

pfSense Webseite
pfSense – Manually uninstall packages

Buch: Computer-Forensik Hacks

Computer-Forensik Hacks
Computer-Forensik Hacks

Wenn man die Einleitung des Buches gelesen hat, in der man einen kleinen Überblick zur Thematik Computer-Forensik erhält, startet das erste Kapitel mit der Datensicherung. Dabei werden nicht nur die Daten von Speichermedien wie Festplatten oder USB-Sticks berücksichtigt, es werden auch die flüchtigen Daten aus dem RAM-Speicher gesichert. Wie kommt man an diese wertvollen Daten? Dies klingt nach einer sehr schwierigen Aufgabe, ins besonders wenn der Rechner noch passwortgeschützt ist… Mit der Hilfe des Buches “Computer-Forensik Hacks” ist dies beinahe kein Problem mehr. Es werden verschiedene Möglichkeiten aufgezeigt, um an diese Daten zu gelangen. Wie erfährt der interessierte in den Hack’s 4 und 5.

Das Buch “Computer-Forensik Hacks” ist eine Sammlung von Methoden, Tipps und Tricks aus der Computer-Forensik. Das Buch ist in 8 Kapitel unterteilt, in denen praktische Lösungen zu verschiedenen Problemstellungen in der Computer-Forensik, in sogenannten Hacks, Schritt für Schritt erläutert werden.

Mein Fazit

Los geht’s! Dies ist das ideale Buch, bei dem man das Gelesene gleich selber ausprobieren kann. In diesem Buch wird grundsätzlich kostenlose Software verwendet, so kann auch selber experimentiert werden. Egal ob unter Windows oder Linux, es werden beide Betriebssysteme berücksichtigt. Es macht wirklich Spass auf diese Weise spannende und komplexe Themen zu erarbeiten!

Die Webseite zum Buch

Webknight: Calling LoadLibraryEx on ISAPI filter “Webknight.dll” failed

Nach dem Installieren der 64-Bit Version von der “Application Firewall” Webknight, erhält man beim Aufruf von Webseiten die Fehlermeldung “Calling LoadLibraryEx on ISAPI filter “C:\Program Files\AQTRONIX Webknight\Webknight.dll” failed” angezeigt. Eine mögliche Ursache ist, dass die falsche Version von Webknight installiert wurde.

Webknight loading failed

Welche Version von Webknight muss auf einem 64-Bit Windows installiert werden?

Grundsätzliche sollte die 64-Bit Version installiert werden. Beim Betrieb von älteren Webapplikationen, welche noch 32-Bit COM-Komponenten verwenden, muss der IIS 7.x im 32-Bit Modus betrieben werden.

Application Pool Advanced Settings
Application Pool mit aktiviertem 32-Bit Modus

Wird nun die 64-Bit Webknight-Version installiert erhält man die oben beschriebene Fehlermeldung, da der IIS 7.x im 32-Bit Modus ausgeführt wird. Bei dieser Konstellation installiert man die 32-Bit Version von Webknight.

Nützliche Links

Webknight Webseite
Webknight FAQ

Windows: Nützliche Konsolenbefehle

MAC-Adressen der Netzwerkkarten anzeigen


>getmac

Physikal. Adresse   Transportname
=================== ==================
B8-AB-61-A3-24-77   Nicht zutreffend
08-00-22-02-E4-99   Nicht zutreffend
  1. Mit dem Befehl getmac werden die MAC-Adressen der vorhandenen Netzwerkkarten angezeigt.

Eine weitere Möglichkeit die MAC-Adressen der installierten Netzwerkkarten anzuzeigen, ist mit Hilfe des Befehls “ipconfig /all”.

getmac Dokumentation
ipconfig Dokumentation

MAC-Adresse zu einer IP bestimmen


>ping -n 1 192.168.60.25 
Ping wird ausgeführt für 192.168.60.25 mit 32 Bytes Daten:
Antwort von 192.168.60.25: Bytes=32 Zeit<1ms TTL=128

Ping-Statistik für 192.168.60.25:
    Pakete: Gesendet = 1, Empfangen = 1, Verloren = 0
    (0% Verlust),
Ca. Zeitangaben in Millisek.:
    Minimum = 0ms, Maximum = 0ms, Mittelwert = 0ms

>arp -a 192.168.60.25

Schnittstelle: 192.168.60.22 --- 0xf
  Internetadresse       Physische Adresse     Typ
  192.168.60.25          00-04-76-ef-ac-c3     dynamisch
  • 1. Zuerst wird ein ICMP Paket an die IP-Adresse verschickt um die MAC-Adresse herauszufinden.
  • 11. Nun kann mit dem ARP-Befehl die MAC- IP-Zuordnung aus dem ARP-Cache gelesen werden.

ping Dokumentation
arp Dokumentation

Alle Netzwerkverbindungen anzeigen


>netstat -ano

  Proto  Lokale Adresse         Remoteadresse          Status           PID
  TCP    0.0.0.0:135            0.0.0.0:0              ABHÖREN         864
  TCP    0.0.0.0:445            0.0.0.0:0              ABHÖREN         4
  TCP    0.0.0.0:3389           0.0.0.0:0              ABHÖREN         932
  TCP    127.0.0.1:31416        127.0.0.1:49178        HERGESTELLT     4264
  1. Das Kommando “netstat -ano” listet sämtliche Verbindungen eines Computers auf. Der Parameter “o” ist erst ab Windows 2000 vorhanden. Dieser bewirkt, dass zu sämtlichen Verbindungen auch die PID-ID der einzelnen Prozesse angezeigt werden. Der Status “Abhören” (Listen) beschreibt Serverdienste die auf Verbindungen warten.

Mit der Hilfe der PID-ID kann im Task-Manager herausgefunden werden, welcher Prozess eine Verbindung geöffnet hat oder auf Verbindungen wartet.

Windows Task-Manager
Die Verbindung mit der PID-ID 4264, aus dem obigen Beispiel, gehört zum Prozess “boinc.exe”.

netstat Dokumentation

Anzeigen wer eine Verbindung auf die lokale Maschine hat


>net session

Computer            Benutzername     Clienttyp     Öffn. Ruhezeit
------------------------------------------------------------------
\\192.168.60.25     DEMO-MASCHINE$                  0 00:00:02
\\192.168.60.25     demouser                        2 00:00:02

Der Befehl wurde erfolgreich ausgeführt.

net session Dokumentation

Windows herunterfahren

Dieser Befehl ist nur in Windows 2000 mit installiertem “Resource Kit” oder in neueren Windows Versionen vorhanden.


>shutdown /s /t 180
  1. Windows wird in 3 Minuten heruntergefahren. Verwendet man den Parameter “/r” anstelle “/s” wird der Computer neu gestartet.

Mit dem Parameter “shutdown /a” kann das Herunterfahren abgebrochen werden.


>shutdown /i
  1. Startet die grafische Oberfläche um einen Remotecomputer neu zu starten oder herunterzufahren.
Grafisches Oberfläche des shutdown Befehls
Mit der grafisches Oberfläche kann ein Remotecomputer heruntergefahren oder neu gestartet werden.

Dazu noch einen Hinweis aus der Dokumentation:

Damit ein Remotecomputer heruntergefahren oder neu gestartet werden kann, müssen die Firewallausnahmen Remoteverwaltung und Windows-Verwaltungsinstrumentation auf dem Remotecomputer aktiviert sein.

shutdown Dokumentation

DNS client resolver cache löschen und anzeigen


>ipconfig /flushdns
  1. Löscht den DNS client resolver cache.

>ipconfig /displaydns > dns_resolved.txt
  1. Speichert den DNS client resolver cache in die Datei dns_resolved.txt.

ipconfig Dokumentation

Taskliste anzeigen


>tasklist 
  1. Zeigt eine Liste von allen Applikationen und Services sowie deren Prozess ID (PID) an.

tasklist Dokumentation

Einen Prozess beenden

In Windows 2000 (und früher) ist dieser Befehl nicht vorhanden. Für diese Systeme gibt es dieses Kommando als zusätzliches Tool “pskill”.


>taskkill /f /pid 12345
  1. Erzwingt das Beenden des Prozesses mit dem PID 12345.

taskkill Dokumentation

Dateien vergleichen

Um in der Konsole zwei Dateien zu vergleichen, gibt es das Kommando “fc”.


>fc datei.txt datei.txt
  1. Hier werden die Dateien “datei.txt” und “datei2.txt” miteinander verglichen

Als Output erhält man die Zeilen die sich unterscheiden:


Vergleichen der Dateien datei.txt und DATEI2.TXT
***** datei.txt
***** DATEI2.TXT
In der zweiten Datei..
*****

Die Datei “datei2.txt” enthält zusätzlich die Zeile “In der zweiten Datei..”

fc Dokumentation

Nützliche Links

Windows Command-Line Reference A-Z
DNS-Abfragen mit nslookup
nslookup: anzeigen einer Liste mit allen IP’s und Aliasse einer Domain
ARP-Übersetzungstabelle anzeigen und verändern

VBScript: Windows Service remote starten und stoppen

Dank der WMI-Schnittstelle ist es möglich ein Skript zu schreiben, das auf einem remote System einen Service überwacht und bei Bedarf auch neu starten oder stoppen kann.


Dim objWMIService
Dim lServices
Dim strService: strService = "MeinService"
Dim strComputer: strComputer ="."

Set objWMIService = objSWbemLocator.ConnectServer("10.0.200.33", "root\cimv2", _
"Benutzer", _
"Passwort", _
"","")


Set lServices = objWMIService.ExecQuery("Select * from Win32_Service Where Name='" & strService & "'")
For Each objService In lServices
    Select Case objService.State
     case "Stopped" 'start service
          errReturn = objService.StartService()
     case "Paused" 'resume service
          errReturn = objService.ResumeService()
     case "Running" 'nothing todo
          wscript.echo objService.Name & " with ID " & objService.ProcessId & " is already started."
     End Select
Next

Anmerkung zu den Codezeilen:

  • 03 Achtung: bei der Definition des Servicenamen handelt es sich nicht um den Anzeigenamen sondern um den Dienstnamen
  • 06 Remote WMI Service initiieren (auch lokaler möglich)
  • 12 Mit einer WQL Abfrage wird der gesuchte Dienst selektiert um dann mit diesem Arbeiten zu können
  • 14 Status des Dienstes abfragen (Mögliche Werte sind: “Stopped”, “Start Pending”, “Stop Pending”, “Running”, “Continue Pending”, “Pause Pending”, “Paused”, “Unknown”)
Eigenschaften des Dienstes Anwendungsverwaltung
Bei der WQL-Abfrage den Dienstnamen verwenden und nicht den Anzeigenamen

Nützliche Links:

Managing Windows with WMI
WMI Query Language (WQL)
Win32_Service Class Proberties

WMI Scripting Primer: Part 1
WMI Scripting Primer: Part 2
WMI Scripting Primer: Part 3

Qt: Thumbnails von Webseiten erstellen

Thumbnail des monsterli.ch Blog
Thumbnail das mit Hilfe von QWebpage und QPainter erstellt wurde

Das Qt Framework bietet mit dem Modul QtWebKit eine vollständige “Browser-Engine”, welche das Anzeigen und Bearbeiten von Webseiten ermöglicht. Dieses Modul ermöglicht auf einfache Weise Thumbnails von Webseiten zu erstellen. In der Dokumentation zu der Klasse QWebPage befindet sich auch eine Beispielklasse zum Erstellen von Thumbnails ohne Widgets zu verwenden. Muss also ein “Command Line Tool” erstellt werden, ist das der ideale Startpunkt.

Thumbnailer Beispielklasse

Die Header-Datei der Thumbnailer-Klasse:


#ifndef THUMBNAILER_H
#define THUMBNAILER_H
#include 
#include 
#include 

class Thumbnailer : public QObject
 {
     Q_OBJECT

 public:
     Thumbnailer(const QUrl &url);

 signals:
     void finished();

 private slots:
     void render();

 private:
     QWebPage page;

 };

#endif // THUMBNAILER_H

Die Thumbnailer-Klasse:


#include "thumbnailer.h"

Thumbnailer::Thumbnailer(const QUrl &url)
{
    page.mainFrame()->load(url);
    connect(&page, SIGNAL(loadFinished(bool)),
        this, SLOT(render()));
}

void Thumbnailer::render()
{
    page.setViewportSize(page.mainFrame()->contentsSize());
    QImage image(page.viewportSize(), QImage::Format_ARGB32);
    QPainter painter(&image);

    page.mainFrame()->render(&painter);
    painter.end();

    QImage thumbnail = image.scaled(400, 300);
    thumbnail.save("thumbnail.png");

    emit finished();
}

Die main-Klasse:


#include "thumbnailer.h"
#include 

int main(int argc, char *argv[])
{
    QApplication a( argc, argv);
    Thumbnailer myThumb(QUrl("https://www.google.com"));
    QObject::connect(&myThumb, SIGNAL(finished()), QApplication::instance(), SLOT(quit()));

    return a.exec();
}

 

Verwenden von Browser Plugins wie Adobe Flash

Verwendung von Plugins aktiviert
Verwendung von Plugins aktiviert
Verwendung von Plugins deaktiviert
Verwendung von Plugins deaktiviert

Damit auch die Flash-Elemente einer Webseite auf dem Thumbnail dargestellt werden, muss das Flash-Plugin bereits auf dem System installiert sein und das QWebSetting “PluginsEnabled” aktiviert werden:


page.settings()->setAttribute(QWebSettings::PluginsEnabled, true);

 

Nützliche Links

QT Beispiel Projekt
WebScreenie is small qt command-line utility to create snapshot of webpages.
QT-Code websnap

Linux: Nützliche Konsolenbefehle

DHCP-Lease erneuern


>sudo dhclient -r
>sudo dhclient
  1. Gibt den aktuellen DHCP-Lease frei
  2. Holt eine neue IP-Adresse

man dhclient

Anzeigen der aktuellen IP-Adresse


>ifconfig
  1. Anzeigen aller “network interfaces” und deren IP-Adressen

man ifconfig

Anzeigen und bearbeiten der Routingtabelle

Routingtabelle: statische Routen definieren unter: Windows, Debian Linux und Esxi-Server
man route

Anzeigen der Festplattenbelegung


>df -h
Filesystem     Size    Used   Avail Capacity  Mounted on
/dev/sda1        16G    5.0G   11G   33% /
udev            2.0G    4.0K  2.0G    1% /dev
tmpfs           807M    764K  806M    1% /run
  1. Festplattenbelegung “einfach lesbar” (K, M, G) anzeigen

man df

Grösse eines Ordners anzeigen


>du -h -s lib/
388M    lib/
  1. Summierte Grösse des Unterverzeichnisses lib/ anzeigen

man du

Dateien löschen die älter als x Tage sind


>find /pfad/zu/den/dateien* -type f -mtime +7 -delete
  1. Argument: Vollständiger Pfad mit den Dateien
  2. Argument: Nur Dateien berücksichtigen (Keine Ordner oder Links)
  3. Argument: Findet alle Dateien die älter als 7 Tage sind
  4. Argument: Lösche alle im Suchresultat gefundenen Dateien

Alternative für nicht GNU Unixes:


>find /pfad/zu/den/dateien* -mtime +7 -exec rm {} \;
  1. Argument: Vollständiger Pfad mit den Dateien
  2. Argument: Findet alle Dateien die älter als 7 Tage sind
  3. Argument: Lösche alle im Suchresultat gefundenen Dateien

Delete Files Older Than x Days on Linux
man find

Prozesse aller Benutzer durchsuchen


>ps aux | grep konsole
  1. Argument: Alle laufenden Prozesse aller Systembenutzer anzeigen
  2. Argument: Filtern: alle Prozesse mit dem Namen Konsole anzeigen

Ausgabe:


usr  1755  0.0  0.7 119892 29364 ?      Sl   00:41   0:04 /usr/bin/konsole
usr  6515  0.0  0.0   4384   836 pts/1  S+   02:10   0:00 grep --color=auto konsole

Alternative:


>pgrep -l konsole

man ps
man grep
man pgrep

Änderungen der Datei syslog in Echtzeit anzeigen


>tail -f /var/log/syslog
  1. Neue Einträge der Syslogdatei in der Konsole ausgeben

man tail

Nützliche Links

Fosswire Linux Reference Card
One page Linux Manual
Auflistung mit verschiedenen Linux Cheat Sheets

Windows 7: Windows Kontextmenü bringt den Explorer zum Absturz

Problembeschreibung

Windows Explorer Crash
Windows Explorer Absturz
Nach dem Installieren, Deinstallieren oder Updaten einer Applikation, wird das “Windows Kontextmenü” nicht mehr angezeigt. Die mehrmaligen Versuche, mit der rechten Maustaste das Kontextmenü zu öffnen, scheitern und bringen den Explorer zum Absturz. Obwohl Windows den Explorer neu startet, kann das Kontextmenü immer noch nicht angezeigt werden.

Mögliche Ursache

In der Registry ist nach dem In-, Deinstallieren oder Updaten ein falscher Kontextmenüeintrag vorhanden. Dieser Eintrag zeigt auf eine nicht mehr vorhandene oder fehlerhafte Datei. Der Explorer wird versuchen diese fehlerhafte Verknüpfung zu laden und stürzt ab.

Mögliche Lösung

In der Registry müssen die fehlerhaften Kontextmenüeinträge entfernt werden, damit diese nicht mehr geladen werden. Die meisten Einträge sind unter folgenden Registry-Pfade zu finden:


HKEY_CLASSES_ROOT\*\shell
HKEY_CLASSES_ROOT\*\shellex\ContextMenuHandlers
HKEY_CLASSES_ROOT\AllFileSystemObjects\ShellEx

Um nicht direkt in der Registry arbeiten zu müssen, gibt es ein gutes Tool von Sysinternals. Das Tool “Autoruns” ermöglicht das Aktivieren und Deaktivieren von Registry-Einträgen mit einem einzelnen Mausklick. Fehlerhafte Einträge werden hervorgehoben und so sind falsche Einträge schnell gefunden. Ist man sich nicht sicher welcher Eintrag den Absturz verursacht, so können diese einzeln deaktiviert werden, bevor man den Verursacher endgültig entfernt.

Autoruns: deaktivieren eines Kontextmenüeintrages
Hier in diesem Beispiel wurde der Kontextmenüeintrag der Sonic Software Roxio deaktiviert. Nach dem Deaktivieren wurde das Menü wieder erfolgreich angezeigt.

Nützliche Links

Sysinternals Autoruns for Windows v11.22
How to Clean Up Your Messy Windows Context Menu

pfSense: Zugriff auf das ADSL-Modem (im Bridge Mode) über die pfSense Firewall

Einleitung
Der Zugriff auf das Webinterface des ADSL-Modems kann bei der Fehlersuche sehr hilfreich sein. Wird die PPPoE Verbindung durch das Modem erstellt und die Firewall erhält an ihrem WAN-Interface eine IP aus dem gleichen IP-Bereich wie das Modem, so kann die Weboberfläche ganz einfach mit der zugeteilten IP-Adresse erreicht werden.

ADSL-Modem - pfSense
Das ADSL-Modem und die pfSense Firewall sind im gleichen IP-Bereich
Diese Konfiguration hat den Nachteil des doppel NAT. Das heisst: das Modem und die Firewall müssen sich die IP-Verknüpfung der ein- und ausgehenden Verbindungen merken. Um diesen zusätzlichen Aufwand zu verringern, kann das Modem im Bridge Mode betrieben werden und die PPPoE-Einwahl wird an die pfSense Firewall deligiert.

Das ADSL-Modem im Bridge Mode und die PPPoE-Einwahl wird durch die pfSense Firewall erledigt.
Wird nun versucht die Weboberfläche des Modems zu erreichen, wird eine Fehlermeldung erscheinen, dass diese Seite nicht erreichbar ist.

pfSense und Modem konfigurieren

Diese Anleitung gilt nur für die pfSense Firewall ab Version 2.x

  1. Dem Modem eine fixe IP zuweisen
  2. Neues Interface auf der Firewall erstellen
  3. Outbound NAT Regel erstellen

Konfigurieren des Modems

Wichtig: Bei der Wahl des IP-Bereiches für das Modem, darf dieser Bereich in keinem Interface auf der Firewall bereits verwendet werden. Hier im Beispiel wurde der Bereich 192.168.100.0/30 gewählt. Somit sind gerade 2 Hosts in diesem IP-Bereich möglich.

  • IP Modem : 192.168.100.1, Subnetmaske: 255.255.255.252
  • IP pfSense: 192.168.100.2, Subnetmaske: 255.255.255.252

Wie das Modem konfiguriert wird, kann man in der Anleitung zum jeweiligen Modell nachlesen.

IP-Einstellungen im Modem
IP-Einstellungen bei einem D-LINK DSL-320B Modem

Erstellen eines zusätzlichen Interfaces

Dazu wird unter “Interfaces-> (assign)” ein neues Interface hinzugefügt. Dieses Interface erhält als IP: 192.168.100.2 und als Subnetmask 255.255.255.252. Als Netzwerkkarte wird diejenige zugewissen an der das ADSL-Modem angeschlossen wurde. In diesem Fall verwendet das WAN-Interface (PPPoE1) die Netzwerkkarte re0.

pfSense Interfaces
Interface-Auflistung mit dem neu erstellten ADSLModem Interface

Outbound NAT

Zum Schluss muss nur noch das “Outbound NAT” konfiguriert werden. Dieses findet man unter “Firewall-> NAT-> Outbound”.

Folgende Werte müssen eingegeben werden:

  • Interface: Das oben neu erstellte Interface
  • Protocol: any (zum Einschränken gewünschtes Protokoll wählen)
  • Source: any (zum Einschränken gewünschtes Subnet wählen)
  • Destination: 192.168.100.0/30
  • Translation: Interface address
pfsense outbound nat
Die neu erstellte "Outbound NAT" Regel

Nach diesem Schritt ist das ADSL-Modem / die Weboberfläche, über die pfSense Firewall, erreichbar.

Nützliche Links

pfSense 1.2.x – Accessing modem from inside firewall
Ein nützliches Web-Tool um IP-Bereiche zu berechnen