<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Reborn &#187; Статии</title>
	<atom:link href="http://www.getoto.net/topics/articles/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.getoto.net</link>
	<description>And from the ashes the Phoenix rose reborn</description>
	<lastBuildDate>Fri, 20 Aug 2010 13:39:05 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<item>
		<title>Записване на разговори с Nokia N900</title>
		<link>http://www.getoto.net/2010/08/20/zapisvane-na-razgovori-s-nokia-n900/</link>
		<comments>http://www.getoto.net/2010/08/20/zapisvane-na-razgovori-s-nokia-n900/#comments</comments>
		<pubDate>Fri, 20 Aug 2010 13:31:07 +0000</pubDate>
		<dc:creator>Владимир</dc:creator>
				<category><![CDATA[Статии]]></category>
		<category><![CDATA[n900]]></category>
		<category><![CDATA[nokia]]></category>
		<category><![CDATA[record]]></category>
		<category><![CDATA[snoop]]></category>
		<category><![CDATA[wiretap]]></category>
		<category><![CDATA[записване на разговори]]></category>
		<category><![CDATA[подслушване]]></category>
		<category><![CDATA[сигурност]]></category>

		<guid isPermaLink="false">http://www.getoto.net/?p=155</guid>
		<description><![CDATA[Nokia N900 е едно приятно устройство, което може да се ползва дори и като телефон (намиг). В определени ситуации е добре да си записвате разговорите (погледнете забележката в края). Типични примери са: разсеян/а сте &#8211; е сега случва се. Признайте си и да свършим с въпросите Искате да си правите архив на разговорите. Полезно е [...]]]></description>
			<content:encoded><![CDATA[<p>Nokia N900 е едно приятно устройство, което може да се ползва дори и като телефон (намиг). В определени ситуации е добре да си записвате разговорите (погледнете забележката в края). Типични примери са:</p>
<ul>
<li>разсеян/а сте &#8211; е сега случва се. Признайте си и да свършим с въпросите</li>
<li>Искате да си правите архив на разговорите. Полезно е поради ред причини &#8211; например искате да проверите или да имате доказателство за определена бизнес политика</li>
<li>Работите в областта на телефонната поддръжка</li>
</ul>
<p>За пълен архив ви е нужно по някакъв начин да можете да:</p>
<ul>
<li>да записвате всяко едно събитие което се е случило (входящ телефонен разговор, смс съобщение, чат и др.)</li>
<li>да записвате всеки един проведен разговор</li>
</ul>
<p>За ваше щастие това конкретно устройство е с отворен код и има огромно количество приложения за него, и всичко което ни е необходимо е вече налично.</p>
<p><strong>Как ще реализираме задачата</strong><br />
Ще инсталираме 2 приложения. Едното за запазване на архив на събитията случили се на телефона и второто за записване на самите разговори.</p>
<p><strong>Инсталиране на Glogarchive</strong><br />
<strong>Glogarchive</strong> е приложение което може да прави архивно копие на всяко едно събитие което се е случило с вашето устройство.</p>
<p>За да го инсталирате е необходимо да отворите Мениджъра на приложенията <br style="clear:both"/><a href="http://www.getoto.net/wp-content/uploads/2010/08/res-nokia-n900-menu-application-manager.png"><img class="size-full wp-image-157 aligncenter" title="res-nokia-n900-menu-application-manager" src="http://www.getoto.net/wp-content/uploads/2010/08/res-nokia-n900-menu-application-manager.png" alt="n900-menu" width="400" height="240" /></a><br style="clear:both"/> и да изберете менюто за инсталиране на приложения  в отворилото се меню изберете секция <strong>Utilities</strong><br />
<br style="clear:both"/><a href="http://www.getoto.net/wp-content/uploads/2010/08/res-nokia-n900-application-manager-cat-utils.png"><img class="aligncenter size-full wp-image-161" title="nokia-n900-application-manager-cat-utils" src="http://www.getoto.net/wp-content/uploads/2010/08/res-nokia-n900-application-manager-cat-utils.png" alt="application-manager-cat-utils" width="400" height="240" /></a><br style="clear:both"/> и там намерете приоложението <strong>Glogarchive</strong> <br style="clear:both"/><a href="http://www.getoto.net/wp-content/uploads/2010/08/res-nokia-n900-application-manager-app-glogarchive.png"><img class="aligncenter size-full wp-image-162" title="nokia-n900-application-manager-app-glogarchive" src="http://www.getoto.net/wp-content/uploads/2010/08/res-nokia-n900-application-manager-app-glogarchive.png" alt="app-glogarchive" width="400" height="240" /></a><br style="clear:both"/>. Съгласете се с излезналият въпрос дали искате да инсталирате непроверено приложение и продължете <br style="clear:both"/><a href="http://www.getoto.net/wp-content/uploads/2010/08/res-nokia-n900-application-manager-app-glogarchive-install-confirm.png"><img class="aligncenter size-full wp-image-163" title="nokia-n900-application-manager-app-glogarchive-install-confirm" src="http://www.getoto.net/wp-content/uploads/2010/08/res-nokia-n900-application-manager-app-glogarchive-install-confirm.png" alt="app-install-confirm" width="400" height="240" /></a><br style="clear:both"/>. Изчакайте процеса и продължете със инсталирането на следващото приложение.</p>
<p><strong>Инсталиране на Recaller</strong><br />
<strong>Recaller</strong> е приложение което може да прави архивен запис на всеки един разговор проведен през вашият телефон. Освен това може да се използва като диктофон или да записва нещо което слушате.<br />
За да го инсталирате е необходимо да отворите Мениджъра на приложенията и да изберете менюто за инсталиране на приложения в отворилото се меню изберете секция <strong>Desktop</strong> <br style="clear:both"/><a href="http://www.getoto.net/wp-content/uploads/2010/08/res-nokia-n900-application-manager-cat-desktop.png"><img class="aligncenter size-full wp-image-164" title="nokia-n900-application-manager-cat-desktop" src="http://www.getoto.net/wp-content/uploads/2010/08/res-nokia-n900-application-manager-cat-desktop.png" alt="application-manager-cat-desktop" width="400" height="240" /></a><br style="clear:both"/> и там намерете приоложението <strong>Recaller</strong> <br style="clear:both"/><a href="http://www.getoto.net/wp-content/uploads/2010/08/res-nokia-n900-application-manager-app-recaller.png"><img class="aligncenter size-full wp-image-165" title="nokia-n900-application-manager-app-recaller" src="http://www.getoto.net/wp-content/uploads/2010/08/res-nokia-n900-application-manager-app-recaller.png" alt="app-recaller" width="400" height="240" /></a><br style="clear:both"/>. Съгласете се с излезналият въпрос дали искате да инсталирате непроверено приложение и продължете. Изчакайте процеса и продължете към конфигурацията на приложенията.</p>
<p><strong>Конфигуриране на Glogarchive</strong><br />
Влезте в менюто в горният десен ъгъл и скролнете докато откриете glogarchive <br style="clear:both"/><a href="http://www.getoto.net/wp-content/uploads/2010/08/res-nokia-n900-menu-glogarchive.png"><img class="aligncenter size-full wp-image-166" title="nokia-n900-menu-glogarchive" src="http://www.getoto.net/wp-content/uploads/2010/08/res-nokia-n900-menu-glogarchive.png" alt="menu-glogarchive" width="400" height="240" /></a><br style="clear:both"/>. Ще видите следният екран <br style="clear:both"/><a href="http://www.getoto.net/wp-content/uploads/2010/08/res-nokia-n900-app-glogarchive-initial.png"><img class="aligncenter size-full wp-image-167" title="nokia-n900-app-glogarchive-initial" src="http://www.getoto.net/wp-content/uploads/2010/08/res-nokia-n900-app-glogarchive-initial.png" alt="glogarchive-main" width="400" height="240" /></a><br style="clear:both"/>. Няма много за конфигуриране в интерес на истината. Единственото което е необходимо да правите е редовно да пускате приложението и да натискате <strong>&#8222;Archive new Events now!</strong> (погледнете предната картинка). След като извършите архивирането можете да търсите по множество параметри а също така и да експортирате списъка със събития за по нататъшна обработка със друг софтуер. Продължете към конфигуриране на Recaller</p>
<p><strong>Конфигуриране на Recaller</strong><br />
Приложението <strong>Recaller</strong> представлява widget който трябва да бъде добавен на някой десктоп (ако желаете да е наличен естествено). Това се постига като влезете в менюто за редактиране съдържанието на десктопи (след еднократно натискане на екрана се появява зъбно колело, натиснете върху него <br style="clear:both"/><a href="http://www.getoto.net/wp-content/uploads/2010/08/res-nokia-n900-desktop-configure-1.png"><img class="aligncenter size-full wp-image-168" title="res-nokia-n900-desktop-configure-1" src="http://www.getoto.net/wp-content/uploads/2010/08/res-nokia-n900-desktop-configure-1.png" alt="" width="400" height="240" /></a><br style="clear:both"/>). От там изберете добавяне на widget <br style="clear:both"/><a href="http://www.getoto.net/wp-content/uploads/2010/08/res-nokia-n900-desktop-configure-add-widget.png"><img class="aligncenter size-full wp-image-169" title="nokia-n900-desktop-configure-add-widget" src="http://www.getoto.net/wp-content/uploads/2010/08/res-nokia-n900-desktop-configure-add-widget.png" alt="" width="400" height="240" /></a><br style="clear:both"/> и изберете Recaller <br style="clear:both"/><a href="http://www.getoto.net/wp-content/uploads/2010/08/res-nokia-n900-desktop-configure-add-widget-recaller.png"><img class="aligncenter size-full wp-image-170" title="nokia-n900-desktop-configure-add-widget-recaller" src="http://www.getoto.net/wp-content/uploads/2010/08/res-nokia-n900-desktop-configure-add-widget-recaller.png" alt="" width="400" height="240" /></a><br style="clear:both"/>. Докато все още сте в режим на редактиране сложете го някъде където ви е удобно и натиснете гаечният ключ за да покажете менюто за конфигурация <br style="clear:both"/><a href="http://www.getoto.net/wp-content/uploads/2010/08/nokia-n900-desktop-configure-recaller-conf.png"><img class="aligncenter size-full wp-image-171" title="nokia-n900-desktop-configure-recaller-conf" src="http://www.getoto.net/wp-content/uploads/2010/08/nokia-n900-desktop-configure-recaller-conf.png" alt="" width="107" height="102" /></a><br style="clear:both"/>. В отворилото се меню изберете настройки и попълнете както ви харесва. Ако искате да записвате всеки разговор автоматично е необходимо да изберете кутийката до <strong>AutoRec</strong> <br style="clear:both"/><a href="http://www.getoto.net/wp-content/uploads/2010/08/res-nokia-n900-app-recaller-setup.png"><img class="aligncenter size-full wp-image-172" title="nokia-n900-app-recaller-setup" src="http://www.getoto.net/wp-content/uploads/2010/08/res-nokia-n900-app-recaller-setup.png" alt="" width="400" height="240" /></a><br style="clear:both"/>. С така направените настройки разговорите ще се записват автоматично в папка <strong>Recordings</strong> в публично достъпната част от паметта на телефона във формата <strong>AAC</strong> като източника на звук ще бъде телефонът.</p>
<p><strong>А После на къде</strong><br />
Е вече имате записите които са сортирани според телефонът на човека който ви е търсил със продължителността им и часът и т.н. С тях можете да правите каквото си искате. По мои наблюдения играчката записва с доста добро качество и използва около 1МБ дисково пространство за 1 минута разговор. Което ще рече че съвсем спокойно можете да записвате доста дълго време (27 ГБ място за използване хич не е малко).</p>
<p><strong>Забележка и предупреждение</strong><br />
Имайте предвид че записването на разговор без знанието и съгласието и на двете страни е наказуемо според българското законодателство и може да ви ухапе доста неприятно. Не съм адвокат но поне по беклите спомени които имам уведомяването в началото на разговора и искането на съгласие е достатъчно.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.getoto.net/2010/08/20/zapisvane-na-razgovori-s-nokia-n900/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>USB Networking за Nokia N900</title>
		<link>http://www.getoto.net/2010/06/19/usb-networking-za-nokia-n900/</link>
		<comments>http://www.getoto.net/2010/06/19/usb-networking-za-nokia-n900/#comments</comments>
		<pubDate>Sat, 19 Jun 2010 10:22:12 +0000</pubDate>
		<dc:creator>Владимир</dc:creator>
				<category><![CDATA[hardware]]></category>
		<category><![CDATA[Статии]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[maemo]]></category>
		<category><![CDATA[n900]]></category>
		<category><![CDATA[networking]]></category>
		<category><![CDATA[nokia]]></category>
		<category><![CDATA[routing]]></category>
		<category><![CDATA[ubuntu]]></category>
		<category><![CDATA[usb]]></category>

		<guid isPermaLink="false">http://www.getoto.net/?p=128</guid>
		<description><![CDATA[От известно количество време съм собственик на Nokia N900 MID. В цялото словосъчетание като че ли Multimedia Internet Device е важната част, но не отразява дори с малко какво може устройството. Накратко това е по скоро таблет със малко GSM чарколяцо отколкото телефон с браузър. За бонус играчката е доста отворена (по подразбиране си идва [...]]]></description>
			<content:encoded><![CDATA[<p>От известно количество време съм собственик на Nokia N900 MID. В цялото словосъчетание като че ли <strong>M</strong>ultimedia <strong>I</strong>nternet <strong>D</strong>evice е важната част, но не отразява дори с малко какво може устройството.<br />
Накратко това е по скоро таблет със малко GSM чарколяцо отколкото телефон с браузър. За бонус играчката е доста отворена (по подразбиране си идва със шел към нея), базирана е на прилични стандарти и като цяло е готина занимавка.</p>
<h1>Какво ще разглеждаме днес</h1>
<p><a href="http://www.getoto.net/wp-content/uploads/2010/06/nokia-n900-a.jpg"><img class="alignnone size-full wp-image-129" title="Nokia N900 MID" src="http://www.getoto.net/wp-content/uploads/2010/06/nokia-n900-a.jpg" alt="Nokia N900 MID" width="500" height="383" /></a><br />
<strong>Устройство:</strong> Nokia N900<br />
<strong>Хардуер:</strong> ARM A8 Cortex SOC, 256MB RAM, 32GB Internal Flash, 3,5 inch 800&#215;480 touchscreen дисплей, пълна qwerty клавиатура<br />
<strong>Софтуер:</strong> Maemo 5, частично базиран на дебиан (кодово име Fremantle) &#8211; не не е Freemantle, и аз го бърках доста.<br />
<strong>Възможности:</strong> Сърфиране из нета, пощенски клиент, таблет, мултимедийна станция (да поддържа и UPnP и DLNA), четене на документи, чат клиент, фотоапарат, бърза редакция на прости документи, календар и даже телефон. Поглеждайки всичката функционалност достъпна в устройството човек добива чувството че телефона е по скоро сложен защото са има място на платката отколкото че специално са си мислили да го слагат (но пък всеки може да си мисли каквото си иска). Едно от най приятните неща свързани с тази играчка е факта че можете съвсем спокойно да си инсталирате доста прилични количества софтуер, без почти никакъв риск. Ако официалният или community based софтуер не ви достига никой не ви спира да седнете и да си хакнете нещо което на вас ви трябва/харесва. Nokia предоставят всички необходими инструменти за разработка &#8211; включително виртуална машина със всичкия необходим софтуер и емулатор в който да си тествате софтуера който пишете.</p>
<h1>Какво ще правим днес</h1>
<p>Днес ще ви покажа как можете да използвате USB кабела за да се свържете със вашия телефон посредством SSH, да му дадете малко Internet (защото наоколо няма WI-FI а не ви се плаща на българските оператори кожодери) и как да убедите стандартните приложения че има интернет. Платформата върху която ще реализираме цялото упражнение (освен Телефона/Таблета/Играчката) е Ubuntu 9.04 (Jaunty) и Ubuntu 9.10 (Karmic). Все пак разполагам само с това под ръка.</p>
<h1>Как ще протече целият процес</h1>
<ul>
<li>Инсталиране на необходимият софтуер върху устройството</li>
<li>Конфигуриране на USB мрежата от страна на устройството</li>
<li>Конфигуриране на USB мрежата от страна на Компютъра</li>
<li>Конфигуриране на автоматична активация/деактивация на USB мрежата от страна на устройството</li>
<li>Конфигуриране на рутирането от страна на компютъра</li>
<li>Обучаване на стандартните маемо приложения че имат интернет :)</li>
</ul>
<p>Изхождаме от предположението че имате Wi-Fi под ръка. Не че иначе не е постижимо но ще отнеме повечко време и ще е доста неудобно. Въпреки че клавиатурата е удобна за писане, не е най-добрата когато става въпрос за специални знаци и *nix команди.</p>
<h1>Инсталиране на необходимия софтуер върху устройството</h1>
<p>За да си свършим задачките ще ни е необходим малко софтуер. В случая ще ни е необходим root достъп за да променим няколко системни файла. Цялата операция може да се осъществи от самото устройство, но смятам че е по удобно да я свършите с помощта на малко по голяма и удобна клавиатура като тази на вашият компютър/лаптоп.</p>
<p>За целта на занятието ще ни е необходим следният софтуер:</p>
<ul>
<li>rootsh &#8211; за да придобием root достъп от конзолата на устройството (ако изпитаме нужда)</li>
<li>SSH сървър &#8211; налични са OpenSSH и Dropbear &#8211; по ваш избор. Аз лично предпочитам OpenSSH. Намира се в хранилището extras-testing</li>
<li>﻿personal-ip-address &#8211; това е аплет за един от десктопите който ще ви покаже ип адреса на устройството. Това е по скоро удобство</li>
<li>libicd-network-null &#8211; това е модул за мрежовата подсистема който позволява създаване на фалшиви мрежови връзки. Устройството по подразбиране поддържа само wireless и gprs (официално). Намира се в хранилището extras-devel което по подразбиране не е въведено</li>
</ul>
<p>За начало може да инсталирате само SSH сървъра и после останалата част ако прецените че ви е нужна. За да инсталирате SSH сървър е необходимо да добавите хранилището extras тестинг през нормалният пакетен мениджър на Maemo. Докато сте там може да си инсталирате и rootsh &#8211; полезен е. В процеса на инсталация ще бъдете попитани да си въведете новата root парола (без нея няма как да се логнете на играчката).</p>
<p>След като инсталирате софтуера пробвайте да се закачите :) трябва да се случи и вие вече сте root с абсолютни права върху устройството. Бъдете внимателни и не правете нищо лудо (като <strong>rm -rf /</strong>)</p>
<h1>Конфигуриране на USB мрежата от страна на устройството</h1>
<p>Все пак за да можем да имаме мрежа тя трябва да е конфигурирана и от двете страни на кабела. Сега след като вече сте се логнали в устройството е време да се захващаме за работа.</p>
<p>Отворете <strong>/etc/network/interfaces</strong><br />
Там трябва да откриете нещо подобно на:</p>
<pre class="brush: bash;">auto lo
iface lo inet loopback
auto eth0
iface eth0 inet dhcp
auto usb0
iface usb0 inet static
	address 192.168.2.15
	netmask 255.255.255.0
	gateway 192.168.2.14</pre>
<p>Ако не изглежда така постарайте се и нека заприлича. Важното в случая са редовете след <strong>auto usb0</strong> адреса си го изберете както ви подхожда но го запомнете. Адреса в реда с <strong>gateway</strong> ще ни е необходим малко по късно за другият край на мрежата. Това е една добра конфигурация която ще разширим малко по късно.</p>
<p>Сега е време да изпробвате дали сте направили всичко правилно :)</p>
<pre class="brush: bash; light: true;">ifup usb0
ifconfig</pre>
<p>Ако в изхода от <strong>ifconfig</strong> идите нещо подобно на:</p>
<pre class="brush: bash; light: true;">usb0      Link encap:Ethernet  HWaddr FE:84:91:74:71:F7
          inet addr:192.168.2.15  Bcast:192.168.2.255  Mask:255.255.255.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:3373 errors:0 dropped:0 overruns:0 frame:0
          TX packets:7065 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:168768 (164.8 KiB)  TX bytes:2344721 (2.2 MiB)</pre>
<p>Всичко работи както би трябвало.</p>
<h1>Конфигуриране на USB мрежата от страна на Компютъра</h1>
<p>След като сте конфигурирали единият край на мрежата време е да конфигурирате и другия :) тоест вашият компютър лаптоп. Последно време започнах да оценявам удобствата на Gnome Network Manager така че ще покажа как се случват работите там.<br />
Първата стъпка е да включите телефона си посредством USB кабела към вашата машина. На въпроса в какъв режим да се представя пред вашият компютър изберете <strong>PC-Suite mode</strong>. След кратко мислене във NetworkManager-а ще се появят две нови устройства. Жична мрежа и GSM модем. Би трябвало да изглежда по подобен начин. (извинявам се но вече при мен е конфигурирано)<br />
<a href="http://www.getoto.net/wp-content/uploads/2010/06/NM-01.png"><img class="alignnone size-medium wp-image-134" title="NM-01" src="http://www.getoto.net/wp-content/uploads/2010/06/NM-01-300x189.png" alt="" width="300" height="189" /></a><br />
Време е да изберете опцията за редактиране на връзки, да изберете вашата връзка (най-вероятно е Auto USB0) и да я конфигурирате, както е показано в следващите две снимки:</p>
<p><a href="http://www.getoto.net/wp-content/uploads/2010/06/NM-02.png"><img class="alignnone size-medium wp-image-135" title="NM-02" src="http://www.getoto.net/wp-content/uploads/2010/06/NM-02-219x300.png" alt="" width="219" height="300" /></a><a href="http://www.getoto.net/wp-content/uploads/2010/06/NM-03.png"><img class="alignnone size-medium wp-image-136" title="NM-03" src="http://www.getoto.net/wp-content/uploads/2010/06/NM-03-218x300.png" alt="" width="218" height="300" /></a><br />
За да проверим дали всичко е наред изключете кабела, включете го отново и изберете пак PC-Suite mode. Едно нещо за което трябва да внимавате е да не променяте мак адреса който е открит от Network Manager-a след малко ще обясним на телефона как да използва винаги него.<br />
Сега вече трябва да можете да пингнете вашият телефон закачен през кабелчето :)</p>
<h1>Конфигуриране на автоматична активация/деактивация на USB мрежата от страна на устройството</h1>
<p>Сега след като вече имаме връзка между компютъра и телефона базирана на USB кабела време е да обучим телефона да не променя тази връзка и да я активира/спира автоматично всеки път когато изберете PC-Suite mode. За целта са необходими няколко стъпки:</p>
<ul>
<li>Обясняване на телефона винаги да използва същият мак адрес за да може връзката да се активира автоматично от страната на компютъра</li>
<li>добавяне на автоматично активиране на интерфейса при влизане в PC-Suite Mode</li>
<li>Добавяне на правилен gateway и рутинг при активиране на интерфейса</li>
<li>автоматично деактивиране на интерфайса при излизане от PC-Suite mode</li>
</ul>
<h2>Обясняване на телефона винаги да използва същият мак адрес за да може връзката да се активира автоматично от страната на компютъра</h2>
<p>Това е необходимо поради причината че при всеки рестарт на телефона мак адреса на usb интерфейса се генерира на ново. И като цяло е винаги различен. Приучаването се състои в дефинирането на опция за кернел модула който се грижи за този мрежов интерфейс (<strong>g_nokia</strong>). Логнете се като root на вашият телефон (това звучи яко) и изпълнете</p>
<pre class="brush: bash; light: true;">echo &gt; &quot;options g_nokia host_addr=C6:EB:3E:B7:65:D7&quot; &gt; /etc/modprobe.d/g_nokia</pre>
<p>Или всеки един мак адрес който ви харесва (например: <strong>C0:FF:EE:C0:FF:EE</strong> или <strong>01:23:45:67:89:AB</strong>). Ако сменяте мак адреса ще се наложи да рестартирате телефона за да прихване новата настройка.</p>
<h2>добавяне на автоматично активиране на интерфейса при влизане в PC-Suite Mode</h2>
<p>При избиране на PC-Suite mode от менюто при включване се изпълнява скрипта <strong>/usr/sbin/pcsuite-enable.sh</strong>. За да активираме автоматично интерфейса трябва да добавим в края му необходимите ни команди. Намерете секцията:</p>
<pre class="brush: bash;">kill -USR1 $SYNCD_PID
logger &quot;$0: sent SIGUSR1 to syncd&quot;

exit 0</pre>
<p>и я заменете с:</p>
<pre class="brush: bash;">kill -USR1 $SYNCD_PID
logger &quot;$0: sent SIGUSR1 to syncd&quot;
ifup usb0
echo &quot;nameserver 8.8.8.8&quot; &gt;&gt; /etc/resolv.conf
echo &quot;nameserver 8.8.4.4&quot; &gt;&gt; /etc/resolv.conf

exit 0</pre>
<p>Реално добавяме 3 команди:</p>
<ul>
<li>ifup usb0 &#8211; автоматично ще вдигне нашият интерфейс</li>
<li>echo &#8222;nameserver x.x.x.x&#8220; &gt;&gt; /etc/resolv.conf &#8211; ще добави допълнителни сървъри за имена към стандартните (направил съм го с цел да се избягнат някои шантави и/или проблемни DNS сървъри. Посочените адреси са публичните DNS сървъри на google. Ако не ви харесват можете да ги замените с други по ваше усмотрение.</li>
</ul>
<h2>Добавяне на правилен gateway и рутинг при активиране на интерфейса</h2>
<p>За да сме сигурни че телефонът няма да сътвори глупости от типа на използване на GPRS за разни глупости ще подменим пътят по подразбиране и gateway-а. За целта добавете в дефиницията за интерфейса в <strong>/etc/network/interfaces</strong></p>
<pre class="brush: bash;">	up route del default
	up route add default gw  192.168.2.14</pre>
<h2>автоматично деактивиране на интерфайса при излизане от PC-Suite mode</h2>
<p>При изваждане на USB кабела автоматично се изпълнява скрипта <strong>/usr/sbin/pcsuite-disable.sh</strong> където и ще добавим нашите инструкции за автоматично спиране на интерфейса.<br />
Намерете секцията:</p>
<pre class="brush: bash;">logger &quot;$0: do nothing to pass USB certs&quot;

exit 0</pre>
<p>и я заменете с:</p>
<pre class="brush: bash;">logger &quot;$0: do nothing to pass USB certs&quot;
ifdown usb0
echo &quot;nameserver 127.0.0.1&quot; &gt; /etc/resolv.conf

exit 0</pre>
<p>Както е видно спираме интерфейса и възстановяваме статуквото с DNS сървърите. След тези операции вече при включване на usb кабела и избиране на PC-Suite mode автоматично ще се вдига интерфейс с настройки да взема интернет от машината за която е закачен, но за съжаление машината за която е закачен все още не знае как да му даде интернет.</p>
<h1>Конфигуриране на рутирането от страна на компютъра</h1>
<p>Колкото и да улеснява Network Manager-а при някои операции (видяхте колко бързо се справи с откриването и разпознаването на телефона) все пак той крие и доста недостатъци. Като факта че част от стандартните парадигми с които е свикнал един системен администратор не работят както се очаква. Стандартният администратор би дефинирал usb0 интерфейса по начин подобен на този за телефонната страна със команди във up клаузата които да пуснат ip_forward и да добавят необходимите iptables правила и ще установи че нещо не се получава &#8230; За да ви спестя заигравките оставаме изцяло в свена на Network Manager-a. Той поддържа възможност за изпълняване на скриптове при определени събития (като включване/изключване на интерфейс и др.)<br />
Създайте следният файл: <strong>/etc/NetworkManager/dispatcher.d/99nokia-n900-routing</strong> със следното съдържание:</p>
<pre class="brush: bash;">#!/bin/sh -e
# Script to dispatch NetworkManager events
#
# Runs when NetworkManager fiddles with interfaces.
# Author vvitkov
# ver: 0.1
# based on NM standard dispatcher for ifupdown

if [ -z &quot;$1&quot; ]; then
    echo &quot;$0: called with no interface&quot; 1&gt;&amp;2
    exit 1;
fi

# Fake ifupdown environment
export IFACE=&quot;$1&quot;
export LOGICAL=&quot;$1&quot;
export ADDRFAM=&quot;NetworkManager&quot;
export METHOD=&quot;NetworkManager&quot;
export VERBOSITY=&quot;0&quot;

# Run the right scripts
case &quot;$2&quot; in
    up)
	export MODE=&quot;start&quot;
	export PHASE=&quot;up&quot;

	if [ $IFACE = 'usb0' ] ; then
		iptables -A POSTROUTING -t nat -s 192.168.2.15/32 -j MASQUERADE
		echo 1 &gt; /proc/sys/net/ipv4/ip_forward
	fi

	;;
    down)
	export MODE=&quot;stop&quot;
	export PHASE=&quot;down&quot;

	if [ $IFACE = 'usb0' ] ; then
		iptables -D POSTROUTING -t nat -s 192.168.2.15/32 -j MASQUERADE
		echo 0 &gt; /proc/sys/net/ipv4/ip_forward
	fi

	;;
    pre-up)
	export MODE=&quot;start&quot;
	export PHASE=&quot;pre-up&quot;
	;;
    post-down)
	export MODE=&quot;stop&quot;
	export PHASE=&quot;post-down&quot;
	;;
    *)
	echo &quot;$0: called with unknown action \`$2'&quot; 1&gt;&amp;2
	exit 1
	;;
esac</pre>
<p>Изпълнете отново магическите действия изключване на кабел, включване на кабел, избор на PC-Suite mode и кратко изчакване. Вече от вашият телефон съвсем спокойно трябва да можете да пингвате разни машини в интернет като примерно www.google.com.</p>
<h1>Обучаване на стандартните маемо приложения че имат интернет :)</h1>
<p>Въпреки че телефона има интернет приложенията които идват с него все още не знаят за това. Те разчитат на D-Bus да ги информира за подобни събития и докато не бъдат информирани си мислят че нет няма. Трябва да коригираме това :)<br />
За целта ще добавим нова фиктивна конекция която да активираме при вдигането на usb0 интерфейса на телефонът ни. За да можем да добавим фиктивната конекция ни е необходим пакета <strong>libicd-network-null</strong> който се намира в <strong>extras-devel</strong> хранилището за пакети. Тъй като ще използваме това хранилище само за един пакет не е нужно да го добавяме в стандартният пакетен мениджър.</p>
<ul>
<li>логнете се като root във вашият телефон</li>
<li>добавете в края на <strong>/etc/apt/sources.list.d/hildon-application-manager.list</strong> следният ред <strong>deb http://repository.maemo.org/extras-testing/ fremantle free non-free</strong></li>
<li>обновете списъка с пакети: <strong>apt-get update</strong></li>
<li>инсталирайте необходимият пакет: <strong>apt-get install libicd-network-null</strong></li>
<li>премахнете добавеният ред и обновете списъка с пакетите отново</li>
</ul>
<p>Вече имаме необходимата инфраструктура за създаване на фиктивна мрежова връзка. Изпълнете следното за да я добавите и активирате (на телефона):</p>
<pre class="brush: bash;">gconftool-2 -s -t string /system/osso/connectivity/IAP/DUMMY/type DUMMY
gconftool-2 -s -t string /system/osso/connectivity/IAP/DUMMY/name &quot;USBnet&quot;
gconftool-2 -s -t string /system/osso/connectivity/IAP/DUMMY/autoconnect false
killall icd2</pre>
<p>С това дефинираме фиктивна връзка с вътрешен идентификатор <strong>DUMMY</strong> и име <strong>USBnet</strong>.<br />
Единственото което остава да направим е да информирам D-Bus подсистемата при активирането на интерфейса да включи тази връзка и съответно при спирането на интерфейса да я изключи. Това се постига с добавянето на следните 2 реда към <strong>/etc/network/interfaces</strong> в секцията за usb0</p>
<pre class="brush: bash;">	up run-standalone.sh dbus-send --type=method_call --system --dest=com.nokia.icd /com/nokia/icd com.nokia.icd.connect string:DUMMY uint32:0
	down run-standalone.sh dbus-send --system --dest=com.nokia.icd /com/nokia/icd_ui com.nokia.icd_ui.disconnect boolean:true</pre>
<h1>Заключение</h1>
<p>Вече вашият телефон може да разполага с интернет посредством usb кабел. Тествайте сами и се убедете.<br />
Част от информацията е взаимствана от: <a href="http://wiki.maemo.org/N900_USB_networking">http://wiki.maemo.org/N900_USB_networking</a><br />
Ако имате въпроси питайте</p>
]]></content:encoded>
			<wfw:commentRss>http://www.getoto.net/2010/06/19/usb-networking-za-nokia-n900/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Ревю на QNAP TS-219P NAS</title>
		<link>http://www.getoto.net/2010/01/09/review-na-qnap-ts-219p-nas/</link>
		<comments>http://www.getoto.net/2010/01/09/review-na-qnap-ts-219p-nas/#comments</comments>
		<pubDate>Sat, 09 Jan 2010 13:44:39 +0000</pubDate>
		<dc:creator>Владимир</dc:creator>
				<category><![CDATA[hardware]]></category>
		<category><![CDATA[review]]></category>
		<category><![CDATA[Статии]]></category>
		<category><![CDATA[embedded]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[qnap]]></category>
		<category><![CDATA[tests]]></category>
		<category><![CDATA[TS-219P]]></category>

		<guid isPermaLink="false">http://www.getoto.net/?p=89</guid>
		<description><![CDATA[TS-219 Pro е високо производителен NAS сървър поддържащ до 2 SATA I/II Диска с общ капацитет до 4TB. Днес разглежданият NAS сървър е един от най-добрите в своят клас. Характеризира се най-пълно с изречението „Многофункционално мрежово устройство за съхранение на данни в малък офис или у дома и още нещо.“]]></description>
			<content:encoded><![CDATA[<p>QNAP&#8217;s TS-219 Pro е високо производителен NAS сървър поддържащ до 2 SATA I/II Диска с общ капацитет до 4TB. Днес разглежданият NAS сървър е един от най-добрите в своят клас. Характеризира се най-пълно с изречението „<em>Многофункционално мрежово устройство за съхранение на данни в малък офис или у дома и още нещо.</em>.“</p>
<h1>Какво ще разглеждаме днес</h1>
<div id="attachment_90" class="wp-caption alignnone" style="width: 240px"><a href="http://www.getoto.net/wp-content/uploads/2010/01/product.jpg"><img class="size-medium wp-image-90" title="QNAP TS-219P" src="http://www.getoto.net/wp-content/uploads/2010/01/product-230x300.jpg" alt="QNAP TS-219P" width="230" height="300" /></a><p class="wp-caption-text">QNAP TS-219P</p></div>
<p><strong>High Performance 2-Bay Turbo NAS Server</strong><br />
<strong>Model: TS-219 Pro</strong></p>
<h1><strong>Хардуерни характеристики</strong></h1>
<p>Всяко едно устройство първично се характеризира с вложените в него компоненти и качество на изработката.<br />
С удоволствие мога да кажа, че QNAP са свършили страхотна работа. Не само изработката на устройството е превъзходна но и вложените компоненти са предостатъчни за продължителна и надеждна работа.</p>
<ul>
<li><strong>CPU:</strong> Marvell 1.2 Ghz</li>
<li><strong>RAM:</strong> 512MB</li>
<li><strong>FLASH:</strong> 16MB</li>
<li><strong>HDD:</strong> 2 SATA I/II Slots for 2,5/3,5 inch disks</li>
<li><strong>LAN:</strong> 1 x 1Gbit LAN Port</li>
<li><strong>External ports:</strong> Power, 3 x USB 2.0, 2 x eSata</li>
<li><strong>Form Factor:</strong> Small Tower</li>
<li><strong>Size:</strong> 150(H) x 102 (W) x 216(D) mm</li>
</ul>
<p>Прави много добро впечатление че кутията е изцяло изработена от много солидна ламарина с много приятен за окото кафяв оттенък. Единственият компонент по кутията който не е метален, е пластмасовият преден капак покриващ изведените контролни бутони и индикатори за състоянието на устройството. Самото устройство изглежда солидно и здраво но въпреки това е по-леко от очакваното, имайки предвид изработката му. В самото устройство има единична силно интегрирана платка със SOC елемент, RAM чипове, които за съжаление са запоени към платката и не подлежат на подмяна или разширяване, дъщерна карта към която се закачат твърдите дискове (абсолютно безпроблемно) и малък индикаторен и контролен панел.</p>
<h1>Софтуерни особенности</h1>
<p>Прави добро впечатление как производителите от QNAP съвсем спокойно обявяват че устройството им работи благодарение на GNU/Linux система и в официалната си документация са включили GPL V3.0 лиценза в пълният му текст. За незапознатите процесорът на Marvell е базиран на ARM V7. Друг приятен момент в запознаването с устройството е че от самото начало ssh достъпа до него е разрешен. Потребителският инерфейс чрез който може да се управлява устройството е доста красив, функционален изграден в голяма част със типичните за web 2.0 инструменти. Базиран е на HTML, AJAX, библиотеките jquery и scriptalicious.<br />
Начините за употреба на устройстовото са почти безгранични. Имайки предвид че това реално е мрежов сървър за съхранение на данни в него можем да намерим всички очаквани услуги:</p>
<ul>
<li>HTTP</li>
<li>FTP включително със TLS и FXP (сваляне 	от самият FTP сървър)</li>
<li>SMB или по-известно като Microsoft Networking</li>
<li>AFP изестен като Apple File Protocol</li>
<li>NFS който е дефакто стандарт в Unix/Linux/BSD среда</li>
</ul>
<p>Допълнително за да се улесни живота на потребителите (или да се утежни живота на администраторите, в зависимост от интерпретацията) има налични няколко допълнителни приложения и възможности:</p>
<ul>
<li>Download Station – комбинация от битторент клиент и система за сваляне на файлове</li>
<li>Multimedia Station – за излъчване на съхранената музика/филми към съвместими 	плеъри</li>
<li>iTunes сървър с поддръжка на плейлисти</li>
<li>Web File Manager – за по лесно качване/сваляне на файлове</li>
<li>Surveillance station – дава възможност за управление и архивиране на до 2 IP базирани видеокамери</li>
<li>WEB сървър – в допълнение на стандартният малък сървър необходим за показване на потребителският интерфейс чрез който могат да се сервират файлове и приложения.</li>
<li>MySQL сървър</li>
<li>Пакетен мениджър – чрез него могат да се инсталират не малък брой приложения включително популярният сред хардуерните среди пакетен мениджър ipkg.</li>
</ul>
<h1>Първична инсталация</h1>
<p>За голямо неудоволствие на потребителите на операционни системи различни от Microsoft Winodows или Mac QNAP не предлагат инструменти за първично кофигуриране или управление. Въпреки това рааботата с устройството е много лесна и приятна. Един труден момент е намирането на ип адреса на устройството ако не използвате някоя от споменатите по горе две операционни системи.<br />
При първото си включване TS-219P ако в мрежата ви има наличен DHCP сървър той си взема автоматично адрес. При обратната ситуация автоматично си настройва така нареченият Link Local address (169.254.100.100). След свързване с горепосоченият адрес се вижда следното:<br />
<a href="http://www.getoto.net/wp-content/uploads/2010/01/ts-219p-screenshot-01.png"><img class="alignnone size-medium wp-image-95" title="ts-219p-screenshot-01" src="http://www.getoto.net/wp-content/uploads/2010/01/ts-219p-screenshot-01-300x219.png" alt="" width="300" height="219" /></a><br />
с което ни подканва да инициализираме новото ни устройство и естествено ни информира че всичката информация на диска ще бъде изтрита.<br />
Следва първично инициализиране на диска при което се установяват необходимите за работа дялове:<br />
<a href="http://www.getoto.net/wp-content/uploads/2010/01/ts-219p-screenshot-02.png"><img class="alignnone size-medium wp-image-97" title="ts-219p-screenshot-02" src="http://www.getoto.net/wp-content/uploads/2010/01/ts-219p-screenshot-02-300x219.png" alt="" width="300" height="219" /></a><br />
Прави добро впечатление че в процеса на първична инсталация инженерите от QNAP са решили да наложат задължителен ъпгрейд на наличният фирмуеър движещ устройството. За съжаление се приема всеки валиден имидж на операционната система<br />
<a href="http://www.getoto.net/wp-content/uploads/2010/01/ts-219p-screenshot-03.png"><img class="alignnone size-medium wp-image-98" title="ts-219p-screenshot-03" src="http://www.getoto.net/wp-content/uploads/2010/01/ts-219p-screenshot-03-300x219.png" alt="" width="300" height="219" /></a><br />
След обновяването на софтуера следва доста симпатичен магьосник за началните настройки.<br />
<a href="http://www.getoto.net/wp-content/uploads/2010/01/ts-219p-screenshot-04.png"><img class="alignnone size-medium wp-image-99" title="ts-219p-screenshot-04" src="http://www.getoto.net/wp-content/uploads/2010/01/ts-219p-screenshot-04-300x219.png" alt="" width="300" height="219" /></a><br />
След въвеждане на очакваните настройки: име на устройството, администраторска парола, IP конфигурация, синхронизция на времето, избор на услугите които да бъдат активирани и избиране на дисковата конфигурация следва екран обобщаващ направените избори и очакващ потвърждения:<br />
<a href="http://www.getoto.net/wp-content/uploads/2010/01/ts-219p-screenshot-05.png"><img class="alignnone size-medium wp-image-100" title="ts-219p-screenshot-05" src="http://www.getoto.net/wp-content/uploads/2010/01/ts-219p-screenshot-05-300x219.png" alt="" width="300" height="219" /></a><br />
След прилагането на избраните настройки и инициализиране на дисковете NAS устройството се рестартира и пренасочва към административният интерфейс:<br />
<a href="http://www.getoto.net/wp-content/uploads/2010/01/ts-219p-screenshot-06.png"><img class="alignnone size-medium wp-image-101" title="ts-219p-screenshot-06" src="http://www.getoto.net/wp-content/uploads/2010/01/ts-219p-screenshot-06-300x219.png" alt="" width="300" height="219" /></a><br />
Освен показаният по горе интерфейс в стил Cover Flow има и вариант в който просто иконите са подредени в един ред.</p>
<h1>Административен интерфейс</h1>
<p>При опит за свързване с IP адреса на устройството (ако не е активиран web сървърът) потребителят е пренасочен към административният интерфейс на порт 8080 където могат да бъдат използвани различните активирани приложения и административният интерфейс. За влизане в системата се поддържа и SSL криптиране на връзката между администратора и NAS устройството.<br />
<a href="http://www.getoto.net/wp-content/uploads/2010/01/ts-219p-screenshot-07.png"><img class="alignnone size-medium wp-image-102" title="ts-219p-screenshot-07" src="http://www.getoto.net/wp-content/uploads/2010/01/ts-219p-screenshot-07-300x219.png" alt="" width="300" height="219" /></a><br />
При въвеждане на административен потребител ни се показва административният интерфейс в който ни се предоставят на пръв поглед някои често използвани задачи:<br />
<a href="http://www.getoto.net/wp-content/uploads/2010/01/ts-219p-screenshot-08.png"><img class="alignnone size-medium wp-image-103" title="ts-219p-screenshot-08" src="http://www.getoto.net/wp-content/uploads/2010/01/ts-219p-screenshot-08-300x219.png" alt="" width="300" height="219" /></a><br />
В дървовидната структура много добре са подредени всички необходими задачи с ясно изразени икони и удобства. Малък недостатък който се забелязва при работа с устройството е кеширането на данните особенно при операции свързани с тотално преконфигуриране на дисковата конфигурация. Това води до пълно изтриване на данните но поради кеширането част от етикетите и предишните конфигурации остават активни.</p>
<h1>Интересни елементи на устройството</h1>
<p>Въпреки че TS-219P се предлага като NAS сървър то има далеч повече функционалност от очакваната. Както споменахме в предните параграфи, има голям набор от приложения и услуги. Сред тях изпъкват наличният DHCP сървър и възможността за настройване на jumbo frames:<br />
<a href="http://www.getoto.net/wp-content/uploads/2010/01/ts-219p-screenshot-09.png"><img class="alignnone size-medium wp-image-105" title="ts-219p-screenshot-09" src="http://www.getoto.net/wp-content/uploads/2010/01/ts-219p-screenshot-09-300x219.png" alt="" width="300" height="219" /></a><br />
Системата за хардуерен мониторинг:<br />
<a href="http://www.getoto.net/wp-content/uploads/2010/01/ts-219p-screenshot-10.png"><img class="alignnone size-medium wp-image-106" title="ts-219p-screenshot-10" src="http://www.getoto.net/wp-content/uploads/2010/01/ts-219p-screenshot-10-300x219.png" alt="" width="300" height="219" /></a><br />
Базовата защита от мрежови атаки изнесена в удобен интерфейс:<br />
<a href="http://www.getoto.net/wp-content/uploads/2010/01/ts-219p-screenshot-11.png"><img class="alignnone size-medium wp-image-107" title="ts-219p-screenshot-11" src="http://www.getoto.net/wp-content/uploads/2010/01/ts-219p-screenshot-11-300x219.png" alt="" width="300" height="219" /></a><br />
Вариантите за известяване (e-mail, sms):<br />
<a href="http://www.getoto.net/wp-content/uploads/2010/01/ts-219p-screenshot-12.png"><img class="alignnone size-medium wp-image-108" title="ts-219p-screenshot-12" src="http://www.getoto.net/wp-content/uploads/2010/01/ts-219p-screenshot-12-300x219.png" alt="" width="300" height="219" /></a><br />
Доста разочароващо е липсата на възможноста за известяване и управление посредством SNMP, но това не е задължително за всеки. Всъщност това е необходимо за по-големи организации които не са в целевият сегмент на устройството.<br />
Друга забележителна възможност за устройство от такъв клас е възможността за създаване и управление на iscsi target дялове:<br />
<a href="http://www.getoto.net/wp-content/uploads/2010/01/ts-219p-screenshot-13.png"><img class="alignnone size-medium wp-image-109" title="ts-219p-screenshot-13" src="http://www.getoto.net/wp-content/uploads/2010/01/ts-219p-screenshot-13-300x219.png" alt="" width="300" height="219" /></a><br />
В тази функционалност е интересно да се отпележи възможноста за тънко провизиране на дяловете предназначени за iscsi target. Посредством тази възможност в първият момент не се заема цялото място което сме решили да отделим за конкретният случай, което от своя страна позволява създаването на повече дялове които при нарастване запълват наличното място. При подобна ситуация е възможно да се извърши онлайн разширяване на дисковото пространство.<br />
Също така интересни са и възможностите за онлайн миграция и разширяване на наличното пространство. Системата автоматично определя възможните действия над избраните дялове/дискове и предоставя само тези възможности:<br />
<a href="http://www.getoto.net/wp-content/uploads/2010/01/ts-219p-screenshot-14.png"><img class="alignnone size-medium wp-image-110" title="ts-219p-screenshot-14" src="http://www.getoto.net/wp-content/uploads/2010/01/ts-219p-screenshot-14-300x219.png" alt="" width="300" height="219" /></a><br />
<a href="http://www.getoto.net/wp-content/uploads/2010/01/ts-219p-screenshot-15.png"><img class="alignnone size-medium wp-image-111" title="ts-219p-screenshot-15" src="http://www.getoto.net/wp-content/uploads/2010/01/ts-219p-screenshot-15-300x219.png" alt="" width="300" height="219" /></a><br />
Предлагат се доста възможности за споделяне на данните в зависимост от избраният протокол, включително присъединяване на устройството към активна директория, частично премахване на блокирането на файлове при достъп, правата на различните потребители/групи и адреси от които се опитва достъп до ресурсите на системата.<br />
<a href="http://www.getoto.net/wp-content/uploads/2010/01/ts-219p-screenshot-16.png"><img class="alignnone size-medium wp-image-112" title="ts-219p-screenshot-16" src="http://www.getoto.net/wp-content/uploads/2010/01/ts-219p-screenshot-16-300x219.png" alt="" width="300" height="219" /></a><br />
<a href="http://www.getoto.net/wp-content/uploads/2010/01/ts-219p-screenshot-17.png"><img class="alignnone size-medium wp-image-113" title="ts-219p-screenshot-17" src="http://www.getoto.net/wp-content/uploads/2010/01/ts-219p-screenshot-17-300x219.png" alt="" width="300" height="219" /></a><br />
Както е видно от представената по-долу картинка освен че на устройството има инсталиран пълнофункционален web сървър също така има инсталирано PHP и възможността за пълна редакция на самата конфигурация.<br />
<a href="http://www.getoto.net/wp-content/uploads/2010/01/ts-219p-screenshot-18.png"><img class="alignnone size-medium wp-image-114" title="ts-219p-screenshot-18" src="http://www.getoto.net/wp-content/uploads/2010/01/ts-219p-screenshot-18-300x219.png" alt="" width="300" height="219" /></a><br />
Наличните модули са напълно достатъчни за пълноценна работа на да речем Joomla.<br />
Последният акцент от наличният софтуер е Download Station системата:<br />
<a href="http://www.getoto.net/wp-content/uploads/2010/01/ts-219p-screenshot-19.png"><img class="alignnone size-medium wp-image-115" title="ts-219p-screenshot-19" src="http://www.getoto.net/wp-content/uploads/2010/01/ts-219p-screenshot-19-300x219.png" alt="" width="300" height="219" /></a><br />
Той предоставя в удобен интерфейс за сваляне както на торент файлове така и на файлове разположени върху http/ftp сървъри.</p>
<h1>Тестове</h1>
<p>С цел пълно разбиране на възможностите на устройството го подложихме на серия от тестове, вариращи от прости тестове за монтиране на споделените устройства, скорост на трансфер, работа с малки файлове и синтетични стандартни тестове за оценка на NAS устройства.</p>
<p>Използваните конфигурации в тестовете са следните:</p>
<ul>
<li><strong>Тествано устройство:</strong>
<ul>
<li><strong>Устройство:</strong> TS-219P</li>
<li><strong>Дискове:</strong> 2 x 250 Gb 2,5 inch Hitachi</li>
</ul>
</li>
<li><strong>Тестова платформа:</strong>
<ul>
<li><strong>CPU:</strong> Intel Core2Duo P8400</li>
<li><strong>RAM:</strong> 4GB</li>
<li><strong>Video:</strong> ATI Radeon HD3450</li>
<li><strong>Мрежова карта</strong>: 1Gbit Broadcom Tigon 3</li>
<li><strong>OS:</strong> Debian Lenny</li>
</ul>
</li>
<li><strong>Конфигурация на тестовата среда:</strong>
<ul>
<li><strong>Мрежа:</strong> директна връзка между тестваното устройство и тестовата платформа, работеща със скорост от 1Gbit/s</li>
<li><strong>TS-219P:</strong> всички услуги освен NFS споделяне на файлове и административният интерфейс бяха изключени</li>
<li><strong>Тестова  платформа:</strong> текстова среда със изключени всички услуги освен необходимите за монтиране на NFS споделена папка</li>
<li><strong>Монтиране на споделената папка:</strong> <strong>mount -o noatime,intr,hard,rsize=65535,wsize=65535,noacl,nolock,ac 192.168.10.148:/share/MD0_DATA/review /home/nas</strong></li>
<li><strong>Потребители:</strong> Единствен административен потребител както на устройството така и на тестовата платформа</li>
<li>Единствена споделена папка на тестваното устройство с пълен достъп за всички до нея.</li>
</ul>
</li>
<li><strong>Тестови процедури:</strong>
<ul>
<li>Всеки от тестовете бе изпълнен 5 пъти с рестартиране на NAS системата и тестовата платформа с изчакване от 1 час след стартирането на системите и усредняване на резултатите.</li>
<li><strong>Тест 1:</strong> Копиране на 2 GB файл със случайни данни</li>
<li><strong>Тест 2:</strong> Копиране на 24 GB видео материали размер от 50 MB до 900 MB</li>
<li><strong>Тест 3:</strong> Копиране на 10 GB офис файлове със среден размер от 1MB</li>
<li><strong>Тест 4:</strong> IoZone тестове</li>
</ul>
</li>
</ul>
<h1>Резултати</h1>
<p>При Тест 1 с копиране на единичен голям файл се наблюдават скорости на трансфер от 37 до 45 MB/s даващ ни среден резултат от 46 s за трансфера.<br />
При Тест 2 поради копирането на по голям брой файлове с относително средни размери се наблюдават скорости от 36 до 42 MB/s даващ усреднен резултат от 605 s за трансфера<br />
При Тест 3 поради големият брой малки файлове (общ брой 14000) се наблюдава деградиране на производителността на трансфера. Наблюдаваните скорости са от 28 до 33 MB/s даващ усреднен времеви разултат от 311 s.<br />
При Тест 4 се срещат няколко странни резлутата които в началото бяха отдадени на временни проблеми но в последствие се оказва че са сериозни и реални проблеми при определени размери на блоковете при трансфер. Пълните данни са налични при заявка. По долу може да откриете графиките при размер на блока за трансфер от 4kb<br />
<a href="http://www.getoto.net/wp-content/uploads/2010/01/ts-219p-iozone-01.png"><img class="alignnone size-medium wp-image-117" title="ts-219p-iozone-01" src="http://www.getoto.net/wp-content/uploads/2010/01/ts-219p-iozone-01-300x205.png" alt="" width="300" height="205" /></a><br />
Файловият размер е в килобайти. Както се забелязва има доста странно пропадане в скоростта при размер на файла от 8 MB. Друг интересен момент е много сериозното повишаване на скоростта на четене за големи файлови размери. (макар и на цената на доста завишено натоварване на процесора).</p>
<p><a href="http://www.getoto.net/wp-content/uploads/2010/01/ts-219p-iozone-02.png"><img class="alignnone size-medium wp-image-118" title="ts-219p-iozone-02" src="http://www.getoto.net/wp-content/uploads/2010/01/ts-219p-iozone-02-300x214.png" alt="" width="300" height="214" /></a></p>
<h1>Заключения и финални мисли</h1>
<p>TS-219P е един прекрасен NAS с целева аудитория малък офис или дома. Има много удобен интерфейс за управление и голямо количество възможности за употреба. Освен стандартно очакваните възможности и приложения за един NAS има и доста други които дори и по някога стоящи не на място са полезни и удобни. Благодарение на технология на онлайн миграция и онлайн разширяване на дисковото пространство този нас може да бъде използван дълго време само с редовна подмяна на дисковете. Освен всичко това устройството позволява интелигентно управление на използваното електричество, има стабилен и издържлив дизайн (имаше желания за скачане върху него които бяха отказани заради страха от самонараняване). Както може да се види от синтетичните тестове с IOZone той е подходящо устройство при работа със средни до големи файлове.<br />
За финални думи искам да кажа че съм много доволен от работата свършена от инженерите на QNAP.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.getoto.net/2010/01/09/review-na-qnap-ts-219p-nas/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Trac + SVN The setup</title>
		<link>http://www.getoto.net/2009/12/06/trac-svn-the-setup/</link>
		<comments>http://www.getoto.net/2009/12/06/trac-svn-the-setup/#comments</comments>
		<pubDate>Sun, 06 Dec 2009 19:24:19 +0000</pubDate>
		<dc:creator>Владимир</dc:creator>
				<category><![CDATA[Статии]]></category>
		<category><![CDATA[256 mb ram]]></category>
		<category><![CDATA[Code]]></category>
		<category><![CDATA[ntp]]></category>
		<category><![CDATA[projects]]></category>
		<category><![CDATA[Python]]></category>
		<category><![CDATA[SVN]]></category>
		<category><![CDATA[Trac]]></category>

		<guid isPermaLink="false">http://www.getoto.net/?p=63</guid>
		<description><![CDATA[Тъй като се занимавам с много и най-вече различни проекти, стана ясно че имам мужда от система за управление на проекти. И докато това ми се търкаляше в главата реших че ще е добре ако може да се използва за множество проекти с множество хора. Почна се търсенето, като минах през dotProject, TikiWiki, Mantis и някои други. Но просто някак си не ми допадаха. В крайна сметка се спрях на Trac и SVN.]]></description>
			<content:encoded><![CDATA[<blockquote><p><strong>Disclaimer: </strong>Описаните техники в този документ могат да ви помогнат но не е задължително да са напълно вярни и изчерпателни. Не поемам отговорност за каквито и да било реални или нереални, вреди, ползи, пропуски, паднали къщи или каквото и да е произтичащи от ползването или неползването на този документ.</p>
<p><strong>История</strong></p>
<ul>
<li>25.01.2007 &#8211; Първа версия</li>
</ul>
</blockquote>
<p>Тук ще се постарая да опиша по какъв начин съм настроил система състояща се от Trac и SVN която използвам за управление на проекти.</p>
<p><strong>Идеята</strong><br />
Тъй като се занимавам с много и най-вече различни проекти, стана ясно че имам мужда от система за управление на проекти. И докато това ми се търкаляше в главата реших че ще е добре ако може да се използва за множество проекти с множество хора. Почна се търсенето, като минах през dotProject, TikiWiki, Mantis и някои други. Но просто някак си не ми допадаха. В крайна сметка се спрях на Trac и SVN.</p>
<p><strong>Мотивацията</strong><br />
Избрах комбинацията Trac + SVN по следните причини</p>
<ul>
<li>Свикнал съм със SVN пък макар и от конзола</li>
<li>Trac се разработва относително активно</li>
<li>Вече имах инсталиран Python заради част от системата ми</li>
<li>В самия Trac има вградено wiki което ще се ползва за описанието на проектите и документацията</li>
<li>Има билетчета за проблеми</li>
<li>Куп други дреболии</li>
</ul>
<p>След всичко казано Trac се оказа едно добро решение.</p>
<p><strong>Желязото</strong><br />
Машината на която работи всичко това е следната</p>
<blockquote><p>Debian Unstable<br />
600 Mhz CPU<br />
256 MB Ram<br />
20G HDD</p></blockquote>
<p>Върху нея работят доста услуги: mysql, apache, exim, routing/shaping/nat, dns, dhcp, ntp, ftp, shell, samba (в режим на Master Browser) и други.</p>
<p>Като цяло доста слабичка машинка по днешни стандарти, но полезна и гледана с любоФ</p>
<p><strong>Необходим Софтуер</strong><br />
За да може системата да работи като хората ни трябва следният софтуер</p>
<ul>
<li>Trac</li>
<li>subversion</li>
<li>libneon</li>
<li>Python</li>
<li>pysqlite</li>
<li>python-subversion-bindings</li>
<li>mod_python</li>
<li>clearsilver</li>
<li>xinetd</li>
<li>други дреболии</li>
</ul>
<p>Като цяло най-лесно е ако си имате дебиан. Ако е такъв случая процедурата е пределно проста</p>
<pre>apt-get install trac libapache2-mod-python xinetd</pre>
<p>И започва веселбата :)</p>
<p>Допълнително към Python сме инсталирали python-setuptools, tracwebadmin, tracaccountmanager.</p>
<p><strong>Разположение на файловете</strong><br />
Тъй като ще има няколко проекта, ще отделим специално място за цялата система. Препоръчително е да е на отделен дял.<br />
При мен се спрях на директорията <strong>/home/projects</strong> която има следната структура</p>
<pre class="brush: plain;">/home/projects/
/home/projects/trac
/home/projects/trac/project1
/home/projects/trac/project2
... ... ...
/home/projects/svn
/home/projects/svn/project1
/home/projects/svn/project2
... ... ...</pre>
<p>Възможно е Trac и SVN инстанциите да се намират в директориите на проектите но така се усложнява млко конфигурацията</p>
<p><strong>Същинското изпълнение</strong><br />
Създайте си директорната структура която ще ви е удобна:</p>
<pre class="brush: bash;">mkdir -p /home/projects/{trac,svn}</pre>
<p>Създайте си съответните проекти (това става с trac-admin)</p>
<pre class="brush: bash;">trac-admin /home/projects/trac/project1 initenv</pre>
<p>Ще ви бъдат зададени няколко въпроса и по точно: Име на проекта, База данни (sqlite е добър избор), тип на хранилището за код, къде се намира самото хранилище.<br />
Ограничение е че хранилището на код трябва задължително да е на същата машина (не се поддържат отдалечени), но това може лесно да се заобиколи с помощта на nfs</p>
<p>Създайте съответните хранилища за код (svnadmin)</p>
<pre class="brush: bash;">svnadmin create /home/projects/svn/project1[code]
Променете правата на така създадените директории съответно на потребителя като който вървят Trac системата и svn сървъра
[code lang=bash]chown -R www-data:www-data /home/projects/trac/project1
chown -R svnserv:svnserv /home/projects/svn/project1</pre>
<p>Използваме www-data тъй като под този потребител работи Apache сървъра. Потребителя svnserv сме създали предварително като за домашна директория сме му задали <strong>/home/projects/svn</strong></p>
<p>След като имаме вече създадени проектите време е да можем да ги покажем в браузър (иначе са безполезни).<br />
Trac може да работи като самостоятелен демон (tracd), като CGI процес (trac.cgi, trac.fcgi) или в контекста на Apache (което сме и избрали) с помощта на mod_python.</p>
<p>В конфигурацията на Apache добавяме</p>
<pre class="brush: plain;">LoadModule python_module modules/mod_python.so
# или го разрешаваме с помощта на дистрибуцията си
 
&lt;location /projects&gt;
    # с какво ще обработваме съдържанието
    SetHandler mod_python
    # точно с какво (trac)
    PythonHandler trac.web.modpython_frontend
    # коя информация точно ще сервираме
    PythonOption TracEnvParentDir /home/projects/trac
    # от какво ще генерираме индекса (не е задължителен)
    PythonOption TracEnvIndexTemplate /home/projects/trac/listing.cs
    # debug mode ON
    PythonDebug on
&lt;/location&gt;</pre>
<p>Рестартираме сървъра и проверяваме. Трябва да се вижда нещо подобно на следната картинка<br />
<a href="http://www.getoto.net/wp-content/uploads/2009/12/trac-1.png"><img src="http://www.getoto.net/wp-content/uploads/2009/12/trac-1.png" alt="trac-1" title="trac-1" width="296" height="154" class="aligncenter size-full wp-image-64" /></a></p>
<p>Ако ли пък не … почвайте да гледате в логовете какво пише.</p>
<p>Следва да пуснем svn сървър. Това се прави с помощта на svnserve. В случая съм избрал да го стартирам през xinetd понеже няма да е толкова натоварен. За по голяма сигурност ще работи като отделен потребител (svnserv)</p>
<p>Конфигурацията на xinetd е следната</p>
<pre class="brush: plain;">service subversion
{
        # слушаме само на IPv4 адрес
        flags = IPv4
        # услугата НЕ е спряна
        disable = no
        # потребител и група
        user = svnserv
        group = svnserv
        # максимален брой инстанции
        instances = 5
        # be nice :)
        nice = 15
        # кой точно е сървърът
        server = /usr/bin/svnserve
        # аргументи за стартирането му
        server_args = --inetd --root /home/projects/svn
        # обичайните работи (логване, типаж ...)
        log_on_success = PID HOST DURATION
        log_on_failure = HOST ATTEMPT
        wait = no
        socket_type = stream
}</pre>
<p>Тествайте със svn клиент дали работи.</p>
<p><strong>Подсигуряване и подобряване на Услугите</strong><br />
След като имаме работещи услуги време е да помислим за тяхното подсигуряване. А именно ето какво ще направим:</p>
<p>За Trac системите</p>
<ul>
<li>Премахване на анонимният достъп (изцяло). За тази цел ще ни се наложи да използваме trac-admin. Възможно е да се реализира през web интерфейс но все пак трябва да се знае как се прави на ръка.
<pre class="brush: bash;"># влизаме в интерактивен режим
      trac-admin /projects/trac/project1
      # привилегиите се управляват посредством командата permission
      Trac [/home/projects/trac/project1]&gt; permission help
      permission list [user]
              -- List permission rules

      permission add &lt;user&gt; &lt;action&gt; [action] [...]
              -- Add a new permission rule

      permission remove &lt;user&gt; &lt;action&gt; [action] [...]
              -- Remove permission rule
      # това е просто за запознаване
      # следва същинското премахване
      Trac [/home/projects/trac/project1]&gt; permission remove anonymous *</pre>
<p>Вече анонимните потребители нямат никакви права.</li>
<li>добавяне на нов административен потребител с пълни права. Това се прави за да имаме по лесен контрол.
<pre class="brush: bash;">Trac [/home/projects/trac/project1]&gt; permission add user1 TRAC_ADMIN, MILESTONE_DELETE ....
      # всички възможни привилегии</pre>
<p>Така добавеният потребител <strong>user1</strong> ефективно получава пълен и абсолютен контрол.</li>
<li>активиране на администраторският панел - тази процедура се извършва чрез редакция на кконфигурационният файл <strong>conf/trac.ini</strong> в директорията на нашият проект. За да активираме администраторският интерфейс е необходимо да разрешим използването на компонентите които са ни нужни а именно да добавим
<pre class="brush: plain;">[components]
webadmin.* = enabled</pre>
</li>
<li>включване на подобрен процес на влизане в системата - по начало процеса на влизане в Trac не е особенно красив нито пък удобен, затова и ще бъде подменен от разширението TracAccountManager. То има зависимост от TracWebAdmin който вече е активиран. За да можем да ползваме подобреният процес трябва първо да изключим вграденият във trac и да активираме новият. Това става отново с редакция на trac.ini
<pre class="brush: plain;">[components]
acct_mgr.admin.accountmanageradminpage = enabled
acct_mgr.api.accountmanager = enabled
acct_mgr.htfile.abstractpasswordfilestore = enabled
acct_mgr.htfile.htdigeststore = disabled
acct_mgr.htfile.htpasswdstore = enabled
acct_mgr.http.httpauthstore = disabled
acct_mgr.web_ui.accountmodule = enabled
acct_mgr.web_ui.loginmodule = enabled
trac.web.auth.loginmodule = disabled

[account-manager]
password_file = /home/projects/trac/users
password_store = HtPasswdStore</pre>
<p>Какво точно прави всяка опция е добре обяснено в документацията (линковете са в края)<br />
Сега е необходимо да рестартираме web сървъра за да влезнат в сила нашите промени.</li>
</ul>
<p>За svn сървъра:</p>
<blockquote><p>Забраняване на всякакъв достъп за неауторизирани потребители</p></blockquote>
<p>Това се изпълнява като се редактират конфигурациите на svn сървъра. Те се намират в директорията в която е нашето хранилище на код. Модифицираме ги по следният начин:</p>
<p><strong>conf/svnserve.conf</strong></p>
<pre class="brush: plain;">### This file controls the configuration of the svnserve daemon
### Visit http://subversion.tigris.org/ for more information.

[general]
# никакъв достъп за анонимните
anon-access = none
password-db = passwd
authz-db = authz
realm = Project 1</pre>
<p><strong>conf/authz</strong></p>
<pre class="brush: plain;">### This file is an example authorization file for svnserve.
### Its format is identical to that of mod_authz_svn authorization
### files.

[groups]

# за кой път иде реч (правата се унаследяват)
[/]
# правата на потребител (четене и писане)
user1 = rw
# правата на всички останали (пълна нула)
* =</pre>
<p><strong>conf/passwd</strong></p>
<pre class="brush: plain;">### This file is an example password file for svnserve.

[users]
user1 = password</pre>
<p><strong>Заключение</strong><br />
След като сме си свършили всичката работа следва да рестартираме за един последен път apache и xinetd и да започнем да си ползваме системата. За подробности за работата с нея … във връзките</p>
<p><strong>Връзки</strong><br />
<a href="http://trac.edgewall.org/">Trac</a><br />
<a href="http://www.modpython.org/">mod_python</a><br />
<a href="http://httpd.apache.org/">Apache</a><br />
<a href="http://subversion.tigris.org/">Subversion</a><br />
<a href="http://trac.edgewall.org/wiki/WebAdmin">TracWebAdmin</a><br />
<a href="http://trac-hacks.org/wiki/AccountManagerPlugin">TracAccountManager</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.getoto.net/2009/12/06/trac-svn-the-setup/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>DHCP + TFTP + PXELINUX = Netinstall</title>
		<link>http://www.getoto.net/2009/12/06/netinstall-with-pxe-tftp-dhcp/</link>
		<comments>http://www.getoto.net/2009/12/06/netinstall-with-pxe-tftp-dhcp/#comments</comments>
		<pubDate>Sun, 06 Dec 2009 18:49:16 +0000</pubDate>
		<dc:creator>Владимир</dc:creator>
				<category><![CDATA[Статии]]></category>
		<category><![CDATA[Code]]></category>
		<category><![CDATA[debian]]></category>
		<category><![CDATA[dhcp]]></category>
		<category><![CDATA[dhcpd]]></category>
		<category><![CDATA[installation]]></category>
		<category><![CDATA[netboot]]></category>
		<category><![CDATA[Option]]></category>
		<category><![CDATA[pxe]]></category>
		<category><![CDATA[PXELINUX]]></category>
		<category><![CDATA[syslinux]]></category>
		<category><![CDATA[tftp]]></category>

		<guid isPermaLink="false">http://www.getoto.net/?p=58</guid>
		<description><![CDATA[Преди около седмица в Linux-BG се появи молба за помощ, за един леко прецакан windows. Ситуацията беше, че MBR на системата беше заминал по дяволите, а машината нямаше нито CD, нито флопи, нито пък можеше да стартира от USB. Остава като решение само стартиране от мрежа. Помогнахме му на човека понеже си имам инсталиран такъв сървър в къщи. Тази комбинация от софтуер е полезна и при други ситуации (основно мързел) като инсталация на отдалечени машини, тестове, и някои други добрини.]]></description>
			<content:encoded><![CDATA[<blockquote><p><strong>Disclaimer: </strong>Описаните техники в този документ могат да ви помогнат но не е задължително да са напълно вярни и изчерпателни. Не поемам отговорност за каквито и да било реални или нереални, вреди, ползи, пропуски, паднали къщи или каквото и да е произтичащи от ползването или неползването на този документ.</p>
</blockquote>
<p><strong>Мотивация</strong><br />
Преди около седмица в <a href="http://www.linux-bg.org/">Linux-BG</a> се появи молба за помощ, за един леко прецакан windows. Ситуацията беше, че MBR на системата беше заминал по дяволите, а машината нямаше нито CD, нито флопи, нито пък можеше да стартира от USB. Остава като решение само стартиране от мрежа. Помогнахме му на човека понеже си имам инсталиран такъв сървър в къщи. Тази комбинация от софтуер е полезна и при други ситуации (основно мързел) като инсталация на отдалечени машини, тестове, и някои други добрини.</p>
<p><strong>Цел</strong><br />
Да получим сървър от който да може да се стартира инсталация на операционна система.<br />
Ще демонстрираме как се прави това с <a href="http://www.debian.org/">Debian</a>, а за други дистрибуции е аналогично.</p>
<p><strong>Необходими компоненти</strong></p>
<ul>
<li>Инсталирана и работеща линукс система която ще ползваме за PXE сървър</li>
<li>DHCP сървър &#8211; тук ще опишем настройката му</li>
<li>TFTP сървър</li>
<li>PXELINUX &#8211; от syslinux системата</li>
<li>Интернет свързаност или локално копие на необходимите пакети за инсталация</li>
<li>Желание за работа и малко трезва мисъл</li>
</ul>
<p>Изхождаме от презумпцията че цялото това нещо ще го реализирате в мрежа която е отделена от основната ви, тъй като едно дребно недоглеждане може да направи много поразии. Ще се постарая да ви спестя проблемите но никога не се знае.</p>
<p><strong>Теория на работата</strong><br />
Доста машини могат да стартират през мрежа, било то за да работят като терминали или по други съображения. За целта мрежовата им карта трябва да поддържа PXE стандарта за предпочитане над версия 0.91. Макар че може да бъде излъгана и с по-ниски версии.<br />
Самият процес протича доста елементарно и като цяло е доста прост:</p>
<ul>
<li>Машината стартира и се инициализира биос подсистемата</li>
<li>Инициализира се PXE подсистемата на мрежовата карта</li>
<li>Мрежовата карта изпраща заявка за IP адрес</li>
<li>DHCP сървъра отговаря като в допълнение и предлага да стартира от мрежа и я насочва към следващия сървър (TFTP)</li>
<li>TFTP сървъра предоставя на мрежовия стек малък файл който играе ролята на boot мениджър</li>
<li>От този мениджър си избираме една от опциите и стартираме</li>
</ul>
<p>За повече информация по темата:</p>
<ul>
<li><a href="http://syslinux.zytor.com/">http://syslinux.zytor.com/</a> &#8211; информация за syslinux комплекта от инструменти</li>
<li><a href="http://en.wikipedia.org/wiki/Preboot_Execution_Environment">PXE</a></li>
<li><a href="http://en.wikipedia.org/wiki/Dynamic_Host_Configuration_Protocol">DHCP в wikipedia</a></li>
<li><a href="http://www.dhcp.org/">http://www.dhcp.org/</a></li>
</ul>
<p><strong>Настройка на DHCP сървър</strong><br />
Настройката не е нищо особенно има я подробно описана в документацията на sysllinux/pxelinux. Единственото което ни е необходимо в допълнение към нормален dhcp сървър са две допълнителни опции които ще обясним нагледно с пример.</p>
<p><strong><em>/etc/dhcpd.conf</em></strong></p>
<pre class="brush: plain;">#
# Sample configuration file for ISC dhcpd for Debian
#
# $Id: dhcpd.conf,v 1.4.2.2 2002/07/10 03:50:33 peloy Exp $
#

# Задължително или няма да може да раздаваме адреси при нормална работа
authoritative;

# Да ще позволяваме стартирането на стари клиенти (идва от BOOTP протокола)
allow bootp;
# Да ще позволяваме стартирането на клиенти посредством PXE
allow booting;
# нашият следващ сървър от където ще си дръпнем boot loader
next-server 10.99.3.1;
# Как се казва нашият boot loader
filename &quot;pxelinux.0&quot;;

default-lease-time 14400;
max-lease-time 86400;

# стандартна конфигурация на dhcp сървър
subnet 10.99.3.0 netmask 255.255.255.0 {
  range 10.99.3.10 10.99.3.200;
  option domain-name-servers 10.99.3.1;
  option domain-name &quot;instalations.network&quot;;
  option routers 10.99.3.1;
  option subnet-mask 255.255.255.0;
  option broadcast-address 10.99.3.255;
  option default-ip-ttl 64;
  option default-tcp-ttl 64;
  option time-offset 7200;
  option time-servers 10.99.3.1;
  option ntp-servers 10.99.3.1;
  option netbios-name-servers 10.99.3.1;
  option netbios-node-type 8;
}</pre>
<p>Ако нещо не ви е ясно ви съветвам да се обърнете към помощните страници на пакета dhcp</p>
<p><strong>Настройка на TFTP сървър</strong><br />
За тфтп сървър ще използваме <a href="http://freshmeat.net/projects/tftp-hpa/">tftp hpa</a> работещ в режим на демон.<br />
той се инсталира пределно просто (при debian)</p>
<pre class="brush: bash;">apt-get install tftpd-hpa</pre>
<p>Конфигурацията му се намира в <strong><em>/etc/default/tftpd-hpa</em></strong> и е следната:</p>
<pre class="brush: plain;"># ще работим като демон
RUN_DAEMON=&quot;yes&quot;
# опциите са
# -l - работим в режим на демон
# -v - записваме подробна информация
# -s - работим в сигурен режим като сервираме само от тази директория
OPTIONS=&quot;-l -v -s /tftpboot&quot;</pre>
<p>Все още не стартирайте сървъра. Препоръчва се файловете както и директорията /tftpboot да са собственост на root и да са само за четене (от всички)</p>
<p><strong>Настройки на PXELINUX</strong><br />
PXELINUX се намира в серята програми наречена <a href="http://syslinux.zytor.com/">syslinux</a>. Не е необходимо да инсталирате целия пакет тъй като от него ще ползваме само pxelinux.0 и евентуално memdisk ако искате да стартирате дос</p>
<p>Конфигурацията му е до някъде сложна но ще се постарая да я обясня като хората. Самият pxelinux се конфигурира от един текстов файл който указва какво и с какви настройки да бъде стартирано. Също така поддържа възможност различните машини да получават различна конфигурация. Документацията в пакета syslinux е много добра макар и длъжка така че наистина я прочетете поне диагонално.<br />
Нашата инсталация на pxeilinux ще живее в директорията /tftpboot и има следната структура:</p>
<pre class="brush: plain;">/tftpboot/
/tftpboot/initrd/
/tftpboot/kernels/
/tftpboot/pxelinux.0
/tftpboot/pxelinux.cfg/
# нашата конфигурация
/tftpboot/pxelinux.cfg/default
/tftpboot/texts/</pre>
<p>В случая ще демонстрираме една единствена конфигурация за всички машини. За разнообразни конфигурации моля погледнете в документацията. Следва и примерната конфигурация:<br />
<strong>/tftpboot/pxelinux.cfg/default</strong></p>
<pre class="brush: plain;"># по подразбиране стартираме от локален диск
# прави се за да не стане гаф и да унищожим информация
default local
# закъснение при стартиране (5 секунди)
timeout 50
# да покажем ли промпт
prompt 1
# да покажем определен текст
display texts/menu.txt

label local
        localboot 0

# етикет за този кернел
label deb26n
# самият кернел
        kernel kernels/deb-testing-26.kernel
# допълнителни опции
        append initrd=initrd/deb-testing-26.initrd \
           vga=normal \
           ramdisk_size=16384 \
           root=/dev/rd/0 \
           devfs=mount,dall rw

label deb26e
        kernel kernels/deb-testing-26.kernel
        append initrd=initrd/deb-testing-26.initrd \
           DEBCONF_PRIORITY=low \
           vga=normal \
           ramdisk_size=16384 \
           root=/dev/rd/0 \
           devfs=mount,dall rw</pre>
<p><em><strong>Забележка</strong>: редовете <strong>append</strong> са разпределени на няколко реда от съображения за четимост, но в конфигурацията трябва да са на един ред.</em></p>
<p>Кернелът и initrd файла са взети от проекта дебиан и по точно от секцията му нетбоот. Добавени са с лека адаптация и допипване на командния ред</p>
<p><strong>Заключение</strong><br />
Като цяло това е всичко. Не е особенно трудно да се постигне. Евентуален проблем който може да срещнете е че PXE агента на мрежовата карта е малко стар и не иска да работи с tftp сървър а задължително изисква pxe сървър, но това е лесно решимо.<br />
За тези които искат готово решение без много много да си играят ето <a href='http://www.getoto.net/wp-content/uploads/2009/12/pxebooting.tar.gz'>пакетирано всичко необходимо</a>. Необходимо е само да имате инсталиран dhcp и tftp сървър.</p>
<p>Очаквам въпроси, коментари, предложения и каквото ви хрумне в коментарите.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.getoto.net/2009/12/06/netinstall-with-pxe-tftp-dhcp/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>HOWTO: Boot Norton Ghost over network</title>
		<link>http://www.getoto.net/2009/12/06/howto-boot-norton-ghost-over-network/</link>
		<comments>http://www.getoto.net/2009/12/06/howto-boot-norton-ghost-over-network/#comments</comments>
		<pubDate>Sun, 06 Dec 2009 18:36:02 +0000</pubDate>
		<dc:creator>Владимир</dc:creator>
				<category><![CDATA[Статии]]></category>
		<category><![CDATA[bootsector]]></category>
		<category><![CDATA[ebd]]></category>
		<category><![CDATA[Ghost]]></category>
		<category><![CDATA[ghost norton]]></category>
		<category><![CDATA[initrd]]></category>
		<category><![CDATA[iso]]></category>
		<category><![CDATA[memdisk]]></category>
		<category><![CDATA[Norton]]></category>
		<category><![CDATA[norton ghost]]></category>
		<category><![CDATA[windows 98 se cd]]></category>

		<guid isPermaLink="false">http://www.getoto.net/?p=55</guid>
		<description><![CDATA[Днес ще разгледаме темата как да стратираме Norton Ghost през мрежа. Постът е по идея на jorgy днешната статия ще гради върху предоставената вече основа. Идеята Трябва да си сътворим подходяща медия която да може да се стартира през мрежа и в нея да си сложим ghost-a. Първоначалното желание беше да се опише начин за [...]]]></description>
			<content:encoded><![CDATA[<p>Днес ще разгледаме темата как да стратираме <strong>Norton Ghost</strong> през мрежа.<br />
Постът е по идея на jorgy днешната статия ще гради върху <a href="http://www.getoto.net/2009/12/06/netinstall-with-pxe-tftp-dhcp/">предоставената вече основа</a>.</p>
<p><strong>Идеята</strong><br />
Трябва да си сътворим подходяща медия която да може да се стартира през мрежа и в нея да си сложим ghost-a. Първоначалното желание беше да се опише начин за стартиране на iso изображение по мрежа, но го отхвърляме поради факта че самото изображение може да е … големичко. Все пак няма нужда да точим 80 М през мрежата и в последствие да го слагаме във рам диск (макар че е възможно). Това ще бъде споменато въпреки всичко.</p>
<p><strong>План за действие</strong><br />
Трябва да завършим следните стъпки:</p>
<ul>
<li>Създаване на стартираща медия</li>
<li>Добавяне на Norton Ghost в нея</li>
<li>Добавяне в системата ни за мрежово стартиране</li>
</ul>
<p><strong>Създаване на стартираща медия</strong><br />
Тъй като Norton Ghost е като цяло win32/DOS базирано приложение ще ни е необходима медия която поддържа дос среда. Поне за мен най удобната за случая медия е стартова дискета на Windows 98 SE. Тъй като тази дискетка е малко пълна ще се наложи да осводобим малко място (тоест да поразкараме доста работи).<br />
За начало понеже няма да използваме CD/DVD изхвърляме всички драйвери по темата, следва изхвърляне на инструментите за спасяване (ebd.cab, expand.exe) и някои други дреболии. В крайна сметка трябва да получим базова стартираща дискета с command.com, autoexec, няколко sys файла и достатъчно свободно място за да сложим на нея нашият ghost.exe. В края на статията има връзка към предварително подготвена медия.<br />
Самата стартова дискетка може да се намери от доста места. Аз лично препоръчвам <a href="http://www.bootdisk.com/">http://www.bootdisk.com/</a>.</p>
<p>Друг вариант за подготвяне на медията е да намерим bootsector от подобна дискета и да го запишем в началото на празен файл. Това може да се постигне със dd, cat и други различни приятели :).</p>
<p><strong>Добавяне на Norton Ghost в медията</strong><br />
Като цяло това е проста операция. Трябва само да монтирате предварително подготвената медия с достатъчно свободно място и да копирате изпълнимият файл на ghost-a.</p>
<p><strong>Добавяне в системата ни за мрежово стартиране</strong><br />
Тук идва вече сериозната работа.<br />
Понеже това е дос той се стартира по малко особен начин. Трябва да бъде излъган леко. Това се постига посредством PXE линукс и кернелът който те предоставят наречен memdisk.<br />
Използваме следните предположения:</p>
<ul>
<li>Използваме текущото активна конфигурация изградена в статията <a href="http://www.getoto.net/2009/12/06/netinstall-with-pxe-tftp-dhcp/">Мрежова инсталация със DHCP &#038; TFTP</a></li>
</ul>
<p>Следва да си копираме memdisk от дистрибуцията на pxelinux в директорията ни kernels а предварително подготвената медия във директорията initrd.</p>
<p>След като сме си ги изкопирали следва да добавим следната секция във файлът <strong>/tftpboot/pxelinux.cfg/default</strong></p>
<pre class="brush: plain;">label Ghost
    kernel kernels/memdisk
    append initrd=initrd/ghost.img</pre>
<p>С това конфигурацията ни завършва.</p>
<p><strong>Стартиране на iso изображение</strong><br />
Тъй като iso файловете си имат собствен boot сектор те могат да бъдат стартирани със memdisk. Тоест initrd файла който ще заредим е iso файла.<br />
По тази тема трябва да внимавате за размера на iso файла и наличната ram памет.</p>
<p><strong>Заключение</strong><br />
Посредством тази заигравка може да стартирате ghost за възстановяване от локален диск. В текущото описание и предоставеният файл не можете да възстановявате архиви през мрежа (няма включена поддръжка на мрежа). Също така не може да се разчита на високата памет и може би някои дреболии които се считат за даденост. Като цяло е полезно в рамките на тези ограничения.</p>
<p><strong>Връзки/материали</strong></p>
<ul>
<li><a href="http://syslinux.zytor.com/">http://syslinux.zytor.com/</a> &#8211; информация за syslinux комплекта от инструменти</li>
<li><a href="http://en.wikipedia.org/wiki/Preboot_Execution_Environment">PXE</a></li>
<li><a href="http://en.wikipedia.org/wiki/Dynamic_Host_Configuration_Protocol">DHCP в wikipedia</a></li>
<li><a href="http://www.dhcp.org/">http://www.dhcp.org/</a></li>
<li><a href='http://www.getoto.net/wp-content/uploads/2009/12/ghost.img_.gz'>ghost.img.gz</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.getoto.net/2009/12/06/howto-boot-norton-ghost-over-network/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>The Perfect SOHO router &#8211; Part 6</title>
		<link>http://www.getoto.net/2009/12/06/the-perfect-soho-router-part-6/</link>
		<comments>http://www.getoto.net/2009/12/06/the-perfect-soho-router-part-6/#comments</comments>
		<pubDate>Sun, 06 Dec 2009 18:13:28 +0000</pubDate>
		<dc:creator>Владимир</dc:creator>
				<category><![CDATA[Статии]]></category>
		<category><![CDATA[access]]></category>
		<category><![CDATA[ACL]]></category>
		<category><![CDATA[debian]]></category>
		<category><![CDATA[dhcp]]></category>
		<category><![CDATA[dhcpd]]></category>
		<category><![CDATA[firewall]]></category>
		<category><![CDATA[http]]></category>
		<category><![CDATA[management]]></category>
		<category><![CDATA[ntp]]></category>
		<category><![CDATA[port]]></category>
		<category><![CDATA[router]]></category>
		<category><![CDATA[Safe]]></category>
		<category><![CDATA[secure]]></category>
		<category><![CDATA[shaper]]></category>
		<category><![CDATA[simple]]></category>
		<category><![CDATA[soho]]></category>
		<category><![CDATA[squid]]></category>

		<guid isPermaLink="false">http://www.getoto.net/?p=46</guid>
		<description><![CDATA[След като вече имаме работещ рутер, който си филтрира и си има някакви дребни статистики може да се замислим за разни удобства и евентуално да му дадем допълнителни задачи.

Тъй като има изгледи тази статия да стане най-голямата и да се пише доста време, ще трябва да кликнете на линка прочети повече. Ще се радвам ако и вие споделите вашите малки номера и трикове.]]></description>
			<content:encoded><![CDATA[<blockquote><p>Това е шестата част от серия от статии в които ще обясня как да създадем перфектният SOHO рутер. Държа да отбележа че това е моята идея за рутер със всичките и предимства и недостатъци.</p>
<p>Серията се състои от следните статии:</p>
<ul>
<li><a href="http://www.getoto.net/2009/12/06/the-perfect-soho-router-part-1/">Общи насоки, идеи, нужни услуги и размисли</a> &#8211; тук ще се постарая аргументирано да обоснова защо съм избрал този комплект от софтуер и услуги</li>
<li><a href="http://www.getoto.net/2009/12/06/the-perfect-soho-router-part-2/">Инсталация на базовата система </a>- ще опиша методът по който ще инсталираме и минимизираме нашата система</li>
<li><a href="http://www.getoto.net/2009/12/06/the-perfect-soho-router-part-3/">Конфигуриране на DNS и DHCP услугите</a> &#8211; тук ще опиша обосновано конфигурациите които смятам за оптимални</li>
<li><a href="http://www.getoto.net/2009/12/06/the-perfect-soho-router-part-4/">Конфигуриране на рутирането</a> &#8211; като цяло тук е сърцето на нашият рутер. Ще предложа някои трикове за улесняване на живота, както и насоки към по-специфични задачи</li>
<li><a href="http://www.getoto.net/2009/12/06/the-perfect-soho-router-part-5/">Конфигуриране на елементарна система за наблюдение и статистика</a></li>
<li><a href="http://www.getoto.net/2009/12/06/the-perfect-soho-router-part-6/">Разширяване възможностите на нашият рутер</a> &#8211; ще опиша някои дреболии които могат да направят живота ни много по лесен, удобен и приятен</li>
</ul>
</blockquote>
<p>След като вече имаме работещ рутер, който си филтрира и си има някакви дребни статистики може да се замислим за разни удобства и евентуално да му дадем допълнителни задачи.</p>
<p>Тъй като има изгледи тази статия да стане най-голямата и да се пише доста време, ще трябва да кликнете на линка прочети повече. Ще се радвам ако и вие споделите вашите малки номера и трикове.<br />
Първото удобство с което ще разширим нашият рутер това е прокси. Освен простото прокси ще го направим и прозрачно за да можем да избегнем конфигурирането му на всяка машина. Трябва да се отбележи че има и автоматични методи за конфигуриране на прокси сървъри но те не са от най-удобните или пък безпроблемните.</p>
<p><strong>Защо ни трябва прокси</strong><br />
Прокси сървърът представлява система която кешира заявки. Тоеск ако клиент А изиска файл file.html нашият сървър ще съхрани за определено време отговорът в своят кеш и при последваща заявка за този файл от друг клиент Б файлът ще бъде подаден от кеша, а не от интернет. По този начин постигаме спестяване на трафик, ускоряване, контрол. С малко повече труд може да се реализира антивирус, антиспам, филтрация на реклами, контрол на трафика и др. Най-популярното решение за прокси сървър е <strong>squid</strong>.</p>
<p><strong>Проста конфигурация на squid</strong><br />
Ще дадем една много елементарна конфигурация при която всичко работи, но няма никакви защити от към използване. Конфигурацията е без коментарите от файла поради причината че целият файл е около 40К.</p>
<pre class="brush: plain;"># на кой порт да слушаме и дали да ауторизираме (не)
http_port 9999 no-connection-auth
# на кой порт да си говорим с други проксита (няма да си говорим)
icp_port 0
# ако някой от тези стрингове се среща в URL - не кеширай
hierarchy_stoplist cgi-bin ?
acl QUERY urlpath_regex cgi-bin \?
cache deny QUERY
# workaround за буг в апачето
acl apache rep_header Server ^Apache
broken_vary_encoding allow apache
# максимална големина на обект в рам областта
maximum_object_size_in_memory 48 KB
# колко рам да заделим за кеширане
cache_mem 24 MB
# директория за кеш файлове (прочетете конфигурацията във файла, много полезна е)
cache_dir aufs /var/spool/squid 500 16 256
# логовете ...
access_log /var/log/squid/access.log squid
# малко анонимизация ... максимална всъщност)
client_netmask 0.0.0.0
# юзер за ftp сесии
ftp_user IEUser@
hosts_file /etc/hosts
# стандартни параметри за проверка по някои протоколи
refresh_pattern ^ftp:           1440    20%     10080
refresh_pattern ^gopher:        1440    0%      1440
refresh_pattern .               0       20%     4320
# малко ACL-и. Почти всички са стандартни
acl all src 0.0.0.0/0.0.0.0
acl manager proto cache_object
acl localhost src 127.0.0.1/255.255.255.255
acl to_localhost dst 127.0.0.0/8
acl SSL_ports port 443          # https
acl SSL_ports port 563          # snews
acl SSL_ports port 873          # rsync
acl Safe_ports port 80          # http
acl Safe_ports port 21          # ftp
acl Safe_ports port 443         # https
acl Safe_ports port 70          # gopher
acl Safe_ports port 210         # wais
acl Safe_ports port 1025-65535  # unregistered ports
acl Safe_ports port 280         # http-mgmt
acl Safe_ports port 488         # gss-http
acl Safe_ports port 591         # filemaker
acl Safe_ports port 777         # multiling http
acl Safe_ports port 631         # cups
acl Safe_ports port 873         # rsync
acl Safe_ports port 901         # SWAT
acl Jabber_ports port 5222 5223	#Jabber
acl purge method PURGE
acl CONNECT method CONNECT
# това вече сме ние
acl clientnetwork src 10.42.3.0/255.255.255.0
# след като имаме ACL-и време е да почнем да раздаваме достъп
http_access allow manager localhost
http_access allow manager home
http_access deny manager
http_access allow purge localhost
http_access allow CONNECT Jabber_ports
http_access deny purge
http_access deny !Safe_ports
http_access deny CONNECT !SSL_ports
# ДАААА пуснахме го :)
http_access allow clientnetwork
http_access allow localhost
# Всичко което не е разрешено ... под ножа
http_access deny all
http_reply_access allow all
icp_access allow all
cache_mgr root
cache_effective_group proxy
# нека да скрием версията при грешки
httpd_suppress_version_string on
# и да не издаваме че има прокси по пътя
via off
forwarded_for off
cachemgr_passwd parola all
buffered_logs on
short_icon_urls on
coredump_dir /var/spool/squid
# нека да се опитаме да сме умни и да вземаме по няколко странички на куп
pipeline_prefetch on</pre>
<p>Както се вижда това отново е една много проста конфигурация, която се различава съвсем малко от стандартната. Променили сме стандартният порт на който слуша сървърът ни, добавили сме настройка за in-memory кешът, увеличили сме малко дисковият кеш и сме скрили малко факта че има прокси. Сега остава да го направим сървърът ни прозрачен. Тоест да няма нужда клиентите да се настройват. Това се постига посредством пренасочване на изходящите заявки към определен порт. Да предположим че искаме да пренасочваме целият http трафик но не и https трафика и ftp трафика. Като допълнителен бонус знаем че част от клиентите посещават сайтове които не са на 80ти порт ами на 81,88,8800,8080. Също така доста сайтове предпочитат да имат два web сървъра, първият на порт 80 който сервира страниците и втори обикновенно на порт 81 който сервира картинки само.<br />
Цялата задача се реализира по следният начин (използваме конвенциите от <a href="http://www.getoto.net/2009/12/06/the-perfect-soho-router-part-4/">Четвърта част</a>)</p>
<pre class="brush: bash;">$IPT -t nat -A PREROUTING -i $INT_IF -m multiport --dports 21,80,81,88,8800,8080 -j REDIRECT --to-port 9999</pre>
<p>Съответно порт 9999 е отворен поне за вътрешният интерфейс.</p>
<p>Темата с delay_pools също е интересна тъй като с нея може да се реализира прост шейпър. И за всеобща радост е много добре обяснена в конфигурационният файл.</p>
<p><strong>Просто ограничаване на трафик</strong><br />
Понякога клиентите на рутера са малко нагли и теглят ужасно много. Ако нямаме познанията или желанието да реализираме някакъв вид шейпър, можем да направим временно решение посредством iptables. Решението се базира на идеята че ако линията е претоварена мрежовият стек се опитва да намали трафика. Обикновенно претоварена линия се открива когато започнат да се губят пакети. И за да изглежда реално пакетите трябва да се губят що годе случайно. Това се постига посредством модула към iptables RANDOM. Този модул е в patch-o-matic-ng base. Правилото изглежда по следният начин.</p>
<pre class="brush: bash;">$IPT -t nat -A FORWARD -i $INT_IF -s &lt; client_IP &gt; -m RANDOM --average 5% -j DROP</pre>
<p>Методът изобщо не е красив и понякога само натоварва допълнително линията. Ако ползваме голям процент обаче (над 30%) обикновенно клиентите се усещат и просто си спират свалящите се работи.</p>
<p><strong>Малко по-подробни статистики</strong><br />
Ако статистиките от mrtg не са ви достатъчни може да използвате ipaudit-web. Като цяло е доста добър софтуер, вади прилични статистики, но за съжаление е малко натоварващ.</p>
<p>За момента това са работите за които се сещам. Всеки който иска нека публикува и своите дребни трикове в коментарите. Ще се постарая да ги интегрирам.</p>
<p><strong>Сървър за точно време</strong><br />
Това е едно удобство за клиентската мрежа което може да осигури стабилност на определен тип приложния. Най-вече тези които зависят от точното врем. Освен тях от точно време може да се възползва всеки който иска. Сървърът се реализира посредством пакета ntpd и конфигурацията му е доста семпла и проста</p>
<pre class="brush: plain;"># /etc/ntp.conf, configuration for ntpd
# къде да пазим нашето отместване. Специфична настройка необходима за работа на сървъра
driftfile /var/lib/ntp/ntp.drift
# къде да съхраняваме статистиките
statsdir /var/log/ntp
# какви статистики искаме и точно с какви опции
statistics loopstats peerstats clockstats
filegen loopstats file loopstats type day enable
filegen peerstats file peerstats type day enable
filegen clockstats file clockstats type day enable

# You do need to talk to an NTP server or two (or three).
#server ntp.your-provider.example

# pool.ntp.org maps to more than 300 low-stratum NTP servers.
# Your server will pick a different set every time it starts up.
#  *** Please consider joining the pool! ***
#  *** &lt;http ://www.pool.ntp.org/join.html&gt; ***
# да научим нашият сървър къде да пита за точно време
server 0.bg.pool.ntp.org iburst
server 1.bg.pool.ntp.org iburst
server 2.debian.pool.ntp.org iburst
server pool.ntp.org iburst</pre>
<p>Както виждате настройката е пределно проста. Единственото което си струва да се отбележи е че обявяваме времето на всеослушание. Никой не гарантира че то ще бъде използвано, но нека да го има. Ако имаме желание може да уведомим нашите клиенти къде могат да открият нашият сървър за време посредством следните редове в конфигурацията на нашият dhcp сървър (dhcpd):</p>
<pre class="brush: plain;">option time-servers 10.99.3.1;
option ntp-servers 10.99.3.1;</pre>
<p>Трябва също така да се отбележи че за да работи тази услуга, портът на който работи да бъде отворен. Препоръчително е това да стане само за вътрешният интерфес. Портът за който иде реч е 123.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.getoto.net/2009/12/06/the-perfect-soho-router-part-6/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>The Perfect SOHO router &#8211; Part 5</title>
		<link>http://www.getoto.net/2009/12/06/the-perfect-soho-router-part-5/</link>
		<comments>http://www.getoto.net/2009/12/06/the-perfect-soho-router-part-5/#comments</comments>
		<pubDate>Sun, 06 Dec 2009 17:59:19 +0000</pubDate>
		<dc:creator>Владимир</dc:creator>
				<category><![CDATA[Статии]]></category>
		<category><![CDATA[class]]></category>
		<category><![CDATA[Code]]></category>
		<category><![CDATA[debian]]></category>
		<category><![CDATA[dhcp]]></category>
		<category><![CDATA[firewall]]></category>
		<category><![CDATA[Head]]></category>
		<category><![CDATA[installation]]></category>
		<category><![CDATA[iproute]]></category>
		<category><![CDATA[iptables]]></category>
		<category><![CDATA[management]]></category>
		<category><![CDATA[mrtg]]></category>
		<category><![CDATA[network]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[ping]]></category>
		<category><![CDATA[router]]></category>
		<category><![CDATA[secure]]></category>
		<category><![CDATA[simple]]></category>
		<category><![CDATA[soho]]></category>
		<category><![CDATA[web]]></category>
		<category><![CDATA[web swap]]></category>

		<guid isPermaLink="false">http://www.getoto.net/?p=41</guid>
		<description><![CDATA[Винаги е полезно да знаем в какво състояние е нашият рутер и то да можем да достигнем до тази информация бързо.

Тук демонстрираме една много проста и елементарна система която дава полезна информация с един поглед.]]></description>
			<content:encoded><![CDATA[<blockquote><p>Това е петата част от серия от статии в които ще обясня как да създадем перфектният SOHO рутер. Държа да отбележа че това е моята идея за рутер със всичките и предимства и недостатъци.</p>
<p>Серията се състои от следните статии:</p>
<ul>
<li><a href="http://www.getoto.net/2009/12/06/the-perfect-soho-router-part-1/">Общи насоки, идеи, нужни услуги и размисли</a> &#8211; тук ще се постарая аргументирано да обоснова защо съм избрал този комплект от софтуер и услуги</li>
<li><a href="http://www.getoto.net/2009/12/06/the-perfect-soho-router-part-2/">Инсталация на базовата система </a>- ще опиша методът по който ще инсталираме и минимизираме нашата система</li>
<li><a href="http://www.getoto.net/2009/12/06/the-perfect-soho-router-part-3/">Конфигуриране на DNS и DHCP услугите</a> &#8211; тук ще опиша обосновано конфигурациите които смятам за оптимални</li>
<li><a href="http://www.getoto.net/2009/12/06/the-perfect-soho-router-part-4/">Конфигуриране на рутирането</a> &#8211; като цяло тук е сърцето на нашият рутер. Ще предложа някои трикове за улесняване на живота, както и насоки към по-специфични задачи</li>
<li><a href="http://www.getoto.net/2009/12/06/the-perfect-soho-router-part-5/">Конфигуриране на елементарна система за наблюдение и статистика</a></li>
<li><a href="http://www.getoto.net/2009/12/06/the-perfect-soho-router-part-6/">Разширяване възможностите на нашият рутер</a> &#8211; ще опиша някои дреболии които могат да направят живота ни много по лесен, удобен и приятен</li>
</ul>
</blockquote>
<p>В тази част ще изградим една много проста система за наблюдение и диагностика на нашият рутер.<br />
<strong>Защо</strong><br />
За да знаем какво се случва с нашият рутер. Винаги е полезно да знаем в какво състояние е нашият рутер и то да можем да достигнем до тази информация бързо.</p>
<p><strong>Какво ще има</strong><br />
Личното ми предложение за елементарна система е както следва:</p>
<ul>
<li>Web базирана &#8211; за лесен достъп от всякъде</li>
<li>Проверка на състоянието на интернет свързаността &#8211; за да може с един поглед да се каже дали имаме връзка и дали проблема е някъде при нашият доставчик</li>
<li>Проверка на състоянието на мрежовите карти &#8211; дали са включени, да не би кабелчето да е избягало и т.н.</li>
<li>Проверка на използването на паметта &#8211; да не би случайно да сме влезнали в swap зоната и харда да траши</li>
<li>Проверка броя активни сесии &#8211; за да видим до къде е стигнало използването</li>
<li>Трафик статистика с помощта на mrtg</li>
<li>Пълна системна информация от phpsysinfo</li>
</ul>
<p><strong>Скрипт за проверка на състоянието на интернет свързаността</strong><br />
Това е един много прост скрипт който ще се опита да направи няколко пинг-а до определен адрес който сме сигурни че е винаги на линия. Използваме ип адрес а не име за да избегнем проблема с пропаднал DNS.<br />
За да работи коректно този скрипт е необходимо да имаме <strong>ping, tail, cut, php</strong></p>
<pre class="brush: php;">&lt;?php
// simple checking of connectivity
// vvitkov
// 02.11.2006
?&gt;
&lt;html&gt;
&lt;head&gt;
&lt;title&gt;Connection check&lt;/title&gt;
&lt;meta http-equiv=&quot;Content-Type&quot; content=&quot;text/html; charset=utf-8&quot; /&gt;
&lt;link REL=StyleSheet HREF=&quot;style.css&quot; TYPE=&quot;text/css&quot; MEDIA=screen&gt;
&lt;/link&gt;&lt;/head&gt;
&lt;body&gt;
&lt;?php include &quot;header.php&quot;; ?&gt;
&lt;center&gt;&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;Checking Conection with
&lt;?php
$target=&quot;194.145.63.12&quot;;
if (isset($_REQUEST['t'])){
        $target=$_REQUEST['t'];
}
echo &quot;&lt;font color=#000000&gt;&quot; . $target . &quot;&lt;/h2&gt;&lt;br /&gt;&lt;br /&gt;&quot;;
$OK=&quot;&lt;div class=ok&gt;CONNECTION IS UP&lt;/div&gt;&quot;;
$NO=&quot;&lt;div class=no&gt;CONNECTION DOWN&lt;/div&gt;&quot;;

$status=exec(&quot;ping -q -c3 $target | tail -n 1 | cut -d' ' -f1&quot;);

if ($status == &quot;rtt&quot;) { echo $OK; } else { echo $NO; }
?&gt;
&lt;br /&gt;&lt;br /&gt;
&lt;div class=sub&gt;&lt;a href=&quot;?t=www.abv.bg&quot;&gt;Check with abv.bg&lt;/a&gt;&amp;nbsp;&lt;a href=&quot;?t=www.google.com&quot;&gt;Check with Google&lt;/a&gt;&lt;/div&gt;

&lt;?php include &quot;footer.php&quot;; ?&gt;&lt;/center&gt;</pre>
<p>Самият скрипт изобщо не е красив а да не говорим и че не е много сигурен но върши работа. Ето примерен изглед на успешна и неуспешна проверка.<br />
<a href="http://www.getoto.net/wp-content/uploads/2009/12/pingcheck-ok.png"><img src="http://www.getoto.net/wp-content/uploads/2009/12/pingcheck-ok.png" alt="pingcheck-ok" title="pingcheck-ok" width="520" height="215" class="aligncenter size-full wp-image-42" /></a><br />
<a href="http://www.getoto.net/wp-content/uploads/2009/12/pingcheck-no.png"><img src="http://www.getoto.net/wp-content/uploads/2009/12/pingcheck-no.png" alt="pingcheck-no" title="pingcheck-no" width="499" height="221" class="aligncenter size-full wp-image-43" /></a><br />
както забелязвате ако подадем хост който не съществува за проверка ще ни върне отговор че нямаме интернет, което може да не е вярно. Поради тази причина освен проверка с ip са сложени два популярни сайта които се очаква че са винаги на линия.</p>
<p><strong>Скрипт за проверка на състоянието на мрежовите карти</strong><br />
Идеята на този скрипт е да установи дали имаме физическа свързаност. Не винаги е полезен но върши работа.<br />
За да работи скрипта имаме нужда от <strong>sudo, mii-tool</strong>.</p>
<pre class="brush: php;">&lt;?php
// simple checking of network cards
// vvitkov
// 02.11.2006
?&gt;
&lt;html&gt;
&lt;head&gt;
&lt;title&gt;NIC check&lt;/title&gt;
&lt;meta http-equiv=&quot;Content-Type&quot; content=&quot;text/html; charset=utf-8&quot; /&gt;
&lt;link REL=StyleSheet HREF=&quot;style.css&quot; TYPE=&quot;text/css&quot; MEDIA=screen&gt;
&lt;/link&gt;&lt;/head&gt;
&lt;body&gt;
&lt;?php include &quot;header.php&quot;; ?&gt;
&lt;center&gt;&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;Checking Network Cards&lt;/h2&gt;&lt;br /&gt;
&lt;?php
$status=exec(&quot;sudo /sbin/mii-tool eth0 | md5sum | cut -d' ' -f1&quot;);
if ($status === '011d899f145c89793888771019335049'){
        echo &quot;&lt;div class=ok&gt;External network is UP&quot;;
} else {
        echo &quot;&lt;div class=no&gt;External network is DOWN&lt;br /&gt;Please check Cable (eth0)&lt;/div&gt;&quot;;
}
$status=exec(&quot;sudo /sbin/mii-tool eth1 | md5sum | cut -d' ' -f1&quot;);
if ($status === 'e413ff927a35f4df4c8bdecd70111902'){
        echo &quot;&lt;div class=ok&gt;Internal network is UP&lt;/div&gt;&quot;;
} else {
        echo &quot;&lt;div class=no&gt;Internal network is DOWN&lt;br /&gt;Please check Cable (eth1)&lt;/div&gt;&quot;;
}
?&gt;
&lt;/center&gt;

&lt;?php include &quot;footer.php&quot;; ?&gt;</pre>
<p>Проверката на картите не е универсална поради използваните md5 суми, но това може да се коригира особенно лесно. Напълно достатъчно е да се търси в изхода на командата <strong>mii-tool</strong> стринга <strong>link ok</strong>. За да работи този скрипт е необходимо потребителят от чието име вървъ нашият web сървър да има достъп до mii-tool. Това става посредством следният ред в <strong>/etc/sudoers</strong></p>
<pre class="brush: bash;">www-data ALL=(ALL) NOPASSWD: /sbin/mii-tool</pre>
<p><strong>Проверка на използването на паметта</strong><br />
Този скрипт е полезен за проверка на използваната памет. При рутери е особенно важно системата да не използва swap тъй като това краде процесорни цикли и като цяло затормозва машината. За да работи скрипта ни е необходима командата <strong>free</strong></p>
<pre class="brush: php;">&lt; ?php
// simple checking of memory utilisation
// vvitkov
// 02.11.2006
?&gt;
&lt; html &gt;
&lt;head&gt;
&lt;title&gt;Memory Usage&lt;/title&gt;
&lt;meta http-equiv=&quot;Content-Type&quot; content=&quot;text/html; charset=utf-8&quot; /&gt;
&lt;link REL=StyleSheet HREF=&quot;style.css&quot; TYPE=&quot;text/css&quot; MEDIA=screen&gt;
&lt;/link&gt;&lt;/head&gt;
&lt; ?php include &quot;header.php&quot;; ?&gt;
&lt; body &gt;&lt;center&gt;&lt;br /&gt;&lt;h2&gt;Memory Usage&lt;/h2&gt;&lt;br /&gt;&lt;/center&gt;
&lt; ?php
$stat=explode(&quot; &quot;, shell_exec(&quot;free -m| head -2|tail -1|awk '{print $2\&quot; \&quot;$3\&quot; \&quot;$4}'&quot;));
$stat2=explode(&quot; &quot;, shell_exec(&quot;free -m| head -4|tail -1|awk '{print $2\&quot; \&quot;$3\&quot; \&quot;$4}'&quot;));
$tresh=30;
?&gt;
&lt;table border=0 align=center&gt;
        &lt;tr&gt;
                &lt;th&gt;Mem type&lt;/th&gt;
                &lt;th&gt;Used&lt;/th&gt;
                &lt;th&gt;free&lt;/th&gt;
                &lt;th&gt;Total&lt;/th&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
                &lt;th&gt;RAM&lt;/th&gt;
                &lt;td&gt;&lt; ?php echo $stat[1]; ?&gt;&lt;/td&gt;
                &lt;td&gt;&lt; ?php echo $stat[2]; ?&gt;&lt;/td&gt;
                &lt;td&gt;&lt; ?php echo $stat[0]; ?&gt;&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
                &lt;th&gt;SWAP&lt;/th&gt;
                &lt;td&gt;&lt; ?php
                        if ($stat2[1] &gt; $tresh) {
                                echo &quot;&lt;font color=red weight=bold&gt;$stat2[1]&lt;/font&gt;&quot; ;
                        } else {
                                echo $stat2[1];
                        }
                ?&gt;
                &lt;/td&gt;
                &lt;td&gt;&lt; ?php echo $stat2[2]; ?&gt;&lt;/td&gt;
                &lt;td&gt;&lt; ?php echo $stat2[0]; ?&gt;&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
                &lt;th&gt;TOTAL&lt;/th&gt;
                &lt;td&gt;&lt; ?php echo ($stat[1]+$stat2[1]); ?&gt;&lt;/td&gt;
                &lt;td&gt;&lt; ?php echo ($stat[2]+$stat2[2]); ?&gt;&lt;/td&gt;
                &lt;td&gt;&lt; ?php echo ($stat[0]+$stat2[0]); ?&gt;&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
                &lt;td&gt;&amp;nbsp;&lt;/td&gt;
                &lt;th&gt;&lt; ?php
                        if ($stat2[1] &gt; $tresh) {
                                echo &quot;&lt;font color=red weight=bold&gt;^^^&lt;/font&gt;&quot; ;
                        } else {
                                echo &quot;&amp;nbsp&quot;;
                        }
                ?&gt;
                &lt;/th&gt;
                &lt;td&gt;&amp;nbsp;&lt;/td&gt;
                &lt;td&gt;&amp;nbsp;&lt;/td&gt;
        &lt;/tr&gt;
&lt;/table&gt;
&lt;div class=&quot;sub&quot;&gt;If there is a red number ... that is a problem&lt;/div&gt;
&lt; ?php include &quot;footer.php&quot;; ?&gt;</pre>
<p>Единствената променлива която трябва да се коригира е <strong>$tresh</strong>. Тя се използва за да извади предупреждение че използването на swap е нарастнало над някакво ниво. Възможно е да бъде нагласена на примерно 20% но смятам че е по удачно да бъде въведена на ръка.</p>
<p><strong>Проверка броя активни сесии</strong><br />
Ако има проблеми с отваряне на страници, това може да е индикация на изхабени сесии. Тъй като знаем че някои доставчици лимитират броя сесии, този инструмент може да бъде полезен. Трябва да се отбележи че числата които са отчетени не са строго меродавни, тъй като не се отчита състоянието на сесията а просто наличието и. Тоест ако сесията е в състояние <strong>CLOSE_WAIT</strong> въпреки че може да бъде оползотворена тя се включва в бройката.<br />
За да работи коректно скрипта са ни необходими <strong>sudo, netstat-nat</strong></p>
<pre class="brush: php;">&lt;?php
// simple checking of connectivity
// vvitkov
// 02.11.2006
?&gt;
&lt;html&gt;
&lt;head&gt;
&lt;title&gt;Connection statistics&lt;/title&gt;
&lt;meta http-equiv=&quot;Content-Type&quot; content=&quot;text/html; charset=utf-8&quot; /&gt;
&lt;link REL=StyleSheet HREF=&quot;style.css&quot; TYPE=&quot;text/css&quot; MEDIA=screen&gt;
&lt;/link&gt;&lt;/head&gt;
&lt;?php include &quot;header.php&quot;; ?&gt;
&lt;body &gt;&lt;center&gt;&lt;br /&gt;&lt;h2&gt;Connection statistics&lt;/h2&gt;&lt;br /&gt;&lt;/center&gt;
&lt;table border=0 align=center&gt;
        &lt;tr&gt;
                &lt;th&gt;Proto&lt;/th&gt;
                &lt;th&gt;Clients&lt;/th&gt;
                &lt;th&gt;Ruter&lt;/th&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
                &lt;th&gt;TCP&lt;/th&gt;
                &lt;td&gt;&lt;?php echo exec(&quot;sudo netstat-nat -n -S -p tcp | grep ESTABLISHED | wc -l&quot;); ?&gt;&lt;/td&gt;
                &lt;td&gt;&lt;?php echo exec(&quot;sudo netstat-nat -n -L -p tcp | grep ESTABLISHED | wc -l&quot;); ?&gt;&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
                &lt;th&gt;UDP&lt;/th&gt;
                &lt;td&gt;&lt;?php echo exec(&quot;sudo netstat-nat -n -S -p udp | grep ESTABLISHED | wc -l&quot;); ?&gt;&lt;/td&gt;
                &lt;td&gt;&lt;?php echo exec(&quot;sudo netstat-nat -n -L -p udp | grep ESTABLISHED | wc -l&quot;); ?&gt;&lt;/td&gt;
        &lt;/tr&gt;
&lt;/table&gt;
&lt;br /&gt;
&lt;div class=sub&gt;Only active connections are visible&lt;/div&gt;
&lt;?php include &quot;footer.php&quot;; ?&gt;</pre>
<p><strong>Заключение</strong><br />
В тази статия не е показана настройка на mrtg и phpsysinfo, тъй като те са относително елементарни. С това приключва нашата елементарна система за наблюдение и статистика. Самата система е наистина доста проста но върши работа.<br />
Прилагам цялата система в архивиран вид. За да работи е необходимо да си настроите mrtg посредством <strong>cfgmaker и indexmaker</strong> от инсталацията на mrtg и phpsysinfo посредством пакетната система на дебиан.</p>
<p><a href='http://www.getoto.net/wp-content/uploads/2009/12/monitoring.tar.gz'>monitoring system</a></p>
<p>Трябва да се отбележи че системата има възможност да показва съобщения настроени от администратора в основният си изглед. Това се постига благодарение на файла header.php</p>
<p>Серията продължава в <a href="http://www.getoto.net/2009/12/06/the-perfect-soho-router-part-6/">The Perfect SOHO router &#8211; Part 6</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.getoto.net/2009/12/06/the-perfect-soho-router-part-5/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>The Perfect SOHO router &#8211; Part 4</title>
		<link>http://www.getoto.net/2009/12/06/the-perfect-soho-router-part-4/</link>
		<comments>http://www.getoto.net/2009/12/06/the-perfect-soho-router-part-4/#comments</comments>
		<pubDate>Sun, 06 Dec 2009 16:57:58 +0000</pubDate>
		<dc:creator>Владимир</dc:creator>
				<category><![CDATA[Статии]]></category>
		<category><![CDATA[arp]]></category>
		<category><![CDATA[bash]]></category>
		<category><![CDATA[debian]]></category>
		<category><![CDATA[default]]></category>
		<category><![CDATA[dhcp]]></category>
		<category><![CDATA[FIN]]></category>
		<category><![CDATA[firewall]]></category>
		<category><![CDATA[iproute]]></category>
		<category><![CDATA[iproute2]]></category>
		<category><![CDATA[iptables]]></category>
		<category><![CDATA[ipv]]></category>
		<category><![CDATA[masquerade]]></category>
		<category><![CDATA[packets]]></category>
		<category><![CDATA[port]]></category>
		<category><![CDATA[router]]></category>
		<category><![CDATA[routing]]></category>
		<category><![CDATA[secure]]></category>
		<category><![CDATA[simple]]></category>
		<category><![CDATA[soho]]></category>
		<category><![CDATA[TCP]]></category>

		<guid isPermaLink="false">http://www.getoto.net/?p=39</guid>
		<description><![CDATA[След като вече сме инсталирали нашият рутер и сме пуснали някои услуги е време да конфигурираме самият процес на рутиране. Това се постига чрез стандартни инструменти като route, iptables, arp, iproute2.

В тази част ще покажем трите най-популярни варианта за конфигуриране на рутирането.]]></description>
			<content:encoded><![CDATA[<blockquote><p>Това е четвъртата част от серия от статии в които ще обясня как да създадем перфектният SOHO рутер. Държа да отбележа че това е моята идея за рутер със всичките и предимства и недостатъци.</p>
<p>Серията се състои от следните статии:</p>
<ul>
<li><a href="http://www.getoto.net/2009/12/06/the-perfect-soho-router-part-1/">Общи насоки, идеи, нужни услуги и размисли</a> &#8211; тук ще се постарая аргументирано да обоснова защо съм избрал този комплект от софтуер и услуги</li>
<li><a href="http://www.getoto.net/2009/12/06/the-perfect-soho-router-part-2/">Инсталация на базовата система </a>- ще опиша методът по който ще инсталираме и минимизираме нашата система</li>
<li><a href="http://www.getoto.net/2009/12/06/the-perfect-soho-router-part-3/">Конфигуриране на DNS и DHCP услугите</a> &#8211; тук ще опиша обосновано конфигурациите които смятам за оптимални</li>
<li><a href="http://www.getoto.net/2009/12/06/the-perfect-soho-router-part-4/">Конфигуриране на рутирането</a> &#8211; като цяло тук е сърцето на нашият рутер. Ще предложа някои трикове за улесняване на живота, както и насоки към по-специфични задачи</li>
<li><a href="http://www.getoto.net/2009/12/06/the-perfect-soho-router-part-5/">Конфигуриране на елементарна система за наблюдение и статистика</a></li>
<li><a href="http://www.getoto.net/2009/12/06/the-perfect-soho-router-part-6/">Разширяване възможностите на нашият рутер</a> &#8211; ще опиша някои дреболии които могат да направят живота ни много по лесен, удобен и приятен</li>
</ul>
</blockquote>
<p>След като вече сме инсталирали нашият рутер и сме пуснали някои услуги е време да конфигурираме самият процес на рутиране. Това се постига чрез стандартни инструменти като route, iptables, arp, iproute2.</p>
<p>В тази част ще покажем следните варианти:</p>
<ul>
<li>Прост елементарен рутер &#8211; това е най елементарният но за сметка на това не предлага кой знае какви възможности</li>
<li>Рутер който изпълнява NAT/masquerade и firewall функции &#8211; това е може би най-разпространеният вариант.</li>
<li>Рутер който изпълнява баланс на трафика от два или повече доставчика &#8211; това вече е по-напреднала тема но въпреки всичко има полза от нея.</li>
</ul>
<p>Примерите и конфигурациите ще са доста опростени като ще покажем само скелета на системата, тъй като всеки има различни изисквания. В края на статията ще дам малко връзки с допълнителна информация за четене и помощ.</p>
<p><strong>Прост рутер</strong><br />
При тази ситуация нашият рутер просто развърта тряфика. В общият случай не се прави маскиране или филтрация на трафикатъй като като цяло е решено че не е необходимо. Това решение обикновенно се ползва при големи мрежи просто за да се сегментира мрежата. Постига се особенно елеменарно тъй като изисква включване на една единствена опци в кернела и разрешаването и за изпълнение. Опцията е IP FORWARDING. Може да бъде разрешена по два различни начина:</p>
<ol>
<li>Посредством proc системата (тя е налична при всички случаи):
<pre class="brush: bash;">echo &quot;1&quot; &gt; /proc/sys/net/ipv4/ip_forward</pre>
</li>
<li>Посредством sysctl системата (може да не е налична):
<pre class="brush: plain;">sysctl -w net.ipv4.ip_forward=1</pre>
</li>
</ol>
<p>Тази настройка разрешава препращане на пакети между интерфейсите на рутерът ни и така реално го стартираме. Необходимо е тази настройка да бъде сложена на такова място че при стартирането на нашата машина тя да бъде изпълнена автоматично. Добро място за тази настройка е <strong>/etc/rc.local</strong> или отделен файл който се изпълнява съвсем в края на процеса на стартиране.<br />
Както забелязвате това е един много опростен рутер който не предлага почти никакви ползи. За да работи правилно всяка от клиентските машини трябва да има собствен адрес, който е разпознаваем в обхвата на мрежата. Този рутер не изпълнява филтрация и не предпазва по никакъв начин машините зад него. Като цяло това решение е удачно за големи мрежи които искат да сегментират адресното си пространство и които имат сериозен рутер и firewall на входа им.</p>
<p><strong>Рутер който изпълнява NAT/masquerade и firewall функции</strong><br />
Това е може би най-често използваното решение. Предимствата му са че зад един адрес могат да се скрият (маскират) доста олям брой машини (теоретично почти неограничен стига да имаме процесорна мощ).<br />
Конфигурацията за този пример ще изградим при следните предпоставки:</p>
<ul>
<li>Външен интерфейс: <strong>eth0</strong> със съответно назначения му адрес и маска</li>
<li>Вътрешен интерфейс: <strong>eth1</strong> със съответно назначения му адрес и маска</li>
<li>Проста защита от DoS, DDoS атаки и сканиране</li>
<li>Лимит на специфични ICMP заявки</li>
<li>Достъп до http и ssh от външната страна на рутера ни</li>
<li>Достъп до http, ssh, dns, dhcp от вътрешната страна</li>
<li>SNAT за всички клиенти на рутера ни (дори при динамичен адрес)</li>
<li>Препращане на 10 порта за всеки клиент &#8211; за удобство на потребителите ни</li>
<li>Изрична филтрация на част от боклука във външната/вътрешната ни мрежа</li>
</ul>
<p>Темата за ограничения по TTL изрично ще я пропусна. Реализира се просто и има достатъчно документация по въпроса.</p>
<pre class="brush: bash;">#!/bin/bash

# Simple firewalling router
# author: vvitkov
# contact: http://www.getoto.net/az/
#
# Licence: CC NC-BY-SA v3
# Disclaimer: i take no responsibility for the consequences of using or not using this.
# It is up to you to decide what to do with this stuff.
# Please if you use this write me a note and don't remove the author info.

#######
# Settings, vars
#######
echo &quot;Setting Up Variables ...&quot;
IPT=&quot;/sbin/iptables&quot;
if [ -x /sbin/sysctl ] ; then
	SYSCTL=&quot;/sbin/sysctl -w&quot;
fi

# define external interface, ip, mask, broadcast
EXT_IF=&quot;eth0&quot;
EXT_IP=&quot;$(/sbin/ifconfig $EXT_IF | grep &quot;addr:&quot; | cut -d&quot;:&quot; -f2 | cut -f1 -d&quot; &quot;)&quot;
EXT_NM=&quot;$(/sbin/ifconfig $EXT_IF | grep &quot;addr:&quot; | cut -d&quot;:&quot; -f4 | cut -f1 -d&quot; &quot;)&quot;
EXT_BC=&quot;$(/sbin/ifconfig $EXT_IF | grep &quot;addr:&quot; | cut -d&quot;:&quot; -f3 | cut -f1 -d&quot; &quot;)&quot;

# define internal interface, ip, mask, broadcast
INT_IF=&quot;eth1&quot;
INT_IP=&quot;$(/sbin/ifconfig $INT_IF | grep &quot;addr:&quot; | cut -d&quot;:&quot; -f2 | cut -f1 -d&quot; &quot;)&quot;
INT_NM=&quot;$(/sbin/ifconfig $INT_IF | grep &quot;addr:&quot; | cut -d&quot;:&quot; -f4 | cut -f1 -d&quot; &quot;)&quot;
INT_BC=&quot;$(/sbin/ifconfig $INT_IF | grep &quot;addr:&quot; | cut -d&quot;:&quot; -f3 | cut -f1 -d&quot; &quot;)&quot;
INT_NET=&quot;$INT_IP&quot;/&quot;$INT_NM&quot;

# define the loopback
LO_IF=&quot;lo&quot;
LO_IP=&quot;127.0.0.1&quot;

# define allowed ports
EXT_IN_TCP=&quot;22 80&quot;
EXT_IN_UDP=&quot;33434:33524&quot;

INT_IN_TCP=&quot;22 53 67 68 80&quot;
INT_IN_UDP=&quot;53 67 68 33434:33524&quot;

#######
# Lets go
#######
echo &quot;Tunning ...&quot;
if [ -z $SYSCTL ] ; then
	# stop forwarding
	$SYSCTL net.ipv4.ip_forward=0
	# fix our routing a bit
	$SYSCTL net.ipv4.conf.default.accept_redirects=0
	$SYSCTL net.ipv4.conf.default.accept_source_route=0
	$SYSCTL net.ipv4.conf.default.send_redirects=0
	$SYSCTL net.ipv4.conf.default.rp_filter=1
	# don't log strange packets
	$SYSCTL net.ipv4.conf.default.log_martians=0
	# smurf rpotection
	$SYSCTL net.ipv4.icmp_echo_ignore_broadcasts=1
	$SYSCTL net.ipv4.icmp_ignore_bogus_error_responses=1
	$SYSCTL net.ipv4.conf.default.proxy_arp=0
	# keep quiet about arp requests/answers
	$SYSCTL net.ipv4.conf.default.arp_filter=1
	$SYSCTL net.ipv4.conf.default.arp_announce=2
	$SYSCTL net.ipv4.conf.default.arp_ignore=2
	# set the ttl to a windows like box (additional layer of security)
	$SYSCTL net.ipv4.ip_default_ttl=128
	# recycle fast unused buckets for packet infos
	$SYSCTL net.ipv4.tcp_tw_recycle=1
	$SYSCTL net.ipv4.tcp_tw_reuse=1
	# do not stamp the packets
	$SYSCTL net.ipv4.tcp_timestamps=0
else
	echo &quot;0&quot; &gt; /proc/sys/net/ipv4/ip_forward
	echo &quot;0&quot; &gt; /proc/sys/net/ipv4/conf/default/accept_redirects
	echo &quot;0&quot; &gt; /proc/sys/net/ipv4/conf/default/accept_source_route
	echo &quot;0&quot; &gt; /proc/sys/net/ipv4/conf/default/accept_send_redirects
	echo &quot;1&quot; &gt; /proc/sys/net/ipv4/conf/default/rp_filter
	echo &quot;0&quot; &gt; /proc/sys/net/ipv4/conf/default/log_martians
	echo &quot;1&quot; &gt; /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts
	echo &quot;1&quot; &gt; /proc/sys/net/ipv4/icmp_ignore_bogus_error_responses
	echo &quot;0&quot; &gt; /proc/sys/net/ipv4/conf/default/proxy_arp
	echo &quot;1&quot; &gt; /proc/sys/net/ipv4/conf/default/arp_filter
	echo &quot;2&quot; &gt; /proc/sys/net/ipv4/conf/default/arp_announce
	echo &quot;2&quot; &gt; /proc/sys/net/ipv4/conf/default/arp_ignore
	echo &quot;128&quot; &gt; /proc/sys/net/ipv4/ip_default_ttl
	echo &quot;1&quot; &gt; /proc/sys/net/ipv4/tcp_tw_recycle
	echo &quot;1&quot; &gt; /proc/sys/net/ipv4/tcp_tw_reuse
	echo &quot;0&quot; &gt; /proc/sys/net/ipv4/tcp_timestamps
fi

# Clear all tables
echo &quot;Start on clean ...&quot;
$IPT -F
$IPT -t nat -F
$IPT -t mangle -F

$IPT -X
$IPT -t nat -X
$IPT -t mangle -X

$IPT -P INPUT DROP
$IPT -P OUTPUT DROP
$IPT -P FORWARD DROP

echo &quot;Setting custom chains ...&quot;
$IPT -N bad_packets
$IPT -N bad_tcp_packets
$IPT -N icmp_packets
$IPT -N tcp_in
$IPT -N udp_in
$IPT -N tcp_out
$IPT -N udp_out

echo &quot;Setting some protections ...&quot;
echo &quot;  General&quot;
$IPT -A bad_packets -p ALL -i $EXT_IF -s $INT_NET -j DROP
$IPT -A bad_packets -p ALL -m state --state INVALID -j DROP
$IPT -A bad_packets -p tcp -j bad_tcp_packets
$IPT -A bad_packets -p ALL -j RETURN

echo &quot;  TCP&quot;
$IPT -A bad_tcp_packets -p tcp ! --syn -m state --state NEW -j DROP
$IPT -A bad_tcp_packets -p tcp --tcp-flags ALL NONE -j DROP
$IPT -A bad_tcp_packets -p tcp --tcp-flags ALL ALL -j DROP
$IPT -A bad_tcp_packets -p tcp --tcp-flags ALL FIN,URG,PSH -j DROP
$IPT -A bad_tcp_packets -p tcp --tcp-flags ALL SYN,RST,ACK,FIN,URG -j DROP
$IPT -A bad_tcp_packets -p tcp --tcp-flags SYN,RST SYN,RST -j DROP
$IPT -A bad_tcp_packets -p tcp --tcp-flags SYN,FIN SYN,FIN -j DROP
$IPT -A tcp_in -p TCP -s 0/0 --destination-port 113 -j REJECT
$IPT -A bad_tcp_packets -p tcp -j RETURN

echo &quot;  ICMP&quot;
$IPT -A icmp_packets --fragment -p ICMP -j DROP
$IPT -A icmp_packets -p ICMP -s 0/0 --icmp-type 8 -m limit --limit 1/s -j ACCEPT
$IPT -A icmp_packets -p ICMP -s 0/0 --icmp-type 11 -j ACCEPT
$IPT -A icmp_packets -p ICMP -j RETURN

echo &quot;  UDP&quot;
$IPT -A udp_in -p UDP -s 0/0 --dport 137 -j DROP
$IPT -A udp_in -p UDP -s 0/0 --dport 139 -j DROP
$IPT -A udp_in -p UDP -s 0/0 --dport 113 -j REJECT

echo &quot;Filling the chains ...&quot;
echo &quot;  UDP INCOMING&quot;
for PORT in $EXT_IN_UDP ; do
	$IPT -A udp_in -p UDP -i EXT_IF -s 0/0 --dport $PORT -j ACCEPT;
done
for PORT in $INT_IN_UDP ; do
	$IPT -A udp_in -p UDP -i INT_IF -s 0/0 --dport $PORT -j ACCEPT;
done
$IPT -A udp_in -j RETURN

echo &quot;  UDP OUTGOING&quot;
$IPT -A udp_out -p UDP -s 0/0 -j ACCEPT

echo &quot;  TCP INCOMING&quot;
for PORT in $EXT_IN_TCP ; do
	$IPT -A tcp_in -p TCP -i $EXT_IF -s 0/0 --dport $PORT -j ACCEPT
done
for PORT in $INT_IN_TCP ; do
	$IPT -A tcp_in -p TCP -i $INT_IF-s 0/0 --dport $PORT -j ACCEPT
done
$IPT -A tcp_in -p TCP -j RETURN

echo &quot;  TCP OUTGOING&quot;
$IPT -A tcp_out -p TCP -j ACCEPT

echo &quot;  INCOMING&quot;
$IPT -A INPUT -p ALL -i $LO_IF -j ACCEPT
$IPT -A INPUT -p ALL -j bad_packets
$IPT -A INPUT -p ALL -d 224.0.0.1 -j DROP
$IPT -A INPUT -p ALL -i $INT_IF -s $INT_NET -j ACCEPT
$IPT -A INPUT -p ALL -i $INT_IF -d $INT_BC -j ACCEPT
$IPT -A INPUT -p UDP -i $INT_IF --sport 68 --dport 67 -j ACCEPT
$IPT -A INPUT -p ALL -i $EXT_IF -m state --state ESTABLISHED,RELATED -j ACCEPT
$IPT -A INPUT -p ALL -i ! $EXT_IF -m state --state NEW -j ACCEPT
$IPT -A INPUT -p TCP -i $EXT_IF -j tcp_in
$IPT -A INPUT -p UDP -i $EXT_IF -j udp_in
$IPT -A INPUT -p ICMP -i $EXT_IF -j icmp_packets
$IPT -A INPUT -m pkttype --pkt-type broadcast -j DROP

echo &quot;  FORWARD&quot;
$IPT -A FORWARD -p ALL -j bad_packets
$IPT -A FORWARD -p tcp -i $INT_IF -j tcp_out
$IPT -A FORWARD -p udp -i $INT_IF -j udp_out
$IPT -A FORWARD -p ALL -i $INT_IF -j ACCEPT
$IPT -A FORWARD -i $EXT_IF -m state --state ESTABLISHED,RELATED -j ACCEPT
$IPT -A FORWARD -p ALL -i $EXT_IF -m state --state NEW -j ACCEPT

echo &quot;  OUTPUT&quot;
$IPT -A OUTPUT -m state -p icmp --state INVALID -j DROP
$IPT -A OUTPUT -p ALL -s $LO_IP -j ACCEPT
$IPT -A OUTPUT -p ALL -o $LO_IF -j ACCEPT
$IPT -A OUTPUT -p ALL -s $INT_IP -j ACCEPT
$IPT -A OUTPUT -p ALL -o $INT_IF -j ACCEPT
$IPT -A OUTPUT -p ALL -o $EXT_IF -j ACCEPT

echo &quot;  NAT&quot;
echo &quot;      PORT FORWARDING&quot;
TMP=&quot;`echo $INT_IP | cut -d\. -f1-3`&quot;
for HOST in `seq 2 254` ; do
        PORTR=$((10000+HOST*10)):$((10009+HOST*10))
        echo &quot;   $PORTR for $TMP.$HOST&quot;
        $IPT -A FORWARD -p udp -i $EXT_IF --dport $PORTR -d $TMP.$HOST -j ACCEPT
        $IPT -A FORWARD -p tcp -i $EXT_IF --dport $PORTR -d $TMP.$HOST -j ACCEPT
        $IPT -t nat -A PREROUTING -p udp -i $EXT_IF --dport $PORTR -j DNAT --to $TMP.$HOST
        $IPT -t nat -A PREROUTING -p tcp -i $EXT_IF --dport $PORTR -j DNAT --to $TMP.$HOST
done

$IPT -t nat -A POSTROUTING -o $EXT_IF -j SNAT --to $EXT_IP

if [ -z $SYSCTL ] ; then
	$SYSCTL net.ipv4.ip_forward=1
else
	echo &quot;1&quot; &gt; /proc/sys/net/ipv4/ip_forward
fi</pre>
<p>Като цяло това е един относително добър базов firewall. В него има няколко интересни момента а именно:</p>
<ul>
<li>Начинът по който вземаме адресите на мрежовите карти &#8211; както сте забелязали единствените променливи които не се извличат това са имената на интерфейсите. По този начин самият firewall става по гъвкав и приложим за почти всякакъв вид връзки.</li>
<li>Начина по който реализираме маскирането. Правим го със SNAT тъй като той е по лек отколкото MASQUERADE. За хората които ще кажат че при динамични връзки (pppoe, ip идващо от dhcp) това не е подходящо, да по принцип сте прави. Обаче ако използваме възможностите на DHCP клиента/pppoe клиента това може да бъде избегнато. В момента в който нашият адрес бъде подменен можем принудително да изпълним отново нашият firewall и той отново да си вземе правилния адрес и да се оправи както си му е редът.</li>
<li>Начинът по който препращаме портове на машините зад нас &#8211; използвана е конструкция която е валидна само в bash с която да се генерират две числа които използваме за начало и край на обхвата от портове. След това експлицитно ги отваряме във веригата FORWARD макар че това не е строго необходимо и в последствие ги препращаме чрез DNAT.</li>
<li>Обхватът от портове 33434:33524 &#8211; тези портове трябва да са отворени за да работи traceroute</li>
</ul>
<p><strong>Рутер който изпълнява баланс на трафика от два или повече доставчика</strong><br />
Тук ще дадем само частта която реално изпълнява балансирането на трафика. Вземаме пример само с два доставчика, но разширяването на примера не е проблем. Задачата е малко по обемиста тъй като за удобство ще използваме iproute. Самият пакет има доста криптичен синтаксис но след като му свикнете едва ли ще ви се разделя с него.</p>
<p>За да можем да балансираме трафик ни трябват следните инструменти:</p>
<ul>
<li>iproute2</li>
<li>поддръжка в кернела за multipath routing</li>
<li>Компилиран в кернела поне една дисциплина за multipath routing &#8211; аз лично препоръчвам wrr</li>
</ul>
<p>За да можем да използваме имена в конфигурацията е необходимо да ги добавим във файла <strong>/etc/iproute2/rt_tables</strong>. Индексите им са между 2 и 252. Ако ще балансирате повече от 200 доставчика … не четете на правилното място.</p>
<pre class="brush: bash;">#!/bin/bash
#
# Simple balancing router
# author: vvitkov
# contact: http://www.getoto.net/az/
#
# Licence: CC NC-BY-SA v3
# Disclaimer: i take no responsibility for the consequences of using or not using this.
# It is up to you to decide what to do with this stuff.
# Please if you use this write me a note and don't remove the author info.

### Settings
ISP1_NET=&quot;1.2.3.0/24&quot;
ISP1_GW=&quot;1.2.3.1&quot;
ISP1_IF=&quot;eth1&quot;
ISP1_OUR_HOST=&quot;1.2.3.99&quot;
ISP2_NET=&quot;9.8.7.0/24&quot;
ISP2_GW=&quot;9.8.7.1&quot;
ISP2_IF=&quot;eth2&quot;
ISP2_OUR_HOST=&quot;9.8.7.99&quot;

INT_NET=&quot;10.42.3.0/24&quot;

# Defining routing tables for source routing
if ( ip ru ls | grep main | grep 50 )
then
        ip r f t main
else
        ip ru a prio 50 t main
fi

if ( ip ru ls | grep isp_rules1 )
then
        ip r f t isp_rules1
else
        ip ru a from $ISP1_NET prio 201 t isp_rules1
fi

if ( ip ru ls | grep isp_rules2 )
then
        ip r f t isp_rules2
else
        ip ru a from $ISP2_NET prio 202 t isp_rules2
fi

# Clear all the existing routes
ip r f any
ip r f t default

# Host routes
ip r a $ISP1_NET dev $ISP1_IF src $ISP1_OUR_HOST
ip r a $ISP2_NET dev $ISP2_IF src $ISP2_OUR_HOST

# Local networks
ip r a 127.0.0.0/8 dev lo
ip r a $INT_NET dev eth0

# Default gateways
ip r a 0/0 via $ISP1_GW dev $ISP1_IF table isp_rules1 proto static
ip r a prohibit 0/0 table isp_rules1 metric 1 proto static

ip r a 0/0 via $ISP2_GW dev $ISP2_IF table isp_rules2 proto static
ip r a prohibit 0/0 table isp_rules2 metric 1 proto static

# lets shake it :)
ip r a 0/0 proto static table default nexthop via $ISP1_GW dev $ISP2_IF nexthop via $ISP2_GW dev $ISP2_IF

# Remote networks with static routes
ip r a &lt; NETWORK IN ISP1 &gt; via $ISP1_GW dev $ISP1_IF
ip r a &lt; NETWORK IN ISP2 &gt; via $ISP2_GW dev $ISP2_IF

# flush caches
ip r f c</pre>
<p>С това завършват примерите за конфигуриране на рутер. Знам че не са покрити всички възможности, но човек трябва да се потруди малко.</p>
<p>Серията продължава в <a href="http://www.getoto.net/2009/12/06/the-perfect-soho-router-part-5/">The Perfect SOHO router &#8211; Part 5</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.getoto.net/2009/12/06/the-perfect-soho-router-part-4/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>The Perfect SOHO router &#8211; Part 3</title>
		<link>http://www.getoto.net/2009/12/06/the-perfect-soho-router-part-3/</link>
		<comments>http://www.getoto.net/2009/12/06/the-perfect-soho-router-part-3/#comments</comments>
		<pubDate>Sun, 06 Dec 2009 16:50:45 +0000</pubDate>
		<dc:creator>Владимир</dc:creator>
				<category><![CDATA[Статии]]></category>
		<category><![CDATA[bind]]></category>
		<category><![CDATA[conf]]></category>
		<category><![CDATA[debian]]></category>
		<category><![CDATA[dhcp]]></category>
		<category><![CDATA[dhcpd]]></category>
		<category><![CDATA[dns]]></category>
		<category><![CDATA[dns ip]]></category>
		<category><![CDATA[dnsmasq]]></category>
		<category><![CDATA[firewall]]></category>
		<category><![CDATA[ip dns]]></category>
		<category><![CDATA[management]]></category>
		<category><![CDATA[Min TTL]]></category>
		<category><![CDATA[router]]></category>
		<category><![CDATA[secure]]></category>
		<category><![CDATA[simple]]></category>
		<category><![CDATA[soho]]></category>
		<category><![CDATA[type]]></category>
		<category><![CDATA[zone]]></category>

		<guid isPermaLink="false">http://www.getoto.net/?p=33</guid>
		<description><![CDATA[След като вече сме инсталирали нашият рутер е време да започнем неговата конфигурация. Започваме от DNS и DHCP услугите които са относително централни за правилното и надеждно функциониране на всяка една мрежа.]]></description>
			<content:encoded><![CDATA[<blockquote><p>Това е третата част от серия от статии в които ще обясня как да създадем перфектният SOHO рутер. Държа да отбележа че това е моята идея за рутер със всичките и предимства и недостатъци.</p>
<p>Серията се състои от следните статии:</p>
<ul>
<li><a href="http://www.getoto.net/2009/12/06/the-perfect-soho-router-part-1/">Общи насоки, идеи, нужни услуги и размисли</a> &#8211; тук ще се постарая аргументирано да обоснова защо съм избрал този комплект от софтуер и услуги</li>
<li><a href="http://www.getoto.net/2009/12/06/the-perfect-soho-router-part-2/">Инсталация на базовата система </a>- ще опиша методът по който ще инсталираме и минимизираме нашата система</li>
<li><a href="http://www.getoto.net/2009/12/06/the-perfect-soho-router-part-3/">Конфигуриране на DNS и DHCP услугите</a> &#8211; тук ще опиша обосновано конфигурациите които смятам за оптимални</li>
<li><a href="http://www.getoto.net/2009/12/06/the-perfect-soho-router-part-4/">Конфигуриране на рутирането</a> &#8211; като цяло тук е сърцето на нашият рутер. Ще предложа някои трикове за улесняване на живота, както и насоки към по-специфични задачи</li>
<li><a href="http://www.getoto.net/2009/12/06/the-perfect-soho-router-part-5/">Конфигуриране на елементарна система за наблюдение и статистика</a></li>
<li><a href="http://www.getoto.net/2009/12/06/the-perfect-soho-router-part-6/">Разширяване възможностите на нашият рутер</a> &#8211; ще опиша някои дреболии които могат да направят живота ни много по лесен, удобен и приятен</li>
</ul>
</blockquote>
<p>След като вече сме инсталирали нашият рутер е време да започнем неговата конфигурация. Започваме от DNS и DHCP услугите поради следните причини:</p>
<ul>
<li>Добро упражнение е</li>
<li>Така ще осигурим първоначална сигурност и лесна конфигуруемост на нашата мрежа</li>
<li>Имаме възможност да тестваме относително спокойно</li>
</ul>
<p><strong>Защо ни трябва DNS</strong><br />
DNS системата се използва за откриване на съответствията между име и ip адрес. Самата система представлява огромна разпределена база от данни в която са организирани всички съществуващи имена по света. Полезно е да имаме собствен DNS поради следните причини:</p>
<ul>
<li>Възможност да си създадем собствен фалшив домейн</li>
<li>Ускорено отговаряне на запитванията</li>
<li>Кеширане на отговорите</li>
<li>Частична независимост от нашият доставчик</li>
</ul>
<p><strong>Защо ни трябва DHCP</strong><br />
DHCP е протокол за динамично и автоматизирано конфигуриране на мрежовата част от нашата операционна система. С негова помощ ние можем да зададем огромно множество от параметри които да настроят работата на клиентските машини. Също така този протокол ни спестява необходимостта да обиколим всички клиентски машини при всяка промяна на мрежовите настройки. Посредством този протокол можем да зададем следните настройки (непълен списък):</p>
<ul>
<li>IP адрес на машината</li>
<li>DNS сървъри</li>
<li>Сървъри за стартиране по мрежа</li>
<li>Подразбиращ се път за изход към интернет</li>
<li>Сървър за точно време</li>
<li>TTL</li>
<li>Максимална големина на пакета</li>
<li>други</li>
</ul>
<p><strong>Възможните варианти</strong><br />
Както почти всичко в света на GNU/Linux и за тази задача има няколко варианта. Двата най често използвани варианта за малка мрежа са: отделен DNS и DHCP софтуерен сървър; единствен софтуерен сървър който комбинира DNS и DHCP. За момента най популярните решения за малки мрежи (до 30 &#8211; 50 машини) са:</p>
<ul>
<li>bind9 + dhcpd</li>
<li>dnsmasq</li>
</ul>
<p>Тук ще опишем конфигурирането и на трите продукта. Моето лично предпочитание е комбинацията между bind9 и dhcpd</p>
<p><strong>Конфигуриране на dhcpd</strong><br />
За конфигурирането изхождаме от следните предпоставки:</p>
<ul>
<li>Вътрешната ни мрежа е <strong>10.42.3.0/24</strong></li>
<li>Намира се на интерфейс <strong>eth1</strong></li>
<li>Нашият DNS се намира на адрес <strong>10.42.3.1</strong></li>
<li>Допълнително сервираме и един DNS на нашият доставчик намиращ се на адрес <strong>1.2.3.4</strong></li>
<li>Нашият gateway се намира на адрес <strong>10.42.3.1</strong></li>
<li>Всички наши машини се намират във несъществуващ домейн <strong>internal.tld</strong></li>
<li>Ще подадем малко допълнителни настройки за унифициране на вътрешната ни мрежа</li>
</ul>
<p>След всичко казано ето примерна конфигурация на нашият dhcp сървър<br />
<strong>/etc/dhcpd.conf</strong></p>
<pre class="brush: bash;">#
# Sample configuration file for ISC dhcpd for Debian
#
# $Id: dhcpd.conf,v 1.4.2.2 2002/07/10 03:50:33 peloy Exp $
#

# option definitions common to all supported networks...
# без това нашият сървър няма да работи правилно
authoritative;

# несъществуващият домейн към който ще принадлежим
option domain-name &quot;internal.tld&quot;;
# нашият dns сървър. В случая ползваме само него за яснота. А също и за разширяемост в последствие
option domain-name-servers 10.42.3.1;

# мрежовата маска. Няма нужда да оставяме клиентите да отгатват
option subnet-mask 255.255.255.0;
# за колко време им отпускаме адрес
default-lease-time 14400;
# колко време максимално може да притежават адреса ако случайно dhcp сървърът ни спре да работи
max-lease-time 86400;

# нашата мрежа от която ще раздаваме адреси
subnet 10.42.3.0 netmask 255.255.255.0 {
  # конкретните адреси които ще раздаваме
  range 10.42.3.2 10.99.3.254;
  # отново нашите DNS сървъри
  option domain-name-servers 10.99.3.1, 1.2.3.4;
  # и домейна
  option domain-name &quot;internal.tld&quot;;
  # рутерът (gateway)
  option routers 10.42.3.1;
  # маската
  option subnet-mask 255.255.255.0;
  # къде да се отправят масови запитвания
  option broadcast-address 10.42.3.255;
  # настройка на TTL (windows машините не се подчиняват)
  option default-ip-ttl 64;
  option default-tcp-ttl 64;
  # отместване спрямо GMT
  option time-offset 7200;
  # настройка на типа на нода в MS мрежа
  option netbios-node-type 8;
}</pre>
<p>Като цяло това е една добра начална конфигурация. Както ще забележите има известно припокриване на дефинициите за DNS, мрежова маска и домейн. Това е с цел в последствие ако искаме да сегментираме мрежата ни. Ако имаме такова желание ще е напълно достатъчно да разделим секцията ни <strong>subnet</strong> на няколко части и за всяка част да раздаваме различни настройки. Основното правило е да се дефинират възможно най-много параметри на възможно най-горно ниво (пр: глобално). Така в последствие има по-малко поддръжка по самата конфигурация.</p>
<p>Остана да се отбележи че сървърът трябва да слуша само на вътрешният интерфейс (eth1). Това се постига посредством указване на кой интерфейс да слуша демонът в конфигурационният файл <strong>/etc/default/dhcp</strong>.</p>
<p>Като цяло това завършва конфигурирането на dhcpd.</p>
<p><strong>Конфигуриране на bind9</strong><br />
Това ще нашият DNS сървър. За неговата конфигурация изхождаме от същите предположения както и за DHCP сървърът ни. Като допълнение ще създадем нашият домейн <strong>internal.tld</strong>.</p>
<p>Конфигурацията му е разделена в няколко файла, а именно:</p>
<ul>
<li>/etc/bind/named.conf &#8211; основна конфигурация. Като цяло в този файл се включват други файлове</li>
<li>/etc/bind/named.conf.options &#8211; тук се намират опциите настройващи поведението на нашият сървър</li>
<li>/etc/bind/named.conf.local &#8211; тук се намират дефинициите на нашите зони</li>
<li>Зонови файлове &#8211; това са същинските зони</li>
</ul>
<p>Ще покажем конфигурациите на самият сървър и дефинициите на нашите зони, като ще пропуснем тези които съществуват стандартно.</p>
<p><strong>/etc/bind/named.conf</strong></p>
<pre class="brush: plain;">// This is the primary configuration file for the BIND DNS server named.
//
// Please read /usr/share/doc/bind9/README.Debian.gz for information on the
// structure of BIND configuration files in Debian, *BEFORE* you customize
// this configuration file.
//
// If you are just adding zones, please do that in /etc/bind/named.conf.local

include &quot;/etc/bind/named.conf.options&quot;;
include &quot;/etc/bind/named.conf.local&quot;;

/etc/bind/named.conf.options

options {
        // директория в която ще работим. Ако имаме относително име на файл
        // то ще се търси в тази директория
        directory &quot;/var/cache/bind&quot;;

        // If there is a firewall between you and nameservers you want
        // to talk to, you might need to uncomment the query-source
        // directive below.  Previous versions of BIND always asked
        // questions using port 53, but BIND 8.1 and later use an unprivileged
        // port by default.

        query-source address * port 53;

        // If your ISP provided one or more IP addresses for stable
        // nameservers, you probably want to use them as forwarders.
        // Uncomment the following block, and insert the addresses replacing
        // the all-0's placeholder.

        forwarders {
                1.2.3.4;
        };

        auth-nxdomain no;    # conform to RFC1035
        // няма да използваме IPv6
        listen-on-v6 { none; };
        // Не позволяваме рекурсия. Т.е. не отговаряме за домейни които не знаем
        // тази опция ще бъде предефинирана в по-късен етап
        recursion no;
        // поради факта че не слушаме на IPv6 и не дефинираме такива зони в лога
        // се появяват няколко реда които са особенно дразнещи. Това ги премахва
        empty-zones-enable no;
};</pre>
<p><strong>/etc/bind/named.conf.local</strong></p>
<pre class="brush: plain;">//
// Do any local configuration here
//

// Consider adding the 1918 zones here, if they are not used in your
// organization
//include &quot;/etc/bind/zones.rfc1918&quot;;

// дефиниция на лист за достъп. Локалната машина задължително трябва да е в нея
acl internal {
        10.42.3.0/24;
        127.0.0.0/8;
};

// изглед. Това е нова възможност на bind която позволява сепарация на информацията
// в зависимост от това от къде идваме
view &quot;internal&quot; {
        // от този изглед могат да получават отговори хостове от нашият списък
        match-clients { internal; };
        // вече можем да отоваряме и за домейни които не са при нас
        recursion yes;

        // нашият несъществуващ домейн
        zone &quot;internal.tld&quot; {
                type master;
                // къде се намира същинската зона
                file &quot;/etc/bind/internal.tld-forward&quot;;
                // ако включим динамично опресняване на информацията в DNS
                // само описаните клиенти ще могат да изпълняват такива заявки
                allow-transfer { internal; };
                allow-update { internal; };
        };

         // Това е обратната ни зона. Създава съответствие IP/име
        zone &quot;3.99.10.in-addr.arpa&quot; {
                type master;
                file &quot;/etc/bind/internal.tld-reverse&quot;;
                allow-transfer { internal; };
                allow-update { internal; };
        };

        // prime the server with knowledge of the root servers
        zone &quot;.&quot; {
                type hint;
                file &quot;/etc/bind/db.root&quot;;
        };

        // be authoritative for the localhost forward and reverse zones, and for
        // broadcast zones as per RFC 1912

        zone &quot;localhost&quot; {
                type master;
                file &quot;/etc/bind/db.local&quot;;
        };

        zone &quot;127.in-addr.arpa&quot; {
                type master;
                file &quot;/etc/bind/db.127&quot;;
        };

        zone &quot;0.in-addr.arpa&quot; {
                type master;
                file &quot;/etc/bind/db.0&quot;;
        };

        zone &quot;255.in-addr.arpa&quot; {
                type master;
                file &quot;/etc/bind/db.255&quot;;
        };
};</pre>
<p>Като цяло това завършва конфигурацията на нашият сървър. Както ще забележите той слуша на всички интерфейси но за нормални заявки отговаря само ако заявката идва от вътрешната мрежа. Стандартно логовете при дебиан отиват в <strong>/var/log/daemon.log</strong>. Сега остана само да опишем нашите зони.</p>
<p>internal.tld &#8211; <strong>/etc/bind/internal.tld-forward</strong></p>
<pre class="brush: plain;">; BIND db file for internal.tld
; Време на живот по подразбиране
$TTL 86400

; Запис който ни дефинира като собственици на домейна
@       IN      SOA     perfect-soho-r01.internal.tld.      root. (
                        2007060101     ; serial number YYMMDDNN
                        28800           ; Refresh
                        7200            ; Retry
                        864000          ; Expire
                        86400           ; Min TTL
                        )
                ; нашият DNS. Това е glue запис
                NS      perfect-soho-r01.internal.tld.

; ако името не е пълно специфицирано добави това
$ORIGIN internal.tld.

perfect-soho-r01  IN      A       10.42.3.1
; псевдоним на нашият рутер
gate IN CNAME perfect-soho-r01

3.42.10.in-addr.arpa - /etc/bind/internal.tld-reverse

; BIND reverse data file for internal.tld
$TTL    86400
@       IN      SOA     garota.internal.tld. root. (
                     2007060101         ; Serial
                         604800         ; Refresh
                          86400         ; Retry
                        2419200         ; Expire
                          86400 )       ; Negative Cache TTL

@       IN      NS      perfect-soho-r01.internal.tld.
1       IN      PTR     perfect-soho-r01.internal.tld.</pre>
<p>С това завършва конфигурацията на bind9.</p>
<p><strong>Конфигуриране на dnsmasq</strong><br />
dnsmasq екомбинация от dns и dhcp сървър подходящ за малки мрежи. Има ниско потребление на рам, настройва се относително бързо и лесно. Като цяло не съм много сведущ по него, но с малко помощ от man тази конфигурация излезе</p>
<pre class="brush: plain;"># Configuration file for dnsmasq.
#
# Format is one option per line, legal options are the same
# as the long options legal on the command line. See
# &quot;/usr/sbin/dnsmasq --help&quot; or &quot;man 8 dnsmasq&quot; for details.

# Never forward plain names (with a dot or domain part)
domain-needed
# Never forward addresses in the non-routed address spaces.
bogus-priv

# Uncomment this to filter useless windows-originated DNS requests
# Note that (amongst other things) this blocks all SRV requests,
# so don't use it if you use eg Kerberos.
filterwin2k

# Add domains which you want to force to an IP address here.
# The example below send any host in doubleclick.net to a local
# webserver.
# a bit of spam/ad blocking
address=/doubleclick.net/127.0.0.1

# If you want dnsmasq to change uid and gid to something other
# than the default, edit the following lines.
#user=
#group=

# If you want dnsmasq to listen for requests only on specified interfaces
# (and the loopback) give the name of the interface (eg eth0) here.
# Repeat the line for more than one interface.
interface=eth1

# Set this (and domain: see below) if you want to have a domain
# automatically added to simple names in a hosts-file.
expand-hosts

# Set the domain for dnsmasq. this is optional, but if it is set, it
# does the following things.
# 1) Allows DHCP hosts to have fully qualified domain names, as long
#     as the domain part matches this setting.
# 2) Sets the &quot;domain&quot; DHCP option thereby potentially setting the
#    domain of all systems configured by DHCP
# 3) Provides the domain part for &quot;expand-hosts&quot;
domain=internal.tld

# Uncomment this to enable the integrated DHCP server, you need
# to supply the range of addresses available for lease and optionally
# a lease time. If you have more than one network, you will need to
# repeat this for each network on which you want to supply DHCP
# service.
dhcp-range=10.42.3.2,10.42.3.254,255.255.255.0,4h

# If this line is uncommented, dnsmasq will read /etc/ethers and act
# on the ethernet-address/IP pairs found there just as if they had
# been given as --dhcp-host options. Useful if you keep
# MAC-address/host mappings there for other purposes.
read-ethers

# Send options to hosts which ask for a DHCP lease.
# See RFC 2132 for details of available options.
# Note that all the common settings, such as netmask and
# broadcast address, DNS server and default route, are given
# sane defaults by dnsmasq. You very likely will not need any
# any dhcp-options. If you use Windows clients and Samba, there
# are some options which are recommended, they are detailed at the
# end of this section.
# For reference, the common options are:
# subnet mask - 1
# default router - 3
# DNS server - 6
# broadcast address - 28
dhcp-option=6,10.42.3.1,1.2.3.4
# Set the default time-to-live to 50
dhcp-option=23,64

# The following DHCP options set up dnsmasq in the same way as is specified
# for the ISC dhcpcd in
# http://www.samba.org/samba/ftp/docs/textdocs/DHCP-Server-Configuration.txt
# adapted for a typical dnsmasq installation where the host running
# dnsmasq is also the host running samba.
# you may want to uncomment them if you use Windows clients and Samba.
dhcp-option=19,0           # option ip-forwarding off
#dhcp-option=44,0.0.0.0     # set netbios-over-TCP/IP nameserver(s) aka WINS server(s)
#dhcp-option=45,0.0.0.0     # netbios datagram distribution server
dhcp-option=46,8           # netbios node type
dhcp-option=47             # empty netbios scope.

# Set the DHCP server to authoritative mode. In this mode it will barge in
# and take over the lease for any client which broadcasts on the network,
# whether it has a record of the lease or not. This avoids long timeouts
# when a machine wakes up on a new network. DO NOT enable this if there's
# the slighest chance that you might end up accidentally configuring a DHCP
# server for your campus/company accidentally. The ISC server uses the same
# the same option, and this URL provides more information:
# http://www.isc.org/index.pl?/sw/dhcp/authoritative.php
dhcp-authoritative

# Normally responses which come form /etc/hosts and the DHCP lease
# file have Time-To-Live set as zero, which conventionally means
# do not cache further. If you are happy to trade lower load on the
# server for potentially stale date, you can set a time-to-live (in
# seconds) here.
local-ttl=600

# If you want dnsmasq to detect attempts by Verisign to send queries
# to unregistered .com and .net hosts to its sitefinder service and
# have dnsmasq instead return the correct NXDOMAIN response, uncomment
# this line. You can add similar lines to do the same for other
# registries which have implemented wildcard A records.
#bogus-nxdomain=64.94.110.11

#log-queries</pre>
<p>Не твърдя че конфигурацията е перфектна, но просто нямам много опит с dnsmasq.</p>
<p><strong>Заключение</strong><br />
След като сме свършили всичко това се очаква че вече имаме работещи услуги и относително стабилна машина. Сега е добър момент за кратка почивка тъй-като следва описването на нашата защитна стена и рутирането.</p>
<p>Серията продължава в <a http://www.getoto.net/2009/12/06/the-perfect-soho-router-part-4/">The Perfect SOHO router &#8211; Part 4</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.getoto.net/2009/12/06/the-perfect-soho-router-part-3/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
