This is a nagios plugin for teredo server monitoring.

License: GPLv2


Installation
=============

Source code includes simple make file to compile it. It should compile
on most linux distributions:
# make

Plugin binary is called 'check_teredo_server' you should manually copy
it to your nagios plugins directory.



How does it work?
==================

To check teredo server this plugin acts as a new teredo client. It sends
IPv6 Router Solicitation message encapsulated in UDP with additional teredo
authentication header to the server and waits for reply with Router
Advertisement message. Server sends IPv6 Router Advertisement encapsulated
in UDP and with teredo authentication and teredo origin headers.

Teredo server is considered working properly if plugin receives a valid
response (with matching nonce value in authentication header and valid
Router Advertisement message) within 10 seconds. Socket timeout value
can be changed via -t argument.

The RS packets sent from plugin sets ConeBit=0 to increase the possibility
to get a reply. Plugin does not include full teredo qualification procedure
(does not try with ConeBit=1 first). For more details look at RFC 4380.

This plugin DOES NOT test teredo server relaying capabilities by sending bubbles or ICMPv6 echo packets.


Usage
======

Command line arguments:
    -H, --hostname=ADDRESS  IPv4 address or domain name of teredo server
    -p, --port=INTEGER      Teredo server port (default: 3544)
    -t, --timeout=INTEGER   Seconds to wait for reply (default: 10)
    -w, --warning=DOUBLE    Response time to result in warning status (seconds)
    -c, --critical=DOUBLE   Response time to result in critical status (seconds)


Example of testing plugin from command line:
	./check_teredo_server -H teredo.litnet.lt -t 5 -w 0.1 -c 0.5
	./check_teredo_server -H teredo.ipv6.microsoft.com -t 5 -w 0.1 -c 0.5

Example of test results:
TEREDO_SERVER OK - Origin: xxx.xxx.xxx.xxx:pppp, Prefix: 2001:0:c1db:3d39::/64|time=0.000289s

Origin - shows your external IP and port as seen by teredo server
Prefix - shows what prefix teredo server advertises (It is derived from
         teredo server IPv4 address).
time   - shows delay between request and response (RTT to the teredo server).


Example for plugin definition in commands.cfg:
# 'check_teredo_server' command definition
define command{
	command_name	check_teredo_server
	command_line	$USER1$/check_teredo_server -H $ARG1$ -w 0.01 -c 0.1
	}


Example of service description in some_host.cfg:
define service{
	use				generic-service
	host_name			some_host
	service_description		TEREDO_SERVER1
	check_command			check_teredo_server!193.219.61.57
	}

define service{
	use				generic-service
	host_name			some_host
	service_description		TEREDO_SERVER2
	check_command			check_teredo_server!193.219.61.58
	}

NOTE: Teredo servers usually use two consecutive IP addresses that should be
checked. If you do not have them registered as separate hosts you can pass
IP address as a command argument.
If you are monitoring both IP addresses as separate hosts you can use
$HOSTADDRESS$ macro in command description.



TODO
=====

*) Add teredo authentication support.
*) Add ConeBit=1 test
*) Add teredo server relaying capabilities test.


Report bugs to <julius.kriukas@gmail.com>.

