12 lat ewolucji domowego routera na NetBSD - od ipf do pf, od bloku do XCP-NG

12 lat ewolucji domowego routera na NetBSD - od ipf do pf, od bloku do XCP-NG

Czasami jedna komenda wywołuje lawinę nostalgii - uprecords i cały świat Unixowy przeleciał mi przez pamięć.

     #               Uptime | System                                     Boot up
----------------------------+---------------------------------------------------
     1   166 days, 20:45:32 | NetBSD 7.1                Mon Mar  5 00:10:49 2018
     2   152 days, 21:08:31 | NetBSD 7.0_STABLE         Sat Jan 16 18:48:05 2016
     3   129 days, 21:08:53 | NetBSD 9.3_STABLE         Fri Jun  2 07:38:33 2023
     4   124 days, 02:37:30 | NetBSD 9.2_STABLE         Fri Apr  8 16:51:14 2022
     5   118 days, 22:09:30 | NetBSD 9.0_STABLE         Wed Oct  7 12:01:12 2020
     6   111 days, 12:02:15 | NetBSD 10.0               Tue Jul  9 16:15:31 2024
     7   102 days, 14:03:21 | NetBSD 6.1.4_PATCH        Tue Jul  8 16:37:50 2014
     8    81 days, 05:59:55 | NetBSD 6.1.4_PATCH        Fri Apr 18 10:33:21 2014
     9    80 days, 01:40:20 | NetBSD 6.1.5_PATCH        Sat Jan 10 22:07:27 2015
    10    75 days, 16:51:07 | NetBSD 8.0_STABLE         Mon Mar 11 21:56:04 2019
----------------------------+---------------------------------------------------
->  51     1 day , 12:06:09 | NetBSD 10.1_STABLE        Wed Jul  9 02:24:30 2025
----------------------------+---------------------------------------------------
    up  2990 days, 01:44:42 | since                     Sun Nov 25 23:59:36 2012
  down  1619 days, 11:46:21 | since                     Sun Nov 25 23:59:36 2012
   %up               64.867 | since                     Sun Nov 25 23:59:36 2012

Ponad 12 lat. 64.867% uptime. To nie jest rekord godny enterprise, ale to historia systemu, który ewoluował od routera dla bloku mieszkalnego do nowoczesnej maszyny wirtualnej na N100. Historia, która zaczęła się znacznie wcześniej...

Prehistoria - czasy pierwszego stałego IP na osiedlu

Zanim NetBSD zagościło na stałe jako router, byłem dumnym posiadaczem pierwszego łącza stałego ze stałym IP na osiedlu - dzięki TELE2. Kiedy sąsiedzi męczyli się z 0202122 i ciągłymi rozłączeniami co 2 godziny, ja już miałem swój kawałek prawdziwego internetu. Potem przyszedł DSL, też ze stałym IP. To były czasy!

NetBSD 1.5/1.6 - początki przygody

Moja historia z NetBSD zaczęła się od wersji 1.5, ale ledwo zdążyłem zainstalować system, a już wyszło 1.6. Oczywiście natychmiast reinstall - kto by chciał zostać w tyle?

To były czasy Pentium 2 z egzotycznymi kartami sieciowymi, które tylko NetBSD-current potrafił obsłużyć. Pamiętam te wieczory spędzone na kompilacji kernela, trzymanie kciuków żeby wykryło kartę 3Com albo dziwnego Realteka. Stabilizacja przyszła dopiero z serią 5.x - wtedy NetBSD zaczęło normalnie wspierać sprzęt konsumencki.

Era ipf - gdy NAT wymagał pustego pliku

NetBSD 1.6 i 2.0 to czasy ipf (IP Filter). Pamiętacie tę absurdalną zależność? Żeby działał NAT przez ipnat, musiałeś mieć plik /etc/ipf.conf - choćby pusty!

# /etc/ipf.conf - musiał istnieć, inaczej ipnat nie działał
pass in all
pass out all

# /etc/ipnat.conf - tu była prawdziwa magia
map ex0 192.168.1.0/24 -> 0/32 portmap tcp/udp auto

To były też czasy udostępniania internetu w bloku. Kable ciągnięte po dachach, przez szyby wind, szachty wentylacyjne. NetBSD na starym PC jako router dla całego piętra. 512/128 kbit/s na 10 mieszkań - luksus!

479MB historii w katalogu /

Rzut oka na / mojego routera to jak archeologiczne wykopaliska:

-rwxr-xr-x   1 root  wheel   13M Oct 27  2012 netbsd-xen0-bezpf
-rwxr-xr-x   1 root  wheel   14M Apr 18  2013 netbsd-xen0-old
-rwxr-xr-x   1 root  wheel   14M May 26  2013 netbsd-xen0613
...
-rwxr-xr-x   1 root  wheel   26M Oct 18  2019 netbsd90_BETA
-rwxr-xr-x   1 root  wheel   24M Feb  3  2020 netbsd90_RC1
-rwxr-xr-x   1 root  wheel   24M Feb 23  2020 netbsd90_RC2
-rwxr-xr-x   1 root  wheel  7,5M Jan 17 09:30 netbsd10

Każdy kernel to zakładka w historii. netbsd-xen0-bezpf z 2012? To eksperyment - czy router będzie szybszy bez pf? Różnice w rozmiarach? To nie przypadek:

  • 13-26MB - kernele dla fizycznego sprzętu lub HVM
  • 7-8MB - kernele PV dla DOMU lub DOM0

Analiza file potwierdza:

$ file /netbsd-xen0-bezpf
/netbsd-xen0-bezpf: ELF 64-bit LSB executable, x86-64, version 1 (SYSV),
                    statically linked, for NetBSD 6.0, with debug_info, not stripped

Ewolucja systemu - od ipf do pf, od fizycznego sprzętu do VM

NetBSD 2.0-5.x - stabilizacja i przejście na pf

  • NetBSD 2.0 (2004) - ipf w pełnej krasie, ALTQ tylko przez przekompilowanie kernela
  • NetBSD 3.0 (2005) - pf z OpenBSD wchodzi do gry jako moduł: modload /usr/lkm/pf.o
  • NetBSD 4.0 (2007) - pf można wkompilować w kernel, koniec z modułami
  • NetBSD 5.0 (2009) - ALTQ zintegrowane z pf, prawdziwy QoS!

Przejście z ipf na pf to była rewolucja:

# Stare czasy ipf - zagmatwana składnia
pass in quick on ex0 proto tcp from any to any port = 22 flags S keep state

# Nowa era pf - czytelne i logiczne
pass in quick on $ext_if proto tcp to port ssh

Era fizycznego routera (2012-2018)

System wystartował 25 listopada 2012 na płycie ASUS E45M1-I DELUXE:

  • AMD Dual-Core E-450
  • 2x WD Red 2TB w RAID1 (raidframe)
  • Port COM do monitorowania temperatury przez 1-wire

W cronie do dziś pozostały ślady:

#40      23      *       *       *       raidctl -s raid0 | mail moj@mail.tld >/dev/null 2>&1
#*/2     *       *       *       *       /usr/home/cancer/temperatura/temperatura.sh >/dev/null 2>&1

Sam dodałem digitemp do pkgsrc (https://pkgsrc.se/wip/digitemp). Monitoring temperatury przez 1-wire w 2015 roku!

Router jako hypervisor - era DOM0

Przez pewien czas router był nie tylko routerem - działał jako Xen DOM0 hostując kilka maszyn DOMU. Stąd duże kernele HVM w kolekcji. Router, firewall i hypervisor w jednym!

Home Assistant na NetBSD (2017)

W październiku 2017 router zyskał kolejną funkcję - smart home hub:

/.homeassistant # cat .HA_VERSION
0.55.0

To były czasy, gdy Home Assistant był projektem hobbystycznym. Działał na NetBSD bez problemu - Python to Python. Skończyło się, gdy projekt urósł i zaczął wymagać bibliotek niedostępnych w pkgsrc.

Wirtualizacja - od gospodarza do gościa (2018-obecnie)

Migracja na wirtualizację to było pełne koło:

  1. Fizyczny sprzęt z AMD E-450
  2. DOM0 na Supermicro z Intel Atom C2758
  3. DOMU pod Citrix Hypervisor, potem XCP-NG
  4. Obecnie VM na N100 pod XCP-NG

Chronologia wersji - śledząc uprecords

NetBSD 6.1.x (2014-2015)

7   102 days, 14:03:21 | NetBSD 6.1.4_PATCH    Tue Jul  8 16:37:50 2014
8    81 days, 05:59:55 | NetBSD 6.1.4_PATCH    Fri Apr 18 10:33:21 2014
9    80 days, 01:40:20 | NetBSD 6.1.5_PATCH    Sat Jan 10 22:07:27 2015

Początek ery na fizycznym sprzęcie. System już z pf, żadnego ipf.

NetBSD 7.x (2016-2018)

2   152 days, 21:08:31 | NetBSD 7.0_STABLE     Sat Jan 16 18:48:05 2016
1   166 days, 20:45:32 | NetBSD 7.1            Mon Mar  5 00:10:49 2018

Rekordowe 166 dni uptime! NetBSD 7 przyniosło lepsze SMP, wydajniejszy pf, stabilniejsze sterowniki.

NetBSD 8.x i 9.x (2019-2023)

10   75 days, 16:51:07 | NetBSD 8.0_STABLE     Mon Mar 11 21:56:04 2019
5   118 days, 22:09:30 | NetBSD 9.0_STABLE     Wed Oct  7 12:01:12 2020
4   124 days, 02:37:30 | NetBSD 9.2_STABLE     Fri Apr  8 16:51:14 2022
3   129 days, 21:08:53 | NetBSD 9.3_STABLE     Fri Jun  2 07:38:33 2023

Fascynująca sekwencja rozwoju NetBSD 9.0 w kernelach:

  • netbsd90_BETA (26MB)
  • netbsd90_RC1 (24MB)
  • netbsd90_RC2 (24MB)
  • netbsd90_STABLE (24MB)

NetBSD 10.x (2024-obecnie)

6   111 days, 12:02:15 | NetBSD 10.0           Tue Jul  9 16:15:31 2024
->  51     1 day , 12:06:09 | NetBSD 10.1_STABLE    Wed Jul  9 02:24:30 2025

Kernel tylko 7.5MB - powrót do PV DOMU. WireGuard w bazie, świetna wydajność na VM.

Dlaczego tylko 64.867% uptime?

  1. Aktualizacje na bieżąco - śledzę -STABLE, każdy patch oznacza restart
  2. Eksperymenty - OpenSense, pfSense, VyOS - zawsze wracam do NetBSD
  3. Rozwój infrastruktury - migracje między platformami
  4. Awarie zasilania - UPS dopiero od 2018
  5. "Tato, internet nie działa!" - debugging o 23:00

Lekcje z 12 lat

  1. NetBSD jest niezniszczalne - przetrwa każdą migrację
  2. Prostota wygrywa - pf > ipf, mniej = lepiej
  3. Historia ma znaczenie - 479MB kerneli to nie śmieci, to pamiętnik
  4. Ewolucja > Rewolucja - małe kroki, ciągłość konfiguracji

Co dalej?

Cel na 2025: wejść do top 10 w uprecords (potrzebuję 75 dni). Długoterminowo? Może pobiję rekord 166 dni z 2018?

System będzie dalej ewoluował. Może znowu zostanie hypervisorem? Może obsłuży 10 Gbit/s? Jedno jest pewne - będzie to NetBSD.


Dedykuję wszystkim, którzy pamiętają czasy 0202122, kompilowali kernel żeby wykryć kartę sieciową i mają gdzieś dyski z pierwszego RAIDa. Bo sentyment w IT to nie wada - to feature.