<?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; dhcpd</title>
	<atom:link href="http://www.getoto.net/tag/dhcpd/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>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>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 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>
