Wir haben Ihnen bereits gezeigt, wie Sie Ihren Heimrouter mit der alternativen Firmware DD-WRT für eine deutlich verbesserte Leistung modifizieren können, und heute zeigen wir Ihnen, wie Sie mit dem DD-WRT Mod-Kit noch weiter gehen können.
Wenn Sie es noch nicht getan haben, lesen Sie die beiden vorherigen Artikel der Serie:
Vorausgesetzt, Sie sind mit diesen Themen vertraut, lesen Sie weiter. Denken Sie daran, dass diese Anleitung etwas technischer ist und Anfänger beim Modifizieren ihres Routers vorsichtig sein sollten.
Überblick
In dieser Anleitung wird Schritt für Schritt erklärt, wie Sie Ihre eigene DD-WRT-Firmware mit Modifikationen und Ergänzungen mithilfe der „Firmware-Änderungskit“.
Das Firmware-Modifikations-Kit ermöglicht es, Änderungen an der Firmware vorzunehmen, ohne sie aus der Quelle kompilieren zu müssen. Änderungen auf diese Weise mit Hilfe der mitgelieferten Skripte werden zum einfachen Herunterladen, Ersetzen und Löschen einiger Dateien.
Der wichtigste Grund für die Verwendung dieser Methode ist, dass DD-WRT in letzter Zeit die Openwrt IPKG-Pakete haben sich zu Routern mit Festplatten (über USB) verlagert, was das Mod-Kit zur einzigen konsequent funktionierenden Möglichkeit macht, die IPKG-Pakete erfolgreich zu installieren, wenn eine HD nicht verfügbar ist. Darüber hinaus hat diese Methode den zusätzlichen Vorteil, dass Sie bei der Installation von Paketen von der JFFS-Abhängigkeit befreit werden, was für Router mit nur 4 MB Flash ein echtes Problem darstellt.
Bild von publicenergy
Ziele
Die Anweisungen für dieses Verfahren sind detailliert auf Wiki von DD-WRT und auf dem Entwicklerseite, möchten wir diesen Leitfaden zu einem Kopier- und Einfügeverfahren machen, mit dem jeder die folgenden Ziele erreichen kann:
- Installieren Sie das Knockd-Paket und seine Abhängigkeiten.
- Installieren Sie das ssmtp-Paket mit NVRAM-basierten generierten Konfigurationen.
- Optional mit Unterstützung für TLS-smtp (auch bekannt als Gmail-Unterstützung).
Sobald Sie dieses Verfahren befolgt haben, sollte es relativ einfach sein, es für andere Paketinstallationen anzupassen.
Warnung: Gehen Sie leicht vor … denken Sie daran, dass die falsche Verwendung des Modifikationskits Sie mit einem Router zurücklassen kann, der benötigt wird entmauern (wie wiederum in a nutzloser Ziegelstein). Wenn Sie jedoch ein echter Geek sind, abonnieren Sie wahrscheinlich die Ideologie, dass wer ein Ding zerstören kann, kontrolliert ein Ding, und das machen nur echte Geeks
Voraussetzungen
- Mit diesem Verfahren können Ziegel Ihr Router, wie in Machen Sie Ihren Router unbrauchbar, Wir übernehmen keine Verantwortung für Schäden, die direkt oder auf andere Weise durch die Verwendung der nachstehenden Verfahren verursacht werden können.
- Dieses Verfahren wurde auf Debian-basierten Systemen (Lenny, Squeeze und Mint) durchgeführt und die folgenden Anweisungen gehen davon aus, dass Sie auch eines verwenden.
- Dieses Verfahren wird nur Personen empfohlen, die Erfahrung mit dem Flashen ihres Routers mit DD-WRT haben, mit allen Voraussetzungen, Vorbehalten und Einschränkungen, die für ihr Hardware-Setup gelten. ein guter Ausgangspunkt wäre unsere Anleitung „Verwandeln Sie Ihren Heimrouter in einen superstarken Router mit DD-WRT-Anleitung“.
- Ihr Router muss mindestens die „Mini“-Version von DD-WRT unterstützen.
- Dieses Verfahren wurde auf Linksys WRT54GS/L Routern erstellt und getestet. Wenn Sie Router von anderen Anbietern verwenden, kann Ihre Laufleistung sehr hoch sein.
Aufstellen
Erforderliche Pakete installieren
Das Firmware-Modifikationskit weist einige Abhängigkeiten auf, damit es kompiliert und funktioniert. Um sie alle auf einmal zu installieren/aktualisieren, geben Sie diesen Befehl in einem Terminal aus:
sudo aptitude install gcc g++ binutils patch bzip2 flex bison make gettext unzip zlib1g-dev libc6 subversion
Lade das Mod-Kit herunter
Erstellen Sie einen Unterordner und holen Sie sich das Kit vom offiziellen SVN:
mkdir firmware_mod_kit
cd firmware_mod_kit
svn checkout http://firmware-mod-kit.googlecode.com/svn/trunk/ firmware-mod-kit-read-only
cd firmware-mod-kit-read-only/trunk/
Laden Sie eine Firmware herunter, um daran zu arbeiten
Als erstes sollten Sie sich überlegen, welche Version Sie verwenden möchten.
Als Faustregel gilt: Im Zweifelsfall „mini“ verwenden. Denn solange Ihr Router mindestens die „Mini“-Version unterstützt, stehen Ihnen mit ihr alle am häufigsten verwendeten Funktionen ohne Bloatware zur Verfügung. so bleibt in den meisten Fällen sowohl Platz für die Prozeduren als auch etwas JFFS-Platz für andere Verwendungen.
Sobald Sie sich für eine Version entschieden haben, wird empfohlen, die neueste Version der verfügbaren Firmware zu verwenden, da diese im Vergleich zu ihren „stabilen“ Gegenstücken tendenziell viele Fehlerbehebungen enthält.
Zum Zeitpunkt des Schreibens dieses Artikels war die neueste Version „03-17-11-r16454“ und diese Revision wird in den folgenden Befehlen verwendet.
wget http://www.dd-wrt.com/dd-wrtv2/downloads/others/eko/BrainSlayer-V24-preSP2/2011/03-17-11-r16454/broadcom/dd-wrt.v24_mini_generic.bin
Um den Überblick über die von uns verwendete Version zu erleichtern, benennen Sie die heruntergeladene Datei so um, dass sie ihre Versionsnummer darstellt:
mv dd-wrt.v24_mini_generic.bin dd-wrt.v24_mini_generic-03-17-11-r16454.bin
Dies ist natürlich optional, aber die folgenden Befehle setzen voraus, dass Sie die Datei umbenannt haben.
Entpacken der Firmware
Um Dateien innerhalb der Firmware ändern zu können, müssen wir deren Inhalt in ein temporäres Verzeichnis extrahieren.
Die Syntax dieses Befehls lautet:
./extract_firmware.sh FIRMWARE_IMAGE WORKING_DIRECTORY
In unserem Fall würde dies bedeuten:
./extract_firmware.sh dd-wrt.v24_mini_generic-03-17-11-r16454.bin ./working_dir_mini1
Hinweis: Wenn Sie diesen Befehl zum ersten Mal ausführen, werden die Mod-Kit-Tools auf Ihrem System erstellt. das passiert nur einmal und kann eine Weile dauern… also sei geduldig…
Pakete installieren
Nachdem die Firmware extrahiert wurde, können wir die Pakete darauf installieren.
Im Allgemeinen besteht das Verfahren darin, das Paket und seine Abhängigkeiten in Form einer ipk-Datei von der herunterzuladen openWRT-Repository. Installieren Sie sie nach dem Herunterladen mit dem bereitgestellten Skript in die extrahierte Firmware.
Das angeschlagene Paket
Detaillierte Anweisungen zum Konfigurieren und Verwenden von Knockd werden in einem zukünftigen Artikel beschrieben. Sie können diesen Schritt also vorerst überspringen oder als Vorbereitung für die Zukunft tun, da Knockd sowieso nicht viel Platz benötigt.
Knockd ist ein Daemon, der Kommunikationsereignisse auf der Verbindungsschicht auf Sequenzen abhört und dann darauf reagiert.
Das bedeutet, dass Sie das Gerät, auf dem der Daemon ausgeführt wird, nicht einmal auf die Ports „hören“ lassen können (ein Port-Scan wird sie nicht als offen sehen) und es trotzdem tun können, was Sie brauchen, von einem einzigen Befehl aus alle Aufstieg zu einem vollständigen Skript. Mit dieser Technik Sie können den Server dazu veranlassen, jede Art von Operation auszuführen, die Sie aus der Ferne (über das Internet) benötigen, ohne Ihr Heimnetzwerk freizugeben.
Knockd hat nur eine aufgeführte Abhängigkeit, also laden Sie das Paket und seine Abhängigkeit herunter, indem Sie Folgendes ausgeben:
wget http://downloads.openwrt.org/backports/rc5/knockd_0.5-1_mipsel.ipk
wget http://downloads.openwrt.org/whiterussian/packages/libpcap_0.9.4-1_mipsel.ipk
Installieren Sie den „knock daemon“ (knockd) ipk in die Firmware:
./ipkg_install.sh knockd_0.5-1_mipsel.ipk ./working_dir_mini1/
Installieren Sie das „packet capture“ (libpcap) ipk in die Firmware:
./ipkg_install.sh libpcap_0.9.4-1_mipsel.ipk ./working_dir_mini1/
Da „knockd“ mit einer alternativen Konfigurationsdatei aufgerufen werden kann (wie in einem zukünftigen Artikel erklärt wird), müssen Sie keine weiteren Schritte ausführen und Sie können zum Abschnitt zum Erstellen der Firmware springen, wenn Sie alles installieren möchten.
Das SSMTP-Paket
Das SSMTP-Paket ermöglicht Ihrem Router das Senden von E-Mail-Nachrichten, wie wir in unserem So richten Sie E-Mail-Benachrichtigungen unter Linux mit Gmail oder SMTP für Server ein. Wir haben Ihnen damals versprochen, dass wir Ihnen zeigen, wie man das für DD-WRT konfiguriert, und wir liefern jetzt.
Dies ist vor allem dann nützlich, wenn Sie Skripte auf dem Router erstellen möchten, zu deren Betrieb Sie per E-Mail Feedback erhalten möchten.
Das Setup dieses Pakets ist aufgrund der Beschränkungen eines eingebetteten Systems etwas komplexer als auf normalen Linux-Systemen, also atmen Sie tief durch… fertig?…. Lass uns gehen… 🙂
Laden Sie das Paket herunter:
wget http://downloads.openwrt.org/backports/rc5/ssmtp_2.61-1_mipsel.ipk
Installieren Sie die IPK „ssmtp“ in der Firmware:
./ipkg_install.sh ssmtp_2.61-1_mipsel.ipk ./working_dir_mini1/
TLS-Unterstützung (optional)
SSMTP listet keine anderen Pakete als Abhängigkeiten auf. Wenn Sie jedoch ein SMTP-Gateway verwenden möchten, das eine TLS-Authentifizierung erfordert (zB ), müssen Sie auch das openSSL-Paket installieren.
: Dies ist ein RIESIGES in Form von erheblich reduziertem Platz auf dem Router für späteres JFFS. Das heißt, das openSSL-Paket benötigt ungefähr 500.000 Speicherplatz von Ihren insgesamt 4 MB (für einen normalen nicht «Mega» unterstützenden Router), addiert dazu den JFFS-Overhead und Sie werden feststellen, dass Sie nur noch wenige Blöcke von . übrig haben freier JFFS-Speicherplatz (ca. 60 KB auf WRT54GL).
Da es immer noch keine TLS-erfordernden SMTP-Server gibt (normalerweise Ihre ISPs), schlage ich vor, dass Sie sich eine Minute Zeit nehmen, um darüber nachzudenken, ob Sie das TLS-erfordernde Gateway wirklich verwenden müssen.
Wenn Sie sich trotz des Nachteils für die Aktivierung der TLS-Unterstützung entschieden haben, laden Sie das openSSL-Paket herunter:
wget http://downloads.openwrt.org/whiterussian/packages/libopenssl_0.9.8d-1_mipsel.ipk
Installieren Sie das „openSSL“ (libopenssl) ipk in die Firmware:
./ipkg_install.sh libopenssl_0.9.8d-1_mipsel.ipk ./working_dir_mini1/
Konfigurationen
Beim SSMTP-Paket gibt es eine Einschränkung, dass es nicht mit einer alternativen Konfigurationsdatei aufgerufen werden kann.
Da die Firmware auf dem Router schreibgeschützt ist, bedeutet dies, dass wir die Konfiguration im Auslieferungszustand nur fest in die Firmware codieren können.
Aber was ist, wenn wir nicht gehen wollen durch alle Schritte zur Firmware-Änderung, nur um die E-Mail-Einstellungen zu ändern? (zum Beispiel eine Passwortänderung).
Zu diesem Zweck kamen sowohl Jeremy (der Entwickler des Firmware-Mod-Kits) als auch ich zu dem Schluss (unabhängig davon, wenn ich bescheiden hinzufügen darf), dass der einzig vernünftige Weg, dies zu tun, darin besteht:
- Machen Sie den Speicherort der Konfigurationsdateien, auf den das ssmtp-Paket auf den schreibgeschützten Speicherort unter etc verweist, auf das tmp-Verzeichnis, das zur Laufzeit beschreibbar ist.
- Erstellen Sie ein Skript, das die Konfigurationen basierend auf NVRAM-Variablen beim Start dynamisch generiert.
Um dies zu erreichen, sind einige zusätzliche Schritte erforderlich…
Verknüpfen Sie das ssmtp-Konfigurationsverzeichnis
Wie oben erklärt, müssen wir den Standort auf dem Router festlegen und auf das Verzeichnis verweisen, da es der einzige beschreibbare Ort ist, den wir zur Laufzeit auf dem Router haben. Löschen Sie dazu das ssmtp-Verzeichnis, das vom ipk-Installationsprogramm erstellt wurde:
rm -rf ./working_dir_mini1/rootfs/etc/ssmtp/
Erstellen Sie einen neuen symbolischen Link, der auf /etc/ssmtp auf das Root-Dateisystem des Routers verweist, um auf /tmp/etc/ssmtp als absoluten Pfad zu verweisen:
ln -s /tmp/etc/ssmtp/ ./working_dir_mini1/rootfs/etc/ssmtp
: Auch wenn dies im Moment unlogisch aussieht, da wir das Konfigurationsverzeichnis des Pakets auf einen Ort außerhalb des Arbeitsverzeichnisses des Firmware-Modifikationskits verweisen, versichere ich Ihnen, dass dies aus Sicht des Routers zur Laufzeit völlig in Ordnung ist.
Ein Init-Skript
Es ist zwar durchaus möglich, dieses Skript nicht in die Firmware einzuschleusen und später als Startskript auszuführen, aber ich halte es für angebracht, es hier zu platzieren, wenn auch nur als Beispiel für die zukünftige Verwendung.
Ursprünglich erstellte Jeremy das Skript, das auf die Anfrage von jemandem zugeschnitten war, später habe ich es angepasst und erweitert, um es mit DD-WRT und Syslog-Berichten kompatibel zu machen.
Erstellen Sie das neue Init-(Start-)Skript:
vi ./working_dir_mini1/rootfs/etc/init.d/S80ssmtp
Hinweis: Sie können einen anderen Editor verwenden, ich verwende vi, weil es mit dem übereinstimmt, was auf dem Router verfügbar ist …
Machen Sie dies zu ihrem Inhalt:
#!/bin/sh
#
# title: ssmtp_nvram.sh
# author: Jeremy Collake and Aviad Raviv
# site: http://www.bitsum.com, http://howtogeek.com
#
# script to build config file from nvram vars.
# will work for any config file that uses
# var=value type pairs.
#
# uses prefixes for nvram variables.
#
# i.e.
# ssmtp_hostname=something
# translates to ssmtp.conf
# hostname=something
#
logger_func()
{
logger -s -p local0.notice -t SSMTP_init $1
}
logger_func "###########Started the SSMTP init run###########"
logger_func "Creating the etc directory in /tmp"
[ ! -d /etc/ssmtp/ ] && mkdir -p /tmp/etc/ssmtp/
CONFIG_FILE=/etc/ssmtp/ssmtp.conf
NVRAM_PREFIX=ssmtp_
PACKAGE_NAME=`echo $NVRAM_PREFIX | sed 's/_/ /'`
logger_func "Generating $CONFIG_FILE for package $PACKAGE_NAME"
#echo $0: generating $CONFIG_FILE for package $PACKAGE_NAME
echo "#!/bin/sh" > $CONFIG_FILE
echo "https://www.howtogeek.com/56922/unleash-even-more-power-from-your-home-router-with-dd-wrt-mod-kit/#" >> $CONFIG_FILE
echo "# auto generated based on nvram by $0" >> $CONFIG_FILE
echo "https://www.howtogeek.com/56922/unleash-even-more-power-from-your-home-router-with-dd-wrt-mod-kit/#" >> $CONFIG_FILE
if [ -z "`nvram show | grep ssmtp`" ]
then
logger_func "It appears that you have not set the NVRAM variables required to generate the conf file"
logger_func "**Consider** using these commands in you startup script:"
logger_func "nvram set ssmtp_root=username@gmail.com"
logger_func "nvram set ssmtp_mailhub=smtp.gmail.com:587"
logger_func "nvram set ssmtp_hostname=username@gmail.com"
logger_func "nvram set ssmtp_UseSTARTTLS=YES"
logger_func "nvram set ssmtp_AuthUser=username"
logger_func "nvram set ssmtp_AuthPass=password"
logger_func "nvram set ssmtp_FromLineOverride=YES"
logger_func "create the NVRAM variables and re-run the init script or reboot for the settings to take affect."
exit 0
fi
###########################################################
#
# main loop
#
SED_COMMAND="s/$NVRAM_PREFIX/ /"
CONFIG_VARS=`nvram show | grep $NVRAM_PREFIX | sed "$SED_COMMAND"`
for i in $CONFIG_VARS; do
echo $i >> $CONFIG_FILE
done
###########################################################
#
# sanity check
#
if [ ! -f "$CONFIG_FILE" ]; then
# echo "$0: ERROR - could not create $CONFIG_FILE. Perhaps there is no symink /etc/XXXX -> /tmp/etc/XXXX ?"
logger_func "ERROR - could not create $CONFIG_FILE. Perhaps there is no symink /etc/XXXX -> /tmp/etc/XXXX ?"
fi
logger_func "###########Finished the SSMTP init run###########"
Mach es ausführbar:
chmod +x ./working_dir_mini1/rootfs/etc/init.d/S80ssmtp
Beachten Sie die wartenden NVRAM-Variablen im Skript, es liegt in unserer Verantwortung, ihnen etwas zu geben, mit dem wir arbeiten können, nachdem wir unsere modifizierte Firmware auf dem Router installiert haben.
Erstellen Sie die modifizierte Firmware
Nun, da alles an seinem Platz ist, ist es an der Zeit, die modifizierte Firmware in eine komprimierte Binärdatei zu packen, die wir auf den Router flashen können.
Die Syntax des Skripts „build.sh“ lautet:
./build_firmware.sh OUTPUT_DIR WORKING_DIRECTORY
Dazu verwenden wir das mitgelieferte Skript, also geben Sie Folgendes aus:
./build_firmware.sh output_mini1 ./working_dir_mini1/
Sobald der „Build“-Vorgang abgeschlossen ist, warten im „output“-Verzeichnis mehrere Firmware-Images darauf, verwendet zu werden.
Sie können nun die Datei mit dem Namen „custom_image_00001-generic.bin“ auf Ihren Router flashen, wie Sie es normalerweise mit einer DD-WRT-Firmware tun würden.
: Vergessen Sie nicht, vor, während und direkt nach dem Firmware-Flash die „Werkseinstellungen“ wiederherzustellen.
Schritte nach dem Flashen
Da wir das SSMTP-Paket dazu gebracht haben, nach NVRAM-Variablen zu suchen, um die ssmtp-Konfigurationsdatei zu generieren, müssen wir es jetzt mit den fehlenden Informationen versorgen.
Dies erreichen wir über die Web-GUI-Funktion „Befehle ausführen“.
Gehen Sie zur Web-GUI -> „Verwaltung“ -> „Befehle“ -> fügen Sie in das Textfeld Folgendes ein:
nvram set ssmtp_root=your-email@gmail.com
nvram set ssmtp_mailhub=smtp.gmail.com:587
nvram set ssmtp_hostname=you-email@gmail.com
nvram set ssmtp_UseSTARTTLS=YES
nvram set ssmtp_AuthUser=your-gmail-user-name(without the @gmail.com)
nvram set ssmtp_AuthPass=you-gmail-password
nvram set ssmtp_FromLineOverride=YES
nvram commit
Ersetzen Sie den Text nach dem Gleichheitszeichen (=) durch Ihre tatsächlichen Informationen und klicken Sie dann auf «Befehle ausführen».
: Wenn Sie einen normalen, nicht TLS verwendenden SMTP-Server verwenden, ist der zu verwendende Port 25 statt 587.
Da die SSMTP-Informationen nun einsatzbereit sind, müssen Sie das Init-Skript aufrufen. Sie können also entweder den Router neu starten oder dies in das Textfeld «Befehle» einfügen:
/etc/init.d/S80ssmtp
Klicken Sie dann erneut auf «Befehle ausführen».
Die Ausgabe dieses Befehls sollte wie folgt aussehen:
Testen Sie, ob Sie E-Mails senden können
Fügen Sie hierzu erneut in das Textfeld «Befehle» den folgenden Befehl mit Ihrer E-Mail-Adresse ein:
echo "testing crucible emailing 123 qwe" | ssmtp -vvv your@email.com
Klicken Sie dann erneut auf «Befehle ausführen».
Da wir die Option -vvv für zusätzliche Ausführlichkeit verwendet haben, sollte die Ausgabe dieses Befehls so aussehen:
Wenn alles gut gelaufen ist, sollten Sie innerhalb von Sekunden die Test-E-Mail erhalten.
Wir hoffen, dass Sie diese Informationen nutzen können, um die Grenzen Ihres Heimrouters noch weiter zu verschieben, als Sie es für möglich gehalten haben und Sie jetzt Kontrolle über Ihren Heimrouter und DD-WRT…
Linux verlängert das Leben, Linux erweitert das Bewusstsein… Linux ist für Paketreisen von entscheidender Bedeutung