<?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 Apple Geek &#187; network</title>
	<atom:link href="http://theapplegeek.ru/archives/tag/network/feed" rel="self" type="application/rss+xml" />
	<link>http://theapplegeek.ru</link>
	<description>Чему ты научился сегодня?</description>
	<lastBuildDate>Sun, 06 May 2012 15:19:34 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.2</generator>
<atom:link rel="hub" href="http://pubsubhubbub.appspot.com"/><atom:link rel="hub" href="http://superfeedr.com/hubbub"/>		<item>
		<title>Добавление статического маршрута при запуске системы через StartupItems</title>
		<link>http://theapplegeek.ru/archives/5681</link>
		<comments>http://theapplegeek.ru/archives/5681#comments</comments>
		<pubDate>Tue, 06 Sep 2011 16:05:56 +0000</pubDate>
		<dc:creator>ctrld</dc:creator>
				<category><![CDATA[Mac]]></category>
		<category><![CDATA[network]]></category>
		<category><![CDATA[system]]></category>

		<guid isPermaLink="false">http://theapplegeek.ru/?p=5681</guid>
		<description><![CDATA[<p>Понадобилось мне при запуске OS X добавить статический маршрут. И всё бы хорошо, но сколько не бился - всё без толку, испытываю очередной вариант, перезапускаю сервер, проверяю - маршрута нет.</p>]]></description>
			<content:encoded><![CDATA[<p>Понадобилось мне при запуске OS X добавить статический маршрут. И всё бы хорошо, но сколько не бился &#8211; всё без толку, испытываю очередной вариант, перезапускаю сервер, проверяю &#8211; маршрута нет.</p>
<p><span id="more-5681"></span>
<p>Уже начал думать, что в Lion поменялись механизмы работы с StartupItems. Но тут в Console.app заметил сообщение &#8220;add net 10.0.0.0: gateway 192.168.98.9: Network is unreachable&#8221; и всё стало на свои места.</p>
<p>Всё дело в том, что сетевые интерфейсы подымаются не сразу (что при DHCP, что при ручной установке адреса), а для добавления статического маршрута шлюз должен быть доступен. Добавил в скрипт задержку 10 секунд перед выполнением команды route &#8211; и всё получилось.</p>
<p>При прописывании StartupItems я отталкивался от статьи &#8220;<noindex><a rel="nofollow" href="http://beyondabstraction.net/2008/11/06/noatime-mount-option-in-os-x/" >Disabling file access time updates using noatime in OS X</a></noindex>&#8221; &#8211; она первая мне попалась под руку.</p>
<h2>StartupItems</h2>
<p>Создаю каталог для нового StartupItem</p>
<pre>
$ sudo mkdir /Library/StartupItems/ctrld_boot
</pre>
<p>Делаю описание скрипта (без него работать не будет)</p>
<pre>
$ sudo vim  /Library/StartupItems/ctrld_boot/StartupParameters.plist
{
	Description = "Ctrld Boot Script";
	Provides = ("ctrld_boot");
	OrderPreference = "None";
	Messages =
	{
		start = "Starting ctrld Boot Script";
		stop = "Stoping ctrld Boot Script";
		restart = "Restarting ctrld Boot Script";
	};
}
</pre>
<p>Пишу скрипт (обратите внимание на sleep 10 &#8211; не будет работать, замените 10 секунд, например, на 20):</p>
<pre>
$ sudo vim /Library/StartupItems/ctrld_boot/ctrld_boot
#!/bin/sh
. /etc/rc.common
case "$1" in
start)
	ConsoleMessage "Starting ctrld Boot: adding static route"
	<b>sleep 10</b>
	route add -net 10.0.0.0 -netmask 255.0.0.0 192.168.98.9
	;;
esac
exit 0
</pre>
<p>Делаю скрипт исполняемым:</p>
<pre>
$ sudo chmod 755 /Library/StartupItems/ctrld_boot/ctrld_boot
</pre>
<p>Перезапускаюсь &#8211; работает.</p>
<h2>LaunchDaemons</h2>
<p>Если бы не задержка с активацией интерфейсов, то можно было бы сделать запуск и через механизм LaunchDaemons.</p>
<pre>
$ cd /Library/LaunchDaemons
</pre>
<p>Создаю plist:</p>
<pre>
$ sudo vim me.ctrld.route.plist
&lt;?xml version="1.0" encoding="UTF-8"?&gt;
&lt;!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"&gt;
&lt;plist version="1.0"&gt;
    &lt;dict&gt;
        &lt;key&gt;Label&lt;/key&gt;
        &lt;string&gt;me.ctrld.route&lt;/string&gt;
        &lt;key&gt;ProgramArguments&lt;/key&gt;
        &lt;array&gt;
            &lt;string&gt;route&lt;/string&gt;
            &lt;string&gt;add&lt;/string&gt;
			&lt;string&gt;-net&lt;/string&gt;
			&lt;string&gt;10.0.0.0&lt;/string&gt;
			&lt;string&gt;-netmask&lt;/string&gt;
			&lt;string&gt;255.0.0.0&lt;/string&gt;
			&lt;string&gt;192.168.98.9&lt;/string&gt;
        &lt;/array&gt;
        &lt;key&gt;RunAtLoad&lt;/key&gt;
        &lt;true/&gt;
    &lt;/dict&gt;
&lt;/plist&gt;
</pre>
<p>Выставляю права (они и так нормальные):</p>
<pre>
$ sudo chmod 644 me.ctrld.route.plist
</pre>
<p>Этот способ я продемонстрировал для полноты, как можно выполнить нужную операцию при старте системы.</p>
]]></content:encoded>
			<wfw:commentRss>http://theapplegeek.ru/archives/5681/feed</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>Настройка syslog-сервера на OS X для приёма сообщений TimeCapsule</title>
		<link>http://theapplegeek.ru/archives/5655</link>
		<comments>http://theapplegeek.ru/archives/5655#comments</comments>
		<pubDate>Wed, 31 Aug 2011 14:47:44 +0000</pubDate>
		<dc:creator>ctrld</dc:creator>
				<category><![CDATA[OS X Server]]></category>
		<category><![CDATA[network]]></category>

		<guid isPermaLink="false">http://theapplegeek.ru/archives/5655</guid>
		<description><![CDATA[<p><b>Дано:</b> OS X - одна штука, Time Capsule - одна штука.</p>
<p><b>Нужно:</b> писать сообщения syslog от TimeCapsule в syslog сервера.</p>]]></description>
			<content:encoded><![CDATA[<p><b>Дано:</b> OS X &#8211; одна штука, Time Capsule &#8211; одна штука.</p>
<p><b>Нужно:</b> писать сообщения syslog от TimeCapsule в syslog сервера.</p>
<p><span id="more-5655"></span>
<p>На TimeCapsule (впрочем, как и на AirPort Express/Extreme) настройка элементарна:</p>
<p><img src="http://images.theapplegeek.ru/wp-content/uploads/2011/08/01_syslog.png" alt="01-syslog" height="174" width="555"></p>
<p>Но в syslog &#8220;из коробки&#8221; эти сообщения не попадают.</p>
<p>Что делать?</p>
<p>Рецепты нашёл на <noindex><a rel="nofollow" href="http://superuser.com/questions/131578/how-do-you-enable-syslogd-to-accept-incoming-connections-on-snow-leopard-from-rem" >SuperUser</a></noindex> и на <noindex><a rel="nofollow" href="http://www.shortcut.ru/2011/07/12/remote-syslog-on-mac-os-x/" >Shortcut</a></noindex>.</p>
<p>Нужно отредактировать конфигурацию launchd для запуска syslogd.</p>
<p>Преобразую plist в приспособленный для редактирования вид xml:</p>
<pre>
$ sudo plutil -convert xml1 \
	/System/Library/LaunchDaemons/com.apple.syslogd.plist
</pre>
<p>Добавляю фрагмент в конце файла, выделенный жирным текстом:</p>
<pre>
$ sudo vim \
	/System/Library/LaunchDaemons/com.apple.syslogd.plist

	    &lt;dict&gt;
	        &lt;key&gt;SockPathMode&lt;/key&gt;
	        &lt;integer&gt;438&lt;/integer&gt;
	        &lt;key&gt;SockPathName&lt;/key&gt;
	        &lt;string&gt;/var/run/syslog&lt;/string&gt;
	        &lt;key&gt;SockType&lt;/key&gt;
	        &lt;string&gt;dgram&lt;/string&gt;
	    &lt;/dict&gt;
<strong>	    &lt;key&gt;NetworkListener&lt;/key&gt;
	    &lt;dict&gt;
	        &lt;key&gt;SockServiceName&lt;/key&gt;
	        &lt;string&gt;syslog&lt;/string&gt;
	        &lt;key&gt;SockType&lt;/key&gt;
	        &lt;string&gt;dgram&lt;/string&gt;
	    &lt;/dict&gt;</strong>
	&lt;/dict&gt;
</pre>
<p>Преобразую plist к предыдущему формату binary1:</p>
<pre>
$ sudo plutil -convert binary1 \
	/System/Library/LaunchDaemons/com.apple.syslogd.plist
</pre>
<p>Правлю конфигурацию syslog для отправки сообщений в файл AirPort.log:</p>
<pre>
$ sudo vim /etc/syslog.conf
#local0.*                       /var/log/appfirewall.log
local0.*                        /var/log/AirPort.log
</pre>
<p>Не забываю создать лог-файл:</p>
<pre>
$ sudo touch /var/log/AirPort.log
</pre>
<p>Перезапускаю syslog:</p>
<pre>
$ sudo launchctl unload \
	/System/Library/LaunchDaemons/com.apple.syslogd.plist
$ sudo launchctl load \
	/System/Library/LaunchDaemons/com.apple.syslogd.plist
</pre>
<p>Проверяю, что syslog стал слушать по сети:</p>
<pre>
$ sudo lsof -i:514
<small>COMMAND  PID USER   FD   TYPE             DEVICE SIZE/OFF NODE NAME
launchd    1 root   55u  IPv4 0xffffff800cb05d60      0t0  UDP *:syslog
launchd    1 root   74u  IPv6 0xffffff800bb94920      0t0  UDP *:syslog
syslogd 2348 root    5u  IPv4 0xffffff800cb05d60      0t0  UDP *:syslog
syslogd 2348 root    6u  IPv6 0xffffff800bb94920      0t0  UDP *:syslog</small>
</pre>
<p>Проверяю поступление сообщений, переподключив iPhone по WiFi:</p>
<pre>
$ tail -f  /var/log/AirPort.log
<small>Aug 31 17:20:43 ... 80211: Disassociated with station 7c:c5:37:70:d3:9f
Aug 31 17:20:44 ... 80211: Rotated TKIP group key.
Aug 31 17:20:53 ... 80211: Associated with station 7c:c5:37:70:d3:9f
Aug 31 17:20:53 ... 80211: Authenticating station 7c:c5:37:70:d3:9f to RADIUS.
Aug 31 17:20:53 ... 80211: Installed unicast CCMP key for supplicant 7c:c5:37:70:d3:9f</small>
</pre>
<p>Для &#8220;контрольного в голову&#8221; захожу в Console.app и выбираю нужный лог:</p>
<p><img src="http://images.theapplegeek.ru/wp-content/uploads/2011/08/02_syslog.png" alt="02-syslog" height="302" width="600"></p>
<p>Работает. Замечательно.</p>
<p>Я всё это делал с OS X Lion Server, но должно работать и на обычном OS X.</p>
]]></content:encoded>
			<wfw:commentRss>http://theapplegeek.ru/archives/5655/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Решение проблемы синхронизации OmniFocus по WebDAV с OS X Lion Server</title>
		<link>http://theapplegeek.ru/archives/5651</link>
		<comments>http://theapplegeek.ru/archives/5651#comments</comments>
		<pubDate>Mon, 29 Aug 2011 14:32:12 +0000</pubDate>
		<dc:creator>ctrld</dc:creator>
				<category><![CDATA[OS X Server]]></category>
		<category><![CDATA[network]]></category>
		<category><![CDATA[server]]></category>
		<category><![CDATA[troubleshooting]]></category>

		<guid isPermaLink="false">http://theapplegeek.ru/?p=5651</guid>
		<description><![CDATA[<p>Mac - замечательная вещь. Отличное железо, отличная операционная система. Просто работаешь, не задумываясь ни о чём. Но как только нужно сделать шаг в сторону или копнуть на хоть на пару сантиметров вглубь, как начинается такие сложности, что уже и не рад красотам и тоскливо вспоминаешь о Linux.</p>
<p>Итак, дана простейшая задача - нужно синхронизировать базу OmniFocus по WebDAV с OS X Lion Server, установленным на Mac mini Server.</p>]]></description>
			<content:encoded><![CDATA[<p>Mac &#8211; замечательная вещь. Отличное железо, отличная операционная система. Просто работаешь, не задумываясь ни о чём. Но как только нужно сделать шаг в сторону или копнуть на хоть на пару сантиметров вглубь, как начинается такие сложности, что уже и не рад красотам и тоскливо вспоминаешь о Linux.</p>
<p>Итак, дана простейшая задача &#8211; нужно синхронизировать базу OmniFocus по WebDAV с OS X Lion Server, установленным на Mac mini Server.</p>
<p><span id="more-5651"></span></p>
<p>С первого взгляда ничего особенного. В сервере <noindex><a rel="nofollow" href="http://www.apple.com/macosx/server/specs.html" >заявлена</a></noindex> поддержка WebDAV, копаясь в настройках общего доступа к каталогам я видел галочку включения WebDAV. Что ещё нужно? Ткнул в пару кнопок, всё заработало, ты счастлив и имеешь ещё один повод посмотреть свысока на бедных пользователей Unix &#8211; им-то приходится повозиться.</p>
<p>Но нет. Тыканья-тыканьями, а вот какой URL вводить в Omnifocus для доступа к WebDAV? Пока не зашёл в консоль и не заглянул в файл /etc/apache2/httpd_webdavsharing.conf, я не мог догадаться до &#8220;очевиднейшего&#8221; URL https://server.domain.com/webdav/.</p>
<p>Следующий этап заключался в поисках полного URL к нужной мне папке. Тоже не составило особого труда &#8211; Finder/Go/Connect to Server, ввод URL, взгляд на расшаренные папки.</p>
<p>Создание отдельного каталога для синхронизации, ввод URL в настройках OmniFocus &#8211; всё очевидно:</p>
<p><img src="http://images.theapplegeek.ru/wp-content/uploads/2011/08/01_omni.png" alt="01-omni" height="529" width="600"></p>
<p>Нажатие кнопки Sync провозглашает начало тёмных веков: &#8220;Unable to synchronize database with server&#8221;&#8230;</p>
<p>Попытка переименования каталога приводит к ошибке:</p>
<p><img src="http://images.theapplegeek.ru/wp-content/uploads/2011/08/02_omni.png" alt="02-omni" height="267" width="534"></p>
<p>Не думайте, я не первый год за консолью. chmod 777 на родительский каталог был выставлен после первой неудачной попытки, но ничего не изменилось.</p>
<p>Чтение логов Apache (tail -f /var/log/apache2/*log) показало любопытные строки (а именно код 502 Bad gateway):</p>
<pre>
<small>"MOVE /webdav/ctrld/Sync/untitled%20folder/ HTTP/1.1" 502 256 "-" "WebDAVFS/1.9.0 (01908000) Darwin/11.2.0 (x86_64)"
"PROPFIND /webdav/ctrld/Sync/._untitled%20folder HTTP/1.1" 404 233 "-" "WebDAVFS/1.9.0 (01908000) Darwin/11.2.0 (x86_64)"</small>
</pre>
<p>Увеличение LogLevel до debug:</p>
<pre>
$ sudo vim /etc/apache2/httpd.conf
#LogLevel warn
LogLevel debug
$ sudo apachectl restart
</pre>
<p>Повтор попытки &#8211; логи не говорят ни о чём.</p>
<p>Задумчивость, попытки найти варианты решения в Google. Сообщение в форуме Omnigroup &#8220;<noindex><a rel="nofollow" href="http://forums.omnigroup.com/showthread.php?t=21733" >Lion Server for WebDav</a></noindex>&#8221; порадовало: &#8220;Its a no go for now. It looks like some sort of permissions issue but they are aware of it and are working on it.&#8221;</p>
<p>Приступ ностальгии по Linux. Достал рабочую конфигурацию WebDAV со своего Ubuntu Server. Модифицировал и вставил её в конец httpd_webdavsharing.conf (да, именно этот файл включается в sites/0000_any_443_.conf, что даёт шансы на доступ к WebDAV по https). Само собой, вы должны использовать свои данные, а не копировать мои:</p>
<pre>
$ sudo vim /etc/apache2/httpd_webdavsharing.conf
DavLockDB /var/tmp/DavLock
Alias /secretplace /Users/ctrld/Sync
&lt;Directory /Users/ctrld/Sync&gt;
	DAV On
	AuthType Digest
	AuthName "UserWebDAV Gateway"
	Require valid-user
&lt;/Directory&gt;
</pre>
<p>Здесь тоже было сказано много лестных слов об Apache для Mac (было убито минут 15 на попытки понять, почему сервер не стартует), но эту часть я опущу.</p>
<p>Не забыл поставить разрешение, дающее право записи для Apache (правильные права несколько другие, но ради простоты я сделал именно так):</p>
<pre>
$ chmod 777 ~/Sync
</pre>
<p>Рестарт Apache</p>
<pre>
$ sudo apachectl restart
</pre>
<p>Настройка нового URL в OmniFocus:</p>
<p><img src="http://images.theapplegeek.ru/wp-content/uploads/2011/08/03_omni.png" alt="03-omni" height="529" width="600"></p>
<p>Нажатие на Sync, и всё заработало (конечно же, производится аутентификация пользователя, это само собой разумеется):</p>
<pre>
<small>"PUT /secretplace/OmniFocus.ofocus/...client-write-in-progress-... HTTP/1.1" 201 311 "-" "OmniFocus/77.75.9 Darwin/10.7.2"
"MOVE /secretplace/OmniFocus.ofocus/...client-write-in-progress-... HTTP/1.1" 201 289 "-" "OmniFocus/77.75.9 Darwin/10.7.2"</small>
</pre>
<p>OmniFocus на Mac работает, настроил iPhone &#8211; и здесь всё в порядке.</p>
<p>Задача решена. Но помните &#8211; ручные правки конфигов не приветствуются в OS X Server. Любое обновление Server.app может привести к потере ручных изменений. Поэтому сохраняйте копию конфига и будьте готовы восстановить его, если синхронизация перестанет работать.</p>
<p>Как временное решение данный рецепт вполне подходит. Посмотрим, будет ли исправлена ошибка в очередном обновлении Server.app. Кстати, подскажите, как открыть Bug Report в Apple?</p>
]]></content:encoded>
			<wfw:commentRss>http://theapplegeek.ru/archives/5651/feed</wfw:commentRss>
		<slash:comments>14</slash:comments>
		</item>
		<item>
		<title>Получение http-заголовков с помощью curl</title>
		<link>http://theapplegeek.ru/archives/5603</link>
		<comments>http://theapplegeek.ru/archives/5603#comments</comments>
		<pubDate>Tue, 16 Aug 2011 04:48:51 +0000</pubDate>
		<dc:creator>ctrld</dc:creator>
				<category><![CDATA[Mac]]></category>
		<category><![CDATA[network]]></category>

		<guid isPermaLink="false">http://theapplegeek.ru/?p=5603</guid>
		<description><![CDATA[Для анализа заголовков, возвращаемых web-серверами я обычно использовал консольный браузер lynx, которого нет штатно в OS X: $ lynx -head -dump http://theapplegeek.ru HTTP/1.1 200 OK Server: nginx Date: Sat, 13 Aug 2011 17:38:54 GMT Content-Type: text/html; charset=UTF-8 Connection: close Vary: Accept-Encoding Last-Modified: Sat, 13 Aug 2011 17:32:16 GMT Vary: Cookie,Accept-Encoding X-Pingback: http://theapplegeek.ru/xmlrpc.php Его приходится доустанавливать, [...]]]></description>
			<content:encoded><![CDATA[<p>Для анализа заголовков, возвращаемых web-серверами я обычно использовал консольный браузер lynx, которого нет штатно в OS X:</p>
<p><span id="more-5603"></span></p>
<pre>
$ lynx -head -dump http://theapplegeek.ru
<small>HTTP/1.1 200 OK
Server: nginx
Date: Sat, 13 Aug 2011 17:38:54 GMT
Content-Type: text/html; charset=UTF-8
Connection: close
Vary: Accept-Encoding
Last-Modified: Sat, 13 Aug 2011 17:32:16 GMT
Vary: Cookie,Accept-Encoding
X-Pingback: http://theapplegeek.ru/xmlrpc.php</small>
</pre>
<p>Его приходится доустанавливать, например, через Homebrew.</p>
<p>Только что, прочитав статью &#8220;<noindex><a rel="nofollow" href="http://www.coderholic.com/invaluable-command-line-tools-for-web-developers/" >Invaluable command line tools for web developers</a></noindex>&#8221; взял на вооружение отличную замену &#8211; curl, который есть в OS X:</p>
<pre>
$ curl -I theapplegeek.ru
<small>HTTP/1.1 200 OK
Server: nginx
Date: Sat, 13 Aug 2011 17:43:02 GMT
Content-Type: text/html; charset=UTF-8
Connection: keep-alive
Vary: Accept-Encoding
Last-Modified: Sat, 13 Aug 2011 17:32:16 GMT
Vary: Cookie,Accept-Encoding
X-Pingback: http://theapplegeek.ru/xmlrpc.php</small>
</pre>
<p>А вот очень изящная команда для нахождение внешнего IP-адреса:</p>
<pre>
$ curl ifconfig.me
</pre>
<p>Раньше я выполнял команду, которую тяжело запомнить:</p>
<pre>
$ dig +short myip.opendns.com @resolver1.opendns.com
</pre>
<p>Полезно.</p>
]]></content:encoded>
			<wfw:commentRss>http://theapplegeek.ru/archives/5603/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Настройка iSCSI на Ubuntu 11.04 и подключение его к Mac OS X 10.6</title>
		<link>http://theapplegeek.ru/archives/5464</link>
		<comments>http://theapplegeek.ru/archives/5464#comments</comments>
		<pubDate>Thu, 09 Jun 2011 11:31:56 +0000</pubDate>
		<dc:creator>ctrld</dc:creator>
				<category><![CDATA[Linux & PC]]></category>
		<category><![CDATA[Mac]]></category>
		<category><![CDATA[disk]]></category>
		<category><![CDATA[network]]></category>

		<guid isPermaLink="false">http://theapplegeek.ru/?p=5464</guid>
		<description><![CDATA[<p>Надоело мне всё время подключать к Macbook Pro внешний диск по USB, и я решил попробовать подключить его по сети с рабочей станции под Ubuntu 11.04. NFS/SMB применять не хочется, мне нужен полноценный диск с HFS+, поэтому вспомнил об <a href="http://en.wikipedia.org/wiki/ISCSI">iSCSI</a>.</p>]]></description>
			<content:encoded><![CDATA[<p>Надоело мне всё время подключать к Macbook Pro внешний диск по USB, и я решил попробовать подключить его по сети с рабочей станции под Ubuntu 11.04. NFS/SMB применять не хочется, мне нужен полноценный диск с HFS+, поэтому вспомнил об <noindex><a rel="nofollow" href="http://en.wikipedia.org/wiki/ISCSI" >iSCSI</a></noindex>.</p>
<p><span id="more-5464"></span></p>
<p>Для настройки со стороны Ubuntu я воспользовался инструкцией &#8220;<noindex><a rel="nofollow" href="http://www.howtoforge.com/using-iscsi-on-ubuntu-10.04-initiator-and-target" >Using iSCSI On Ubuntu 10.04 (Initiator And Target)</a></noindex>&#8220;.</p>
<p>Итак, есть компьютер с Ubuntu 11.04. В него я вставил диск SATA 500 GB. Данные с него мне не нужны, поэтому считаю, что он чистый (не пытайтесь повторить это на диске с нужными данными, они в процессе будут уничтожены). Ubuntu и Macbook Pro подключены в одну сеть гигабитными портами.</p>
<h1>Настройка iSCSI Target на Ubuntu 11.04</h1>
<p>В терминологии iSCSI Target &#8211; это сервер, а Initiator &#8211; клиент. На Ubuntu буду настраивать Target.</p>
<p>Идентифицирую диск, который я вставил (также можно посмотреть в GParted):</p>
<pre>
$ sudo lshw -C disk
<small>*-disk:2
     description: ATA Disk
     product: WDC WD5000KS-00M
     vendor: Western Digital
     physical id: 0.0.0
     bus info: scsi@6:0.0.0
     logical name: /dev/sdc
     version: 07.0
     serial: WD-WMANU1192001
     size: 465GiB (500GB)
     capabilities: gpt-1.00 partitioned partitioned:gpt
     configuration: ansiversion=5 guid=a02ee5be-dd7a-4ec8-a4e7-60b4f1e530a4</small>
</pre>
<p>Logical name &#8211; /dev/sdc.</p>
<p>Для iSCSI можно использовать образ в виде файла в существующей файловой системе, но меня больше интересует <noindex><a rel="nofollow" href="https://help.ubuntu.com/community/SettingUpLVM-WithoutACleanInstall" >LVM</a></noindex>, так как доступ будет быстрее. Ставлю утилиты:</p>
<pre>
$ sudo aptitude install lvm2
</pre>
<p>Сканирую доступные Volume Groups на физических дисках, их у меня нет:</p>
<pre>
$ sudo vgscan
<small>  Reading all physical volumes.  This may take a while...
  No volume groups found</small>
</pre>
<p><noindex><a rel="nofollow" href="https://help.ubuntu.com/community/SettingUpLVM-WithoutACleanInstall" >Рекомендуется</a></noindex> сделать доступными ранее сконфигурированные volume groups:</p>
<pre>
$ sudo vgchange -a y
</pre>
<p>Создаю раздел на весь диск для LVM, предварительно удалив другие разделы на диске. Внимание &#8211; это опасно, ваши данные будут уничтожены, думайте, перед тем, как это сделать. Запускаю fdisk на мой свежеустановленный диск /dev/sdc (повторяю &#8211; двойное внимание).</p>
<p>Список существующих разделов:</p>
<pre>
$ sudo fdisk /dev/sdc
Command (m for help): <b>p</b>

Disk /dev/sdc: 500.1 GB, 500107862016 bytes
255 heads, 63 sectors/track, 60801 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00000000

   Device Boot      Start         End      Blocks   Id  System
/dev/sdc1               1       60802   488386583+  ee  GPT
</pre>
<p>Не обращаю внимание на надпись</p>
<pre>
WARNING: GPT (GUID Partition Table) detected on '/dev/sdc'! The util fdisk doesn't support GPT. Use GNU Parted.
</pre>
<p>У меня был раздел GPT, он мне не нужен, удаляю его (тройное внимание):</p>
<pre>
Command (m for help): <b>d1</b>
Selected partition 1
</pre>
<p>Создаю primary partition на весь размер диска:</p>
<pre>
Command (m for help): <b>n</b>
Command action
   e   extended
   p   primary partition (1-4)
<b>p</b>
Partition number (1-4): <b>1</b>
First cylinder (1-60801, default 1):
Using default value 1
Last cylinder, +cylinders or +size{K,M,G} (1-60801, default 60801):
Using default value 60801

Command (m for help): <b>p</b>
   Device Boot      Start         End      Blocks   Id  System
/dev/sdc1               1       60801   488384001   83  Linux
</pre>
<p>Записываю таблицу разделов</p>
<pre>
Command (m for help): <b>w</b>
The partition table has been altered!
</pre>
<p>Появилось устройство /dev/sdc1:</p>
<pre>
$ ls -al /dev/sdc*
<small>brw-rw---- 1 root disk 8, 32 2011-06-09 12:53 /dev/sdc
brw-rw---- 1 root disk 8, 33 2011-06-09 12:53 /dev/sdc1</small>
</pre>
<p>Создаю LVM Physical volume на первом разделе</p>
<pre>
$ sudo pvcreate /dev/sdc1
<small>Physical volume "/dev/sdc1" successfully created</small>
</pre>
<p>Создаю Volume Group vg0:</p>
<pre>
$ sudo vgcreate vg0 /dev/sdc1
<small>  Volume group "vg0" successfully created</small>
</pre>
<p>Смотрю, сколько места доступно:</p>
<pre>
$ sudo pvscan
  PV /dev/sdc1   VG vg0   lvm2 [465.76 GiB / 465.76 GiB free]
  Total: 1 [465.76 GiB] / in use: 1 [465.76 GiB] / in no VG: 0 [0   ]
</pre>
<p>Создаю Logical Volume:</p>
<pre>
$ sudo lvcreate -L465G -n storage_lun1 vg0
<small>The link /dev/vg0/storage_lun1 should had been created by udev but it was not found. Falling back to direct link creation.
Logical volume "storage_lun1" created</small>
</pre>
<p>С LVM закончено. Если бы понадобилось создать раздел 20 GB для iSCSI в виде файла, то:</p>
<pre>
$ mkdir /storage
$ dd if=/dev/zero of=/storage/lun1.img bs=1024k count=20000
</pre>
<p>Ставлю пакет для iSCSI Target:</p>
<pre>
$ sudo aptitude install iscsitarget
</pre>
<p>Разрешаю запуск:</p>
<pre>
$ sudo vim /etc/default/iscsitarget
ISCSITARGET_ENABLE=true
</pre>
<p>Конфигурирую без всяческого тюнинга. Обратите внимание &#8211; в статье на howtoforge говорится о конфигурационных файлах /etc/ietd.conf и /etc/initiators.allow, но они реально находятся в /etc/iet.</p>
<pre>
$ sudo vim /etc/iet/ietd.conf
Target iqn.2011-06.me.ctrld.udev:storage.lun1
        IncomingUser username password
        OutgoingUser
		Lun 0 Path=/dev/vg0/storage_lun1,Type=fileio
        Alias LUN1
</pre>
<p>Конечно же, Target name и IncomingUser нужно поменять. Формат Target name такой: qn.yyyy-mm.<reversed domain name>[:identifier], я брал домен udev.ctrld.me, а номер &#8211; по месяцу и году.</reversed></p>
<p>Для файла-образа было бы так:</p>
<pre>
	Lun 0 Path=/storage/lun1.img,Type=fileio
</pre>
<p>Конфигурирую доступ от Initiator&#8217;а к Target&#8217;у, для простоты разрешаю доступ из всей моей подсети 192.168.98.0/24</p>
<pre>
$ sudo vim /etc/iet/initiators.allow
ALL 192.168.98.0/24
</pre>
<p>Стартую Target:</p>
<pre>
$ sudo service iscsitarget start
</pre>
<h1>Проверка работы iSCSI Target на Ubuntu, установка iSCSI Initiator</h1>
<p>Чтобы на OS X не задумываться, работает ли iSCSI или нет, проверяю сначала его работу на Ubuntu. Более подробно &#8211; на <noindex><a rel="nofollow" href="http://www.howtoforge.com/using-iscsi-on-ubuntu-10.04-initiator-and-target" >howtoforge</a></noindex>.</p>
<pre>
$ sudo aptitude install open-iscsi
$ sudo vi /etc/iscsi/iscsid.conf
node.startup = automatic
</pre>
<p>Рестартую open-iscsi (он стартовал при установке)</p>
<pre>
$ sudo service open-iscsi restart
</pre>
<p>И рестартую Target:</p>
<pre>
$ sudo service iscsitarget restart
</pre>
<p>Смотрю, доступен ли Target на 192.168.98.8. Не забывайте, что доступ должен быть разрешён в /etc/iet/initiators.allow и target должен быть описан в /etc/iet/ietd.conf. С самого начала у меня ничего не получилось, так как я правил файлы в /etc, а нужно было использовать в /etc/iet.</p>
<pre>
$ sudo iscsiadm -m discovery -t st -p 192.168.98.8
192.168.98.8:3260,1 iqn.2011-06.me.ctrld.udev:storage.lun1
</pre>
<p>Всё правильно.</p>
<pre>
$ sudo iscsiadm -m node
192.168.98.8:3260,1 iqn.2011-06.me.ctrld.udev:storage.lun1
</pre>
<p>Вручную произвожу аутентификацию (указываю username и password, сконфигурированные для lun):</p>
<pre>
$ sudo iscsiadm -m node --targetname "iqn.2011-06.me.ctrld.udev:storage.lun1" --portal "192.168.98.8:3260" --op=update --name node.session.auth.authmethod --value=CHAP
$ sudo iscsiadm -m node --targetname "iqn.2011-06.me.ctrld.udev:storage.lun1" --portal "192.168.98.8:3260" --op=update --name node.session.auth.username --value=username
$ sudo iscsiadm -m node --targetname "iqn.2011-06.me.ctrld.udev:storage.lun1" --portal "192.168.98.8:3260" --op=update --name node.session.auth.password --value=password
</pre>
<p>Делаю login:</p>
<pre>
$ sudo iscsiadm -m node --targetname "iqn.2011-06.me.ctrld.udev:storage.lun1" --portal "192.168.98.8:3260" --login
</pre>
<p>Если получили ошибку, то перепроверьте параметры, может пароль указан неправильно</p>
<pre>
<small>Logging in to [iface: default, target: iqn.2011-06.me.ctrld.udev:storage.lun1, portal: 192.168.98.8,3260]
iscsiadm: Could not login to [iface: default, target: iqn.2011-06.me.ctrld.udev:storage.lun1, portal: 192.168.98.8,3260]:
iscsiadm: initiator reported error (19 - encountered non-retryable iSCSI login failure)</small>
</pre>
<p>А вот что выдаётся в случае успешного подключения:</p>
<pre>
<small>Logging in to [iface: default, target: iqn.2011-06.me.ctrld.udev:storage.lun1, portal: 192.168.98.8,3260]
Login to [iface: default, target: iqn.2011-06.me.ctrld.udev:storage.lun1, portal: 192.168.98.8,3260]: successful</small>
</pre>
<p>В dmesg можно посмотреть, какое устройство используется:</p>
<pre>
<small>[11084.522649] scsi12 : iSCSI Initiator over TCP/IP
[11085.529288] scsi 12:0:0:0: Direct-Access     IET      VIRTUAL-DISK     0    PQ: 0 ANSI: 4
[11085.529600] sd 12:0:0:0: Attached scsi generic sg8 type 0
[11085.529928] sd 12:0:0:0: [sdh] 975175680 512-byte logical blocks: (499 GB/465 GiB)
[11085.530118] sd 12:0:0:0: [sdh] Write Protect is off
[11085.530122] sd 12:0:0:0: [sdh] Mode Sense: 77 00 00 08
[11085.530368] sd 12:0:0:0: [sdh] Write cache: disabled, read cache: enabled, doesn't support DPO or FUA
[11085.533666]  sdh: unknown partition table
[11085.533992] sd 12:0:0:0: [sdh] Attached SCSI disk</small>
</pre>
<p>В моём случае это /dev/sdh. Ничего на Ubuntu делать больше не буду (а так можно было бы в fdisk создать разделы и подмонтировать их), перехожу к OS X, отлогиниваюсь:</p>
<pre>
$ sudo iscsiadm -m node --targetname "iqn.2011-06.me.ctrld.udev:storage.lun1" --portal "192.168.98.8:3260" --logout
</pre>
<h1>Настройка iSCSI Initiator на Mac OS X 10.6</h1>
<p>Штатно iSCSI в Mac OS X 10.6 не поддерживается, нужно ставить сторонние драйвера. Я использовал бесплатный <noindex><a rel="nofollow" href="http://www.studionetworksolutions.com/support/faq.php?pi=11&#038;fi=51" >globalSAN iSCSI initiator</a></noindex>, нужно указать свои контактные данные и ссылка на софт придёт по email. Придётся перезагрузиться (sic!):</p>
<p style="clear: both"><noindex><a rel="nofollow" href="http://images.theapplegeek.ru/wp-content/uploads/2011/06/01_iscsi-full.png"  class="image-link"><img class="linked-to-original" src="http://images.theapplegeek.ru/wp-content/uploads/2011/06/01_iscsi-thumb.png" height="154" width="434" style=" text-align: center; display: block; margin: 0 auto 10px;" alt="Настройка iSCSI на Ubuntu 11.04 и подключение его к Mac OS X 10.6" title="Настройка iSCSI на Ubuntu 11.04 и подключение его к Mac OS X 10.6" /></a></noindex></p>
<p>После установки появляется Preference Pane в System Preferences:</p>
<p style="clear: both"><noindex><a rel="nofollow" href="http://images.theapplegeek.ru/wp-content/uploads/2011/06/02_iscsi-full.png"  class="image-link"><img class="linked-to-original" src="http://images.theapplegeek.ru/wp-content/uploads/2011/06/02_iscsi-thumb.png" height="197" width="317" style=" text-align: center; display: block; margin: 0 auto 10px;" alt="Настройка iSCSI на Ubuntu 11.04 и подключение его к Mac OS X 10.6" title="Настройка iSCSI на Ubuntu 11.04 и подключение его к Mac OS X 10.6" /></a></noindex></p>
<p style="clear: both"><noindex><a rel="nofollow" href="http://images.theapplegeek.ru/wp-content/uploads/2011/06/03_iscsi-full.png"  class="image-link"><img class="linked-to-original" src="http://images.theapplegeek.ru/wp-content/uploads/2011/06/03_iscsi-thumb.png" height="395" width="500" style=" text-align: center; display: block; margin: 0 auto 10px;" alt="Настройка iSCSI на Ubuntu 11.04 и подключение его к Mac OS X 10.6" title="Настройка iSCSI на Ubuntu 11.04 и подключение его к Mac OS X 10.6" /></a></noindex></p>
<p>Unlock, жму &#8220;+&#8221;. Можно выбрать Target и указать все данные, но я для пробы выбрал Portal. После ввода сервера показываются все сконфигурированные там устройства:</p>
<p style="clear: both"><noindex><a rel="nofollow" href="http://images.theapplegeek.ru/wp-content/uploads/2011/06/04_iscsi-full.png"  class="image-link"><img class="linked-to-original" src="http://images.theapplegeek.ru/wp-content/uploads/2011/06/04_iscsi-thumb.png" height="186" width="496" style=" text-align: center; display: block; margin: 0 auto 10px;" alt="Настройка iSCSI на Ubuntu 11.04 и подключение его к Mac OS X 10.6" title="Настройка iSCSI на Ubuntu 11.04 и подключение его к Mac OS X 10.6" /></a></noindex></p>
<p style="clear: both"><noindex><a rel="nofollow" href="http://images.theapplegeek.ru/wp-content/uploads/2011/06/05_iscsi-full.png"  class="image-link"><img class="linked-to-original" src="http://images.theapplegeek.ru/wp-content/uploads/2011/06/05_iscsi-thumb.png" height="145" width="434" style=" text-align: center; display: block; margin: 0 auto 10px;" alt="Настройка iSCSI на Ubuntu 11.04 и подключение его к Mac OS X 10.6" title="Настройка iSCSI на Ubuntu 11.04 и подключение его к Mac OS X 10.6" /></a></noindex></p>
<p style="clear: both"><noindex><a rel="nofollow" href="http://images.theapplegeek.ru/wp-content/uploads/2011/06/06_iscsi-full.png"  class="image-link"><img class="linked-to-original" src="http://images.theapplegeek.ru/wp-content/uploads/2011/06/06_iscsi-thumb.png" height="395" width="500" style=" text-align: center; display: block; margin: 0 auto 10px;" alt="Настройка iSCSI на Ubuntu 11.04 и подключение его к Mac OS X 10.6" title="Настройка iSCSI на Ubuntu 11.04 и подключение его к Mac OS X 10.6" /></a></noindex></p>
<p>Для простоты прописываю Alias, Error Detection ставлю &#8220;Header only&#8221;, iSCSI Options не меняю</p>
<p style="clear: both"><noindex><a rel="nofollow" href="http://images.theapplegeek.ru/wp-content/uploads/2011/06/07_iscsi-full.png"  class="image-link"><img class="linked-to-original" src="http://images.theapplegeek.ru/wp-content/uploads/2011/06/07_iscsi-thumb.png" height="395" width="500" style=" text-align: center; display: block; margin: 0 auto 10px;" alt="Настройка iSCSI на Ubuntu 11.04 и подключение его к Mac OS X 10.6" title="Настройка iSCSI на Ubuntu 11.04 и подключение его к Mac OS X 10.6" /></a></noindex></p>
<p>Ввожу параметры аутентификации:</p>
<p style="clear: both"><noindex><a rel="nofollow" href="http://images.theapplegeek.ru/wp-content/uploads/2011/06/08_iscsi-full.png"  class="image-link"><img class="linked-to-original" src="http://images.theapplegeek.ru/wp-content/uploads/2011/06/08_iscsi-thumb.png" height="364" width="459" style=" text-align: center; display: block; margin: 0 auto 10px;" alt="Настройка iSCSI на Ubuntu 11.04 и подключение его к Mac OS X 10.6" title="Настройка iSCSI на Ubuntu 11.04 и подключение его к Mac OS X 10.6" /></a></noindex></p>
<p>Выбираю соединение и жму Connect. Если всё в порядке, то индикаторы загорятся зелёным (Connected):</p>
<p style="clear: both"><noindex><a rel="nofollow" href="http://images.theapplegeek.ru/wp-content/uploads/2011/06/09_iscsi-full.png"  class="image-link"><img class="linked-to-original" src="http://images.theapplegeek.ru/wp-content/uploads/2011/06/09_iscsi-thumb.png" height="395" width="500" style=" text-align: center; display: block; margin: 0 auto 10px;" alt="Настройка iSCSI на Ubuntu 11.04 и подключение его к Mac OS X 10.6" title="Настройка iSCSI на Ubuntu 11.04 и подключение его к Mac OS X 10.6" /></a></noindex></p>
<p>и появится сообщение, говорящее, что на подключённом диске нет таблицы разделов:</p>
<p style="clear: both"><noindex><a rel="nofollow" href="http://images.theapplegeek.ru/wp-content/uploads/2011/06/10_iscsi-full.png"  class="image-link"><img class="linked-to-original" src="http://images.theapplegeek.ru/wp-content/uploads/2011/06/10_iscsi-thumb.png" height="226" width="500" style=" text-align: center; display: block; margin: 0 auto 10px;" alt="Настройка iSCSI на Ubuntu 11.04 и подключение его к Mac OS X 10.6" title="Настройка iSCSI на Ubuntu 11.04 и подключение его к Mac OS X 10.6" /></a></noindex></p>
<p>Запускается Disk Utility, наш iSCSI диск &#8211; &#8220;IET Virtual Disk&#8221;. Закладка Partition, выбираю нужное количество разделов, имя, применяю:</p>
<p style="clear: both"><noindex><a rel="nofollow" href="http://images.theapplegeek.ru/wp-content/uploads/2011/06/11_iscsi-full.png"  class="image-link"><img class="linked-to-original" src="http://images.theapplegeek.ru/wp-content/uploads/2011/06/11_iscsi-thumb.png" height="353" width="500" style=" text-align: center; display: block; margin: 0 auto 10px;" alt="Настройка iSCSI на Ubuntu 11.04 и подключение его к Mac OS X 10.6" title="Настройка iSCSI на Ubuntu 11.04 и подключение его к Mac OS X 10.6" /></a></noindex></p>
<p>Всё, диск готов и доступен к использованию:</p>
<p style="clear: both"><noindex><a rel="nofollow" href="http://images.theapplegeek.ru/wp-content/uploads/2011/06/12_iscsi-full.png"  class="image-link"><img class="linked-to-original" src="http://images.theapplegeek.ru/wp-content/uploads/2011/06/12_iscsi-thumb.png" height="368" width="500" style=" text-align: center; display: block; margin: 0 auto 10px;" alt="Настройка iSCSI на Ubuntu 11.04 и подключение его к Mac OS X 10.6" title="Настройка iSCSI на Ubuntu 11.04 и подключение его к Mac OS X 10.6" /></a></noindex></p>
<p style="clear: both"><noindex><a rel="nofollow" href="http://images.theapplegeek.ru/wp-content/uploads/2011/06/13_iscsi-full.png"  class="image-link"><img class="linked-to-original" src="http://images.theapplegeek.ru/wp-content/uploads/2011/06/13_iscsi-thumb.png" height="450" width="350" style=" text-align: center; display: block; margin: 0 auto 10px;" alt="Настройка iSCSI на Ubuntu 11.04 и подключение его к Mac OS X 10.6" title="Настройка iSCSI на Ubuntu 11.04 и подключение его к Mac OS X 10.6" /></a></noindex></p>
<p>Скорость записи по гигибитному подключению &#8211; 300 Mbps</p>
<p style="clear: both"><noindex><a rel="nofollow" href="http://images.theapplegeek.ru/wp-content/uploads/2011/06/14_iscsi-full.png"  class="image-link"><img class="linked-to-original" src="http://images.theapplegeek.ru/wp-content/uploads/2011/06/14_iscsi-thumb.png" height="281" width="500" style=" text-align: center; display: block; margin: 0 auto 10px;" alt="Настройка iSCSI на Ubuntu 11.04 и подключение его к Mac OS X 10.6" title="Настройка iSCSI на Ubuntu 11.04 и подключение его к Mac OS X 10.6" /></a></noindex></p>
<p>Чтение &#8211; 360 Mbps:</p>
<p style="clear: both"><noindex><a rel="nofollow" href="http://images.theapplegeek.ru/wp-content/uploads/2011/06/15_iscsi-full.png"  class="image-link"><img class="linked-to-original" src="http://images.theapplegeek.ru/wp-content/uploads/2011/06/15_iscsi-thumb.png" height="281" width="500" style=" text-align: center; display: block; margin: 0 auto 10px;" alt="Настройка iSCSI на Ubuntu 11.04 и подключение его к Mac OS X 10.6" title="Настройка iSCSI на Ubuntu 11.04 и подключение его к Mac OS X 10.6" /></a></noindex></p>
<p>Есть пока непонятные провалы, но трафик даже в их пределах есть. Буду смотреть, как ведёт себя эта конфигурация.</p>
]]></content:encoded>
			<wfw:commentRss>http://theapplegeek.ru/archives/5464/feed</wfw:commentRss>
		<slash:comments>19</slash:comments>
		</item>
		<item>
		<title>Настройка IPv6 на Mac OS X для доступа к ресурсам IPv6 в Интернет</title>
		<link>http://theapplegeek.ru/archives/5008</link>
		<comments>http://theapplegeek.ru/archives/5008#comments</comments>
		<pubDate>Sun, 05 Dec 2010 17:55:21 +0000</pubDate>
		<dc:creator>ctrld</dc:creator>
				<category><![CDATA[Mac]]></category>
		<category><![CDATA[IPv6]]></category>
		<category><![CDATA[network]]></category>

		<guid isPermaLink="false">http://theapplegeek.ru/?p=5008</guid>
		<description><![CDATA[Адреса IPv4&#160;заканчиваются. По&#160;состоянию на&#160;30&#160;ноября в&#160;мире их&#160;осталось 2.73% и&#160;это количество закончится через 3&#160;месяца. Пора готовиться к&#160;переходу на&#160;IPv6.]]></description>
			<content:encoded><![CDATA[<p>Адреса IPv4&nbsp;заканчиваются. По&nbsp;состоянию на&nbsp;30&nbsp;ноября в&nbsp;мире их&nbsp;осталось 2.73% и&nbsp;это количество закончится через 3&nbsp;месяца. Пора готовиться к&nbsp;переходу на&nbsp;IPv6. Мои мысли по&nbsp;этому вопросу вы&nbsp;можете почитать в&nbsp;статье &laquo;<a href="http://letsipv6.com/archives/4" >IPv6: что год грядущий нам готовит</a>&raquo;.</p>
<p>Крайне маловероятно, что ваш провайдер предлагает подключение на&nbsp;адресах IPv6. Да&nbsp;и&nbsp;ресурсов IPv6 достаточно мало. Начать эксперименты можно, построив бесплатный туннель на&nbsp;брокера туннелей IPv6 <noindex><a rel="nofollow" href="http://he.net/" >Hurricane Electric</a></noindex>. В&nbsp;этой схеме вы&nbsp;будете ходить на&nbsp;ресурсы IPv4&nbsp;напрямую, а&nbsp;на&nbsp;IPv6&nbsp;&mdash; через туннель.</p>
<p>Минус в&nbsp;том, что туннель строится с&nbsp;заранее описанного в&nbsp;заявке адреса, и&nbsp;если он&nbsp;динамический, то&nbsp;для построения туннеля вам придётся каждый раз обновлять конфигурацию на&nbsp;HE. К&nbsp;счастью, это можно делать автоматически перед запуском туннеля, но&nbsp;нужно писать скрипт.</p>
<p><span id="more-5008"></span></p>
<p>Туннель может работать через NAT, производимый Airport Express/Extreme/Time Capsule, и, возможно другими маршрутизаторами.</p>
<p>Для начала нужно зарегистрироваться на&nbsp;<noindex><a rel="nofollow" href="http://tunnelbroker.net/" >Hurricane Electic IPv6 Tunnel Broker</a></noindex>.</p>
<p>После регистрации создаём туннель (&laquo;Create Regular Tunnel&raquo;):</p>
<p style="clear: both"><noindex><a rel="nofollow" href="http://images.theapplegeek.ru/wp-content/uploads/2010/12/01_ipv6-full.png"  class="image-link"><img class="linked-to-original" src="http://images.theapplegeek.ru/wp-content/uploads/2010/12/01_ipv6-thumb.png" height="399" width="380" style=" text-align: center; display: block; margin: 0 auto 10px;"  alt="IPv6 Mac OS X" title="IPv6 Mac OS X" /></a></noindex></p>
<p>В&nbsp;поле &laquo;IPv4 endpoint (your side of&nbsp;the tunnel)&raquo; нужно указать внешний адрес, с&nbsp;которого будет устанавливаться туннель. Например, на&nbsp;внешнем интерфейсе Time Capsule у&nbsp;меня стоит постоянный адрес 94.45.55.146, а&nbsp;Mac, с&nbsp;которого я&nbsp;строю туннель, имеет адрес 192.168.98.10. В&nbsp;этом поле нужно указать 94.45.55.146, а&nbsp;не&nbsp;192.168.98.10.</p>
<p>Для подсказки в&nbsp;поле &laquo;You are viewing from&nbsp;IP&raquo; показывается ваш внешний адрес. У&nbsp;меня там стоит 2001:470:1f14:fee::2, так как я&nbsp;пишу статью c&nbsp;уже настроенным IPv6.</p>
<p>Ещё из&nbsp;списка &laquo;Which Server Is&nbsp;Closest to&nbsp;you&raquo; нужно выбрать сервер, к&nbsp;которому время отклика лучше. Географическая близость не&nbsp;при чём. Для примера, если вы&nbsp;находитесь в&nbsp;Киеве, то&nbsp;необязательно сервер из&nbsp;Киева будет ближе сервера из&nbsp;Франкфурта. Ваш провайдер может иметь каналы в&nbsp;Германию, но&nbsp;не&nbsp;иметь пиринга с&nbsp;UA-IX. Позапускайте ping на&nbsp;указанные сервера и&nbsp;выберите лучший для вас.</p>
<p>Я&nbsp;получил такой туннель:</p>
<p style="clear: both"><noindex><a rel="nofollow" href="http://images.theapplegeek.ru/wp-content/uploads/2010/12/02_ipv6-full.png"  class="image-link"><img class="linked-to-original" src="http://images.theapplegeek.ru/wp-content/uploads/2010/12/02_ipv6-thumb.png" height="272" width="380" style=" text-align: center; display: block; margin: 0 auto 10px;"  alt="IPv6 Mac OS X" title="IPv6 Mac OS X" /></a></noindex></p>
<p>Для получения конфигурации из&nbsp;выпадающего списка &laquo;Example IPv6 Tunnel Configurations by&nbsp;OS&raquo; выберите NetBSD/Mac OS&nbsp;X (если вы&nbsp;дочитали до&nbsp;этого момента, то&nbsp;вы&nbsp;и&nbsp;так знаете, что Mac OS&nbsp;X&nbsp;построена на&nbsp;базе BSD):</p>
<p style="clear: both"><noindex><a rel="nofollow" href="http://images.theapplegeek.ru/wp-content/uploads/2010/12/03_ipv6-full.png"  class="image-link"><img class="linked-to-original" src="http://images.theapplegeek.ru/wp-content/uploads/2010/12/03_ipv6-thumb.png" height="112" width="380" style=" text-align: center; display: block; margin: 0 auto 10px;"  alt="IPv6 Mac OS X" title="IPv6 Mac OS X" /></a></noindex></p>
<p>Я&nbsp;использую слегка модифицированную версию (подставьте ваши значения из&nbsp;конфигурации туннеля):</p>
<pre>
$ sudo ifconfig gif0 tunnel <i>Client_IPv4_address</i> <i>Server_IPv4_address</i>
$ sudo ifconfig gif0 inet6 <i>Client_IPv6_address</i> alias
$ sudo ifconfig gif0 inet6 <i>Client_IPv6_address</i> <i>Server_IPv6_address</i> prefixlen /64
$ sudo route -n add -inet6 default <i>Server_IPv6_address</i>
</pre>
<p>Эта конфигурация рассчитана на&nbsp;прямое подключение, когда на&nbsp;интерфейсе вашего компьютера прописан внешний IP-адрес, который вы&nbsp;указали при создании туннеля. В&nbsp;моём случае ноутбук ходит через NAT и&nbsp;на&nbsp;интерфейсе стоит адрес 192.168.98.10. Поэтому я&nbsp;изменил первую команду. Моя конфигурация такова:</p>
<pre>
$ sudo ifconfig gif0 tunnel <b>192.168.98.10</b> 216.66.84.46
$ sudo ifconfig gif0 inet6 2001:470:1f14:fee::2 alias
$ sudo ifconfig gif0 inet6 2001:470:1f14:fee::2 2001:470:1f14:fee::1 prefixlen /64
$ sudo route -n add -inet6 default 2001:470:1f14:fee::1
</pre>
<p>Если всё прошло без ошибок, то&nbsp;интерфейс gif0&nbsp;у вас будет в&nbsp;состоянии UP:</p>
<pre>
$ ifconfig gif0
gif0: flags=8051&#038;ltUP,POINTOPOINT,RUNNING,MULTICAST&gt; mtu 1280
	tunnel inet 192.168.98.10 --> 216.66.84.46
	inet6 fe80::225:bcff:fedc:ddae%gif0 prefixlen 64 scopeid 0x2
	inet6 2001:470:1f14:fee::2 --> 2001:470:1f14:fee::1 prefixlen 128
</pre>
<p>Дефолтовый маршрут IPv6 будет идти через gif0:</p>
<pre>
$ netstat -rn -f inet6
<small>default	2001:470:1f14:fee::1            UGSc           gif0
</pre>
<p>Обратите внимание на&nbsp;то, что два стека (IPv4 и&nbsp;IPv6) работают независимо. К&nbsp;ресурсам IPv4&nbsp;вы будете обращаться через IPv4 default route, а&nbsp;к&nbsp;ресурсам IPv6&nbsp;&mdash; через IPv6 default route. При поднятом туннеле IPv6&nbsp;вы будете полноценно работать со&nbsp;всеми привычными сайтами и&nbsp;протоколами.</p>
<p>Проверяем (не&nbsp;забудьте, что нужно использовать ping6/traceroute6, а&nbsp;не&nbsp;ping/tracecoute):</p>
<pre>
$ ping6 ipv6.google.com
<small>PING6(56=40+8+8 bytes) 2001:470:1f14:fee::2 --> 2a00:1450:8007::68
16 bytes from 2a00:1450:8007::68, icmp_seq=0 hlim=57 time=53.959 ms
16 bytes from 2a00:1450:8007::68, icmp_seq=1 hlim=57 time=53.507 ms</small>
</pre>
<p>Трасса:</p>
<pre>
$ traceroute6 ipv6.google.com
<small>traceroute6 to ipv6.l.google.com (2a00:1450:8007::63) from 2001:470:1f14:fee::2, 64 hops max, 12 byte packets
 1  ctrld-2.tunnel.tserv11.ams1.ipv6.he.net  51.220 ms  48.980 ms  48.551 ms
 2  gige-g2-20.core1.ams1.he.net  42.653 ms  43.184 ms  50.666 ms
 3  pr61.ams04.net.google.com  43.669 ms  45.181 ms  77.431 ms
 4  2001:4860::1:0:8  44.318 ms  50.518 ms  43.950 ms
 5  2001:4860::1:0:11  113.400 ms
    2001:4860::1:0:10  57.398 ms  58.136 ms
 6  2001:4860::2:0:48d  56.788 ms
    2001:4860::2:0:48c  51.554 ms
    2001:4860::2:0:48d  53.205 ms
 7  2001:4860:0:1::c7  57.076 ms  51.348 ms
    2001:4860:0:1::c9  59.842 ms
 8  2a00:1450:8007::63  51.139 ms  51.923 ms  51.441 ms</small>
</pre>
<p>Для вас может стать сюрпризом, что при доступе через IPv4&nbsp;DNS <noindex><a rel="nofollow" href="http://www.google.com/intl/en/ipv6/" >не&nbsp;всегда выдают ответы по&nbsp;адресам IPv6</a></noindex>. Например, если запросить Google IPv4&nbsp;DNS о&nbsp;записи AAAA для google.com, то&nbsp;вы&nbsp;получите &laquo;No&nbsp;AAAA&raquo;:</p>
<pre>
$ dig @8.8.8.8 google.com aaaa
<small>;; AUTHORITY SECTION:
google.com.		600	IN	SOA	ns1.google.com. dns-admin.google.com. 1435074 7200 1800 1209600 300</small>
</pre>
<p>А&nbsp;если то&nbsp;же самое запросить через IPv6, то&nbsp;ответ будет получен:</p>
<pre>
$ dig @2001:470:20::2 google.com aaaa
<small>;; ANSWER SECTION:
google.com.		300	IN	AAAA	2a00:1450:8005::68</small>
</pre>
<p>Это логично, так как популярные операционные системы могут запрашивать запись AAAA даже при отсутствии подключения IPv6&nbsp;и, получив правильный ответ, не&nbsp;смогут подсоединится к&nbsp;ресурсу. Доказать предметно я&nbsp;не&nbsp;могу, нужно исследовать вопрос, но&nbsp;факт есть факт. Можно почитать статью &#8220;<noindex><a rel="nofollow" href="http://habrahabr.ru/blogs/development/109389/" >Улучшаем жизнь пользователей с IPv6 и SCTP&#8221;</a></noindex>, там есть информация к размышлению.</p>
<p>Поэтому для завершения настроек нужно сконфигурировать резолвинг через DNS-сервер IPv6, который указан в&nbsp;информации по&nbsp;туннелю.</p>
<pre>
$ sudo vim /etc/resolv.conf
nameserver 2001:470:20::2
# nameserver 8.8.8.8
</pre>
<p>Это не&nbsp;совсем правильный метод. Во-первых при любом изменении сетевой конфигурации resolv.conf перетрётся и&nbsp;там снова будет DNS, указанный в&nbsp;настройках через GUI или&nbsp;же адрес, полученный по&nbsp;DHCP. А&nbsp;во-вторых при опускании туннеля IPv6 система будет использовать указанный адрес, через IPv4&nbsp;он будет недоступен, и&nbsp;вы&nbsp;окажетесь без Интернет. Поэтому помните об&nbsp;этой особенности и&nbsp;при необходимости подправьте resolv.conf.</p>
<p>Кстати, мой блог <a href="http://theapplegeek.ru/" >The Apple Geek</a> работает и&nbsp;на&nbsp;IPv6:</p>
<pre>
$ traceroute6 theapplegeek.ru
<small>traceroute6 to theapplegeek.ru (2001:470:1f08:1120::2) from 2001:470:1f14:fee::2, 64 hops max, 12 byte packets
 1  ctrld-2.tunnel.tserv11.ams1.ipv6.he.net  51.299 ms  49.283 ms  49.060 ms
 2  gige-g2-20.core1.ams1.he.net  42.792 ms  44.847 ms  42.974 ms
 3  10gigabitethernet1-4.core1.lon1.he.net  50.552 ms  51.724 ms  50.053 ms
 4  gige-gbge0.tserv5.lon1.ipv6.he.net  55.614 ms  55.965 ms  57.411 ms
 5  ctrld-1-pt.tunnel.tserv5.lon1.ipv6.he.net  50.898 ms  56.757 ms  51.128 ms</small>
</pre>
<p>Пока тяжело назвать это стабильным решением, за&nbsp;сутки туннель на&nbsp;мой сервер один раз падал и&nbsp;пришлось его подымать вручную. Но&nbsp;&laquo;дорогу осилит идущий&raquo;.</p>
<h3>Полезные ресурсы</h3>
<p>Продолжить изучение IPv6 можно например, чтением &laquo;<noindex><a rel="nofollow" href="http://my.safaribooksonline.com/book/networking/ip/0596100582" >IPv6&nbsp;Essentials</a></noindex>&raquo;. Теперь вы&nbsp;можете испытывать IPv6&nbsp;на практике, а&nbsp;не&nbsp;изучать чистую теорию.</p>
<p>Узнать свой IPv6-адрес можно на&nbsp;сайте <noindex><a rel="nofollow" href="http://www.whatismyipv6.net/" >WhatIsMyIPv6.net</a></noindex>.</p>
<p>Если вы&nbsp;зайдёте на&nbsp;сайт <noindex><a rel="nofollow" href="http://www.kame.net/" >Kame.net</a></noindex> через IPv6, то&nbsp;черепашка затанцует.</p>
<p>Посмотреть текущее состояние IPv6 по&nbsp;миру можно в&nbsp;отчёте &laquo;<noindex><a rel="nofollow" href="http://bgp.he.net/ipv6-progress-report.cgi" >Global IPv6 Deployment Progress Report</a></noindex>&raquo;, который поддерживается Hurricane Electric. В&nbsp;нём приводится списки популярных сайтов, поддерживающих IPv6. Интересно&nbsp;то, что в&nbsp;TOP50 присутствует единственный домен в&nbsp;зоне .ru, и&nbsp;это торрент-трекер <noindex><a rel="nofollow" href="http://ipv6.nnm-club.ru/" >ipv6.nnm-club.ru</a></noindex>.</p>
<h3>В&nbsp;заключение</h3>
<p>Я&nbsp;показал, как строить туннель вручную командами в&nbsp;терминале для случая постоянного IP-адреса. Автоматический старт рассмотрю в&nbsp;отдельной статье.</p>
<p>Если у&nbsp;вас динамический адрес, то&nbsp;перед подключением вам нужно зайти в&nbsp;настройки туннеля и&nbsp;поменять клиентский адрес:</p>
<p style="clear: both"><noindex><a rel="nofollow" href="http://images.theapplegeek.ru/wp-content/uploads/2010/12/04_ipv6-full.png"  class="image-link"><img class="linked-to-original" src="http://images.theapplegeek.ru/wp-content/uploads/2010/12/04_ipv6-thumb.png" height="130" width="380" style=" text-align: center; display: block; margin: 0 auto 10px;"  alt="IPv6 Mac OS X" title="IPv6 Mac OS X" /></a></noindex></p>
<p>Для определения внешнего адреса можно зайти на&nbsp;<noindex><a rel="nofollow" href="http://www.whatismyip.com/" >WhatIsMyIP.com</a></noindex> или&nbsp;же, что гораздо удобнее, можно внести в .bashrc алиас myip:</p>
<pre>
$ vim .bashrc
alias myip="dig +short myip.opendns.com @resolver1.opendns.com"

$ myip
94.45.55.146
</pre>
<p>Для автоматизации изменения динамического адреса пригодится информация:</p>
<pre>
Please use the format:

https://ipv4.tunnelbroker.net/ipv4_end.php?ipv4b=$IPV4ADDR&#038;pass=$MD5PASS&#038;user_id=$USERID&#038;tunnel_id=$GTUNID

WHERE:
$IPV4ADDR = The new IPv4 Endpoint
set ipv4b='AUTO' if you want to set the variable to the requesting client's IP address.
set ipv4b='your_public_ipv4_address' if you want to manually provide the address.
$MD5PASS = The MD5 Hash of your password
Try echo -n 'yourpassword' | md5sum if you need to produce the MD5 Hash of your password
$USERID = The UserID from the main page of the tunnelbroker (not your username)
$GTUNID = The Global Tunnel ID from the tunnel_details page

Your IPv4 endpoint must be pingable. If you are blocking ICMP, please allow 66.220.2.74 through your firewall.
</pre>
<p>P.S. Кто там говорил про&nbsp;то, что я&nbsp;ударился в&nbsp;популизм в&nbsp;ущерб гиковости? ;-)</p>
]]></content:encoded>
			<wfw:commentRss>http://theapplegeek.ru/archives/5008/feed</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
		<item>
		<title>Bonjour Browser</title>
		<link>http://theapplegeek.ru/archives/4715</link>
		<comments>http://theapplegeek.ru/archives/4715#comments</comments>
		<pubDate>Wed, 10 Nov 2010 12:29:37 +0000</pubDate>
		<dc:creator>ctrld</dc:creator>
				<category><![CDATA[Mac]]></category>
		<category><![CDATA[network]]></category>

		<guid isPermaLink="false">http://theapplegeek.ru/?p=4715</guid>
		<description><![CDATA[Нравится мне компания Shortcut.ru. Приятно и познавательно почитать статьи Кирилла Воронина и его специалистов. Недели две назад Кирилл показал полезный инструмент &#8211; Bonjour Browser: Если вы ещё не читаете shortcut.ru, то очень рекомендую добавить RSS в ваш RSS-reader.]]></description>
			<content:encoded><![CDATA[<p>Нравится мне компания <noindex><a rel="nofollow" href="http://www.shortcut.ru/" >Shortcut.ru</a></noindex>. Приятно и познавательно почитать статьи Кирилла Воронина и его специалистов.</p>
<p>Недели две назад Кирилл показал полезный инструмент &#8211; <noindex><a rel="nofollow" href="http://www.shortcut.ru/2010/10/29/bi/" >Bonjour Browser</a></noindex>:</p>
<p style="clear: both"><noindex><a rel="nofollow" href="http://www.shortcut.ru/2010/10/29/bi/" ><img class="linked-to-original" src="http://images.theapplegeek.ru/wp-content/uploads/2010/11/Bonjour_Browser-thumb.png" height="280" width="380" style=" text-align: center; display: block; margin: 0 auto 10px;" /></a></noindex></p>
<p>Если вы ещё не читаете shortcut.ru, то очень рекомендую <noindex><a rel="nofollow" href="http://feeds2.feedburner.com/shortcutru" >добавить RSS</a></noindex> в ваш RSS-reader.</p>
]]></content:encoded>
			<wfw:commentRss>http://theapplegeek.ru/archives/4715/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Выгрузка файла на FTP-сервер с помощью curl</title>
		<link>http://theapplegeek.ru/archives/4638</link>
		<comments>http://theapplegeek.ru/archives/4638#comments</comments>
		<pubDate>Thu, 04 Nov 2010 12:16:40 +0000</pubDate>
		<dc:creator>ctrld</dc:creator>
				<category><![CDATA[Mac]]></category>
		<category><![CDATA[network]]></category>

		<guid isPermaLink="false">http://theapplegeek.ru/?p=4638</guid>
		<description><![CDATA[curl &#8211; мощная утилита для обмена файлами. Я постоянно пользуюсь ею для списывания файлов через консоль, но только вчера обнаружил, что она может использоваться и для выгрузки файлов. С помощью такой команды можно передать файл testfile.zip на FTP-сервер ftp.domain.com под пользователем user с паролем password: $ curl --upload-file testfile.zip ftp://user:password@ftp.domain.com/ Можно выяснить среднюю скорость выгрузки: [...]]]></description>
			<content:encoded><![CDATA[<p><noindex><a rel="nofollow" href="http://is.gd/gHXGz" >curl</a></noindex> &#8211; мощная утилита для обмена файлами. Я постоянно пользуюсь ею для списывания файлов через консоль, но только вчера обнаружил, что она может использоваться и для выгрузки файлов.</p>
<p>С помощью такой команды можно передать файл testfile.zip на FTP-сервер ftp.domain.com под пользователем user с паролем password:</p>
<pre>
$ curl --upload-file testfile.zip ftp://user:password@ftp.domain.com/
</pre>
<p><span id="more-4638"></span></p>
<p>Можно выяснить среднюю скорость выгрузки:</p>
<pre>
curl --upload-file testfile.zip ftp://user:password@ftp.domain.com/ --silent \
	--write-out "Time: %{time_total}\nSize: %{size_upload}\nUpload speed: %{speed_upload}\n"
</pre>
<p>В секции &#8211;write-out возможны такие переменные:</p>
<ul>
<li><strong>url_effective</strong>. The URL that was fetched last. This is most meaningful if you&#8217;ve told curl to follow location: headers.</li>
<li><strong>http_code</strong>. The numerical response code that was found in the last retrieved HTTP(S) or FTP(s) transfer. In 7.18.2 the alias response_code was  added  to  show  the same info.</li>
<li><strong>http_connect</strong>. The numerical code that was found in the last response (from a proxy) to a curl CONNECT request. (Added in 7.12.4)</li>
<li><strong>time_total</strong>. The total time, in seconds, that the full operation lasted. The time will be displayed with millisecond resolution.</li>
<li><strong>time_namelookup</strong>. The time, in seconds, it took from the start until the name resolving was completed.</li>
<li><strong>time_connect</strong>. The time, in seconds, it took from the start until the TCP connect to the remote host (or proxy) was completed.</li>
<li><strong>time_appconnect</strong>. The time, in seconds, it took from the start until the SSL/SSH/etc connect/handshake to the remote host was completed. (Added in 7.19.0)</li>
<li><strong>time_pretransfer</strong>. The  time,  in seconds, it took from the start until the file transfer was just about to begin. This includes all pre-transfer commands and negotiations that are specific to the particular protocol(s) involved.</li>
<li><strong>time_redirect</strong>. The time, in seconds, it took for all redirection steps include name lookup, connect, pretransfer and transfer before the final transaction was started. time_redirect shows the complete execution time for multiple redirections. (Added in 7.12.3)</li>
<li><strong>time_starttransfer</strong>. The time, in seconds, it took from the start until the first byte was just about to be transferred. This includes time_pretransfer and also the time the server needed to calculate the result.</li>
<li><strong>size_download</strong>. The total amount of bytes that were downloaded.</li>
<li><strong>size_upload</strong>. The total amount of bytes that were uploaded.</li>
<li><strong>size_header</strong>. The total amount of bytes of the downloaded headers.</li>
<li><strong>size_request</strong>. The total amount of bytes that were sent in the HTTP request.</li>
<li><strong>speed_download</strong>. The average download speed that curl measured for the complete download.</li>
<li><strong>speed_upload</strong>. The average upload speed that curl measured for the complete upload.</li>
<li><strong>content_type</strong>. The Content-Type of the requested document, if there was any.</li>
<li><strong>num_connects</strong>. Number of new connects made in the recent transfer. (Added in 7.12.3)</li>
<li><strong>num_redirects</strong>. Number of redirects that were followed in the request. (Added in 7.12.3)</li>
<li><strong>redirect_url</strong>. When a HTTP request was made without -L to follow redirects, this variable will show the actual URL a redirect would take you to. (Added in 7.18.2)</li>
<li><strong>ftp_entry_path</strong>. The initial path libcurl ended up in when logging on to the remote FTP server. (Added in 7.15.4)</li>
<li><strong>ssl_verify_result</strong>. The result of the SSL peer certificate verification that was requested. 0 means the verification was successful. (Added in 7.19.0)</li>
</ul>
<p>Штатный curl, идущий в поставке Mac OS X 10.6, поддерживает такие протоколы:</p>
<pre>
$ curl -V
curl 7.19.7 (universal-apple-darwin10.0) libcurl/7.19.7 OpenSSL/0.9.8l zlib/1.2.3
<strong>Protocols: tftp ftp telnet dict ldap http file https ftps</strong>
Features: GSS-Negotiate IPv6 Largefile NTLM SSL libz
</pre>
<p>Рекомендую почитать <noindex><a rel="nofollow" href="http://is.gd/gHXGz" >man curl</a></noindex> &#8211; это может пригодиться. К curl также есть API к разнообразным языкам программирования &#8211; PHP, Perl, Python, и т.д. Так что использовать утилиту можно &#8211; была бы необходимость.</p>
]]></content:encoded>
			<wfw:commentRss>http://theapplegeek.ru/archives/4638/feed</wfw:commentRss>
		<slash:comments>9</slash:comments>
		</item>
		<item>
		<title>Работа с WiFi из командной строки (airport)</title>
		<link>http://theapplegeek.ru/archives/4237</link>
		<comments>http://theapplegeek.ru/archives/4237#comments</comments>
		<pubDate>Thu, 29 Jul 2010 06:49:04 +0000</pubDate>
		<dc:creator>ctrld</dc:creator>
				<category><![CDATA[Mac]]></category>
		<category><![CDATA[network]]></category>
		<category><![CDATA[wifi]]></category>

		<guid isPermaLink="false">http://theapplegeek.ru/?p=4237</guid>
		<description><![CDATA[Из подборки на superuser.com я освежил для себя подзабытую команду airport, с помощью которой можно работать с WiFi-подсистемой. Утилита находится в дебрях фреймворка Apple80211: /System/Library/PrivateFrameworks/Apple80211.framework/Versions/A/Resources/airport Для упрощения работы можно сделать алиас: $ vim ~/.bash_profile alias ap='/System/Library/PrivateFrameworks/Apple80211.framework/Versions/A/Resources/airport' Сканирование сетей: $ /System/Library/PrivateFrameworks/Apple80211.framework/Versions/A/Resources/airport -s SSID BSSID RSSI CHANNEL HT CC SECURITY (auth/unicast/group) XXXXXXX 00:00:00:00:00:a6 -65 2 N IL [...]]]></description>
			<content:encoded><![CDATA[<p>Из подборки на <noindex><a rel="nofollow" href="http://superuser.com/questions/52483?tab=votes&#038;page=2#tab-top" >superuser.com</a></noindex> я освежил для себя подзабытую команду airport, с помощью которой можно работать с WiFi-подсистемой.</p>
<p>Утилита находится в дебрях фреймворка Apple80211:</p>
<pre>
/System/Library/PrivateFrameworks/Apple80211.framework/Versions/A/Resources/airport
</pre>
<p><span id="more-4237"></span></p>
<p>Для упрощения работы можно сделать алиас:</p>
<pre>
$ vim ~/.bash_profile
alias ap='/System/Library/PrivateFrameworks/Apple80211.framework/Versions/A/Resources/airport'
</pre>
<p>Сканирование сетей:</p>
<pre>
$ /System/Library/PrivateFrameworks/Apple80211.framework/Versions/A/Resources/airport -s
<small>SSID    BSSID             RSSI CHANNEL HT CC SECURITY (auth/unicast/group)
XXXXXXX 00:00:00:00:00:a6  -65       2  N IL WPA(PSK/AES,TKIP/TKIP) WPA2(PSK/AES,TKIP/TKIP)
YYYYYYY 00:00:00:00:00:ab  -34       7  Y AT WPA2(PSK/AES/AES)</small>
</pre>
<ul>
<li>SSID &#8211; service set identifier. Имя, которое идентифицирует беспроводную сеть</li>
<li>BSSID &#8211; basic service set identifier. В большинстве случаев это идентификатор Access Point и является её MAC-адресом</li>
<li>RSSI &#8211; Received signal strength indication. Мощность сигнала. Чем больше значение, тем сигнал мощнее (в примере сигнал сети YYYYYYY сильнее XXXXXXX).</li>
<li>CHANNEL &#8211; <noindex><a rel="nofollow" href="http://en.wikipedia.org/wiki/IEEE_802.11#Channels_and_international_compatibility" >канал</a></noindex>, на котором работает сеть. Для информации &#8211; в 802.11g есть всего три неинтерферирующих канала, поэтому если вокруг много активно работающих сетей, то будет наблюдаться снижение скорости и сбои в работе.</li>
<li>HT &#8211; я так и не нашёл, что это такое.</li>
<li>CC &#8211; страна, определяет частотный диапазон и конфигурируется для Access Point. IL &#8211; Израиль, AT &#8211; Австрия.</li>
<li>SECURITY (auth/unicast/group) &#8211; технология защиты, обмен ключами, шифрование.</li>
</ul>
<p>Информация по текущей сети:</p>
<pre>
$ /System/Library/PrivateFrameworks/Apple80211.framework/Versions/A/Resources/airport -I
<small>     agrCtlRSSI: -37
     agrExtRSSI: 0
    agrCtlNoise: -89
    agrExtNoise: 0
          state: running
        op mode: station
     lastTxRate: 145
        maxRate: 144
lastAssocStatus: 0
    802.11 auth: open
      link auth: wpa2-psk
          BSSID: 00:00:00:00:00:ab
           SSID: XXXXXXXXXXXX
            MCS: 15
        channel: 7</small>
</pre>
<p>Почти все параметры говорят сами за себя (кроме lastTxRate и maxRate, которые я не могу объяснить внятно). Меня интересуют два параметра:</p>
<ul>
<li>agrCtlRSSI &#8211; мощность сигнала, чем выше, тем лучше</li>
<li>agrCtlNoise &#8211; шум, чем меньше, тем лучше</li>
</ul>
<p>Отключение от сети</p>
<pre>
$ sudo /System/Library/PrivateFrameworks/Apple80211.framework/Versions/A/Resources/airport -z
</pre>
]]></content:encoded>
			<wfw:commentRss>http://theapplegeek.ru/archives/4237/feed</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Немного деталей о сетевой активности iPhone</title>
		<link>http://theapplegeek.ru/archives/3953</link>
		<comments>http://theapplegeek.ru/archives/3953#comments</comments>
		<pubDate>Thu, 10 Jun 2010 16:18:06 +0000</pubDate>
		<dc:creator>ctrld</dc:creator>
				<category><![CDATA[iPhone]]></category>
		<category><![CDATA[Mac]]></category>
		<category><![CDATA[network]]></category>
		<category><![CDATA[wireshark]]></category>

		<guid isPermaLink="false">http://theapplegeek.ru/?p=3953</guid>
		<description><![CDATA[Учитывая достаточно активное потребление трафика на iPhone, я решил посмотреть, с какими сервисами он взаимодействует. Задумано-сделано. Вариантов захватить трафик через GPRS у меня, конечно же, нет, поэтому я упростил себе задачу, отключив Cellular Data (iOS 4) и дав iPhone соединяться с Интернет только через WiFi. Внешний интерфейс WiFi-точки я подключил к компьютеру под Ubuntu через [...]]]></description>
			<content:encoded><![CDATA[<p style="clear: both"><img src="http://images.theapplegeek.ru/wp-content/uploads/2010/06/01_traf-thumb1.png" height="190" align="right" width="200" style=" display: inline; float: right; margin: 0 0 10px 10px;" /></p>
<p>Учитывая достаточно <a href="http://theapplegeek.ru/archives/3950" >активное потребление трафика</a> на iPhone, я решил посмотреть, с какими сервисами он взаимодействует.</p>
<p>Задумано-сделано. Вариантов захватить трафик через GPRS у меня, конечно же, нет, поэтому я упростил себе задачу, отключив Cellular Data (iOS 4) и дав iPhone соединяться с Интернет только через WiFi. Внешний интерфейс WiFi-точки я подключил к компьютеру под Ubuntu через который дальше обеспечивается доступ в Интернет.</p>
<p>Для дальнейшего упрощения задачи я решил не анализировать детально трафик, а ограничиться просмотром хостов, к которым iPhone обращается. Тяжело найти человека, который в здравом уме в сетевых приложениях будет использовать обращение по IP-адресам, а не по именам (предполагаем, например, смену хостинговой компании или географическую балансировку нагрузки), поэтому для анализа достаточно посмотреть запросы/ответы DNS.</p>
<p><span id="more-3953"></span></p>
<p>Я собрал данные <a href="http://theapplegeek.ru/archives/431" >используя tshark</a> за полтора часа работы iPhone после его перезагрузки и нахождении его в заблокированном состоянии. Включены сервисы: Mobile Me (все &#8211; почта, календарь, адресная книга, Find My iPhone), Google Mail Exchange (только почта).</p>
<pre>
<small>  2  15.647539 DNS Standard query A aosnotify.mac.com
  3  15.651564 DNS Standard query AAAA aosnotify.mac.com
  4  15.672783 DNS Standard query response A 17.250.248.82</small>
</pre>
<p>Доступ к Apple Online Service (MobileMe) для календарей/контактов/etc</p>
<pre>
<small> 23  17.275523 DNS Standard query TXT push.apple.com
 28  17.301644 DNS Standard query response TXT ("count=50")</small>
</pre>
<p>Регистрация для получения <noindex><a rel="nofollow" href="http://support.apple.com/kb/HT3576?viewlocale=ru_RU" >push-нотификаций</a></noindex>.</p>
<pre>
<small> 26  17.289761 DNS Standard query TXT sandbox.push.apple.com
 29  17.315179 DNS Standard query response TXT ("count=10")</small>
</pre>
<p>Скорее всего регистрация <noindex><a rel="nofollow" href="http://developer.apple.com/iphone/library/documentation/NetworkingInternet/Conceptual/RemoteNotificationsPG/ApplePushService/ApplePushService.html#//apple_ref/doc/uid/TP40008194-CH100-SW9" >на sandbox</a></noindex> для разработчиков (у меня на iPhone установлен девелоперский профиль)</p>
<pre>
<small> 30  17.367851 DNS Standard query A 38-courier.push.apple.com
 31  17.375139 DNS Standard query AAAA 38-courier.push.apple.com
 33  17.394461 DNS Standard query response CNAME 38.courier-push-apple.com.akadns.net A 17.149.36.73 A 17.149.36.97 A 17.149.36.226 A 17.149.37.44 A 17.149.36.115 A 17.149.36.174 A 17.149.36.86 A 17.149.36.65
 32  17.387095 DNS Standard query A 9-courier.sandbox.push.apple.com
 34  17.398505 DNS Standard query AAAA 9-courier.sandbox.push.apple.com
 35  17.413188 DNS Standard query response CNAME 9.courier-sandbox-push-apple.com.akadns.net A 17.149.34.67 A 17.149.34.68 A 17.149.34.74 A 17.149.34.65 A 17.149.34.72 A 17.149.34.73 A 17.149.34.75 A 17.149.34.77</small>
</pre>
<p>Подписка на потоки push-сообщений, детали нужно изучать отдельно. Взаимодействие строится по порту 5223/tcp</p>
<pre>
<small> 64  18.046396 DNS Standard query A fmip.me.com
 67  18.057170 DNS Standard query AAAA fmip.me.com
 68  18.095476 DNS Standard query response CNAME fmip.me.com.edgekey.net CNAME e3381.b.akamaiedge.net A 92.123.177.205</small>
</pre>
<p>Подписка на сервис Find My iPhone, взаимодействие по https.</p>
<pre>
<small>179  29.440446 DNS Standard query A sync.me.com
180  29.447291 DNS Standard query AAAA sync.me.com
182  29.483431 DNS Standard query response CNAME sync.me.com.edgekey.net CNAME e3381.b.akamaiedge.net A 92.123.177.205</small>
</pre>
<p>Доступ к данным в MobileMe для синхронизации по https</p>
<pre>
<small>210  32.648537 DNS Standard query A mail.me.com
211  32.656911 DNS Standard query AAAA mail.me.com
212  32.674195 DNS Standard query response A 17.148.16.42 A 17.148.16.43 A 17.148.16.44 A 17.148.16.45 A 17.148.16.46</small>
</pre>
<p>Соединение с IMAPs сервисом MobileMe &#8211; дальше получение почты будет в рамках этого соединения (на протяжении полутора часов идёт регулярный обмен данными).</p>
<pre>
<small>231  34.002401 DNS Standard query A m.google.com
232  34.014934 DNS Standard query AAAA m.google.com
237  34.027938 DNS Standard query response CNAME mobile.l.google.com A 74.125.43.193
238  34.086932 DNS Standard query response CNAME mobile.l.google.com</small>
</pre>
<p>Соединение с https сервиса Google Mail (Google Exchange) &#8211; дальше получение почты будет в рамках этого соединения.</p>
<pre>
<small>571 2757.413042 DNS Standard query A 0.pool.ntp.org
572 2757.438746 DNS Standard query response A 72.14.183.39 A 66.79.167.34 A 209.68.147.66</small>
</pre>
<p>Раз в час &#8211; синхронизация времени.</p>
<p>В общем ничего непредсказуемого, на &#8220;левые&#8221; хосты iPhone не соединяется, всё в рамках заявленного.</p>
]]></content:encoded>
			<wfw:commentRss>http://theapplegeek.ru/archives/3953/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>

