Samstag, 22. Juni 2019

Sheevaplug: Debian 10 Buster mit F2FS rootfs

Vorwort

Seit knapp 10 Jahren verrichten die Sheevaplugs bei mir nun als Homeserver ihren Dienst und sind dank der guten Unterstützung von Debian nach wie vor so ziemlich auf der Höhe. (Zumindest für meinen Einsatz) Leider ist der NAND-Speicher mit seinen 512MB aber mittlerweile doch recht wenig und da es in der Zwischenzeit ja alternative Dateisysteme gibt, die keine SD-Karten mehr fressen (sollten), wage ich mich ans Abenteuer, das rootfs komplett auf eine SD-Karte auszulagern und den NAND nicht mehr zu benutzen.
Eigentlich hört sich das ganze sehr banal an, es gibt aber die eine oder andere Falle.
Ich habe auf jeden Fall ziemlich geübt mit Installer-Images, U-Boot Versionen, Bootvariablen etc. Ich bin jetzt aber auch nicht der Profi Embedded-Entwickler.

Key Facts

  • Meine aktuelle U-Boot Version: 2016.11 von hier (offizielle von Debian 9 Stretch) - die aktuelle hat bei mir nicht richtig funktioniert - vermutlich reicht der Bereich von 0x0 bis 0x80000 nicht ganz aus und es fehlen ein paar Bits - ich musste den Sheeva anschliessend mit OpenOCD unbricken, weil ich keine ältere U-Boot Version mehr geladen bekam - weder per TFTP, USB noch SD-Karte
  • Installer: Der Installer von Buster (von hier)
  • F2FS: F2FS wird vom Debian-Installer (noch) nicht unterstützt. Von U-Boot übrigens auch nicht. Ist aber nicht weiter tragisch, man braucht einfach eine Boot-Partition mit z.B. ext2. Die Root-Partition formatiert man im Installer ebenfalls mit z.B. ext2 und ändert sie nach der Installation in F2FS (dreckig: SD-Karte in PC, Files runterkopieren, Partition mit F2FS neu formatieren, Files zurückspielen, SD-Karte zurück). Hat aber ein paar Hürden (siehe unten).

Anleitung

Aber jetzt schön Schritt für Schritt:
  1. Debian Buster ("Stable") auf SD-Karte oder USB-Stick installieren. Das geht am besten mit der altbewährten Anleitung von Martin Michelmayr, zu finden hier 
  2. Debian Buster booten und als root einloggen
  3. F2FS-Tools installieren (apt-get install f2fs-tools)
  4. Im File /etc/initramfs-tools/modules folgende Einträge hinzufügen: f2fs crc32 crc32c (jeweils auf eine neue Zeile)
  5. fstab vom UUID auf Devicenamen ändern (im File /etc/fstab UUID=... durch /dev/mmcblk0p2 ersetzen, zusätzlich beim rootfs [Mountpoint /] der Dateisystemtyp von z.B. ext2 auf f2fs und die Optionen von *noatime oder was weiss ich* auf defaults)
  6. Folgenden Befehl ausführen: update-initramfs -u
  7. Debian herunterfahren
  8. SD-Karte oder Stick in den PC stecken
  9. Root-Partition auf den PC kopieren (cp -ar)
  10. Root-Partition mit F2FS formatieren (mkfs.f2fs /dev/mmcblk0p2 oder /dev/sdb2 tbc)
  11. Root-Partition vom PC auf die SD-Karte zurückkopieren
  12. SD-Karte oder Stick wieder in den Sheeva stecken, nun sollte Buster mit F2FS als Rootfs booten
  13. fertig

 Bemerkungen

  • USB-Stick hat bei mir nicht funktioniert. Entweder sind meine USB-Sticks nicht geeignet, mein USB-Controller im Sheeva hat einen Schuss oder es ist ein Firmware-Fehler vom U-Boot - habe ich nicht näher analysiert
  • mit Stretch bootet der Sheeva nicht ab einem F2FS Rootfs - auch wenn man alles genau so macht wie oben beschrieben (obschon F2FS existiert und auch in die Init-Ramdisk geladen werden kann)
  • Mir geht es bei F2FS nicht um Performance sondern nur darum, dass der Sheeva keine Speicherkarten (mehr) frisst.

Samstag, 26. Januar 2019

Swisscom CentroBusiness 2.0 IPSec Site2Site

Swisscom CentroBusiness 2.0 IPSec Site2Site

Übersicht

Der Business-Router von Swisscom CentroBusiness 2.0 hat standardmässig die Funktion um Site-to-Site IPSec Tunnels aufzubauen. Damit kann mal also zwei entfernte Netze miteinander verbinden oder aber einen Cloud-Server nahtlos ins eigene Netz integrieren.
Die Lösung ist rudimentär und basic, funktioniert aber. Ausserdem bietet sie den Vorteil, dass man keine zusätzlichen Geräte betreiben muss.

In dieser Anleitung zeige ich Euch, wie man vom CentroBusiness 2.0 einen IPSec Tunnel zu einem Cloudserver (Cloudsigma, AWS EC2, ...) erstellt, um diesen im internen Netz verfügbar zu machen.

Ausganslage


Lokales Netz


  • Swisscom CentroBusiness 2.0 Firmware 9.02.14
  • öffentliche IP-Adresse 178.195.222.159
  •  IP-Range 192.168.1.0/24

Cloudserver

  • Ubuntu 18.04 LTS
  • öffentliche IP-Adresse 194.209.193.138
  • IP-Range 172.16.1.0/30

Konfiguration

Swisscom-Router

  1. Auf's Webinterface einloggen
  2. Unter [Netzwerk] auf [Peer-to-Peer VPN] klicken
  3. [VPN-Standort hinzufügen] klicken
  4. Peer IP-Adresse/DNS: 194.209.193.138 (öffentliche IP vom Cloudserver)
  5. Peer IP-Subnetz: 172.16.1.0/30 (IP-Range vom Cloudserver)
  6. Passwort: {Mindestens 20 Zeichen, Gross/Klein/Sonderzeichen}
  7. [Hinzufügen] klicken, aktivieren und speichern
Der Status wird noch rot sein, da wir die Gegenseite noch nicht konfiguriert haben.

Cloudserver

  1. Zuerst müssen wir die Software installieren:
  2. $ sudo apt-get update
  3. $ sudo apt-get install racoon
  4. Folgende Ports öffnen: UDP/500 und UDP/4500
  5. Konfig-Feils editieren (Beispiele siehe unten):
  6. /etc/racoon/racoon.conf
  7. /etc/racoon/psk.txt
  8. Tunnel-Adresse und Routing auf dem Netzwerk-Interface erstellen:
  9. $ sudo ip addr add 172.16.1.1/30 dev eth0
  10. $ sudo ip route add to 192.168.1.0/24 via 172.16.1.1 src 172.16.1.1
  11. Nun kann Racoon testweise gestartet werden um zu sehen, ob der Tunnel aufgebaut wird. Die Option -F lässt racoon auf die Konsole loggen. Somit lassen sich allfällige Fehler sehen und beheben:
  12. $ sudo racoon -f /etc/racoon/racoon.conf -F
  13. Nun von einem Netz das andere pingen (Beispiel vom Cloudserver ins lokale Netz):
  14. $ ping 192.168.1.1
  15. Der Tunnel wird aufgebaut und der Ping sollte erfolgreich sein.
  16. Wenn alles zufriedenstellend funktioniert, Racoon im Systemd aktivieren:
  17. $ sudo systemctl enable racoon.service
Bemerkungen:
  •  Der Tunnel wirst erst aufgebaut, wenn Traffic darüber angefordert wird, also zum Beispiel ein Ping abgesetzt wird
  • Falls es in eine Richtung nicht funktioniert, dann einmal in die andere Richtung probieren - manchmal funktioniert eine Richtung erst nachdem die andere Richtung die Verbindung anfordert
racoon.conf

#
# NOTE: This file will not be used if you use racoon-tool(8) to manage your
# IPsec connections. racoon-tool will process racoon-tool.conf(5) and
# generate a configuration (/var/lib/racoon/racoon.conf) and use it, instead
# of this file.
#
# Simple racoon.conf
#
#
# Please look in /usr/share/doc/racoon/examples for
# examples that come with the source.
#
# Please read racoon.conf(5) for details, and alsoread setkey(8).
#
#
# Also read the Linux IPSEC Howto up at
# http://www.ipsec-howto.org/t1.html
#
log info;
path pre_shared_key "/etc/racoon/psk.txt";
path certificate "/etc/racoon/certs";
#
remote anonymous {
        exchange_mode main,aggressive;
        proposal {
                encryption_algorithm 3des;
                hash_algorithm sha1;
                authentication_method pre_shared_key;
                dh_group modp2048;
        }
        generate_policy on;
}
#
sainfo anonymous {
    encryption_algorithm 3des;
    authentication_algorithm hmac_sha1;
    compression_algorithm deflate;
}
#


psk.txt

# IPv4/v6 addresses
178.195.222.159   
{Mindestens 20 Zeichen, Gross/Klein/Sonderzeichen}

Zusammenfassung

Der Cloudserver ist nun aus dem lokalen Netz unter der IP 172.16.1.1 erreichbar. Nun können dort beliebige Dienste gehostet werden.