====== eduroam monitorovací sonda ======
{{:cs:spravce:monitoring:eduroamsonda:eduroam_sonda.png?nolink |}} Tento návod popisuje zprovoznění hardwarové sondy pro sledování eduroamu. Postup byl vytvořen [[jan.vondracek@upce.cz|Janem Vondráčkem]] na [[http://upce.cz/|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: 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:
#!/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í.