📬 ISN 254: Dlaczego Meta Usunęła IPv4? Plus Generator NetFlow i MTU Path Discovery!

254. numer newslettera to PTP Grandmaster za 103 dolary, produkcyjne skrypty Pythona i generator konfiguracji NetFlow. Sprawdź MTU na ścieżce oraz dowiedz się, dlaczego Meta usunęła IPv4 z infrastruktury edge.
📬 ISN 254: Dlaczego Meta Usunęła IPv4? Plus Generator NetFlow i MTU Path Discovery!

PTP Grandmaster za 103 dolary

Stratum 1 PTP Grandmaster: CM4 + SR1723U10 (Part 1)
Building a GPS-disciplined PTP grandmaster from a Raspberry Pi CM4 and SR1723U10 GPS module. Part 1 of the homelab PTP series.

Komercyjne grandmastery PTP z synchronizacją GPS kosztują od kilku tysięcy dolarów wzwyż. Autor tego projektu zbudował funkcjonalny odpowiednik za 103 USD w nowych częściach, używając Raspberry Pi CM4 i modułu GPS SR1723U10.

Kluczowa obserwacja: PHY BCM54210PE w CM4 ma pełne wsparcie dla IEEE 1588v2 hardware timestamping. Timestamps powstają bezpośrednio w warstwie PHY, przed dotknięciem stosu sieciowego kernela. To eliminuje jitter wynikający z schedulingu i obsługi przerwań – i robi realną różnicę w wynikach.

Ukończony grandmaster osiąga średnio 6 ns odchylenia od czasu GPS (max 18 ns). Klienci PTP w tej samej sieci:

  • CM4 z BCM54210PE: ±66 ns niepewności
  • RK1 (Rockchip GMAC, timestamping na warstwie MAC): ±291 ns

Dla porównania – LAN NTP z tego samego grandmastera daje ±79–172 µs, a WAN NTP publiczne poole ±40–82 ms. Każda warstwa to mniej więcej 1000x gorsze wyniki.

Grandmaster podpięty do konsumenckiego routera TP-Link zamiast bezpośrednio do switcha Turing Pi: path delay skoczył z 2,6 µs do 480 µs, a offsety klientów wahały się w zakresie ±700 µs. To 180-krotna różnica tylko przez jeden dodatkowy hop przez software-owy routing. Jeśli wdrażasz PTP w środowisku produkcyjnym, hardware switch z sprzętowym forwarding to nie opcja – to wymóg.

Zanim zaczniesz bawić się tym stackiem (SatPulse + ptp4l + chrony), zapamiętaj dwa problemy nieudokumentowane w oficjalnych przewodnikach:

BCM54210PE SYNC_OUT pin bug – przy każdym bootowaniu sterownik inicjalizuje pin SYNC_OUT jako wyjście zamiast wejście. SatPulse nie odbiera wówczas sygnału PPS i grandmaster jest nieoperacyjny. Fix: wymusić toggling stanu pinu przed startem SatPulse przez ExecStartPre w systemd.

Ubuntu 22.04 nie ma PHC – wsparcie dla PTP w kernelu raspi pojawiło się, ale nie trafiło do Ubuntu 22.04. Bez /dev/ptp0 cały stack odpada. Wymagany jest Ubuntu 24.04 z kernelem 6.8.0-raspi.

Test holdover (10 godzin bez sygnału GPS) pokazał drift do 15 ms – akceptowalny w środowiskach laboratoryjnych i wielu scenariuszach przemysłowych. Klienci PTP przez całe 10 godzin pozostali zsynchronizowani z grandmasterem, nie przełączając się na WAN NTP.

Jeśli jednak potrzebujesz gwarancji dokładności przy zaniku GPS lub zaniku zasilania, potrzebujesz sprzętu z TCXO lub OCXO. CM4 ma standardowy kryształ bez kompensacji temperaturowej – i tu kończy się oszczędność.


Skrypty Pythona, które nie wstydzą się produkcji

Scripting good practices in Python
And a lot of it works in other languages too

Większość skryptów, które widzimy w środowiskach produkcyjnych, to prowizorki — działają, ale przy pierwszym problemie są niemożliwe do debugowania. Kilka prostych zasad zmienia to diametralnie.

Sekrety i konfiguracja: hierarchia ma znaczenie

Nigdy nie przekazuj tokenów jako argumentów CLI — lądują w historii shella. Właściwy przepływ to: zmienna środowiskowa → OS keyring (biblioteka keyring) → getpass jako ostateczność. Przy kolejnym uruchomieniu token jest już w keyring i użytkownik nie musi nic robić.

Konfigurację ładuj zawsze w tej samej kolejności priorytetu (od najwyższego):

  • argument CLI przekazany ręcznie
  • zmienna środowiskowa
  • lokalny plik konfiguracyjny
  • wartość domyślna

Argparse obsługuje to elegancko: default=int(os.getenv("YOUR_SCRIPT_RETRY", 3)). Env var nadpisuje default, CLI nadpisuje env var. Zero niejednoznaczności.

Print vs log: rozdziel te dwie rzeczy

print() jest dla użytkownika skryptu. Logging jest dla dewelopera — czyli Ciebie za trzy miesiące, gdy coś się posypie o 2 w nocy.

Kluczowy trick: domyślnie ustaw poziom logowania na 9999, czyli de facto wyłączony. Logi włącza użytkownik przez zmienną środowiskową:

YOUR_SCRIPT_LOG_LEVEL=ERROR python script.py

Bez tego skrypt jest czysty. Z tym — pełna widoczność. Nie decydujesz za użytkownika, gdzie zapisać logi — jeśli potrafi ustawić env var, potrafi też zrobić przekierowanie w shellu.

Koniecznie: czysty exit i obsługa crashy

Stack trace wyrzucony prosto na terminal to antywzorzec. Użytkownik nie wie, co z tym zrobić, a Ty ujawniasz szczegóły implementacji. Zamiast tego użyj sys.excepthook:

def on_crash(exctype, value, tb):
    if logging.getLogger().isEnabledFor(logging.ERROR):
        logging.error("Uncaught exception", exc_info=(exctype, value, tb))
    else:
        print("Nieoczekiwany błąd. Ustaw LOG_LEVEL=ERROR, żeby zobaczyć szczegóły.")

sys.excepthook = on_crash

Domyślnie użytkownik widzi czytelny komunikat. Developer włącza logi i dostaje pełny traceback. sys.exit("komunikat") zamiast wyjścia bez kodu — automatycznie zwraca kod 1, co pozwala skryptom powłoki podejmować decyzje.

Jedna rzecz, którą możesz wdrożyć dziś: dodaj sys.excepthook do każdego skryptu używanego przez innych. To pięć linii kodu, które eliminują kategorię zgłoszeń "skrypt się wysypał i nie wiem dlaczego".


Generator konfigu NetFlow

NetFlow Config Generation Tool for Security Analytics!
NetFlow Configuration Generation tool helps you check about NetFlow support and can provide you with the Configuration to enable NetFlow on your Cisco and other Network Platforms for doing Security Analytics

Narzędzie służy do sprawdzania obsługi NetFlow oraz generowania konfiguracji telemetryki przepływów dla różnych platform sieciowych, m.in. Cisco, Fortinet, Check Point, Meraki i VMware. Może pomóc w przygotowaniu urządzeń do analiz bezpieczeństwa, ale ponieważ konfiguracje pochodzą ze źródeł społecznościowych i nie są oficjalnie zatwierdzone, przed wdrożeniem trzeba zweryfikować je w dokumentacji producenta. Projekt jest hobbystyczny i udostępniany bez gwarancji ani wsparcia.


Sprawdź MTU na ścieżce

GitHub - FryguyPA/path_mtu_test: Quick scripts for testing path mtu using either python, powershell or bash. Useful for troubleshooting path MTU issues in a network
Quick scripts for testing path mtu using either python, powershell or bash. Useful for troubleshooting path MTU issues in a network - FryguyPA/path_mtu_test

MTU Path Test to narzędzie diagnostyczne do sprawdzania maksymalnego rozmiaru pakietów na kolejnych odcinkach trasy do jednego lub wielu adresów. Wysyła podwójne testy ICMP — z ustawioną flagą DF oraz z możliwością fragmentacji — dzięki czemu pomaga wykryć problemy z dużymi pakietami, ustalić miejsce fragmentacji i sprawdzić, czy ruch nadal dociera do celu. Narzędzie jest dostępne w wersjach Python, Bash, PowerShell i Go, więc można używać go na macOS, Linuxie oraz Windowsie, także na komputerach bez dodatkowych środowisk uruchomieniowych. Wyniki są prezentowane w formie drzewa trasy, a opcjonalnie zapisywane do osobnych plików logów.


Meta usunęła IPv4 z infrastruktury edge

Świetnie! Udało ci się pomyślnie zarejestrować.
Witaj z powrotem! Zalogowałeś się pomyślnie.
Pomyślnie subskrybowałeś Inna Sieć.
Twój link wygasł.
Sukces! Sprawdź swoją skrzynkę e-mailową, aby uzyskać magiczny link do logowania.
Sukces! Twoje informacje rozliczeniowe zostały zaktualizowane.
Twoje informacje rozliczeniowe nie zostały zaktualizowane.