The Perfect SOHO router – Part 5
Владимир | 12/06/2009Това е петата част от серия от статии в които ще обясня как да създадем перфектният SOHO рутер. Държа да отбележа че това е моята идея за рутер със всичките и предимства и недостатъци.
Серията се състои от следните статии:
- Общи насоки, идеи, нужни услуги и размисли – тук ще се постарая аргументирано да обоснова защо съм избрал този комплект от софтуер и услуги
- Инсталация на базовата система - ще опиша методът по който ще инсталираме и минимизираме нашата система
- Конфигуриране на DNS и DHCP услугите – тук ще опиша обосновано конфигурациите които смятам за оптимални
- Конфигуриране на рутирането – като цяло тук е сърцето на нашият рутер. Ще предложа някои трикове за улесняване на живота, както и насоки към по-специфични задачи
- Конфигуриране на елементарна система за наблюдение и статистика
- Разширяване възможностите на нашият рутер – ще опиша някои дреболии които могат да направят живота ни много по лесен, удобен и приятен
В тази част ще изградим една много проста система за наблюдение и диагностика на нашият рутер.
Защо
За да знаем какво се случва с нашият рутер. Винаги е полезно да знаем в какво състояние е нашият рутер и то да можем да достигнем до тази информация бързо.
Какво ще има
Личното ми предложение за елементарна система е както следва:
- Web базирана – за лесен достъп от всякъде
- Проверка на състоянието на интернет свързаността – за да може с един поглед да се каже дали имаме връзка и дали проблема е някъде при нашият доставчик
- Проверка на състоянието на мрежовите карти – дали са включени, да не би кабелчето да е избягало и т.н.
- Проверка на използването на паметта – да не би случайно да сме влезнали в swap зоната и харда да траши
- Проверка броя активни сесии – за да видим до къде е стигнало използването
- Трафик статистика с помощта на mrtg
- Пълна системна информация от phpsysinfo
Скрипт за проверка на състоянието на интернет свързаността
Това е един много прост скрипт който ще се опита да направи няколко пинг-а до определен адрес който сме сигурни че е винаги на линия. Използваме ип адрес а не име за да избегнем проблема с пропаднал DNS.
За да работи коректно този скрипт е необходимо да имаме ping, tail, cut, php
<?php
// simple checking of connectivity
// vvitkov
// 02.11.2006
?>
<html>
<head>
<title>Connection check</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<link REL=StyleSheet HREF="style.css" TYPE="text/css" MEDIA=screen>
</link></head>
<body>
<?php include "header.php"; ?>
<center><br /><br /><h2>Checking Conection with
<?php
$target="194.145.63.12";
if (isset($_REQUEST['t'])){
$target=$_REQUEST['t'];
}
echo "<font color=#000000>" . $target . "</h2><br /><br />";
$OK="<div class=ok>CONNECTION IS UP</div>";
$NO="<div class=no>CONNECTION DOWN</div>";
$status=exec("ping -q -c3 $target | tail -n 1 | cut -d' ' -f1");
if ($status == "rtt") { echo $OK; } else { echo $NO; }
?>
<br /><br />
<div class=sub><a href="?t=www.abv.bg">Check with abv.bg</a> <a href="?t=www.google.com">Check with Google</a></div>
<?php include "footer.php"; ?></center>
Самият скрипт изобщо не е красив а да не говорим и че не е много сигурен но върши работа. Ето примерен изглед на успешна и неуспешна проверка.


както забелязвате ако подадем хост който не съществува за проверка ще ни върне отговор че нямаме интернет, което може да не е вярно. Поради тази причина освен проверка с ip са сложени два популярни сайта които се очаква че са винаги на линия.
Скрипт за проверка на състоянието на мрежовите карти
Идеята на този скрипт е да установи дали имаме физическа свързаност. Не винаги е полезен но върши работа.
За да работи скрипта имаме нужда от sudo, mii-tool.
<?php
// simple checking of network cards
// vvitkov
// 02.11.2006
?>
<html>
<head>
<title>NIC check</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<link REL=StyleSheet HREF="style.css" TYPE="text/css" MEDIA=screen>
</link></head>
<body>
<?php include "header.php"; ?>
<center><br /><br /><h2>Checking Network Cards</h2><br />
<?php
$status=exec("sudo /sbin/mii-tool eth0 | md5sum | cut -d' ' -f1");
if ($status === '011d899f145c89793888771019335049'){
echo "<div class=ok>External network is UP";
} else {
echo "<div class=no>External network is DOWN<br />Please check Cable (eth0)</div>";
}
$status=exec("sudo /sbin/mii-tool eth1 | md5sum | cut -d' ' -f1");
if ($status === 'e413ff927a35f4df4c8bdecd70111902'){
echo "<div class=ok>Internal network is UP</div>";
} else {
echo "<div class=no>Internal network is DOWN<br />Please check Cable (eth1)</div>";
}
?>
</center>
<?php include "footer.php"; ?>
Проверката на картите не е универсална поради използваните md5 суми, но това може да се коригира особенно лесно. Напълно достатъчно е да се търси в изхода на командата mii-tool стринга link ok. За да работи този скрипт е необходимо потребителят от чието име вървъ нашият web сървър да има достъп до mii-tool. Това става посредством следният ред в /etc/sudoers
www-data ALL=(ALL) NOPASSWD: /sbin/mii-tool
Проверка на използването на паметта
Този скрипт е полезен за проверка на използваната памет. При рутери е особенно важно системата да не използва swap тъй като това краде процесорни цикли и като цяло затормозва машината. За да работи скрипта ни е необходима командата free
< ?php
// simple checking of memory utilisation
// vvitkov
// 02.11.2006
?>
< html >
<head>
<title>Memory Usage</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<link REL=StyleSheet HREF="style.css" TYPE="text/css" MEDIA=screen>
</link></head>
< ?php include "header.php"; ?>
< body ><center><br /><h2>Memory Usage</h2><br /></center>
< ?php
$stat=explode(" ", shell_exec("free -m| head -2|tail -1|awk '{print $2\" \"$3\" \"$4}'"));
$stat2=explode(" ", shell_exec("free -m| head -4|tail -1|awk '{print $2\" \"$3\" \"$4}'"));
$tresh=30;
?>
<table border=0 align=center>
<tr>
<th>Mem type</th>
<th>Used</th>
<th>free</th>
<th>Total</th>
</tr>
<tr>
<th>RAM</th>
<td>< ?php echo $stat[1]; ?></td>
<td>< ?php echo $stat[2]; ?></td>
<td>< ?php echo $stat[0]; ?></td>
</tr>
<tr>
<th>SWAP</th>
<td>< ?php
if ($stat2[1] > $tresh) {
echo "<font color=red weight=bold>$stat2[1]</font>" ;
} else {
echo $stat2[1];
}
?>
</td>
<td>< ?php echo $stat2[2]; ?></td>
<td>< ?php echo $stat2[0]; ?></td>
</tr>
<tr>
<th>TOTAL</th>
<td>< ?php echo ($stat[1]+$stat2[1]); ?></td>
<td>< ?php echo ($stat[2]+$stat2[2]); ?></td>
<td>< ?php echo ($stat[0]+$stat2[0]); ?></td>
</tr>
<tr>
<td> </td>
<th>< ?php
if ($stat2[1] > $tresh) {
echo "<font color=red weight=bold>^^^</font>" ;
} else {
echo " ";
}
?>
</th>
<td> </td>
<td> </td>
</tr>
</table>
<div class="sub">If there is a red number ... that is a problem</div>
< ?php include "footer.php"; ?>
Единствената променлива която трябва да се коригира е $tresh. Тя се използва за да извади предупреждение че използването на swap е нарастнало над някакво ниво. Възможно е да бъде нагласена на примерно 20% но смятам че е по удачно да бъде въведена на ръка.
Проверка броя активни сесии
Ако има проблеми с отваряне на страници, това може да е индикация на изхабени сесии. Тъй като знаем че някои доставчици лимитират броя сесии, този инструмент може да бъде полезен. Трябва да се отбележи че числата които са отчетени не са строго меродавни, тъй като не се отчита състоянието на сесията а просто наличието и. Тоест ако сесията е в състояние CLOSE_WAIT въпреки че може да бъде оползотворена тя се включва в бройката.
За да работи коректно скрипта са ни необходими sudo, netstat-nat
<?php
// simple checking of connectivity
// vvitkov
// 02.11.2006
?>
<html>
<head>
<title>Connection statistics</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<link REL=StyleSheet HREF="style.css" TYPE="text/css" MEDIA=screen>
</link></head>
<?php include "header.php"; ?>
<body ><center><br /><h2>Connection statistics</h2><br /></center>
<table border=0 align=center>
<tr>
<th>Proto</th>
<th>Clients</th>
<th>Ruter</th>
</tr>
<tr>
<th>TCP</th>
<td><?php echo exec("sudo netstat-nat -n -S -p tcp | grep ESTABLISHED | wc -l"); ?></td>
<td><?php echo exec("sudo netstat-nat -n -L -p tcp | grep ESTABLISHED | wc -l"); ?></td>
</tr>
<tr>
<th>UDP</th>
<td><?php echo exec("sudo netstat-nat -n -S -p udp | grep ESTABLISHED | wc -l"); ?></td>
<td><?php echo exec("sudo netstat-nat -n -L -p udp | grep ESTABLISHED | wc -l"); ?></td>
</tr>
</table>
<br />
<div class=sub>Only active connections are visible</div>
<?php include "footer.php"; ?>
Заключение
В тази статия не е показана настройка на mrtg и phpsysinfo, тъй като те са относително елементарни. С това приключва нашата елементарна система за наблюдение и статистика. Самата система е наистина доста проста но върши работа.
Прилагам цялата система в архивиран вид. За да работи е необходимо да си настроите mrtg посредством cfgmaker и indexmaker от инсталацията на mrtg и phpsysinfo посредством пакетната система на дебиан.
Трябва да се отбележи че системата има възможност да показва съобщения настроени от администратора в основният си изглед. Това се постига благодарение на файла header.php
Серията продължава в The Perfect SOHO router – Part 6



