1

Temat: [mało znane pakiety] pingcheck

W repozytorium OpenWrt można znaleźć się setki pakietów. Niektóre są mało znane, choć realizują ciekawe funkcje. Jednym z nich jest pingcheck.
Jak nazwa sugeruje program robi ping określonego hosta, przez określony interfejs i zwraca informacje o jego dostępności. Możliwe jest także uruchomienie skryptu w przypadku braku odpowiedzi lub w przypadku pojawienia się pingów. pingcheck można wykorzystać do sprawdzenia stanu hostów lub istnienia dostępu do internetu z interfejsów bez korzystania ze skryptów uruchamianych np. w cronie.

Instalacja
# opkg update
# opkg install pingcheck
Konfiguracja

Zawarta jest w pliku /etc/config/pingcheck. Domyślnie wygląda tak:

config default
    option host 8.8.8.8
    option interval 10
    option timeout 30

config interface
    option name wan

config interface
    option name sta

Będzie sprawdzany host 8.8.8.8 (dnsy google) co 10s z timeoutem 30s. Sprawdzenie będzie dotyczyło dwóch interfejsów zdefiniowanych w sekcjach wan oraz sta. Można dodać kolejne sekcje option interface z własnymi interfejsami.
Podczas definicji należy pamiętać że dla protokołów qmi/ncm/mbim prawdziwym interfejsem realizującym połączenie z internetem jest wan_4 a nie wan.

Wynik działania

* ubus

Stan interfejsów można sprawdzić "ręcznie" wydając odpowiednie polecenie korzystające z ubusa:

# ifdown wan
# ubus call pingcheck status
{
    "status": "OFFLINE",
    "online_interfaces": [
        
    ],
    "known_interfaces": [
        "wan",
        "sta"
    ]
}
# ifup wan
# ubus call pingcheck status
{
    "status": "ONLINE",
    "online_interfaces": [
        "wan"
    ],
    "known_interfaces": [
        "wan",
        "sta"
    ]
}

W ten prosty sposób można sprawdzić stan wszystkich interfejsów. Jeżeli chcemy wykorzystać wynik do własnych skryptów, to można przefiltrować to przez program jsonfilter lub wykorzystać skrypty systemowe OpenWrt.
Możemy także zapytać się o stan konkretnego interfejsu:

# ubus call pingcheck status '{"interface":"wan"}'
{
    "status": "NO_ROUTE",
    "interface": "wan",
    "device": "wwan0",
    "percent": 0,
    "sent": 0,
    "success": 0
}
# ubus call pingcheck status '{"interface":"wan_4"}'
{
    "status": "ONLINE",
    "interface": "wan_4",
    "device": "wwan0",
    "percent": 100,
    "sent": 8,
    "success": 8
}

* automatyka

Jak już wspomniałem, pingcheck umożliwia automatyczne wykonywanie skryptów w przypadku zaniku lub pojawienia się pingów. Tworzymy odpowiednie katalogi:

# mkdir -p /etc/pingcheck/offline.d
# mkdir -p /etc/pingcheck/online.d

Skrypty umieszczone w nich będą wykonywane odpowiednio w przypadku zaniku pingów lub ich pojawiania się. Do testów można zrobić prosty program:

# touch /etc/pingcheck/offline.d/nie-ma-pingow.sh
# chmod 755  /etc/pingcheck/offline.d/nie-ma-pingow.sh 
# vi /etc/pingcheck/offline.d/nie-ma-pingow.sh 

Umieszczamy w nim następujący kod:

#!/bin/sh
logger "Brak pingow w sekcji $INTERFACE na $DEVICE"
exit 0

Jeżeli zrobimy teraz ifdown wan to w logach (logread) pojawi się coś takiego:

Fri Apr  6 20:29:37 2018 daemon.info pingcheck[1225]: Interface 'wan' event DOWN
Fri Apr  6 20:29:37 2018 daemon.info pingcheck[1225]: Interface 'wan' changed to DOWN
Fri Apr  6 20:29:37 2018 daemon.notice pingcheck[1225]: Scheduling 'offline' scripts for 'wan'
Fri Apr  6 20:29:37 2018 daemon.info pingcheck[1225]: Interface 'wan_4' event DOWN
Fri Apr  6 20:29:37 2018 daemon.info pingcheck[1225]: Interface 'wan_4' changed to DOWN
Fri Apr  6 20:29:37 2018 daemon.notice pingcheck[1225]: Scheduling 'offline' scripts for 'wan_4'
Fri Apr  6 20:29:37 2018 daemon.notice pingcheck[2773]: Running 'offline' scripts for 'wan'
Fri Apr  6 20:29:38 2018 user.notice root: Brak pingow w sekcji wan na wwan0
Fri Apr  6 20:29:38 2018 daemon.notice pingcheck[2783]: Running 'offline' scripts for 'wan_4'
Fri Apr  6 20:29:38 2018 user.notice root: Brak pingow w sekcji wan_4 na wwan0

Oczywiście skrypty można dowolnie rozbudować stosowanie do własnych potrzeb. Więcej informacji na stronie projektu: https://github.com/br101/pingcheck, choć należy pamiętać że pakiet zawarty w OpenWrt jest starszą wersją i nie zawiera kilku opcji.

Masz niepotrzebny router, uszkodzony czy nie - chętnie przygarnę go.

2

Odp: [mało znane pakiety] pingcheck

Cześć,
Chciałbym sprawdzać hosta przez wireguarda, ale nie ogarniam.

config default
        option host 10.9.0.1
        option interval 300
        option timeout 30
        option protocol icmp

config interface
        option name wg0

ubus call pingcheck status

{
        "status": "OFFLINE",
        "online_interfaces": [

        ],
        "known_interfaces": [
                "wg0"
        ]
}

w logach caly czas "brak pingów wg0 na wg0"
wireguard jest zapięty i pinguje 10.9.0.1

Xiaomi AX3000T

3

Odp: [mało znane pakiety] pingcheck

Masz sekcję w networku o nazwie wg?

Masz niepotrzebny router, uszkodzony czy nie - chętnie przygarnę go.

4

Odp: [mało znane pakiety] pingcheck

mam tak:

config interface 'wg0'
        option proto 'wireguard'
        option private_key 'key1'
        list addresses '10.9.0.2/32'

config wireguard_wg0
        option public_key 'key2'
        option route_allowed_ips '1'
        list allowed_ips '10.9.0.1/32'
#        list allowed_ips '0.0.0.0/0'
        option endpoint_host 'host.org'
        option endpoint_port '55055'
        option persistent_keepalive '25'

czegoś tu brakuje?

Xiaomi AX3000T

5

Odp: [mało znane pakiety] pingcheck

Normalnie jest.

Przetrzeb więc źródła i sprawdź na jakiej podstawie on szukaj interfejsów, bo może oczekuje tylko ethernetów czy coś takiego.

Masz niepotrzebny router, uszkodzony czy nie - chętnie przygarnę go.