cs:spravce:monitoring:eduroamsonda

eduroam monitorovací sonda

Tento návod popisuje zprovoznění hardwarové sondy pro sledování eduroamu. Postup byl vytvořen Janem Vondráčkem na Univerzitě Pardubice. Sonda umožnuje sledování fungování eduroamu z pohledu uživatelského počítače. Neotestujete tak jen radius, ale i AP, dhcp, dns, firewall atd. Jako hardware sondy je použito Raspberry Pi 3b+, OS je Raspbian9. My takovéto testy nazýváme test umělým uživatelem.

Sonda je spojena s dohledovým systémem, v našem případě Nagiosem, pomocí LAN. Do LAN jsou naroutovány jen sítě důležité pro provoz sondy, ne výchozí brána. Volání testu připojení k eduroamu přes WIFI je iniciováno z dohledového systému, v našem případě pomocí NRPE, je otestováno připojení a pak i nějaká webová stránka, výsledek se vrací dohledovému systému.

příprava sondy

Nainstalujeme potřebné balíky:

apt-get install wpasupplicant nagios-nrpe-server iptables-persistent sudo

Pro připojování je využit klasický ifup pomocí /etc/network/interfaces, musíme vypnout dhcpcd službu, která je na Raspbianu defaultně použitá. Ale nejdříve si interfaces pro LAN nakonfigurujeme:

allow-hotplug eth0
iface eth0 inet static
        address 192.168.7.3/24
        up ip route add 192.168.8.0/24 via 192.168.7.1
        up ip route add 192.168.17.0/24 via 192.168.7.1

Přidáme si potřebné routy na dohledový systém nebo správu. Já používám instalační squid-deb-proxy, takže při aktualizaci systému pomocí unattended-upgrades nejsem závislý na připojování přes výchozí bránu.

Aby korektně fungovalo testování dns, které nám nastaví eduroam přes dhcp, nesmíme v /etc/network/interfaces dns konfigurovat. Informace pro nastavování dns v Debianu tahá z tohoto souboru program resolvconf, ale jeho činnost můžeme zakázat v /etc/resolv.conf příkazem resolvconf=NO.

Pak zastavíme defaultně použitou službu dhcpcd a restartujeme, abysme viděli, že nám síť chodí.

systemctl disable dhcpcd.service
systemctl disable systemd-timesyncd.service

Vypnutí timesyncd ošetříme chybovou hlášku, kdy mi koliduje ntpd se systemd ntp serverem. Každé připojení přes wifi psalo info o nutnosti reloadu systemd, kvůli nové konfiguraci ntp obdržené přes dhcp.

Pokud nám LAN funguje, nakonfigurujeme si WIFI připojení k eduroamu. Vytvoříme konfigurační soubor wpasupplicantu /etc/wpa_supplicant/wpa_supplicant.conf:

ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
update_config=1
country=CZ

network={
        ssid="eduroam"
        key_mgmt=WPA-EAP
        eap=PEAP
        identity="testovaci_uzivatel@univerzita.cz"
        password="heslo_testovaciho_uzivatele"
        phase2="auth=MSCHAPV2"
}

A přidáme na něj vazbu do /etc/network/interfaces k interfacu wlan0:

iface wlan0 inet dhcp
        wpa-conf /etc/wpa_supplicant/wpa_supplicant.conf
#       wpa-debug-level 3
iface wlan0 inet6 dhcp

Pozor, k interfacu wlan0 nepovolujeme allow-hotplug! Nechceme, aby se nám wlan0 připojovala automaticky! Zapoznámkovaný je parametr pro debug, nechávám ho jen pro ukázku jak si debug snadno spustit. Pro konfiguraci IPv6 už wpa-conf nepotřebujeme, interface je již připojen. Pokud IPv6 nemáte konfigurační řádek vynechtejte.

Teď můžeme vyzkoušet zda nám připojení funguje. Nahodíme interface a sledujeme, zda se sonda připojí (ukázkový výpis jsem zkrátil, IPv6 žádné hlášky neposílá). Zkontrolujeme přidělené ip adresy, výchozí brány a nastavené dns v souboru /etc/resolv.conf. Na konci pokusu eduroam zase odpojíme, aby nám to neovlivňovalo pozdější konfiguraci testů:

~#ifup wlan0
...
Listening on LPF/wlan0/b8:27:eb:f3:08:b0
Sending on   LPF/wlan0/b8:27:eb:f3:08:b0
Sending on   Socket/fallback
DHCPDISCOVER on wlan0 to 255.255.255.255 port 67 interval 8
DHCPDISCOVER on wlan0 to 255.255.255.255 port 67 interval 10
DHCPREQUEST of 10.221.206.160 on wlan0 to 255.255.255.255 port 67
DHCPOFFER of 10.221.206.160 from 10.221.0.1
DHCPACK of 10.221.206.160 from 10.221.0.1
...
bound to 10.221.206.160 -- renewal in 9079 seconds.

~#ip add
3: wlan0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether b8:27:eb:f3:08:b0 brd ff:ff:ff:ff:ff:ff
    inet 10.221.206.160/16 brd 10.221.255.255 scope global wlan0
       valid_lft forever preferred_lft forever
    inet6 2001:718:603:100a:148a:2f06:5335:de72/128 scope global tentative 
       valid_lft forever preferred_lft forever
    inet6 2001:718:603:100a:ba27:ebff:fef3:8b0/64 scope global mngtmpaddr dynamic 
       valid_lft 300sec preferred_lft 300sec
    inet6 fe80::ba27:ebff:fef3:8b0/64 scope link 
       valid_lft forever preferred_lft forever

~# cat /etc/resolv.conf
domain upce.cz
nameserver 195.113.124.33
nameserver 2001:718:603:e195:113:124:0:33

~#ifdown wlan0
...
Killed old client process
Listening on LPF/wlan0/b8:27:eb:f3:08:b0
Sending on   LPF/wlan0/b8:27:eb:f3:08:b0
Sending on   Socket/fallback
DHCPRELEASE on wlan0 to 10.192.2.3 port 67
Killed old client process

Užitečný je také příkaz iwconfig wlan0, který nám ukáže parametry, jak se wifi připojila (AP, rychlost, síly signálu atd.).

Nezapomeňte nakonfigurovat iptables či jiný firewall, aby se nám přes sondu nikdo nemohl naloupat do vnitřní sítě:

iptables -A INPUT -i lo -j ACCEPT
iptables -A INPUT -i eth0 -p tcp -m multiport --dports 22,5666 -j ACCEPT
iptables -A INPUT -i eth0 -p udp -m multiport --dports 123,161 -j ACCEPT
iptables -A INPUT -p icmp -m icmp --icmp-type 8 -j ACCEPT
iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -P INPUT DROP
iptables -P FORWARD DROP
ip6tables -A INPUT -i lo -j ACCEPT
ip6tables -A INPUT -p ipv6-icmp -j ACCEPT
ip6tables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
ip6tables -A INPUT -p udp -m udp --sport 547 -j ACCEPT
ip6tables -P INPUT DROP
ip6tables -P FORWARD DROP
netfilter-persistent save

Pokud je vše funkční, můžeme přistoupit ke konfiguraci testů.

rozchození testů

Nahrajeme testovací skript:

/usr/lib/nagios/plugins/check_eduroam.sh
#!/bin/bash
 
#nahozeni wifi
ifup wlan0 > /dev/null 2>&1
 
if [[ `ip link show dev wlan0` =~ "DOWN" ]]
        then
        ifdown wlan0 > /dev/null 2>&1
        echo "chyba připojení k eduroamu"
        exit 2
fi
 
#kontrola stranek
vystup=`/usr/lib/nagios/plugins/check_http -H www.eduroam.cz -S -f follow`
navratovy_kod=$?
 
#odpojeni wifi
ifdown wlan0 > /dev/null 2>&1
 
echo $vystup
exit $navratovy_kod

A nakonfigurujeme jej do nrpe serveru spuštěném na sondě, /etc/nagios/nrpe.cfg:

command[check_eduroam]=sudo /usr/lib/nagios/plugins/check_eduroam.sh

Nahazování interfaců může dělat jen root takže samozřejmě použijeme sudo:

nagios    ALL=(ALL) NOPASSWD: /usr/lib/nagios/plugins/check_eduroam.sh

A pak už jen z nagiosu voláme checkem pro nrpe:

/usr/local/nagios/libexec/check_nrpe -H 192.168.7.3 -t 60 -c check_eduroam

ladění testů

Pokud test v nagiosu nefunguje a končí na timeoutech je třeba upravit nastavení:

  • nrpe timeout - v nagiosu u checku je třeba prodloužit nrpe timeout z defaultních 30s
  • service check timeout - v konfiguraci nagiosu prodloužit globální timeout na běh checku z defaultních 30s (nagios.cfg parametr service_check_timeout=60)
  • socket timeout - upravit parametr timeout u check_http uvnitř skriptu check_eduroamu.sh
  • chyba připojení k eduroamu - stačil klient získat z dhcp adresu? prodloužit timeout dhcp klienta (/etc/dhcp/dhclient.conf parametr timeout 60;)
  • webové stránky se nezobrazí - upravit parametry u check_http uvnitř skriptu check_eduroam.sh

závěr

Použití nrpe samozřejmě není nutností, test lze samozřejmě rozchodit i pomocí extend v snmp. Podpora testování IPv6 je možná, ale ne nutná. Stejně tak je možné používat testy pouze pomocí IPv6. A pro vlastní test pomocí http to platí také, můžete použít něco úplně jiného. Zkrátka jste omezeni jen vaší fantazií.

Last modified:: 2018/09/06 08:38