<?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>The WebDevil &#187; Networking</title>
	<atom:link href="http://dmitry.shaposhnik.name/category/networking/feed/" rel="self" type="application/rss+xml" />
	<link>http://dmitry.shaposhnik.name</link>
	<description>Enjoy development</description>
	<lastBuildDate>Mon, 24 May 2010 01:29:18 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Exim mail forwarding</title>
		<link>http://dmitry.shaposhnik.name/2009/08/11/exim-mail-forwarding/</link>
		<comments>http://dmitry.shaposhnik.name/2009/08/11/exim-mail-forwarding/#comments</comments>
		<pubDate>Tue, 11 Aug 2009 07:19:18 +0000</pubDate>
		<dc:creator>dm</dc:creator>
				<category><![CDATA[Exim]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Networking]]></category>

		<guid isPermaLink="false">http://dmitry.shaposhnik.name/?p=292</guid>
		<description><![CDATA[Стоял у меня MTA Exim4 для отправки почты. И вдруг на этот сервер перенесли MX-запись одного домена (например, example.org), и он вынужден был что-то делать с почтой. Решено было перенаправить всю почту для этого домена на другой ящик на время разбирательств кто прав, а кто виноват.
Для этого в Ubuntu пришлось сделать следующие правки.
В /etc/exim4/update-exim4.conf.conf в [...]]]></description>
			<content:encoded><![CDATA[<p>Стоял у меня MTA Exim4 для отправки почты. И вдруг на этот сервер перенесли MX-запись одного домена (например, example.org), и он вынужден был что-то делать с почтой. Решено было перенаправить всю почту для этого домена на другой ящик на время разбирательств кто прав, а кто виноват.</p>
<p>Для этого в Ubuntu пришлось сделать следующие правки.</p>
<p>В <strong>/etc/exim4/update-exim4.conf.conf</strong> в <strong>dc_other_hostnames</strong> и dc_relay_domains был добавлен example.org.</p>
<p>А сам форвард выглядел так (<strong>/etc/exim4/conf.d/router/099_exim4-config_redirects</strong>):</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">forward:<br />
&nbsp; &nbsp; driver = redirect<br />
&nbsp; &nbsp; domains = example.org<br />
&nbsp; &nbsp; data = tmp_example.org@somemail.com</div></div>
<p>В теории должна была сработать запись вида</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">sender_redirect:<br />
&nbsp; driver = redirect<br />
&nbsp; data = ${lookup{$sender_address}lsearch{/etc/exim4/sender_redirects}}<br />
&nbsp; domains = example.org</div></div>
<p>И в файле <strong>/etc/exim4/sender_redirects</strong> были бы</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">someone@example.org: where.to@forward.com</div></div>
<p>Но почему-то этот вариант не сработал как ожидалось.</p>
<p>Возможно я допустил какие-то ошибки в конфигурировании, но задача выполнена и почта не потеряна.</p>
]]></content:encoded>
			<wfw:commentRss>http://dmitry.shaposhnik.name/2009/08/11/exim-mail-forwarding/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>PowerDNS &#8211; master and slave</title>
		<link>http://dmitry.shaposhnik.name/2009/06/25/powerdns-master-and-slave/</link>
		<comments>http://dmitry.shaposhnik.name/2009/06/25/powerdns-master-and-slave/#comments</comments>
		<pubDate>Thu, 25 Jun 2009 08:49:48 +0000</pubDate>
		<dc:creator>dm</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Networking]]></category>
		<category><![CDATA[Newbie]]></category>
		<category><![CDATA[PowerDNS]]></category>

		<guid isPermaLink="false">http://dmitry.shaposhnik.name/?p=285</guid>
		<description><![CDATA[В связи с переездом на новый сервер пришлось переносить и кучу сервисов, которые крутились на старом. Одним из них был DNS.
Настоятельно рекомендуется делать master и slave (primary и secondary) на разных машинах, дабы в случае отказа одного из них второй мог полноценно работать. Ну это в теории, на практике все несколько упрощается до одного сервера, [...]]]></description>
			<content:encoded><![CDATA[<p>В связи с переездом на новый сервер пришлось переносить и кучу сервисов, которые крутились на старом. Одним из них был DNS.</p>
<p>Настоятельно рекомендуется делать master и slave (primary и secondary) на разных машинах, дабы в случае отказа одного из них второй мог полноценно работать. Ну это в теории, на практике все несколько упрощается до одного сервера, который если ляжет &#8211; то DNS будет уже не столь важен.</p>
<p>Начал подымать master на OpenSuSE 11.1. Конфиг простой и незамысловатый:</p>
<div class="codecolorer-container bash default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #666666; font-style: italic;">#each slave should be put here (space separated) to allow zone details transfer</span><br />
allow-axfr-ips=1.1.1.2<br />
disable-axfr=no<br />
<span style="color: #007800;">daemon</span>=<span style="color: #c20cb9; font-weight: bold;">yes</span><br />
<span style="color: #007800;">guardian</span>=<span style="color: #c20cb9; font-weight: bold;">yes</span><br />
default-ttl=<span style="color: #000000;">3600</span><br />
soa-refresh-default=<span style="color: #000000;">3600</span><br />
lazy-recursion=<span style="color: #c20cb9; font-weight: bold;">yes</span><br />
local-address=0.0.0.0<br />
<span style="color: #007800;">master</span>=<span style="color: #c20cb9; font-weight: bold;">yes</span><br />
<span style="color: #007800;">recursor</span>=127.0.0.1:<span style="color: #000000;">5300</span><br />
<span style="color: #007800;">launch</span>=gmysql<br />
gmysql-host=localhost<br />
gmysql-port=<span style="color: #000000;">3306</span><br />
gmysql-dbname=powerdns<br />
gmysql-user=powerdns<br />
gmysql-password=powerdns<br />
gmysql-socket=<span style="color: #000000; font-weight: bold;">/</span>var<span style="color: #000000; font-weight: bold;">/</span>run<span style="color: #000000; font-weight: bold;">/</span>mysql<span style="color: #000000; font-weight: bold;">/</span>mysql.sock</div></div>
<p>и рекурсор:</p>
<div class="codecolorer-container bash default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #007800;">chroot</span>=<span style="color: #000000; font-weight: bold;">/</span>var<span style="color: #000000; font-weight: bold;">/</span>lib<span style="color: #000000; font-weight: bold;">/</span>pdns<br />
local-address=127.0.0.1<br />
local-port=<span style="color: #000000;">5300</span><br />
<span style="color: #007800;">setgid</span>=pdns<br />
<span style="color: #007800;">setuid</span>=pdns</div></div>
<p>Базу для него создавал из <a href="http://www.opensourcery.co.za/powerdns-on-rails/">PowerDNS on Rails</a>, хотя можно ограничиться и той, <a href="http://doc.powerdns.com/configuring-db-connection.html#CONFIGURING-MYSQL">что в документации</a>.</p>
<p>И напоролся на первый занятный баг &#8211; со включенным режимом master он взлетает и долбит базу одинаковыми запросами (пытается получить все записи). На стоящей рядом ubuntu с той же версией такого не наблюдается. Долго пытался отловить что, где и почему &#8211; и решил пересобрать из сорсов. Когда обнаружилась нехватка boost я решил проверить, а нет ли готового свеженького пакета с собраным powerdns? Таки есть &#8211; надо было всего лишь добавить в списки репо вот этот:</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">http://download.opensuse.org/repositories/server:/dns/openSUSE_11.1/</div></div>
<p>и была установлена версия pdns-2.9.22-1.1. Проблема с нагрузкой на БД полечилась, но появилась новая &#8211; с репликацией на slave.</p>
<p>В PowerDNS есть такое понятие как supermaster. В общем случае нужно прописывать зону на мастере и слейве. Когда слейв получит от мастера notify, он запросит у мастера записи из этой зоны. Но если сервер, от которого пришел notify, будет обнаружен в списке supermasters, и такой зоны на слейве не будет описано, она создастся автоматически. И потом в нее будут добавлены записи с мастера. Это приятно упрощает жизнь <img src='http://dmitry.shaposhnik.name/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' />  В табличке запись довольно простая &#8211; ip мастера, имя слейва (ns2.example.org), имя аккаунта (на работу никак не влияет &#8211; просто будет фигурировать в описании зоны; удобно для указания клиента, например).</p>
<p>В порядке эксперимента попинал слейв нотификейшенами для разных доменов. Не с первого раза, но заработало:</p>
<div class="codecolorer-container bash default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">pdns_control notify example.org</div></div>
<p>С первого раза не заработало потому, что в PowerDNS on Rails в имя поддомена по привычке вписал &#8220;@&#8221;, и потом получил записи вида &#8220;@.example.org&#8221; вместо &#8220;example.org&#8221; либо &#8220;@&#8221;. Прошелся простым апдейтом по базе и убрал этот баг.</p>
<p>PS: Хочу выразить благодарность Патрику Фею (<a href="http://blog.nachtarbeiter.net/about/">Patrick Fey</a>) за его <a href="http://blog.nachtarbeiter.net/2009/04/23/powerdns-on-debian-lenny-sarge-or-woody-2/">недавний пост</a>, который помог постичь смысл supermaster&#8217;ов.</p>
<p>PPS: конфиг pdns для слейва мало чем отличается от мастера:</p>
<div class="codecolorer-container bash default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">config-dir=<span style="color: #000000; font-weight: bold;">/</span>etc<span style="color: #000000; font-weight: bold;">/</span>powerdns<br />
<span style="color: #007800;">daemon</span>=<span style="color: #c20cb9; font-weight: bold;">yes</span><br />
disable-axfr=<span style="color: #c20cb9; font-weight: bold;">yes</span><br />
<span style="color: #007800;">guardian</span>=<span style="color: #c20cb9; font-weight: bold;">yes</span><br />
<span style="color: #007800;">launch</span>=gmysql<br />
lazy-recursion=<span style="color: #c20cb9; font-weight: bold;">yes</span><br />
local-address=0.0.0.0<br />
local-port=<span style="color: #000000;">53</span><br />
module-dir=<span style="color: #000000; font-weight: bold;">/</span>usr<span style="color: #000000; font-weight: bold;">/</span>lib<span style="color: #000000; font-weight: bold;">/</span>powerdns<br />
<span style="color: #007800;">setgid</span>=pdns<br />
<span style="color: #007800;">setuid</span>=pdns<br />
<span style="color: #007800;">slave</span>=<span style="color: #c20cb9; font-weight: bold;">yes</span><br />
socket-dir=<span style="color: #000000; font-weight: bold;">/</span>var<span style="color: #000000; font-weight: bold;">/</span>run<br />
version-string=powerdns<br />
gmysql-host=localhost<br />
gmysql-port=<span style="color: #000000;">3306</span><br />
gmysql-dbname=powerdns<br />
gmysql-user=powerdns<br />
gmysql-password=powerdns</div></div>
]]></content:encoded>
			<wfw:commentRss>http://dmitry.shaposhnik.name/2009/06/25/powerdns-master-and-slave/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Having fun with RRD and architecture</title>
		<link>http://dmitry.shaposhnik.name/2009/06/19/having-fun-with-rrd-and-architecture/</link>
		<comments>http://dmitry.shaposhnik.name/2009/06/19/having-fun-with-rrd-and-architecture/#comments</comments>
		<pubDate>Fri, 19 Jun 2009 02:16:12 +0000</pubDate>
		<dc:creator>dm</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Networking]]></category>
		<category><![CDATA[RRD]]></category>

		<guid isPermaLink="false">http://dmitry.shaposhnik.name/?p=282</guid>
		<description><![CDATA[Переезжал на новый сервер, и наигрался вволю со всеми мониторингами и прочим. Была обнаружена неприятная особенность RRD: бд платформозависима. Пришлось на старом сервере делать дамп
for i in *.rrd; do rrdtool dump $i &#62; $i.xml; done
тащить на новый (tar, scp либо nc) и там разворачивать:
for i in *.xml; do A=`echo $i&#124;sed 's/\.xml//'`; rrdtool restore -f $i [...]]]></description>
			<content:encoded><![CDATA[<p>Переезжал на новый сервер, и наигрался вволю со всеми мониторингами и прочим. Была обнаружена неприятная особенность RRD: бд платформозависима. Пришлось на старом сервере делать дамп</p>
<div class="codecolorer-container bash default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #000000; font-weight: bold;">for</span> i <span style="color: #000000; font-weight: bold;">in</span> <span style="color: #000000; font-weight: bold;">*</span>.rrd; <span style="color: #000000; font-weight: bold;">do</span> rrdtool dump <span style="color: #007800;">$i</span> <span style="color: #000000; font-weight: bold;">&gt;</span> <span style="color: #007800;">$i</span>.xml; <span style="color: #000000; font-weight: bold;">done</span></div></div>
<p>тащить на новый (tar, scp либо nc) и там разворачивать:</p>
<div class="codecolorer-container bash default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #000000; font-weight: bold;">for</span> i <span style="color: #000000; font-weight: bold;">in</span> <span style="color: #000000; font-weight: bold;">*</span>.xml; <span style="color: #000000; font-weight: bold;">do</span> <span style="color: #007800;">A</span>=<span style="color: #000000; font-weight: bold;">`</span><span style="color: #7a0874; font-weight: bold;">echo</span> <span style="color: #007800;">$i</span><span style="color: #000000; font-weight: bold;">|</span><span style="color: #c20cb9; font-weight: bold;">sed</span> <span style="color: #ff0000;">'s/\.xml//'</span><span style="color: #000000; font-weight: bold;">`</span>; rrdtool restore <span style="color: #660033;">-f</span> <span style="color: #007800;">$i</span> <span style="color: #007800;">$A</span>; <span style="color: #000000; font-weight: bold;">done</span></div></div>
<p>По поводу того как тащить данные между серверами &#8211; ninja way:<br />
На стороне получателя</p>
<div class="codecolorer-container bash default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">netcat <span style="color: #660033;">-l</span> <span style="color: #660033;">-p</span> <span style="color: #000000;">7000</span> <span style="color: #000000; font-weight: bold;">|</span> <span style="color: #c20cb9; font-weight: bold;">tar</span> x</div></div>
<p>На стороне отправителя</p>
<div class="codecolorer-container bash default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #c20cb9; font-weight: bold;">tar</span> cf - <span style="color: #000000; font-weight: bold;">*</span> <span style="color: #000000; font-weight: bold;">|</span> netcat otherhost <span style="color: #000000;">7000</span></div></div>
<p>Ссылки по теме:<br />
<a href="http://compsoc.dur.ac.uk/~djw/tarpipe.html">tarpipe</a><br />
<a href="http://forums.cacti.net/about19026.html">RRD convert</a></p>
]]></content:encoded>
			<wfw:commentRss>http://dmitry.shaposhnik.name/2009/06/19/having-fun-with-rrd-and-architecture/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>OpenVZ on Ubuntu 8.10</title>
		<link>http://dmitry.shaposhnik.name/2009/03/01/openvz-on-ubuntu-810/</link>
		<comments>http://dmitry.shaposhnik.name/2009/03/01/openvz-on-ubuntu-810/#comments</comments>
		<pubDate>Sun, 01 Mar 2009 05:47:48 +0000</pubDate>
		<dc:creator>dm</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Networking]]></category>
		<category><![CDATA[OpenVZ]]></category>
		<category><![CDATA[Virtualization]]></category>
		<category><![CDATA[tutorials]]></category>

		<guid isPermaLink="false">http://dmitry.shaposhnik.name/?p=264</guid>
		<description><![CDATA[Только-что закончил эксперименты с OpenVZ на Ubuntu 8.10 (intrepid). Успешно.
Итак, задача: создать виртуальную (для начала одну) машину с Ubuntu 8.10, которая будет доступна в локальной сети. Хост-система &#8211; Ubuntu 8.10, выступает в роли роутера для локальной сети, имеет на себе DHCP-сервер. Настройки сети виртуальная машинка должна получать по DHCP, роутиться другим роутером (два провайдера). Задача [...]]]></description>
			<content:encoded><![CDATA[<p>Только-что закончил эксперименты с <a href="http://wiki.openvz.org/Main_Page">OpenVZ</a> на Ubuntu 8.10 (intrepid). Успешно.</p>
<p>Итак, задача: создать виртуальную (для начала одну) машину с Ubuntu 8.10, которая будет доступна в локальной сети. Хост-система &#8211; Ubuntu 8.10, выступает в роли роутера для локальной сети, имеет на себе DHCP-сервер. Настройки сети виртуальная машинка должна получать по DHCP, роутиться другим роутером (два провайдера). Задача осложняется тем, что из intrepid убрали поддержку виртуализации посредством OpenVZ и сделали упор на KVM. Так как имеем машинку на базе AMD Duron (900MHz) то приходится выкручиваться. Опыт, как говорится, бесценен.</p>
<p><span id="more-264"></span></p>
<p>Пару слов о состоянии виртуализации в Ubuntu: </p>
<ul>
<li>
		<a href="http://kvm.qumranet.com/kvmwiki">KVM</a>. В 8.10 сделали упор на KVM, который требует аппаратной поддержки виртуализации процессором. В данном случае процессор устаревший, так что KVM отпадает.
	</li>
<li>
		<a href="http://linux-vserver.org/Welcome_to_Linux-VServer.org">VServer</a>. Выглядит неплохо, но у меня не удалось при помощи make-kpkg собрать ядро (2.6.27-15, наиболее близкое к имеющемуся в 8.10 &#8211; 2.6.27-11).
	</li>
<li>
		<a href="http://wiki.openvz.org/Main_Page">OpenVZ</a>. Неплохое решение, но ядро с поддержкой виртуализации было в 8.04, в 8.10 от него отказались в пользу KVM.
	</li>
<li>
		<a href="http://www.xen.org/">Xen</a>. Не горел желанием использовать решения полной виртуализации, так как вируализировать оборудование мне не требовалось &#8211; это дополнительные накладные расходы. Вроде бы поддержка есть&#8230; но, как оказалось, лишь в качестве гостевой ОС (DomU &#8211; гостевая, Dom0 &#8211; хост-система). А сервером (Dom0) &#8211; увы. В 8.04 было ядро умеющее быть сервером.
	</li>
<li>
		<a href="http://www.vmware.com/">VMWare Server</a>. Также полная виртуализация, тяжеловесное решение. Но хорошо тем, что не требует хаков с ядром.
	</li>
</ul>
<p>Итогом чтения доки стала установка VMWare Server, и обошлось без косяков. Но снес его через несколько часов. </p>
<p>Во-первых, одновременно с VMWare Server нельзя пользоваться комплектом netatalk.</p>
<p>Во-вторых, теперь у VMWare Server появилась вебморда. И все бы ничего, если б не ее тормознутость. Посмотрев список процессов &#8211; sun-jre, apache-tomcat. Не знаю у кого как, но на столь небыстрой машинке вебморда тормозила и лагала безбожно. Некогда был Remote Console, но я так и не смог его найти.</p>
<p>Таким образом я пришел к OpenVZ.</p>
<p>Для начала я прописал в <tt>/etc/apt/sources.list</tt> репозиторий от 8.04:</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">deb http://de.archive.ubuntu.com/ubuntu/ hardy main restricted universe multiverse<br />
deb http://de.archive.ubuntu.com/ubuntu/ hardy-updates main restricted universe multiverse<br />
deb http://de.archive.ubuntu.com/ubuntu/ hardy-backports main restricted universe multiverse</div></div>
<p>Далее &#8211; по учебнику:</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">apt-get install linux-openvz vzctl</div></div>
<p>Получил ядро linux-image-2.6.24-23-openvz и проверил, что пакет linux-restricted-modules-openvz потянул за собой linux-restricted-modules-common. Пользуясь aptitude установил версию 2.6.24.16-23.56.</p>
<p>Так как сервер уже работал роутером, то изменений в /etc/sysctl.conf я не вносил &#8211; более-менее с рекомендациями мои значения совпали.</p>
<p>Со странички <a href="http://wiki.openvz.org/Download/template/precreated">шаблонов</a> стянул ubuntu-8.10-x86.tar.gz:</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">cd /var/lib/vz/template/cache &amp;&amp; wget http://download.openvz.org/template/precreated/ubuntu-8.10-x86.tar.gz</div></div>
<p>Затем создал виртуальный контейнер</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">vzctl create 101 --ostemplate ubuntu-8.10-x86 --config vps.basic</div></div>
<p>задал виртуальной машине hostname</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">vzctl set 101 --hostname gretchin --save</div></div>
<p>и добавил запуск этой VPS вместе с запуском OpenVZ (<tt>/etc/init.d/vz</tt>)</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">vzctl set 101 --onboot yes --save</div></div>
<p>Чудесно. На данный момент имеем виртуальную машину без сети. Для того чтоб она была видна в локальной сети нужно соорудить bridge. Для этого понадобится пакет bridge-utils:</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">apt-get install bridge-utils</div></div>
<p>Теперь подправил /etc/network/interfaces:</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">auto lo<br />
iface lo inet loopback<br />
<br />
#Inet iface<br />
auto eth0<br />
iface eth0 inet dhcp<br />
<br />
#eth1 - LAN<br />
auto br0<br />
iface br0 inet static<br />
&nbsp; &nbsp; &nbsp; &nbsp; address 192.168.1.1<br />
&nbsp; &nbsp; &nbsp; &nbsp; netmask 255.255.255.0<br />
&nbsp; &nbsp; &nbsp; &nbsp; bridge_ports eth1</div></div>
<p>Заодно подправил интерфейс в /etc/default/dhcp3-server:</p>
<div class="codecolorer-container bash default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #007800;">INTERFACES</span>=<span style="color: #ff0000;">&quot;br0&quot;</span></div></div>
<p>Затем применил настройки:</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">/etc/init.d/network restart</div></div>
<p>&#8230;и лишился сети. Сам не понял что и как, но после ребута роутера и сидения перед его консолью все заработало самостоятельно. Хм.</p>
<p>Добавил сетевой интерфейс в виртуальную машину:</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">vzctl set 101 --netif_add eth0 --save</div></div>
<p>В vzctl версии &gt;3.0.22 можно указать еще и bridge, к которому присоединяться. Но в ubuntu 8.10 версия 3.0.22, и поэтому пришлось дописывать небольшой скрипт. А заодно исправить мелкий баг.</p>
<p>Итак, в /etc/vz/conf/101.conf нужно дописать</p>
<div class="codecolorer-container bash default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #007800;">CONFIG_CUSTOMIZED</span>=<span style="color: #ff0000;">&quot;yes&quot;</span><br />
<span style="color: #007800;">VZHOSTBR</span>=<span style="color: #ff0000;">&quot;br0&quot;</span></div></div>
<p>Теперь создадим скрипт /etc/vz/bin/vznetaddbr</p>
<div class="codecolorer-container bash default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #c20cb9; font-weight: bold;">mkdir</span> <span style="color: #000000; font-weight: bold;">/</span>etc<span style="color: #000000; font-weight: bold;">/</span>vz<span style="color: #000000; font-weight: bold;">/</span>bin<br />
<span style="color: #c20cb9; font-weight: bold;">touch</span> <span style="color: #000000; font-weight: bold;">/</span>etc<span style="color: #000000; font-weight: bold;">/</span>vz<span style="color: #000000; font-weight: bold;">/</span>bin<span style="color: #000000; font-weight: bold;">/</span>vznetaddbr<br />
<span style="color: #c20cb9; font-weight: bold;">chmod</span> <span style="color: #000000;">700</span> <span style="color: #000000; font-weight: bold;">/</span>etc<span style="color: #000000; font-weight: bold;">/</span>vz<span style="color: #000000; font-weight: bold;">/</span>bin<span style="color: #000000; font-weight: bold;">/</span>vznetaddbr</div></div>
<p>с таким содержимым</p>
<div class="codecolorer-container bash default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;height:300px;"><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #666666; font-style: italic;">#!/bin/bash</span><br />
<br />
<span style="color: #666666; font-style: italic;"># /etc/vz/bin/vznetaddbr</span><br />
<span style="color: #666666; font-style: italic;"># a script to add virtual network interfaces (veth-s) in a CT to a bridge on CT0</span><br />
<br />
<span style="color: #007800;">CONFIGFILE</span>=<span style="color: #000000; font-weight: bold;">/</span>etc<span style="color: #000000; font-weight: bold;">/</span>vz<span style="color: #000000; font-weight: bold;">/</span>conf<span style="color: #000000; font-weight: bold;">/</span><span style="color: #007800;">$VEID</span>.conf<br />
. <span style="color: #007800;">$CONFIGFILE</span><br />
<span style="color: #007800;">VZHOSTIF</span>=<span style="color: #000000; font-weight: bold;">`</span><span style="color: #7a0874; font-weight: bold;">echo</span> <span style="color: #007800;">$NETIF</span> <span style="color: #000000; font-weight: bold;">|</span><span style="color: #c20cb9; font-weight: bold;">sed</span> <span style="color: #ff0000;">'s/^.*host_ifname=\(.*\),.*$/\1/g'</span><span style="color: #000000; font-weight: bold;">`</span><br />
<br />
<span style="color: #000000; font-weight: bold;">if</span> <span style="color: #7a0874; font-weight: bold;">&#91;</span> <span style="color: #000000; font-weight: bold;">!</span> <span style="color: #660033;">-n</span> <span style="color: #ff0000;">&quot;<span style="color: #007800;">$VZHOSTIF</span>&quot;</span> <span style="color: #7a0874; font-weight: bold;">&#93;</span>; <span style="color: #000000; font-weight: bold;">then</span><br />
&nbsp; &nbsp;<span style="color: #7a0874; font-weight: bold;">echo</span> <span style="color: #ff0000;">&quot;According to <span style="color: #007800;">$CONFIGFILE</span> CT<span style="color: #007800;">$VEID</span> has no veth interface configured.&quot;</span><br />
&nbsp; &nbsp;<span style="color: #7a0874; font-weight: bold;">exit</span> <span style="color: #000000;">1</span><br />
<span style="color: #000000; font-weight: bold;">fi</span><br />
<br />
<span style="color: #000000; font-weight: bold;">if</span> <span style="color: #7a0874; font-weight: bold;">&#91;</span> <span style="color: #000000; font-weight: bold;">!</span> <span style="color: #660033;">-n</span> <span style="color: #ff0000;">&quot;<span style="color: #007800;">$VZHOSTBR</span>&quot;</span> <span style="color: #7a0874; font-weight: bold;">&#93;</span>; <span style="color: #000000; font-weight: bold;">then</span><br />
&nbsp; &nbsp;<span style="color: #7a0874; font-weight: bold;">echo</span> <span style="color: #ff0000;">&quot;According to <span style="color: #007800;">$CONFIGFILE</span> CT<span style="color: #007800;">$VEID</span> has no bridge interface configured.&quot;</span><br />
&nbsp; &nbsp;<span style="color: #7a0874; font-weight: bold;">exit</span> <span style="color: #000000;">1</span><br />
<span style="color: #000000; font-weight: bold;">fi</span><br />
<br />
<span style="color: #7a0874; font-weight: bold;">echo</span> <span style="color: #ff0000;">&quot;Adding interface <span style="color: #007800;">$VZHOSTIF</span> to bridge <span style="color: #007800;">$VZHOSTBR</span> on CT0 for CT<span style="color: #007800;">$VEID</span>&quot;</span><br />
<span style="color: #000000; font-weight: bold;">/</span>sbin<span style="color: #000000; font-weight: bold;">/</span><span style="color: #c20cb9; font-weight: bold;">ifconfig</span> <span style="color: #007800;">$VZHOSTIF</span> <span style="color: #000000;">0</span><br />
<span style="color: #7a0874; font-weight: bold;">echo</span> <span style="color: #000000;">1</span> <span style="color: #000000; font-weight: bold;">&gt;</span> <span style="color: #000000; font-weight: bold;">/</span>proc<span style="color: #000000; font-weight: bold;">/</span>sys<span style="color: #000000; font-weight: bold;">/</span>net<span style="color: #000000; font-weight: bold;">/</span>ipv4<span style="color: #000000; font-weight: bold;">/</span>conf<span style="color: #000000; font-weight: bold;">/</span><span style="color: #007800;">$VZHOSTIF</span><span style="color: #000000; font-weight: bold;">/</span>proxy_arp<br />
<span style="color: #7a0874; font-weight: bold;">echo</span> <span style="color: #000000;">1</span> <span style="color: #000000; font-weight: bold;">&gt;</span> <span style="color: #000000; font-weight: bold;">/</span>proc<span style="color: #000000; font-weight: bold;">/</span>sys<span style="color: #000000; font-weight: bold;">/</span>net<span style="color: #000000; font-weight: bold;">/</span>ipv4<span style="color: #000000; font-weight: bold;">/</span>conf<span style="color: #000000; font-weight: bold;">/</span><span style="color: #007800;">$VZHOSTIF</span><span style="color: #000000; font-weight: bold;">/</span>forwarding<br />
<span style="color: #000000; font-weight: bold;">/</span>usr<span style="color: #000000; font-weight: bold;">/</span>sbin<span style="color: #000000; font-weight: bold;">/</span>brctl addif <span style="color: #007800;">$VZHOSTBR</span> <span style="color: #007800;">$VZHOSTIF</span><br />
<br />
<span style="color: #7a0874; font-weight: bold;">exit</span> <span style="color: #000000;">0</span></div></div>
<p>и затем создадим /etc/vz/vznet.conf со следующим содержимым:</p>
<div class="codecolorer-container bash default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #666666; font-style: italic;">#!/bin/bash</span><br />
<br />
<span style="color: #007800;">EXTERNAL_SCRIPT</span>=<span style="color: #ff0000;">&quot;/etc/vz/bin/vznetaddbr&quot;</span></div></div>
<p>Теперь про баг (устраненный в 3.0.23): в процессе старта при наличии vznet.conf вызывается скрипт /usr/sbin/vznetcfg. Так как в debian/ubuntu используется dash (/bin/sh), то там по чистой случайности нету команды <tt>source</tt>, а оттого ошибка появляется на строке 20:</p>
<div class="codecolorer-container bash default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #7a0874; font-weight: bold;">&#91;</span> <span style="color: #660033;">-f</span> <span style="color: #ff0000;">&quot;<span style="color: #007800;">$VZNETCFG</span>&quot;</span> <span style="color: #7a0874; font-weight: bold;">&#93;</span> <span style="color: #000000; font-weight: bold;">&amp;&amp;</span> <span style="color: #7a0874; font-weight: bold;">source</span> <span style="color: #ff0000;">&quot;<span style="color: #007800;">$VZNETCFG</span>&quot;</span></div></div>
<p>Решение &#8211; заменить на</p>
<div class="codecolorer-container bash default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #7a0874; font-weight: bold;">&#91;</span> <span style="color: #660033;">-f</span> <span style="color: #ff0000;">&quot;<span style="color: #007800;">$VZNETCFG</span>&quot;</span> <span style="color: #7a0874; font-weight: bold;">&#93;</span> <span style="color: #000000; font-weight: bold;">&amp;&amp;</span> .<span style="color: #ff0000;">&quot;<span style="color: #007800;">$VZNETCFG</span>&quot;</span></div></div>
<p>Заменить можно через sed (I&#8217;m loving it!):</p>
<div class="codecolorer-container bash default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #c20cb9; font-weight: bold;">cp</span> <span style="color: #660033;">-p</span> <span style="color: #000000; font-weight: bold;">/</span>usr<span style="color: #000000; font-weight: bold;">/</span>sbin<span style="color: #000000; font-weight: bold;">/</span>vznetcfg <span style="color: #000000; font-weight: bold;">/</span>usr<span style="color: #000000; font-weight: bold;">/</span>sbin<span style="color: #000000; font-weight: bold;">/</span>vznetcfg.orig<br />
<span style="color: #c20cb9; font-weight: bold;">sed</span> <span style="color: #660033;">-i</span> <span style="color: #ff0000;">'s/source &quot;$VZNETCFG&quot;/\. &quot;$VZNETCFG&quot;/'</span> <span style="color: #000000; font-weight: bold;">/</span>usr<span style="color: #000000; font-weight: bold;">/</span>sbin<span style="color: #000000; font-weight: bold;">/</span>vznetcfg</div></div>
<p>Соответственно теперь выполним</p>
<div class="codecolorer-container bash default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">vzctl stop <span style="color: #000000;">101</span><br />
vzctl start <span style="color: #000000;">101</span><br />
brctl show</div></div>
<p>В конце мы должны увидеть нечто похожее на veth101.0:</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">bridge name &nbsp; &nbsp; bridge id &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; STP enabled &nbsp; &nbsp; interfaces<br />
br0 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 8000.00024494a7ac &nbsp; &nbsp; &nbsp; no &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;eth1<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; veth101.0</div></div>
<p>Если все удалось &#8211; то можно смело идти в виртуальную машину</p>
<div class="codecolorer-container bash default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">vzctl enter <span style="color: #000000;">101</span></div></div>
<p>и делать все чего хочется.</p>
<p>По поводу роутинга через другого провайдера: подсмотрев в <tt>ifconfig -a</tt> внутри виртуальной машинки мак-адрес сетевого интерфейса достаточно в <tt>/etc/dhcp3/dhcpd.conf</tt> на хост-машине (я же говорил &#8211; она еще и роутер) прописать что-то вроде:</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">host gretchin {<br />
&nbsp; &nbsp; &nbsp; &nbsp; hardware ethernet 00:18:51:80:8A:D9;<br />
&nbsp; &nbsp; &nbsp; &nbsp; fixed-address 192.168.1.101;<br />
&nbsp; &nbsp; &nbsp; &nbsp; server-name &quot;gretchin&quot;;<br />
&nbsp; &nbsp; &nbsp; &nbsp; option routers 192.168.1.2;<br />
}</div></div>
<p>где 192.168.1.2 &#8211; второй роутер в той же сети.</p>
<p>По материалам:</p>
<ol>
<li>
		<a href="https://help.ubuntu.com/community/OpenVZ#8.04%20Hardy">help.ubuntu.com</a>
	</li>
<li>
		<a href="http://ubuntuforums.org/showthread.php?p=3798970">ubuntuforums.org</a>
	</li>
<li>
		<a href="http://www.howtoforge.com/openvz_debian_vps_p2">Howtoforge</a>
	</li>
<li>
		<a href="http://forum.openvz.org/index.php?t=msg&#038;goto=32687&#038;&#038;srch=meminfo#msg_32687">forum.openvz.org</a>
	</li>
<li>
		<a href="http://en.gentoo-wiki.com/wiki/OpenVZ_VLAN">Gentoo Wiki</a>
	</li>
<li>
		<a href="http://download.openvz.org/doc/OpenVZ-Users-Guide.pdf">OpenVZ-Users-Guide.pdf</a>
	</li>
</ol>
<p>PS: не забывайте про GNU Screen. Это избавляет от многих проблем, особенно при конфигурации сети.</p>
]]></content:encoded>
			<wfw:commentRss>http://dmitry.shaposhnik.name/2009/03/01/openvz-on-ubuntu-810/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>DDoS</title>
		<link>http://dmitry.shaposhnik.name/2008/10/10/ddos/</link>
		<comments>http://dmitry.shaposhnik.name/2008/10/10/ddos/#comments</comments>
		<pubDate>Fri, 10 Oct 2008 16:35:49 +0000</pubDate>
		<dc:creator>dm</dc:creator>
				<category><![CDATA[Networking]]></category>
		<category><![CDATA[Ruby]]></category>

		<guid isPermaLink="false">http://dmitry.shaposhnik.name/?p=241</guid>
		<description><![CDATA[Привалило мне сие несчастье некоторое время назад. Ничем не примечательный сайт, ДДоСят уже неделю. В процессе борьбы выросло небольшое детище на Ruby, именуемое Bananoid. От слова bann. И живет оно на Github&#8217;е. Пока оно меня спасает, но непростительно есть 50-100% CPU. Ну что ж, будем лечить.
Хочу особо поблагодарить Критика, Devil&#8217;a и Andrew за помощь в [...]]]></description>
			<content:encoded><![CDATA[<p>Привалило мне сие несчастье некоторое время назад. Ничем не примечательный сайт, ДДоСят уже неделю. В процессе борьбы выросло небольшое детище на Ruby, именуемое <a href="http://github.com/daemon/bananoid/tree/master">Bananoid</a>. От слова bann. И живет оно на <a href="http://github.com">Github&#8217;е</a>. Пока оно меня спасает, но непростительно есть 50-100% CPU. Ну что ж, будем лечить.</p>
<p>Хочу особо поблагодарить <a href="http://kpumuk.info/">Критика</a>, <a href="http://devil.mk.ua/">Devil&#8217;a</a> и <a href="http://andrew2002.com/">Andrew</a> за помощь в бою.</p>
]]></content:encoded>
			<wfw:commentRss>http://dmitry.shaposhnik.name/2008/10/10/ddos/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>PowerDNS URL records and redirector</title>
		<link>http://dmitry.shaposhnik.name/2008/07/25/powerdns-url-records-and-redirector/</link>
		<comments>http://dmitry.shaposhnik.name/2008/07/25/powerdns-url-records-and-redirector/#comments</comments>
		<pubDate>Fri, 25 Jul 2008 19:43:21 +0000</pubDate>
		<dc:creator>dm</dc:creator>
				<category><![CDATA[Browsers]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Networking]]></category>
		<category><![CDATA[PowerDNS]]></category>
		<category><![CDATA[lighttpd]]></category>

		<guid isPermaLink="false">http://dmitry.shaposhnik.name/?p=205</guid>
		<description><![CDATA[В PowerDNS есть пара плюшек, которые я раньше не замечал. Одну из них &#8211; записи &#8220;URL&#8221; я сегодня попробовал, настроил и остался вполне доволен.
Что же такое URL-запись? Это фича PowerDNS, при помощи которой можно делать редирект домена на заданный URL.
Например, запись выглядит как
some.domain.com URL http://other.domain.com/some_domain_com
На самом деле в поле со значением записи может быть ссылка [...]]]></description>
			<content:encoded><![CDATA[<p>В PowerDNS есть пара плюшек, которые я раньше не замечал. Одну из них &#8211; записи &#8220;URL&#8221; я сегодня попробовал, настроил и остался вполне доволен.</p>
<p>Что же такое URL-запись? Это фича PowerDNS, при помощи которой можно делать редирект домена на заданный URL.<br />
Например, запись выглядит как</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">some.domain.com URL http://other.domain.com/some_domain_com</div></div>
<p>На самом деле в поле со значением записи может быть ссылка куда угодно.<br />
В конфиге сервера нужно указать</p>
<div class="codecolorer-container ini default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="ini codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">...<br />
<span style="color: #000099;">fancy-records</span><span style="color: #000066; font-weight:bold;">=</span><span style="color: #660066;">yes</span><br />
<span style="color: #000099;">urlredirector</span><span style="color: #000066; font-weight:bold;">=</span><span style="color: #660066;">77.120.99.180</span><br />
...</div></div>
<p>Когда приходит запрос к DNS&#8217;у для домена some.domain.com отдается 77.120.99.180, указанный в конфиге, как если бы это была обычная &#8220;А&#8221;-запись.<br />
Браузер отрезолвив имя идет на http://some.domain.com. На этом адресе висит http-сервер (я повесил lighttpd), у которого скрипт лезет в БД и для указанного домена ищет соответствующую ему URL-запись и редиректит браузер туда. Все просто и тривиально.</p>
<p>Для lighttpd у меня конфиг дополнился такими строками:</p>
<div class="codecolorer-container ini default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="ini codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">$SERVER<span style="">&#91;</span><span style="color: #933;">&quot;socket&quot;</span><span style="">&#93;</span> <span style="color: #000066; font-weight:bold;">==</span> <span style="color: #933;">&quot;77.120.99.180:80&quot;</span> <span style="">&#123;</span><br />
&nbsp; &nbsp; $HTTP<span style="">&#91;</span><span style="color: #933;">&quot;host&quot;</span><span style="">&#93;</span> <span style="color: #000066; font-weight:bold;">=</span>~ <span style="color: #933;">&quot;(.*)&quot;</span> <span style="">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; magnet.attract-raw-url-to <span style="color: #000066; font-weight:bold;">=</span><span style="color: #660066;"> <span style="">&#40;</span></span><span style="color: #933;">&quot;/var/www/lighttpd/pdns-url-redirector.lua&quot;</span><span style="">&#41;</span><br />
&nbsp; &nbsp; <span style="">&#125;</span><br />
<span style="">&#125;</span></div></div>
<p>То есть все что приходит незамедлительно обрабатывается упомянутым lua-скриптом. Почему <a href="http://www.lua.org/">lua</a>? С ним работает <a href="http://trac.lighttpd.net/trac/wiki/Docs:ModMagnet">mod_magnet</a>, и мне было интересно написать этот скриптик. Вот он:</p>
<div class="codecolorer-container lua default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;height:300px;"><div class="lua codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #b1b100;">require</span> <span style="color: #ff0000;">&quot;luasql.mysql&quot;</span><br />
env <span style="color: #66cc66;">=</span> <span style="color: #b1b100;">assert</span> <span style="color: #66cc66;">&#40;</span>luasql.mysql<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><br />
con <span style="color: #66cc66;">=</span> <span style="color: #b1b100;">assert</span> <span style="color: #66cc66;">&#40;</span>env:connect<span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">&quot;dnsdb&quot;</span>, <span style="color: #ff0000;">&quot;dns_user&quot;</span>, <span style="color: #ff0000;">&quot;dns_pass_for_readonly_records_table&quot;</span>, <span style="color: #ff0000;">&quot;localhost&quot;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><br />
domain <span style="color: #66cc66;">=</span> lighty.request<span style="color: #66cc66;">&#91;</span><span style="color: #ff0000;">&quot;Host&quot;</span><span style="color: #66cc66;">&#93;</span> <br />
<br />
mysql_replacements <span style="color: #66cc66;">=</span> <span style="color: #66cc66;">&#123;</span> <br />
&nbsp; <span style="color: #66cc66;">&#91;</span><span style="color: #ff0000;">&quot;<span style="color: #000099; font-weight: bold;">\0</span>&quot;</span><span style="color: #66cc66;">&#93;</span> <span style="color: #66cc66;">=</span> <span style="color: #ff0000;">&quot;<span style="color: #000099; font-weight: bold;">\\</span>0&quot;</span>,<br />
&nbsp; <span style="color: #66cc66;">&#91;</span><span style="color: #ff0000;">&quot;<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #66cc66;">&#93;</span> <span style="color: #66cc66;">=</span> <span style="color: #ff0000;">&quot;<span style="color: #000099; font-weight: bold;">\\</span>n&quot;</span>,<br />
&nbsp; <span style="color: #66cc66;">&#91;</span><span style="color: #ff0000;">&quot;<span style="color: #000099; font-weight: bold;">\r</span>&quot;</span><span style="color: #66cc66;">&#93;</span> <span style="color: #66cc66;">=</span> <span style="color: #ff0000;">&quot;<span style="color: #000099; font-weight: bold;">\\</span>r&quot;</span>,<br />
&nbsp; <span style="color: #66cc66;">&#91;</span><span style="color: #ff0000;">&quot;<span style="color: #000099; font-weight: bold;">\'</span>&quot;</span><span style="color: #66cc66;">&#93;</span> <span style="color: #66cc66;">=</span> <span style="color: #ff0000;">&quot;<span style="color: #000099; font-weight: bold;">\\</span>'&quot;</span>,<br />
&nbsp; <span style="color: #66cc66;">&#91;</span><span style="color: #ff0000;">&quot;<span style="color: #000099; font-weight: bold;">\&quot;</span>&quot;</span><span style="color: #66cc66;">&#93;</span> <span style="color: #66cc66;">=</span> <span style="color: #ff0000;">&quot;<span style="color: #000099; font-weight: bold;">\\</span><span style="color: #000099; font-weight: bold;">\&quot;</span>&quot;</span>,<br />
&nbsp; <span style="color: #66cc66;">&#91;</span><span style="color: #ff0000;">&quot;<span style="color: #000099; font-weight: bold;">\0</span>26&quot;</span><span style="color: #66cc66;">&#93;</span> <span style="color: #66cc66;">=</span> <span style="color: #ff0000;">&quot;<span style="color: #000099; font-weight: bold;">\\</span>Z&quot;</span>,<br />
&nbsp; <span style="color: #66cc66;">&#91;</span><span style="color: #ff0000;">&quot;<span style="color: #000099; font-weight: bold;">\b</span>&quot;</span><span style="color: #66cc66;">&#93;</span> <span style="color: #66cc66;">=</span> <span style="color: #ff0000;">&quot;<span style="color: #000099; font-weight: bold;">\\</span>b&quot;</span>,<br />
&nbsp; <span style="color: #66cc66;">&#91;</span><span style="color: #ff0000;">&quot;<span style="color: #000099; font-weight: bold;">\t</span>&quot;</span><span style="color: #66cc66;">&#93;</span> <span style="color: #66cc66;">=</span> <span style="color: #ff0000;">&quot;<span style="color: #000099; font-weight: bold;">\\</span>t&quot;</span>,<br />
<span style="color: #66cc66;">&#125;</span><br />
<br />
<span style="color: #b1b100;">function</span> fixsql <span style="color: #66cc66;">&#40;</span>s<span style="color: #66cc66;">&#41;</span><br />
&nbsp; <span style="color: #b1b100;">return</span> <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">string.gsub</span> <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">tostring</span> <span style="color: #66cc66;">&#40;</span>s<span style="color: #66cc66;">&#41;</span>, <span style="color: #ff0000;">&quot;[%z<span style="color: #000099; font-weight: bold;">\n</span><span style="color: #000099; font-weight: bold;">\r</span><span style="color: #000099; font-weight: bold;">\'</span><span style="color: #000099; font-weight: bold;">\&quot;</span><span style="color: #000099; font-weight: bold;">\0</span>26<span style="color: #000099; font-weight: bold;">\b</span><span style="color: #000099; font-weight: bold;">\t</span>]&quot;</span>, <br />
&nbsp; &nbsp; <span style="color: #b1b100;">function</span> <span style="color: #66cc66;">&#40;</span>str<span style="color: #66cc66;">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #b1b100;">return</span> mysql_replacements <span style="color: #66cc66;">&#91;</span>str<span style="color: #66cc66;">&#93;</span> <span style="color: #b1b100;">or</span> str<br />
&nbsp; &nbsp; <span style="color: #b1b100;">end</span> <span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><br />
<span style="color: #b1b100;">end</span> <span style="color: #808080; font-style: italic;">-- fixsql</span><br />
<br />
cur <span style="color: #66cc66;">=</span> <span style="color: #b1b100;">assert</span> <span style="color: #66cc66;">&#40;</span>con:<span style="color: #b1b100;">execute</span><span style="color: #66cc66;">&#40;</span> <span style="color: #b1b100;">string.format</span><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">&quot;SELECT content FROM records WHERE `type` = 'URL' AND `name` = '%s'&quot;</span>, fixsql<span style="color: #66cc66;">&#40;</span>domain<span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#41;</span><br />
result <span style="color: #66cc66;">=</span> cur:fetch<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span><br />
<span style="color: #b1b100;">if</span> result <span style="color: #b1b100;">then</span><br />
&nbsp; &nbsp; redirect_to <span style="color: #66cc66;">=</span> <span style="color: #b1b100;">string.format</span><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">&quot;%s&quot;</span>, result<span style="color: #66cc66;">&#41;</span><br />
<span style="color: #b1b100;">else</span><br />
&nbsp; &nbsp; redirect_to <span style="color: #66cc66;">=</span> <span style="color: #ff0000;">&quot;http://daemons.org.ua/&quot;</span><br />
<span style="color: #b1b100;">end</span><br />
<br />
cur:close<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span><br />
con:close<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span><br />
env:close<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span><br />
<br />
<span style="color: #808080; font-style: italic;">--lighty.content = { string.format(&quot;SELECT content FROM records WHERE `type` = 'URL' AND `name` = '%s'&quot;, fixsql(domain) ) &nbsp;}</span><br />
<span style="color: #808080; font-style: italic;">--lighty.header[&quot;Content-Type&quot;] = &quot;text/plain&quot;</span><br />
<span style="color: #808080; font-style: italic;">--return 200</span><br />
<br />
lighty.header<span style="color: #66cc66;">&#91;</span><span style="color: #ff0000;">&quot;Location&quot;</span><span style="color: #66cc66;">&#93;</span> <span style="color: #66cc66;">=</span> redirect_to<br />
<span style="color: #b1b100;">return</span> <span style="color: #cc66cc;">301</span></div></div>
<p>Комментарий начинается с &#8220;&#8211;&#8221;. Закоментарены строки для отладки скрипта.<br />
Для соединения с мускулем из lua доставил пакет liblua5.1-sql-mysql-2.</p>
<p>Скрипт писал долго, но это было интересно. И небесполезно =)</p>
<hr />
<p><strong>UPD</strong>: во избежание DoS/DDoS атаки на мускуль возможны два варианта апгрейда метода:<br />
1. По крону раз в 5 минут генерить sqlite-БД состоящую из одной таблицы из двух полей &#8211; domain, target<br />
2. Раз в 5 минут генерить сам скрипт с вынесенными в него в виде хеша записями. Тогда скрипт вообще никуда подглядывать не будет.</p>
]]></content:encoded>
			<wfw:commentRss>http://dmitry.shaposhnik.name/2008/07/25/powerdns-url-records-and-redirector/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Lighttpd and execwrap</title>
		<link>http://dmitry.shaposhnik.name/2008/07/24/lighttpd-and-execwrap/</link>
		<comments>http://dmitry.shaposhnik.name/2008/07/24/lighttpd-and-execwrap/#comments</comments>
		<pubDate>Thu, 24 Jul 2008 18:32:09 +0000</pubDate>
		<dc:creator>dm</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Networking]]></category>
		<category><![CDATA[lighttpd]]></category>
		<category><![CDATA[webtech]]></category>

		<guid isPermaLink="false">http://dmitry.shaposhnik.name/?p=203</guid>
		<description><![CDATA[В качестве вэб-сервера я использую lighttpd. И сегодня я наткнулся на старую проблему &#8211; вэб-сервер работает из-под пользователя www-data, и когда пользователь pupkin загружает какой-то файл &#8211; этот файл принадлежит не pupkin&#8217;у, а www-data. И через ftp удалить его он не может, и вынужден искать некие web-file-manager&#8217;ы.
Так вот я погуглил и наткнулся на execwrap. Он [...]]]></description>
			<content:encoded><![CDATA[<p>В качестве вэб-сервера я использую lighttpd. И сегодня я наткнулся на старую проблему &#8211; вэб-сервер работает из-под пользователя www-data, и когда пользователь pupkin загружает какой-то файл &#8211; этот файл принадлежит не pupkin&#8217;у, а www-data. И через ftp удалить его он не может, и вынужден искать некие web-file-manager&#8217;ы.</p>
<p>Так вот я погуглил и наткнулся на <a href="http://cyanite.org/execwrap/">execwrap</a>. Он очень мелкий, почти ничего ему не нужно стороннего для работы, конфигурировать и использовать его крайне просто (да-да, я знаю про suExec, но он мне не сильно понравился).</p>
<p>В результате конфиг для сайта у меня выглядит так:</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;height:300px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">$HTTP[&quot;host&quot;] == &quot;pupkin.com&quot; {<br />
&nbsp; &nbsp; server.name = &quot;pupkin.com&quot;<br />
&nbsp; &nbsp; site-root = &quot;/home/pupkin/www/&quot; + server.name<br />
&nbsp; &nbsp; server.document-root = site-root + &quot;/www&quot;<br />
&nbsp; &nbsp; accesslog.filename = site-root + &quot;/log/access.log&quot;<br />
&nbsp; &nbsp; setenv.add-environment = ( &quot;AWSTATS_FORCE_CONFIG&quot; =&gt; server.name )<br />
&nbsp; &nbsp; auth.backend.htpasswd.userfile = site-root + &quot;/awstats.passwd&quot;<br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; fastcgi.server = ( &quot;.php&quot; =&gt; (( <br />
&nbsp; &nbsp; &nbsp; &nbsp; &quot;bin-path&quot; =&gt; &quot;/var/www/lighttpd/execwrap&quot;, <br />
&nbsp; &nbsp; &nbsp; &nbsp; &quot;socket&quot; =&gt; &quot;/tmp/&quot; + server.name + &quot;.phpsocket&quot;,<br />
&nbsp; &nbsp; &nbsp; &nbsp; &quot;max-procs&quot; =&gt; 10,<br />
&nbsp; &nbsp; &nbsp; &nbsp; &quot;bin-environment&quot; =&gt; ( <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;UID&quot; =&gt; &quot;9999&quot;,<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;GID&quot; =&gt; &quot;9999&quot;,<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;TARGET&quot; =&gt; site-root + &quot;/cgi-bin/php&quot;,<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;CHECK_GID&quot; =&gt; &quot;1&quot;,<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;CGI_BIN_DIR&quot; =&gt; site-root + &quot;/cgi-bin/&quot;,<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;PHP_FCGI_CHILDREN&quot; =&gt; &quot;2&quot;,<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;PHP_FCGI_MAX_REQUESTS&quot; =&gt; &quot;5000&quot;<br />
&nbsp; &nbsp; &nbsp; &nbsp; )<br />
&nbsp; &nbsp; )))<br />
}</div></div>
<p>где 9999 &#8211; ID пользователя и группы (у меня они часто совпадают).</p>
<p>А в директории /home/pupkin/www/pupkin.com/cgi-bin лежит два файла &#8211; симлинк на php.ini и исполняемый файлик &#8220;php&#8221; следующего содержания:</p>
<div class="codecolorer-container bash default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #666666; font-style: italic;">#!/bin/bash</span><br />
<br />
<span style="color: #7a0874; font-weight: bold;">cd</span> <span style="color: #007800;">$CGI_BIN_DIR</span><br />
<span style="color: #7a0874; font-weight: bold;">exec</span> <span style="color: #000000; font-weight: bold;">/</span>usr<span style="color: #000000; font-weight: bold;">/</span>bin<span style="color: #000000; font-weight: bold;">/</span>php-cgi <span style="color: #660033;">-c</span> .<span style="color: #000000; font-weight: bold;">/</span>php.ini</div></div>
<p>Как видите, если надо то конфиг php.ini можно пользователю задать персональный. А файлик php обязательно должен принадлежать этому же пользователю.</p>
<p>Когда все сделано &#8211; рестартуем lighttpd и смотрим, нет ли в логах ругательств с кодом ошибки 22 &#8211; это, как видно из сорса execwrap, несоответствие прав.</p>
<p>Enjoy =)</p>
<p>UPD: execwrap умер и воскрес тут: <a href="http://cgit.stbuehler.de/gitosis/execwrap/">http://cgit.stbuehler.de/gitosis/execwrap/</a></p>
]]></content:encoded>
			<wfw:commentRss>http://dmitry.shaposhnik.name/2008/07/24/lighttpd-and-execwrap/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Migration to PowerDNS</title>
		<link>http://dmitry.shaposhnik.name/2008/07/11/migration-to-powerdns/</link>
		<comments>http://dmitry.shaposhnik.name/2008/07/11/migration-to-powerdns/#comments</comments>
		<pubDate>Thu, 10 Jul 2008 22:14:10 +0000</pubDate>
		<dc:creator>dm</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Networking]]></category>
		<category><![CDATA[Newbie]]></category>
		<category><![CDATA[PowerDNS]]></category>
		<category><![CDATA[tutorials]]></category>

		<guid isPermaLink="false">http://dmitry.shaposhnik.name/?p=183</guid>
		<description><![CDATA[Наверняка многие видели сообщение об уязвимости в DNS. Во многих дистрибах линукса весьма скоро появились секьюрити-патчи, которые эту уязвимость исправляли. Уязвимость, может, и не слишком уж страшная, но она напомнила мне о PowerDNS, который я с интересом рассматривал в начале 2008го года.
Расматривал я его в основном из-за родной интеграции с MySQL. Мне весьма понравилось как [...]]]></description>
			<content:encoded><![CDATA[<p>Наверняка многие видели <a href="http://www.opennet.ru/opennews/art.shtml?num=16872">сообщение об уязвимости в DNS</a>. Во многих дистрибах линукса весьма скоро появились секьюрити-патчи, которые эту уязвимость исправляли. Уязвимость, может, и не слишком уж страшная, но она напомнила мне о <a href="http://www.powerdns.com/">PowerDNS</a>, который я с интересом рассматривал в начале 2008го года.</p>
<p>Расматривал я его в основном из-за родной интеграции с MySQL. Мне весьма понравилось как она реализована. Однако у меня были уже рабочие конфиги BIND9, и я просто ленился испытать PowerDNS на собственной шкуре.</p>
<p>А зря боялся, как оказалось. Упомянутая уязвимость не задела PowerDNS, и этим мое внимание было вновь привлечено к нему. И переход таки состоялся.<br />
<span id="more-183"></span></p>
<h2>Что дал переход</h2>
<p>Во-первых, я получил возможность использовать найденый вчера <a href="https://www.poweradmin.org/trac/">poweradmin</a>. Штука оказалась немного неуклюжая, но порадовала меня тем, что не надо более ковыряться в конфигах.</p>
<p>Во-вторых, при изменении/добавлении/удалении записей в зоне маркер (Serial) в SOA меняется сам. Мелочь, но приятно.</p>
<p>В-третьих, теперь можно давать доступ к редактированию зон другим людям.</p>
<p>Вот то, что бросилось мне в глаза. А теперь более подробно о самом переходе.</p>
<h2>Процесс перехода</h2>
<p>PowerDNS состоит из двух компонентов &#8211; основной сервер имен и преобразователь имен. Основной сервер имен выдает информацию только о тех записях, которые в нем есть. Преобразователь имен же помогает резолвить то, чего нету непосредственно у данного сервера.</p>
<p>Итак, понадобится выполнить следующие действия:</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">apt-get install pdns-server pdns-recursor pdns-backend-mysql</div></div>
<p>Желательно во время установки стопнуть bind, потому как dpkg будет ругаться из-за неудачного запуска демона.</p>
<p>После установки можно тушить pdns и стартовать bind до окончания миграции.</p>
<p>В конфиге /etc/powerdns/pdns.conf надо сделать следующие изменения:</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">...<br />
#allow-recursion=127.0.0.1<br />
...<br />
launch=gmysql<br />
...<br />
local-address=_real_external_ip_here_<br />
...<br />
recursor=127.0.0.1<br />
...</div></div>
<p>Этим мы будем передавать все неизвестные запросы от основного сервера к recursor&#8217;у.<br />
У рекурсора в конфиге стоит local-address=127.0.0.1 по умолчанию, если мне не изменяет память.</p>
<p>В /etc/powerdns/pdns.d/pdns.local вписываем</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">gmysql-host=localhost<br />
gmysql-port=3306<br />
gmysql-dbname=_username_here_<br />
gmysql-user=_dbname_here_<br />
gmysql-password=_dbpass_here_<br />
gmysql-socket=/var/run/mysqld/mysqld.sock</div></div>
<p>Проверяем, есть ли нужная БД и пользователь, и может ли он подключиться к базе.</p>
<p>Пример начальной базы есть в /usr/share/doc/pdns-backend-mysql.<br />
Советую туда сразу добавить в конец</p>
<div class="codecolorer-container sql default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="sql codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #993333; font-weight: bold;">ALTER</span> <span style="color: #993333; font-weight: bold;">TABLE</span> records <span style="color: #993333; font-weight: bold;">ADD</span> CONSTRAINT <span style="color: #ff0000;">`records_ibfk_1`</span> <span style="color: #993333; font-weight: bold;">FOREIGN</span> <span style="color: #993333; font-weight: bold;">KEY</span> <span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">`domain_id`</span><span style="color: #66cc66;">&#41;</span> <span style="color: #993333; font-weight: bold;">REFERENCES</span> <span style="color: #ff0000;">`domains`</span><br />
<span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">`id`</span><span style="color: #66cc66;">&#41;</span> <span style="color: #993333; font-weight: bold;">ON</span> <span style="color: #993333; font-weight: bold;">DELETE</span> CASCADE;</div></div>
<p>При его тестировании было замечено что работает он бытрее с таблицами InnoDB. Наверное, из-за большого кеша у этого типа таблиц. Я не стал менять таблицы на MyISAM, однако добавил при создании таблиц <tt>default collate utf8_general_ci</tt> &#8211; для надежности. </p>
<p>Потом надо втянуть записи имеющиеся у BIND. Для этого в комплекте есть утилита <a href="http://doc.powerdns.com/migration.html">zone2sql</a>. Рекомендую использовать ее с ключиком <tt>--gmysql</tt> &#8211; так она правильнее работает, создавая записи и в domains и в records.</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">zone2sql --named-conf=/etc/bind/named.conf --gmysql &gt; import.sql</div></div>
<p>и вначале выкосил все до основных зон. Потом скормил это mysql&#8217;ю. Также можно во всех <a href="http://doc.powerdns.com/types.html#AEN4582">записях SOA</a> поставить Serial в 0 &#8211; так PowerDNS будет вычислять его автоматически.</p>
<p>Пробуем стопнуть bind9 и запустить pdns и pdns-recursor. Если все правильно &#8211; все взлетит, и в сислоге будут сообщения о состоянии полета.</p>
<p>Проверить можно набрав</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">nslookup - dns.yourserver.com</div></div>
<p>и попробовать ввести что-то существующее на сервере и что-то несуществующее.<br />
У меня основной сервер без recursor&#8217;а не хотел отдавать записи типа CNAME при просмотре nslookup&#8217;ом. Пришлось установит recursor и настроить их общение.</p>
<p>Ну а установка <a href="https://www.poweradmin.org/trac/">poweradmin</a> для управления сервером не должна вызвать трудностей вообще.</p>
]]></content:encoded>
			<wfw:commentRss>http://dmitry.shaposhnik.name/2008/07/11/migration-to-powerdns/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Protecting SSH</title>
		<link>http://dmitry.shaposhnik.name/2008/07/02/protecting-ssh/</link>
		<comments>http://dmitry.shaposhnik.name/2008/07/02/protecting-ssh/#comments</comments>
		<pubDate>Wed, 02 Jul 2008 19:28:29 +0000</pubDate>
		<dc:creator>dm</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Networking]]></category>
		<category><![CDATA[featured]]></category>

		<guid isPermaLink="false">http://dmitry.shaposhnik.name/?p=182</guid>
		<description><![CDATA[Я пытался использовать fail2ban под Linux для отстрела ботов. Но через некоторое время он у меня отказался работать. Почему &#8211; не знаю, причины я особо не искал. И вчера заменил его на другое решение &#8211; sshguard.
Первое впечатление &#8211; не слишком хорошее, потому что надо было все настраивать руками. Но немного разобравшись, быстро поставил его на [...]]]></description>
			<content:encoded><![CDATA[<p>Я <a href="http://dmitry.shaposhnik.name/2008/01/06/ssh-bruteforce-prevention/">пытался использовать fail2ban под Linux</a> для отстрела ботов. Но через некоторое время он у меня отказался работать. Почему &#8211; не знаю, причины я особо не искал. И вчера заменил его на другое решение &#8211; <a href="http://sshguard.sourceforge.net/">sshguard</a>.</p>
<p>Первое впечатление &#8211; не слишком хорошее, потому что надо было все настраивать руками. Но немного разобравшись, быстро поставил его на все свои линукс-сервера.</p>
<p>Итак, что потребуется: <a href="http://www.ubuntu.com">Ubuntu</a> вместе с <a href="https://wiki.ubuntu.com/UbuntuFirewall">UFW</a>, <a href="http://www.balabit.com/network-security/syslog-ng/">syslog-ng</a>.</p>
<div class="codecolorer-container bash default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #c20cb9; font-weight: bold;">apt-get</span> <span style="color: #c20cb9; font-weight: bold;">install</span> sshguard</div></div>
<p>Примечание: на данный момент у меня версия 1.0 которая в пакетах отказалась нормально парсить логи. Потому берем исходники версии 1.1, ./configure &#8211;with-firewall=iptables и после сборки стопаем syslog-ng, заменяем /usr/sbin/sshguard новым бинарником (он будет раза в 4 больше) и запускаем syslog-ng вновь.</p>
<p>и в /etc/syslog-ng/syslog-ng.conf дописать в конец примерно следующее:</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">destination sshguardproc {<br />
&nbsp; &nbsp; program(&quot;/usr/sbin/sshguard&quot;<br />
&nbsp; &nbsp; &nbsp; &nbsp; template(&quot;$DATE $FULLHOST $MESSAGE\n&quot;));<br />
};<br />
# filter LOG_AUTH messages which also contain &quot;ssh&quot;<br />
filter authssh { <br />
&nbsp; &nbsp; &nbsp; &nbsp; facility(auth, authpriv); <br />
};<br />
# copy filtered logs into the sshguard process<br />
log {<br />
&nbsp; &nbsp; &nbsp; &nbsp; source(s_all); <br />
&nbsp; &nbsp; &nbsp; &nbsp; filter(authssh);<br />
&nbsp; &nbsp; &nbsp; &nbsp; destination(sshguardproc);<br />
};</div></div>
<p>Это будет передавать все сообщения об аутентификации sshguard&#8217;у. Он попытается их блокировать путем создания правил iptables. Однако имея ufw пришлось несколько адаптировать указанный в документации метод.<br />
/etc/ufw/before.rules, сразу же под <tt># End required lines</tt> добавил</p>
<div class="codecolorer-container bash default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">:sshguard - <span style="color: #7a0874; font-weight: bold;">&#91;</span><span style="color: #000000;">0</span>:<span style="color: #000000;">0</span><span style="color: #7a0874; font-weight: bold;">&#93;</span></div></div>
<p>и далее в списке правил</p>
<div class="codecolorer-container bash default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">...<br />
<span style="color: #660033;">-A</span> ufw-before-input <span style="color: #660033;">-p</span> tcp <span style="color: #660033;">--dport</span> <span style="color: #000000;">22</span> <span style="color: #660033;">-j</span> sshguard<br />
<span style="color: #666666; font-style: italic;">#ufw-not-local</span><br />
...</div></div>
<p>Так все на порт 22 будет проходить через эту цепочку. И в ней же sshguard будет отстреливать вредителей.</p>
<p>Аналогичную процедуру делаем и для before6.rules с учетом именования цепочек там.</p>
<p>Для тех кто еще не запускал ufw следует прописать политики по умолчанию в /etc/default/ufw и выполнить</p>
<div class="codecolorer-container bash default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">ufw <span style="color: #7a0874; font-weight: bold;">enable</span><br />
ufw logging off</div></div>
<p>и после всего</p>
<div class="codecolorer-container bash default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #000000; font-weight: bold;">/</span>etc<span style="color: #000000; font-weight: bold;">/</span>init.d<span style="color: #000000; font-weight: bold;">/</span>syslog-ng reload</div></div>
<p>Enjoy =)</p>
]]></content:encoded>
			<wfw:commentRss>http://dmitry.shaposhnik.name/2008/07/02/protecting-ssh/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Two ISP and LAN using iproute2</title>
		<link>http://dmitry.shaposhnik.name/2008/05/20/two-isp-and-lan-using-iproute2/</link>
		<comments>http://dmitry.shaposhnik.name/2008/05/20/two-isp-and-lan-using-iproute2/#comments</comments>
		<pubDate>Tue, 20 May 2008 02:41:24 +0000</pubDate>
		<dc:creator>dm</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Networking]]></category>
		<category><![CDATA[tutorials]]></category>

		<guid isPermaLink="false">http://dmitry.shaposhnik.name/?p=179</guid>
		<description><![CDATA[Для меня давно уже возникала необходимость подружить сервер с двумя провайдерами и локальной сетью. И вот вчера проблема стала весьма актуальной.
Итак, имеем:
eth0 &#8211; 192.168.0.0/24 &#8211; LAN
eth1 &#8211; 13.13.13.13/24 &#8211; ISP#1
eth2 &#8211; 6.6.6.6/24 &#8211; ISP#2
ISP#2 отдает IP через DHCP
ISP#1 &#8211; статика (на самом деле DHCP но удалось договориться на статику)
LAN &#8211; его надо NAT&#8217;ить в мир [...]]]></description>
			<content:encoded><![CDATA[<p>Для меня давно уже возникала необходимость подружить сервер с двумя провайдерами и локальной сетью. И вот вчера проблема стала весьма актуальной.</p>
<p>Итак, имеем:<br />
eth0 &#8211; 192.168.0.0/24 &#8211; LAN<br />
eth1 &#8211; 13.13.13.13/24 &#8211; ISP#1<br />
eth2 &#8211; 6.6.6.6/24 &#8211; ISP#2</p>
<p>ISP#2 отдает IP через DHCP<br />
ISP#1 &#8211; статика (на самом деле DHCP но удалось договориться на статику)<br />
LAN &#8211; его надо NAT&#8217;ить в мир через ISP#1 (кое-что можно отправлять и через ISP#2, это будет показано).</p>
<p>Так как при использовании dhclient сетевые настройки не заменялись получеными мы это запретим в файле /etc/dhcp3/dhclient.conf:</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">request subnet-mask, broadcast-address, time-offset, routers;</div></div>
<p>Отлично. Теперь мы получим лишь IP и шлюз. Теперь в файле /etc/iproute2/rt_tables добавим таблицу маршрутизации ISP2:</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">2 &nbsp; &nbsp; &nbsp; ISP2</div></div>
<p>Теперь надо заносить получаемые значения шлюза в эту таблицу, и определить маршрут, по которому пакеты будут попадать в эту таблицу. Для этого напишем два скрипта:<br />
/etc/dhcp3/dhclient-enter-hooks.d/duallink</p>
<div class="codecolorer-container bash default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;height:300px;"><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #000000; font-weight: bold;">if</span> <span style="color: #7a0874; font-weight: bold;">&#91;</span> x<span style="color: #007800;">$reason</span> == <span style="color: #ff0000;">'xBOUND'</span> <span style="color: #7a0874; font-weight: bold;">&#93;</span>; <span style="color: #000000; font-weight: bold;">then</span> <br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">/</span>sbin<span style="color: #000000; font-weight: bold;">/</span>ip route flush table ISP2<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">/</span>sbin<span style="color: #000000; font-weight: bold;">/</span>iptables <span style="color: #660033;">-F</span> PREROUTING <span style="color: #660033;">-t</span> mangle<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">/</span>sbin<span style="color: #000000; font-weight: bold;">/</span>ip route flush cache<br />
&nbsp; &nbsp; &nbsp; &nbsp; ip rule show <span style="color: #000000; font-weight: bold;">|</span> <span style="color: #c20cb9; font-weight: bold;">grep</span> ISP2 <span style="color: #000000; font-weight: bold;">|</span> <span style="color: #000000; font-weight: bold;">while</span> <span style="color: #c20cb9; font-weight: bold;">read</span> <span style="color: #660033;">-r</span> line ; <span style="color: #000000; font-weight: bold;">do</span> &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ip rule del <span style="color: #000000; font-weight: bold;">`</span><span style="color: #7a0874; font-weight: bold;">echo</span> <span style="color: #007800;">$line</span> <span style="color: #000000; font-weight: bold;">|</span> <span style="color: #c20cb9; font-weight: bold;">cut</span> <span style="color: #660033;">-d</span> <span style="color: #ff0000;">':'</span> -f2<span style="color: #000000; font-weight: bold;">`</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">done</span><br />
<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #007800;">prefix</span>=<span style="color: #000000; font-weight: bold;">`</span><span style="color: #7a0874; font-weight: bold;">echo</span> <span style="color: #007800;">$new_ip_address</span> <span style="color: #000000; font-weight: bold;">|</span> <span style="color: #c20cb9; font-weight: bold;">cut</span> <span style="color: #660033;">-d</span> . <span style="color: #660033;">-f</span> <span style="color: #000000;">1</span>-<span style="color: #000000;">2</span><span style="color: #000000; font-weight: bold;">`</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">if</span> <span style="color: #7a0874; font-weight: bold;">&#91;</span> x<span style="color: #007800;">$prefix</span> == <span style="color: #ff0000;">'x192.168'</span> <span style="color: #7a0874; font-weight: bold;">&#93;</span>; <span style="color: #000000; font-weight: bold;">then</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #7a0874; font-weight: bold;">exit</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">fi</span><br />
<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #666666; font-style: italic;">#ISP1</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">/</span>sbin<span style="color: #000000; font-weight: bold;">/</span>ip route add 13.13.13.13<span style="color: #000000; font-weight: bold;">/</span><span style="color: #000000;">24</span> dev eth1 table ISP2<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">/</span>sbin<span style="color: #000000; font-weight: bold;">/</span>ip route add 172.16.0.0<span style="color: #000000; font-weight: bold;">/</span><span style="color: #000000;">16</span> dev eth1 table ISP2<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #666666; font-style: italic;">#LAN</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">/</span>sbin<span style="color: #000000; font-weight: bold;">/</span>ip route add 192.168.0.0<span style="color: #000000; font-weight: bold;">/</span><span style="color: #000000;">24</span> dev eth0 table ISP2<br />
<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #666666; font-style: italic;">#ISP2</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">/</span>sbin<span style="color: #000000; font-weight: bold;">/</span>ip rule add from <span style="color: #007800;">$new_ip_address</span> table ISP2<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">/</span>sbin<span style="color: #000000; font-weight: bold;">/</span>ip rule add fwmark 0x2 table ISP2<br />
<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #666666; font-style: italic;">#А тут можно пометить пакеты, которые уйдут через ISP2</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">/</span>sbin<span style="color: #000000; font-weight: bold;">/</span>iptables <span style="color: #660033;">-I</span> PREROUTING <span style="color: #660033;">-t</span> mangle <span style="color: #660033;">-i</span> eth0 <span style="color: #660033;">-p</span> tcp <span style="color: #660033;">--dport</span> <span style="color: #000000;">443</span> <span style="color: #660033;">-j</span> MARK <span style="color: #660033;">--set-mark</span> <span style="color: #000000;">2</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">/</span>sbin<span style="color: #000000; font-weight: bold;">/</span>iptables <span style="color: #660033;">-I</span> PREROUTING <span style="color: #660033;">-t</span> mangle <span style="color: #660033;">-i</span> eth0 <span style="color: #660033;">-p</span> tcp <span style="color: #660033;">--dport</span> <span style="color: #000000;">80</span> &nbsp;<span style="color: #660033;">-j</span> MARK <span style="color: #660033;">--set-mark</span> <span style="color: #000000;">2</span><br />
<span style="color: #000000; font-weight: bold;">fi</span><br />
<br />
<span style="color: #007800;">isp2_gateway</span>=<span style="color: #007800;">$new_routers</span><br />
<span style="color: #007800;">new_routers</span>=<span style="color: #ff0000;">&quot;&quot;</span></div></div>
<p>/etc/dhcp3/dhclient-exit-hooks.d/duallink</p>
<div class="codecolorer-container bash default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #000000; font-weight: bold;">if</span> <span style="color: #7a0874; font-weight: bold;">&#91;</span> x<span style="color: #007800;">$reason</span> == <span style="color: #ff0000;">'xBOUND'</span> <span style="color: #7a0874; font-weight: bold;">&#93;</span>; <span style="color: #000000; font-weight: bold;">then</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #007800;">my_new_network</span>=<span style="color: #000000; font-weight: bold;">`</span>ipcalc <span style="color: #660033;">-n</span> <span style="color: #007800;">$new_ip_address</span><span style="color: #000000; font-weight: bold;">/</span><span style="color: #007800;">$new_subnet_mask</span> <span style="color: #000000; font-weight: bold;">|</span> <span style="color: #c20cb9; font-weight: bold;">grep</span> Network <span style="color: #000000; font-weight: bold;">|</span> <span style="color: #c20cb9; font-weight: bold;">cut</span> <span style="color: #660033;">-b</span> <span style="color: #000000;">12</span>-<span style="color: #000000;">32</span><span style="color: #000000; font-weight: bold;">`</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">/</span>sbin<span style="color: #000000; font-weight: bold;">/</span>ip route add <span style="color: #007800;">$my_new_network</span> dev <span style="color: #007800;">$interface</span> table ISP2<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">/</span>sbin<span style="color: #000000; font-weight: bold;">/</span>ip route add default via <span style="color: #007800;">$isp2_gateway</span> table ISP2<br />
<span style="color: #000000; font-weight: bold;">fi</span></div></div>
<p>Да, не забудьте установить <b>ipcalc</b>!</p>
<p>Собственно, все. Теперь осталось воткнуть ISP#2 и посмотреть на получившуюся картину командами</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">ip rule show<br />
ip route show<br />
ip route show table ISP2</div></div>
<p>статья собрана по материалам<br />
<a href="https://help.ubuntu.com/community/InternetAndNetworking/DualHomedGatewayDHCP">Configuring several Internet connections on the same Computer</a><br />
<a href="http://lartc.org/howto/lartc.rpdb.html">Rules &#8211; routing policy database</a><br />
<a href="http://linux-ip.net/html/tools-ip-route.html">Appendix D. IP Route Management</a><br />
и других перелистаных в процессе отладки.</p>
<p>На убунтовской вики упоминается /usr/local/sbin/flush_rules.pl, но что внутри этого скрипта &#8211; автор умолчал.</p>
<p>Все замечания приветствуются!</p>
]]></content:encoded>
			<wfw:commentRss>http://dmitry.shaposhnik.name/2008/05/20/two-isp-and-lan-using-iproute2/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
