<?xml version="1.0"?>
<?xml-stylesheet type="text/css" href="http://wiki.linuxformat.ru/wiki/skins/common/feed.css?303"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ru">
		<id>http://wiki.linuxformat.ru/wiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Kipruss</id>
		<title>Linuxformat - Вклад участника [ru]</title>
		<link rel="self" type="application/atom+xml" href="http://wiki.linuxformat.ru/wiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Kipruss"/>
		<link rel="alternate" type="text/html" href="http://wiki.linuxformat.ru/wiki/%D0%A1%D0%BB%D1%83%D0%B6%D0%B5%D0%B1%D0%BD%D0%B0%D1%8F:Contributions/Kipruss"/>
		<updated>2026-05-13T02:10:30Z</updated>
		<subtitle>Вклад участника</subtitle>
		<generator>MediaWiki 1.19.20+dfsg-0+deb7u3</generator>

	<entry>
		<id>http://wiki.linuxformat.ru/wiki/LXF104</id>
		<title>LXF104</title>
		<link rel="alternate" type="text/html" href="http://wiki.linuxformat.ru/wiki/LXF104"/>
				<updated>2009-03-30T21:39:29Z</updated>
		
		<summary type="html">&lt;p&gt;Kipruss: /* Учебники */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=== Учебники ===&lt;br /&gt;
&lt;br /&gt;
* [[LXF104:Совет месяца|'''Совет месяца:''' ''Chroot'']]&lt;br /&gt;
&lt;br /&gt;
* [[LXF104:Альтернативы Photoshop|'''Фотография.''' Альтернативы ''Photoshop'']]&lt;br /&gt;
Противники Linux утверждают, что наша ОС не подходит для работы с изображениями. '''Дейл Стрикланд-Кларк''' покажет, насколько они заблуждаются, предложив внушительный список доступных инструментов.&lt;br /&gt;
&lt;br /&gt;
* [[LXF104:Hardcore Linux|'''Hardcore Linux.''' LDAP: Защитим вход в Dovecot.]]&lt;br /&gt;
Позволять кому попало использовать наш почтовый сервер без аутентификации пользователя – сущее безумие. '''Д-р Крис Браун''' наведет порядок с помощью LDAP… &lt;br /&gt;
&lt;br /&gt;
* R: начала анализа&lt;br /&gt;
&lt;br /&gt;
[[Категория:Математические пакеты]]&lt;br /&gt;
&lt;br /&gt;
=== [[LXF104:Ответы|Ответы]] ===&lt;br /&gt;
&lt;br /&gt;
Проблемы Linux решены: мониторинг серверов, автомонтирование с ''Udev'', преобразователи ''USB-to-serial'', сборка ПО, подстройка ''swap'' и запуск сканера в виртуальной машине.&lt;/div&gt;</summary>
		<author><name>Kipruss</name></author>	</entry>

	<entry>
		<id>http://wiki.linuxformat.ru/wiki/LXF104:Hardcore_Linux</id>
		<title>LXF104:Hardcore Linux</title>
		<link rel="alternate" type="text/html" href="http://wiki.linuxformat.ru/wiki/LXF104:Hardcore_Linux"/>
				<updated>2009-03-30T21:37:36Z</updated>
		
		<summary type="html">&lt;p&gt;Kipruss: /* Станция «Рабочая» */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==LDAP: Защитим вход в Dovecot==&lt;br /&gt;
&lt;br /&gt;
Позволять кому попало использовать наш почтовый сервер без аутентификации пользователя – сущее безумие. '''Д-р Крис Браун''' наведет порядок с помощью LDAP…&lt;br /&gt;
&lt;br /&gt;
Сегодняшнее утреннее чтение начнем с Книги Тукса, главы пятой, с самого первого стиха.&lt;br /&gt;
&lt;br /&gt;
# В начале был файл с паролями, и файл с паролями был Unix. Через него все пользователи могли получить доступ; и без него никто из входящих не мог пройти. И сисадмины сказали, что это хорошо.&lt;br /&gt;
# Но вот настала Великая Сеть, и возроптали сисадмины, говоря: «Файл с паролями свое отслужил, требует он дублирования данных и затрудняет масштабирование на большую сеть». Тогда Sun сказал: «Не бойтесь, ибо мы принесли вам Желтые Страницы, которые централизуют данные пользователей».&lt;br /&gt;
# Но затем явились четыре мудреца из Beetea и сказали: «Не смеете вы взять имя Желтые Страницы, оно наша собственность и наша торговая марка». И ответил им Sun: «Пускай то, что раньше звалось Желтыми Страницами, отныне зовется NIS». И сисадмины сказали, что это хорошо.&lt;br /&gt;
# Но прошло время, и снова разочаровались сисадмины, и возроптали они во второй раз: «Истинно, NIS имеет плоское пространство имен и не имеет контроля доступа».&lt;br /&gt;
# И снова сказал Sun: «Не бойтесь, ибо мы принесли вам NIS+, иерархическое пространство имен в нем и контроль доступа в избытке». Но сисадмины возроптали в третий раз, по своему неразумию.&lt;br /&gt;
# И создан был консорциум, и родил он спецификацию X500. И X500 родил DAP, DAP родил DIXIE, а DIXIE родил LDAP. И увидели сисадмины, что это хорошо. И это конец нашего утреннего чтения.&lt;br /&gt;
&lt;br /&gt;
Истинно говорю вам, в этот день, на этом уроке мы создадим службу каталогов LDAP и используем ее для аутентификации в агенте доступа к почте POP/IMAP ''Dovecot''.&lt;br /&gt;
&lt;br /&gt;
===Азбука LDAP===&lt;br /&gt;
&lt;br /&gt;
LDAP (облегченный протокол доступа к каталогам) – это служба каталогов, которую в принципе можно использовать для хранения любых данных, хотя на практике она чаще используется для хранения информации о пользователях, в частности, аутентификационных данных. Благодаря наличию открытой реализации (OpenLDAP) LDAP стал популярен в мире Linux как замена служб типа NIS или NIS+; в мире Windows она тоже хорошо известна – как основа ''Microsoft Active Directory''.&lt;br /&gt;
&lt;br /&gt;
Служба каталогов немного похожа на базу данных: обе могут хранить большие объемы информации и эффективно выполнять в ней поиск. Однако, служба каталогов оптимизирована для чтения (поиска); отношение времени записи к времени чтения обычно велико, и это не годится для ситуаций, когда требуется частое обновление данных. Для справочника естественно, что чтение выполняется в 10000 раз чаще, чем запись. Реляционные базы данных более симметричны по скорости чтения и записи. Кроме того, каталоги обычно не поддерживают транзакции, откаты и реляционные операции, типа &amp;lt;font color=&amp;quot;darkred&amp;quot;&amp;gt;join&amp;lt;/font&amp;gt;, которые имеют важное значение для реляционных баз данных.&lt;br /&gt;
&lt;br /&gt;
Если вы представите себе печатный телефонный справочник, асимметрия между чтением и записью станет очевидной. Номера телефонов ищутся в телефонном справочнике тысячи раз на дню. Обновление справочника приводит к печати, например, 100000 новых экземпляров и распространению их между абонентами. Обычно телефонные компании делают это раз в год.&lt;br /&gt;
&lt;br /&gt;
Вы можете использовать LDAP в разных целях: например, для аутентификации постоянных пользователей Linux; или для реализации отображений ''Postfix'', таких как виртуальный почтовый ящик, рассмотренный на уроке прошлого месяца. На данном уроке мы используем LDAP для простой аутентификации пользователей в ''Dovecot''.&lt;br /&gt;
&lt;br /&gt;
Отдать должное мощи и гибкости LDAP в ограниченном пространстве статьи – примерно то же, что пытаться открыть мир классической музыки инопланетянину, промычав ему первые четыре ноты Пятой симфонии Бетховена; но мы постараемся.&lt;br /&gt;
&lt;br /&gt;
===Что в имени тебе моем?===&lt;br /&gt;
&lt;br /&gt;
Каталоги LDAP состоят из набора записей, упорядоченных в виде древовидной структуры. Каждая позиция в дереве идентифицируется так называемым «различимым именем» (distinguished name, dn). Например, dn может быть вида &amp;lt;font color=&amp;quot;darkred&amp;quot;&amp;gt;cn=cbrown,ou=users,dc=example,dc=com&amp;lt;/font&amp;gt;. Сравним его с другими видами синтаксиса: как имя файла в Linux, оно бы записалось в виде '''/com/example/users/cbrown''', а «полное доменное имя» в DNS выглядело бы '''cbrown.users.example.com'''.&lt;br /&gt;
&lt;br /&gt;
Каждая запись в справочнике содержит информацию в виде набора пар «атрибут:значение». Какие именно атрибуты присутствуют, определяется так называемым классом объекта записи. Например, наша запись &amp;lt;font color=&amp;quot;darkred&amp;quot;&amp;gt;cn=cbrown,ou=users,dc=example,dc=com&amp;lt;/font&amp;gt; является объектом класса &amp;lt;font color=&amp;quot;darkred&amp;quot;&amp;gt;posixAccount&amp;lt;/font&amp;gt;. Описание, какой атрибут ассоциируется с каким классом, называется схемой, и она задается в файлах схем. Например, здесь описание класса &amp;lt;font color=&amp;quot;darkred&amp;quot;&amp;gt;posixAccount&amp;lt;/font&amp;gt; берется из файла '''/etc/openldap/schema/nis.schema''':&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 objectclass ( 1.3.6.1.1.1.2.0 NAME ‘posixAccount’&lt;br /&gt;
 DESC ‘Abstraction of an account with POSIX attributes’&lt;br /&gt;
 SUP top AUXILIARY&lt;br /&gt;
 MUST ( cn $ uid $ uidNumber $ gidNumber $ homeDirectory )&lt;br /&gt;
 MAY ( userPassword $ loginShell $ gecos $ description ) )&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Здесь важно отметить имя класса, список требуемых атрибутов (условие &amp;lt;font color=&amp;quot;darkred&amp;quot;&amp;gt;MUST&amp;lt;/font&amp;gt;) и список необязательных атрибутов (условие &amp;lt;font color=&amp;quot;darkred&amp;quot;&amp;gt;MAY&amp;lt;/font&amp;gt;). Если вы знакомы с файлом паролей Linux, вы заметите сходство атрибутов в объекте &amp;lt;font color=&amp;quot;darkred&amp;quot;&amp;gt;posixAccount&amp;lt;/font&amp;gt; и полях в '''/etc/passwd'''. (Учтите, однако, что атрибут LDAP &amp;lt;font color=&amp;quot;darkred&amp;quot;&amp;gt;uid&amp;lt;/font&amp;gt; – это то, что мы назвали бы именем учетной записи, а атрибут &amp;lt;font color=&amp;quot;darkred&amp;quot;&amp;gt;uidNumber&amp;lt;/font&amp;gt; – как раз то, что мы называем UID!) В терминах объектно-ориентированного программирования вы можете представить запись в файле схемы как описание класса, а запись в каталоге – как экземпляр класса. Также возможно наследование класса от «вышестоящего» класса (в объектно-ориентированном программировании он называется родительским или базовым). Строка &amp;lt;font color=&amp;quot;darkred&amp;quot;&amp;gt;SUP&amp;lt;/font&amp;gt; top &amp;lt;font color=&amp;quot;darkred&amp;quot;&amp;gt;AUXILIARY&amp;lt;/font&amp;gt; в предыдущем примере говорит нам, что вышестоящий класс, находящийся на вершине иерархии классов – это сам &amp;lt;font color=&amp;quot;darkred&amp;quot;&amp;gt;posixAccount&amp;lt;/font&amp;gt;, который не наследуется ни от чего. Но зайти дальше в аналогиях с ООП не получится: записи LDAP содержат только данные. Никакого запускаемого кода (который ОО-программисты назвали бы методом) с объектом не ассоциируется.&lt;br /&gt;
&lt;br /&gt;
{{Врезка&lt;br /&gt;
    |Заголовок=LDAP как он есть&lt;br /&gt;
    |Содержание=На стороне сервера услуги предоставляет демон ''slapd''. В качестве своей базы данных он использует ''BDB'' (встраиваемая библиотека базы данных, первоначально разработанная UC Berkeley), а прелестно названный ''slurpd'' распространяет изменения на все копии справочника LDAP. На стороне клиента OpenLDAP предоставляет различные инструменты командной строки для манипулирования записями каталога, включающие ''ldapadd'', добавляющий информацию в каталог, и ''ldapsearch'', используемый для (угадали!) поиска по каталогу.&lt;br /&gt;
    |Ширина=200px}}&lt;br /&gt;
&lt;br /&gt;
Для просмотра человеком записи каталога LDAP отображаются в текстовом формате, называемом LDIF (формат обмена данными LDAP). Это формально заданный синтаксис, в соответствии с которым записи каталога представляются «вне» LDAP. Например, LDIF используется для предварительного создания записи при вводе ее в каталог, переноса данных из одного справочника в другой или просмотра содержимого справочника. В развитие нашего примера, LDIF-представление пользователя &amp;lt;font color=&amp;quot;darkred&amp;quot;&amp;gt;cn=cbrown,ou=users,dc=example,dc=com&amp;lt;/font&amp;gt; будет выглядеть так:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 dn: cn=cbrown,ou=users,dc=example,dc=com&lt;br /&gt;
 objectclass: posixAccount&lt;br /&gt;
 objectclass: Account&lt;br /&gt;
 cn: cbrown&lt;br /&gt;
 uid: cbrown&lt;br /&gt;
 uidNumber: 555&lt;br /&gt;
 gidNumber: 555&lt;br /&gt;
 homeDirectory: /home/cbrown&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
Мы сфокусировали здесь внимание на типе объекта '''posixAccount''', потому что он необходим нам для поддержки аутентификации.&lt;br /&gt;
&lt;br /&gt;
===Станция «Рабочая»===&lt;br /&gt;
&lt;br /&gt;
Хватит теории! Давайте же установим и сконфигурируем LDAP. Я использую сервер CentOS, как на прошлом уроке (CentOS – это эквивалент RHEL5), но все, что будет показано далее, легко применимо для других дистрибутивов RedHat или Fedora.&lt;br /&gt;
&lt;br /&gt;
Мы будем использовать LDAP, который создан в Мичиганском университете (см. &amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;'''&amp;lt;nowiki&amp;gt;www.openldap.org&amp;lt;/nowiki&amp;gt;'''&amp;lt;/font&amp;gt;). Установка его в CentOS проста:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 # yum install openldap-clients openldap-servers&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Изображение:LXF104_73_1.png|thumb|300px|Рис. 1. Компоненты OpenLDAP.]]&lt;br /&gt;
&lt;br /&gt;
Рисунок 1 показывает основные компоненты OpenLDAP. Остальные компоненты клиента – модуль PAM LDAP ('''/lib/security/pam_ldap.so''') и библиотека разрешения LDAP ('''/lib/libnss_ldap.so'''), поддерживающая хранение стандартных учетных записей Linux в LDAP; мы займемся ими в следующем месяце.&lt;br /&gt;
&lt;br /&gt;
Для запуска службы LDAP необходимо кое-что изменить в файле конфигурации slapd ('''/etc/openldap/slapd.conf'''). Вот строки, которые я поменял:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  suffix = “dc=example,dc=com”&lt;br /&gt;
  rootdn = “cn=admin,dc=example,dc=com”&lt;br /&gt;
  rootpw = {SSHA}JM2o2+Z07QJ9CZxqD6CIL3aEe/zSzMmW&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Первая задает «именованный контекст» нашей службы LDAP, то есть dn ее верхней записи. Здесь можно использовать все что угодно, но я основывался на доменном имени DNS (&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;'''&amp;lt;nowiki&amp;gt;example.com&amp;lt;/nowiki&amp;gt;'''&amp;lt;/font&amp;gt;) настраиваемой машины: это стандартное решение. Вторая строка задает dn для учетной записи администратора сервера LDAP (он имеет полный контроль над содержимым каталога – это аналог root для Linux), а третья строка задает хэшированный пароль для этой учетной записи. Хэшированный пароль я сгенерировал с помощью '''slappasswd''':&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 # slappasswd&lt;br /&gt;
 New password:&lt;br /&gt;
 Re-enter new password:&lt;br /&gt;
 {SSHA}JM2o2+Z07QJ9CZxqD6CIL3aEe/zSzMmW&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
а затем вырезал и вставил результат в файл. После этого я запустил службу:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 # service ldap start&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Изображение:LXF104_74_1.png|thumb|300px|Рис. 2. Простая структура каталога LDAP для поддержки аутентификации.]]&lt;br /&gt;
&lt;br /&gt;
Далее нам надо заселить наш каталог записями, которые пригодятся для аутентификации. Чтобы сообразить, куда мы движемся, посмотрите на рисунок 2, там показана структура, которую нам надо создать.&lt;br /&gt;
&lt;br /&gt;
Сперва нужно построить и добавить в справочник узлы верхнего уровня. Я решил создать учетные записи пользователей в узле &amp;lt;font color=&amp;quot;darkred&amp;quot;&amp;gt;ou=users,dc=example,dc=com&amp;lt;/font&amp;gt;. Слово ‘&amp;lt;font color=&amp;quot;darkred&amp;quot;&amp;gt;users&amp;lt;/font&amp;gt;’ не является ключевым, просто я взял такое имя. Я начал с создания файла LDIF, названного '''root.ldif''':&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 # Build the root node&lt;br /&gt;
 dn: dc=example,dc=com&lt;br /&gt;
 dc: example&lt;br /&gt;
 objectClass: dcObject&lt;br /&gt;
 objectClass: organizationalUnit&lt;br /&gt;
 ou: example dot com&lt;br /&gt;
 # Build the users ou&lt;br /&gt;
 dn: ou=users,dc=example,dc=com&lt;br /&gt;
 ou: users&lt;br /&gt;
 objectClass:&lt;br /&gt;
 organizationalUnit&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Затем я добавил этот узел в каталог с помощью команды:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 # ldapadd -D “cn=admin,dc=example,dc=com” -x -W -f root.ldif&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Теперь добавим учетную запись пользователя. Выполняется это сходным образом: создается файл LDIF, а затем используется ''ldapadd'' для его добавления. Вот файл ('''newuser.ldif'''), который я создал:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 dn: cn=cbrown,ou=users,dc=&lt;br /&gt;
 example,dc=com&lt;br /&gt;
 objectclass: posixAccount&lt;br /&gt;
 objectclass: Account&lt;br /&gt;
 cn: cbrown&lt;br /&gt;
 uid: cbrown&lt;br /&gt;
 uidNumber: 555&lt;br /&gt;
 gidNumber: 555&lt;br /&gt;
 homeDirectory: /home/cbrown&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Затем я добавил этот узел в каталог:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  # ldapadd -D “cn=admin,dc=example,dc=com” -x -W -f newuser.ldif&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Так как записи LDAP нам понадобятся для аутентификации входа на сервер ''Dovecot'', я должен задать еще и пароль для пользователя, как показано здесь:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  # ldappasswd -x -D “cn=admin,dc=example,dc=com” -W -S “cn=cbrown,ou=users,dc=example,dc=com”&lt;br /&gt;
  New password:&lt;br /&gt;
  Re-enter new password:&lt;br /&gt;
  Enter LDAP Password:&lt;br /&gt;
  Result: Success (0)&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Теперь не мешает проверить, что пользователь был добавлен в каталог; давайте выполним поиск записи. Для этого можно употребить ''ldapsearch'':&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 # ldapsearch -x -b “ou=users,dc=example,dc=com” ‘(cn=cbrown)’&lt;br /&gt;
 # cbrown, users, example.com&lt;br /&gt;
 dn: cn=cbrown,ou=users,dc=example,dc=com&lt;br /&gt;
 objectClass: posixAccount&lt;br /&gt;
 objectClass: account&lt;br /&gt;
 cn: cbrown&lt;br /&gt;
 uid: cbrown&lt;br /&gt;
 uidNumber: 555&lt;br /&gt;
 gidNumber: 555&lt;br /&gt;
 homeDirectory: /home/cbrown&lt;br /&gt;
 userPassword:: e1NTSEF9cCt2Sml1enpCSTdOZjJUSU1ZcEp0c&lt;br /&gt;
 U5LTnQzVHhjZzg=&lt;br /&gt;
 # search result&lt;br /&gt;
 search: 2&lt;br /&gt;
 result: 0 Success&lt;br /&gt;
 # numResponses: 2&lt;br /&gt;
 # numEntries: 1&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Это упражнение следует проделать для других пользователей, но если у вас их много, есть смысл автоматизировать процесс с помощью скрипта.&lt;br /&gt;
&lt;br /&gt;
Справочники создаются именно для поиска в них, поэтому стоит разобрать поиск LDAP более подробно. Команда ldapsearch немного похожа на SQL-запрос к реляционной базе данных. Попробуем обойтись без формального описания синтаксиса. Я придумал хороший пример: разбил команду на несколько строк и для удобства ссылок пронумеровал их. Первые шесть строк из представленных ниже – на самом деле одна команда (обратные слэши у них на конце указывают, что команда продолжается на следующей строке). Для запуска этой команды в терминале просто удалите номера и, естественно, слэши, набрав весь код в одну строку.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;ini&amp;quot; line=&amp;quot;GESHI_NORMAL_LINE_NUMBERS&amp;quot;&amp;gt;&lt;br /&gt;
# ldapsearch -h mail.example.com \&lt;br /&gt;
-x -LLL -b “dc=example,dc=com” \&lt;br /&gt;
-D cn=admin,dc=example,dc=com -W&lt;br /&gt;
-s sub \&lt;br /&gt;
‘(|(uid=*brown)(gidNumber&amp;lt;=100))’ \&lt;br /&gt;
uid&lt;br /&gt;
Enter LDAP Password:&lt;br /&gt;
dn: cn=cbrown,ou=users,dc=example,dc=com&lt;br /&gt;
uid: cbrown&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Изображение:LXF104_75_1.png|thumb|304px|Рис. 3. Просмотр справочника LDAP с помощью LAT. Снимок экрана показывает запись, добавленную нами для пользователя cbrown.]]&lt;br /&gt;
[[Изображение:LXF104_75_2.png|thumb|304px|Рис. 4. Выполнение поиска в LDAP при помощи LAT.]]&lt;br /&gt;
&lt;br /&gt;
Теперь давайте вникать:&lt;br /&gt;
# Флаг &amp;lt;font color=&amp;quot;darkred&amp;quot;&amp;gt;-h&amp;lt;/font&amp;gt; используется для указания хоста, где запущен сервер LDAP. По умолчанию считается, что это localhost.&lt;br /&gt;
# Аргумент &amp;lt;font color=&amp;quot;darkred&amp;quot;&amp;gt;-x&amp;lt;/font&amp;gt; велит команде использовать простой метод аутентификации (не SASL), &amp;lt;font color=&amp;quot;darkred&amp;quot;&amp;gt;-LLL&amp;lt;/font&amp;gt; снижает число комментариев и прочих лишних слов в выводе, а флаг &amp;lt;font color=&amp;quot;darkred&amp;quot;&amp;gt;-b&amp;lt;/font&amp;gt; определяет, где мы хотим начать поиск в дереве справочника. В нашем случае мы начинаем с вершины дерева.&lt;br /&gt;
# Флаг &amp;lt;font color=&amp;quot;darkred&amp;quot;&amp;gt;-D&amp;lt;/font&amp;gt; задает dn пользователя, под которым мы хотим зайти (это пользователь, определенный параметром &amp;lt;font color=&amp;quot;darkred&amp;quot;&amp;gt;rootdn&amp;lt;/font&amp;gt; в '''slapd.conf'''), а &amp;lt;font color=&amp;quot;darkred&amp;quot;&amp;gt;-W&amp;lt;/font&amp;gt; велит команде запрашивать пароль.&lt;br /&gt;
# Здесь говорится, что поиск должен захватывать все ветви указанной базы, так что в данном случае мы запускаем поиск по всему справочнику.&lt;br /&gt;
# Пример фильтра поиска. Он говорит «покажите мне записи, где имя пользователя заканчивается на ‘brown’ или ID группы меньше или равно 100». Фильтры поиска – самая трудная часть синтаксиса для правильного написания, но (в определенном смысле) и самая важная.&lt;br /&gt;
# Эта строка содержит список имен атрибутов, которые мы хотим отобразить (в нашем случае просто имя пользователя). Если список пуст, ''ldapsearch'' покажет все атрибуты.&lt;br /&gt;
# Далее мы запрашиваем пароль для входа LDAP.&lt;br /&gt;
&lt;br /&gt;
Наконец, строки 8 и 9 показывают вывод поиска.&lt;br /&gt;
&lt;br /&gt;
Осилим еще один пример?&lt;br /&gt;
&amp;lt;source lang=&amp;quot;ini&amp;quot; line=&amp;quot;GESHI_NORMAL_LINE_NUMBERS&amp;quot;&amp;gt;&lt;br /&gt;
# ldapsearch -x \&lt;br /&gt;
-b “ou=users,dc=example,dc=com” \&lt;br /&gt;
-D cn=admin,dc=example,dc=com -W \&lt;br /&gt;
-s base ‘(objectClass=*)’&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Рассмотрим строки 2 и 4. В строке 2 задан конкретный узел дерева справочника, откуда начнется поиск, а в строке 4 мы говорим LDAP не распространять поиск за пределы этого узла, а изучать только записи, заданные в строке 2. Фильтр поиска здесь фактически и не фильтр: он гласит «любая запись с атрибутом '''objectClass''', независимо от значения», а это вообще все записи. Итак, этот поиск выводит на дисплей содержимое определенного узла дерева.&lt;br /&gt;
&lt;br /&gt;
Если вы предпочли бы использовать графические инструменты для поиска в вашем справочнике LDAP или добавления учетной записи пользователя, обратите внимание на Lat (''LDAP Administration Tool''). Это одно из новоиспеченных приложений, написанное на C# с использованием Mono и ''GTK#'', поэтому вам понадобятся установленные библиотеки Mono для его использования, но на моем клиенте с Ubuntu он установился и работал без каких-либо проблем. Рисунок 3 показывает этот инструмент в работе при обозревании иерархии LDAP, а на рисунке 4 показан пример поиска по UID 555.&lt;br /&gt;
&lt;br /&gt;
===Аутентификация Dovecot===&lt;br /&gt;
&lt;br /&gt;
Давайте закруглимся, применив каталог LDAP к полезному делу. Читатели предыдущего номера могут помнить, что мы оставили нашего героя (почтовый сервер ''Dovecot'') нуждающимся в аутентификации учетных записей POP3 базы данных пользователей, независимых от учетных записей пользователей в Linux.&lt;br /&gt;
&lt;br /&gt;
Оказывается, ''Dovecot'' может использовать LDAP для аутентификации двумя способами: он может войти в LDAP с именем пользователя ‘rootdn’ и паролем ‘rootpw’, затем посмотреть имя пользователя и хэшированный пароль пользователя, который пытается аутентифицироваться, а может просто попробовать подключиться к серверу LDAP с именем и паролем того пользователя, кто пытается войти, и посмотреть, успешна ли попытка. Вход в LDAP известен как ‘связывание’, и эта техника называется аутентификационной связью. Этот метод мы и будем использовать.&lt;br /&gt;
&lt;br /&gt;
Настройка ''Dovecot'' на использование LDAP для аутентификационной связи требует изменений в файле '''/etc/Dovecot.conf'''. Вот строки, которые я менял:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 auth_verbose = yes&lt;br /&gt;
 auth_debug = yes&lt;br /&gt;
 passdb ldap {&lt;br /&gt;
 args = /etc/dovecot-ldap.conf&lt;br /&gt;
 }&lt;br /&gt;
 userdb ldap {&lt;br /&gt;
 args = /etc/dovecot-ldap.conf&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Первые две строки включают вывод отладочных сообщений. На рабочем сервере они вам не понадобятся, но мне файл журнала ('''/var/log/maillog''') очень помог при отладке конфигурации ''Dovecot''. Две остальные строфы файла указывают, что мы будем использовать LDAP и как базу данных паролей, и как базу данных пользователей, и задают место размещения файла конфигурации LDAP для ''Dovecot''.&lt;br /&gt;
&lt;br /&gt;
Дико извиняюсь, но есть еще один файл конфигурации! Для его создания я начал с копирования примера конфигурации LDAP из дистрибутива ''Dovecot'' на место:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  # cp /usr/share/doc/dovecot-1.0/examples/dovecot-ldap.conf /etc&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Затем я сделал следующие изменения в '''/etc/Dovecot-ldap.conf''' (номера строк опять-таки нужны только для ссылок на них в тексте):&lt;br /&gt;
&amp;lt;source lang=&amp;quot;ini&amp;quot; line=&amp;quot;GESHI_NORMAL_LINE_NUMBERS&amp;quot;&amp;gt;&lt;br /&gt;
hosts = localhost&lt;br /&gt;
dn = cn=admin,dc=example,dc=com&lt;br /&gt;
dnpass = adminpw&lt;br /&gt;
auth_bind = yes&lt;br /&gt;
auth_bind_userdn = cn=%u,ou=users,dc=example,dc=com&lt;br /&gt;
base = ou=users,dc=example,dc=com&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Строка 1 задает имя сервера, на котором запущен LDAP. Строка 2 определяет dn учетной записи, которое ''Dovecot'' будет использовать для входа в LDAP, а строка 3 задает пароль для этой учетной записи. (Вообще-то было бы лучше не использовать для этого учетную запись с полными правами rootdn, а создать особую учетную запись для ''Dovecot''). Строка 4 говорит, что будет использоваться аутентификационная связь, а строка 5 задает dn пользователя, которого мы пробуем аутентифицировать как такового (над этим мне пришлось поломать голову!). В файле конфигурации ''Dovecot'', &amp;lt;font color=&amp;quot;darkred&amp;quot;&amp;gt;%u&amp;lt;/font&amp;gt; ссылается на имя пользователя, которое использует MUA (почтовый агент) пользователя, чтобы войти. Строка 6 определяет узел в дереве справочника LDAP, под которым находятся учетные записи пользователей.&lt;br /&gt;
&lt;br /&gt;
Угнездив на месте эти строки, я смог подсоединиться к службе POP3 ''Dovecot'' с учетной записью cbrown и забрать почту.&lt;br /&gt;
&lt;br /&gt;
Если у вас что-то не заработало, загляните в файл журнала, обычно '''/var/log/maillog'''. Сообщения, оставляемые ''Dovecot'', очень подробны и говорят сами за себя. '''LXF'''&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
===Что еще почитать? (врезка)===&lt;br /&gt;
&lt;br /&gt;
# По LDAP существует множество книг. Самыми полезными мне показались две: ''LDAP System Administration by Gerald Carter'' (O’Reilly, 1-56592-491-6), и ''Understanding and Deploying LDAP Directory Services by Howes, Smith and Good'' (Addison Wesley, 0672323168). Последняя более академическая (и тяжелая!)&lt;br /&gt;
# Официальная документация ''Dovecot'' доступна по адресу http://wiki.dovecot.org. В частности, статья http://wiki.dovecot.org/AuthDatabase/LDAP показывает, как сделать аутентификацию LDAP в ''Dovecot''. Кроме того, '''slapd.conf''', '''ldap.conf''' и все инструменты командной строки имеют прекрасные man-страницы.&lt;br /&gt;
# Основную информацию по сборке почтового сервера можно найти по адресам http://freshrpms.net/docs/mail-server и http://wanderingbarque.com/howtos/mailserver/mailserver.html. (Это очень подробное пошаговое руководство, написанное Питером Лэйси [Peter Lacey]; оно охватывает интеграцию ''Postfix'', ''Dovecot'', OpenLDAP, Jamm, ''Cyrus-SASL'' и ''SquirrelMail'', и основано на RHEL 3).&lt;br /&gt;
&lt;br /&gt;
[[Категория:Учебники]]&lt;br /&gt;
[[Категория:Hardcore Linux]]&lt;br /&gt;
[[Категория:Крис Браун]]&lt;/div&gt;</summary>
		<author><name>Kipruss</name></author>	</entry>

	<entry>
		<id>http://wiki.linuxformat.ru/wiki/LXF104:Hardcore_Linux</id>
		<title>LXF104:Hardcore Linux</title>
		<link rel="alternate" type="text/html" href="http://wiki.linuxformat.ru/wiki/LXF104:Hardcore_Linux"/>
				<updated>2009-03-30T21:32:41Z</updated>
		
		<summary type="html">&lt;p&gt;Kipruss: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==LDAP: Защитим вход в Dovecot==&lt;br /&gt;
&lt;br /&gt;
Позволять кому попало использовать наш почтовый сервер без аутентификации пользователя – сущее безумие. '''Д-р Крис Браун''' наведет порядок с помощью LDAP…&lt;br /&gt;
&lt;br /&gt;
Сегодняшнее утреннее чтение начнем с Книги Тукса, главы пятой, с самого первого стиха.&lt;br /&gt;
&lt;br /&gt;
# В начале был файл с паролями, и файл с паролями был Unix. Через него все пользователи могли получить доступ; и без него никто из входящих не мог пройти. И сисадмины сказали, что это хорошо.&lt;br /&gt;
# Но вот настала Великая Сеть, и возроптали сисадмины, говоря: «Файл с паролями свое отслужил, требует он дублирования данных и затрудняет масштабирование на большую сеть». Тогда Sun сказал: «Не бойтесь, ибо мы принесли вам Желтые Страницы, которые централизуют данные пользователей».&lt;br /&gt;
# Но затем явились четыре мудреца из Beetea и сказали: «Не смеете вы взять имя Желтые Страницы, оно наша собственность и наша торговая марка». И ответил им Sun: «Пускай то, что раньше звалось Желтыми Страницами, отныне зовется NIS». И сисадмины сказали, что это хорошо.&lt;br /&gt;
# Но прошло время, и снова разочаровались сисадмины, и возроптали они во второй раз: «Истинно, NIS имеет плоское пространство имен и не имеет контроля доступа».&lt;br /&gt;
# И снова сказал Sun: «Не бойтесь, ибо мы принесли вам NIS+, иерархическое пространство имен в нем и контроль доступа в избытке». Но сисадмины возроптали в третий раз, по своему неразумию.&lt;br /&gt;
# И создан был консорциум, и родил он спецификацию X500. И X500 родил DAP, DAP родил DIXIE, а DIXIE родил LDAP. И увидели сисадмины, что это хорошо. И это конец нашего утреннего чтения.&lt;br /&gt;
&lt;br /&gt;
Истинно говорю вам, в этот день, на этом уроке мы создадим службу каталогов LDAP и используем ее для аутентификации в агенте доступа к почте POP/IMAP ''Dovecot''.&lt;br /&gt;
&lt;br /&gt;
===Азбука LDAP===&lt;br /&gt;
&lt;br /&gt;
LDAP (облегченный протокол доступа к каталогам) – это служба каталогов, которую в принципе можно использовать для хранения любых данных, хотя на практике она чаще используется для хранения информации о пользователях, в частности, аутентификационных данных. Благодаря наличию открытой реализации (OpenLDAP) LDAP стал популярен в мире Linux как замена служб типа NIS или NIS+; в мире Windows она тоже хорошо известна – как основа ''Microsoft Active Directory''.&lt;br /&gt;
&lt;br /&gt;
Служба каталогов немного похожа на базу данных: обе могут хранить большие объемы информации и эффективно выполнять в ней поиск. Однако, служба каталогов оптимизирована для чтения (поиска); отношение времени записи к времени чтения обычно велико, и это не годится для ситуаций, когда требуется частое обновление данных. Для справочника естественно, что чтение выполняется в 10000 раз чаще, чем запись. Реляционные базы данных более симметричны по скорости чтения и записи. Кроме того, каталоги обычно не поддерживают транзакции, откаты и реляционные операции, типа &amp;lt;font color=&amp;quot;darkred&amp;quot;&amp;gt;join&amp;lt;/font&amp;gt;, которые имеют важное значение для реляционных баз данных.&lt;br /&gt;
&lt;br /&gt;
Если вы представите себе печатный телефонный справочник, асимметрия между чтением и записью станет очевидной. Номера телефонов ищутся в телефонном справочнике тысячи раз на дню. Обновление справочника приводит к печати, например, 100000 новых экземпляров и распространению их между абонентами. Обычно телефонные компании делают это раз в год.&lt;br /&gt;
&lt;br /&gt;
Вы можете использовать LDAP в разных целях: например, для аутентификации постоянных пользователей Linux; или для реализации отображений ''Postfix'', таких как виртуальный почтовый ящик, рассмотренный на уроке прошлого месяца. На данном уроке мы используем LDAP для простой аутентификации пользователей в ''Dovecot''.&lt;br /&gt;
&lt;br /&gt;
Отдать должное мощи и гибкости LDAP в ограниченном пространстве статьи – примерно то же, что пытаться открыть мир классической музыки инопланетянину, промычав ему первые четыре ноты Пятой симфонии Бетховена; но мы постараемся.&lt;br /&gt;
&lt;br /&gt;
===Что в имени тебе моем?===&lt;br /&gt;
&lt;br /&gt;
Каталоги LDAP состоят из набора записей, упорядоченных в виде древовидной структуры. Каждая позиция в дереве идентифицируется так называемым «различимым именем» (distinguished name, dn). Например, dn может быть вида &amp;lt;font color=&amp;quot;darkred&amp;quot;&amp;gt;cn=cbrown,ou=users,dc=example,dc=com&amp;lt;/font&amp;gt;. Сравним его с другими видами синтаксиса: как имя файла в Linux, оно бы записалось в виде '''/com/example/users/cbrown''', а «полное доменное имя» в DNS выглядело бы '''cbrown.users.example.com'''.&lt;br /&gt;
&lt;br /&gt;
Каждая запись в справочнике содержит информацию в виде набора пар «атрибут:значение». Какие именно атрибуты присутствуют, определяется так называемым классом объекта записи. Например, наша запись &amp;lt;font color=&amp;quot;darkred&amp;quot;&amp;gt;cn=cbrown,ou=users,dc=example,dc=com&amp;lt;/font&amp;gt; является объектом класса &amp;lt;font color=&amp;quot;darkred&amp;quot;&amp;gt;posixAccount&amp;lt;/font&amp;gt;. Описание, какой атрибут ассоциируется с каким классом, называется схемой, и она задается в файлах схем. Например, здесь описание класса &amp;lt;font color=&amp;quot;darkred&amp;quot;&amp;gt;posixAccount&amp;lt;/font&amp;gt; берется из файла '''/etc/openldap/schema/nis.schema''':&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 objectclass ( 1.3.6.1.1.1.2.0 NAME ‘posixAccount’&lt;br /&gt;
 DESC ‘Abstraction of an account with POSIX attributes’&lt;br /&gt;
 SUP top AUXILIARY&lt;br /&gt;
 MUST ( cn $ uid $ uidNumber $ gidNumber $ homeDirectory )&lt;br /&gt;
 MAY ( userPassword $ loginShell $ gecos $ description ) )&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Здесь важно отметить имя класса, список требуемых атрибутов (условие &amp;lt;font color=&amp;quot;darkred&amp;quot;&amp;gt;MUST&amp;lt;/font&amp;gt;) и список необязательных атрибутов (условие &amp;lt;font color=&amp;quot;darkred&amp;quot;&amp;gt;MAY&amp;lt;/font&amp;gt;). Если вы знакомы с файлом паролей Linux, вы заметите сходство атрибутов в объекте &amp;lt;font color=&amp;quot;darkred&amp;quot;&amp;gt;posixAccount&amp;lt;/font&amp;gt; и полях в '''/etc/passwd'''. (Учтите, однако, что атрибут LDAP &amp;lt;font color=&amp;quot;darkred&amp;quot;&amp;gt;uid&amp;lt;/font&amp;gt; – это то, что мы назвали бы именем учетной записи, а атрибут &amp;lt;font color=&amp;quot;darkred&amp;quot;&amp;gt;uidNumber&amp;lt;/font&amp;gt; – как раз то, что мы называем UID!) В терминах объектно-ориентированного программирования вы можете представить запись в файле схемы как описание класса, а запись в каталоге – как экземпляр класса. Также возможно наследование класса от «вышестоящего» класса (в объектно-ориентированном программировании он называется родительским или базовым). Строка &amp;lt;font color=&amp;quot;darkred&amp;quot;&amp;gt;SUP&amp;lt;/font&amp;gt; top &amp;lt;font color=&amp;quot;darkred&amp;quot;&amp;gt;AUXILIARY&amp;lt;/font&amp;gt; в предыдущем примере говорит нам, что вышестоящий класс, находящийся на вершине иерархии классов – это сам &amp;lt;font color=&amp;quot;darkred&amp;quot;&amp;gt;posixAccount&amp;lt;/font&amp;gt;, который не наследуется ни от чего. Но зайти дальше в аналогиях с ООП не получится: записи LDAP содержат только данные. Никакого запускаемого кода (который ОО-программисты назвали бы методом) с объектом не ассоциируется.&lt;br /&gt;
&lt;br /&gt;
{{Врезка&lt;br /&gt;
    |Заголовок=LDAP как он есть&lt;br /&gt;
    |Содержание=На стороне сервера услуги предоставляет демон ''slapd''. В качестве своей базы данных он использует ''BDB'' (встраиваемая библиотека базы данных, первоначально разработанная UC Berkeley), а прелестно названный ''slurpd'' распространяет изменения на все копии справочника LDAP. На стороне клиента OpenLDAP предоставляет различные инструменты командной строки для манипулирования записями каталога, включающие ''ldapadd'', добавляющий информацию в каталог, и ''ldapsearch'', используемый для (угадали!) поиска по каталогу.&lt;br /&gt;
    |Ширина=200px}}&lt;br /&gt;
&lt;br /&gt;
Для просмотра человеком записи каталога LDAP отображаются в текстовом формате, называемом LDIF (формат обмена данными LDAP). Это формально заданный синтаксис, в соответствии с которым записи каталога представляются «вне» LDAP. Например, LDIF используется для предварительного создания записи при вводе ее в каталог, переноса данных из одного справочника в другой или просмотра содержимого справочника. В развитие нашего примера, LDIF-представление пользователя &amp;lt;font color=&amp;quot;darkred&amp;quot;&amp;gt;cn=cbrown,ou=users,dc=example,dc=com&amp;lt;/font&amp;gt; будет выглядеть так:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 dn: cn=cbrown,ou=users,dc=example,dc=com&lt;br /&gt;
 objectclass: posixAccount&lt;br /&gt;
 objectclass: Account&lt;br /&gt;
 cn: cbrown&lt;br /&gt;
 uid: cbrown&lt;br /&gt;
 uidNumber: 555&lt;br /&gt;
 gidNumber: 555&lt;br /&gt;
 homeDirectory: /home/cbrown&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
Мы сфокусировали здесь внимание на типе объекта '''posixAccount''', потому что он необходим нам для поддержки аутентификации.&lt;br /&gt;
&lt;br /&gt;
===Станция «Рабочая»===&lt;br /&gt;
&lt;br /&gt;
Хватит теории! Давайте же установим и сконфигурируем LDAP. Я использую сервер CentOS, как на прошлом уроке (CentOS – это эквивалент RHEL5), но все, что будет показано далее, легко применимо для других дистрибутивов RedHat или Fedora.&lt;br /&gt;
&lt;br /&gt;
Мы будем использовать LDAP, который создан в Мичиганском университете (см. &amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;'''&amp;lt;nowiki&amp;gt;www.openldap.org&amp;lt;/nowiki&amp;gt;'''&amp;lt;/font&amp;gt;). Установка его в CentOS проста:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 # yum install openldap-clients openldap-servers&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Изображение:LXF104_73_1.png|thumb|300px|Рис. 1. Компоненты OpenLDAP.]]&lt;br /&gt;
&lt;br /&gt;
Рисунок 1 показывает основные компоненты OpenLDAP. Остальные компоненты клиента – модуль PAM LDAP ('''/lib/security/pam_ldap.so''') и библиотека разрешения LDAP ('''/lib/libnss_ldap.so'''), поддерживающая хранение стандартных учетных записей Linux в LDAP; мы займемся ими в следующем месяце.&lt;br /&gt;
&lt;br /&gt;
Для запуска службы LDAP необходимо кое-что изменить в файле конфигурации slapd ('''/etc/openldap/slapd.conf'''). Вот строки, которые я поменял:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  suffix = “dc=example,dc=com”&lt;br /&gt;
  rootdn = “cn=admin,dc=example,dc=com”&lt;br /&gt;
  rootpw = {SSHA}JM2o2+Z07QJ9CZxqD6CIL3aEe/zSzMmW&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Первая задает «именованный контекст» нашей службы LDAP, то есть dn ее верхней записи. Здесь можно использовать все что угодно, но я основывался на доменном имени DNS (&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;'''&amp;lt;nowiki&amp;gt;example.com&amp;lt;/nowiki&amp;gt;'''&amp;lt;/font&amp;gt;) настраиваемой машины: это стандартное решение. Вторая строка задает dn для учетной записи администратора сервера LDAP (он имеет полный контроль над содержимым каталога – это аналог root для Linux), а третья строка задает хэшированный пароль для этой учетной записи. Хэшированный пароль я сгенерировал с помощью '''slappasswd''':&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 # slappasswd&lt;br /&gt;
 New password:&lt;br /&gt;
 Re-enter new password:&lt;br /&gt;
 {SSHA}JM2o2+Z07QJ9CZxqD6CIL3aEe/zSzMmW&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
а затем вырезал и вставил результат в файл. После этого я запустил службу:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 # service ldap start&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Изображение:LXF104_74_1.png|thumb|300px|Рис. 2. Простая структура каталога LDAP для поддержки аутентификации.]]&lt;br /&gt;
&lt;br /&gt;
Далее нам надо заселить наш каталог записями, которые пригодятся для аутентификации. Чтобы сообразить, куда мы движемся, посмотрите на рисунок 2, там показана структура, которую нам надо создать.&lt;br /&gt;
&lt;br /&gt;
Сперва нужно построить и добавить в справочник узлы верхнего уровня. Я решил создать учетные записи пользователей в узле &amp;lt;font color=&amp;quot;darkred&amp;quot;&amp;gt;ou=users,dc=example,dc=com&amp;lt;/font&amp;gt;. Слово ‘&amp;lt;font color=&amp;quot;darkred&amp;quot;&amp;gt;users&amp;lt;/font&amp;gt;’ не является ключевым, просто я взял такое имя. Я начал с создания файла LDIF, названного '''root.ldif''':&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 # Build the root node&lt;br /&gt;
 dn: dc=example,dc=com&lt;br /&gt;
 dc: example&lt;br /&gt;
 objectClass: dcObject&lt;br /&gt;
 objectClass: organizationalUnit&lt;br /&gt;
 ou: example dot com&lt;br /&gt;
 # Build the users ou&lt;br /&gt;
 dn: ou=users,dc=example,dc=com&lt;br /&gt;
 ou: users&lt;br /&gt;
 objectClass:&lt;br /&gt;
 organizationalUnit&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Затем я добавил этот узел в каталог с помощью команды:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 # ldapadd -D “cn=admin,dc=example,dc=com” -x -W -f root.ldif&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Теперь добавим учетную запись пользователя. Выполняется это сходным образом: создается файл LDIF, а затем используется ''ldapadd'' для его добавления. Вот файл ('''newuser.ldif'''), который я создал:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 dn: cn=cbrown,ou=users,dc=&lt;br /&gt;
 example,dc=com&lt;br /&gt;
 objectclass: posixAccount&lt;br /&gt;
 objectclass: Account&lt;br /&gt;
 cn: cbrown&lt;br /&gt;
 uid: cbrown&lt;br /&gt;
 uidNumber: 555&lt;br /&gt;
 gidNumber: 555&lt;br /&gt;
 homeDirectory: /home/cbrown&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Затем я добавил этот узел в каталог:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  # ldapadd -D “cn=admin,dc=example,dc=com” -x -W -f newuser.ldif&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Так как записи LDAP нам понадобятся для аутентификации входа на сервер ''Dovecot'', я должен задать еще и пароль для пользователя, как показано здесь:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  # ldappasswd -x -D “cn=admin,dc=example,dc=com” -W -S “cn=cbrown,ou=users,dc=example,dc=com”&lt;br /&gt;
  New password:&lt;br /&gt;
  Re-enter new password:&lt;br /&gt;
  Enter LDAP Password:&lt;br /&gt;
  Result: Success (0)&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Теперь не мешает проверить, что пользователь был добавлен в каталог; давайте выполним поиск записи. Для этого можно употребить ''ldapsearch'':&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 # ldapsearch -x -b “ou=users,dc=example,dc=com” ‘(cn=cbrown)’&lt;br /&gt;
 # cbrown, users, example.com&lt;br /&gt;
 dn: cn=cbrown,ou=users,dc=example,dc=com&lt;br /&gt;
 objectClass: posixAccount&lt;br /&gt;
 objectClass: account&lt;br /&gt;
 cn: cbrown&lt;br /&gt;
 uid: cbrown&lt;br /&gt;
 uidNumber: 555&lt;br /&gt;
 gidNumber: 555&lt;br /&gt;
 homeDirectory: /home/cbrown&lt;br /&gt;
 userPassword:: e1NTSEF9cCt2Sml1enpCSTdOZjJUSU1ZcEp0c&lt;br /&gt;
 U5LTnQzVHhjZzg=&lt;br /&gt;
 # search result&lt;br /&gt;
 search: 2&lt;br /&gt;
 result: 0 Success&lt;br /&gt;
 # numResponses: 2&lt;br /&gt;
 # numEntries: 1&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Это упражнение следует проделать для других пользователей, но если у вас их много, есть смысл автоматизировать процесс с помощью скрипта.&lt;br /&gt;
&lt;br /&gt;
Справочники создаются именно для поиска в них, поэтому стоит разобрать поиск LDAP более подробно. Команда ldapsearch немного похожа на SQL-запрос к реляционной базе данных. Попробуем обойтись без формального описания синтаксиса. Я придумал хороший пример: разбил команду на несколько строк и для удобства ссылок пронумеровал их. Первые шесть строк из представленных ниже – на самом деле одна команда (обратные слэши у них на конце указывают, что команда продолжается на следующей строке). Для запуска этой команды в терминале просто удалите номера и, естественно, слэши, набрав весь код в одну строку.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;ini&amp;quot; line=&amp;quot;GESHI_NORMAL_LINE_NUMBERS&amp;quot;&amp;gt;&lt;br /&gt;
# ldapsearch -h mail.example.com \&lt;br /&gt;
-x -LLL -b “dc=example,dc=com” \&lt;br /&gt;
-D cn=admin,dc=example,dc=com -W&lt;br /&gt;
-s sub \&lt;br /&gt;
‘(|(uid=*brown)(gidNumber&amp;lt;=100))’ \&lt;br /&gt;
uid&lt;br /&gt;
Enter LDAP Password:&lt;br /&gt;
dn: cn=cbrown,ou=users,dc=example,dc=com&lt;br /&gt;
uid: cbrown&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Теперь давайте вникать:&lt;br /&gt;
# Флаг &amp;lt;font color=&amp;quot;darkred&amp;quot;&amp;gt;-h&amp;lt;/font&amp;gt; используется для указания хоста, где запущен сервер LDAP. По умолчанию считается, что это localhost.&lt;br /&gt;
# Аргумент &amp;lt;font color=&amp;quot;darkred&amp;quot;&amp;gt;-x&amp;lt;/font&amp;gt; велит команде использовать простой метод аутентификации (не SASL), &amp;lt;font color=&amp;quot;darkred&amp;quot;&amp;gt;-LLL&amp;lt;/font&amp;gt; снижает число комментариев и прочих лишних слов в выводе, а флаг &amp;lt;font color=&amp;quot;darkred&amp;quot;&amp;gt;-b&amp;lt;/font&amp;gt; определяет, где мы хотим начать поиск в дереве справочника. В нашем случае мы начинаем с вершины дерева.&lt;br /&gt;
# Флаг &amp;lt;font color=&amp;quot;darkred&amp;quot;&amp;gt;-D&amp;lt;/font&amp;gt; задает dn пользователя, под которым мы хотим зайти (это пользователь, определенный параметром &amp;lt;font color=&amp;quot;darkred&amp;quot;&amp;gt;rootdn&amp;lt;/font&amp;gt; в '''slapd.conf'''), а &amp;lt;font color=&amp;quot;darkred&amp;quot;&amp;gt;-W&amp;lt;/font&amp;gt; велит команде запрашивать пароль.&lt;br /&gt;
# Здесь говорится, что поиск должен захватывать все ветви указанной базы, так что в данном случае мы запускаем поиск по всему справочнику.&lt;br /&gt;
# Пример фильтра поиска. Он говорит «покажите мне записи, где имя пользователя заканчивается на ‘brown’ или ID группы меньше или равно 100». Фильтры поиска – самая трудная часть синтаксиса для правильного написания, но (в определенном смысле) и самая важная.&lt;br /&gt;
# Эта строка содержит список имен атрибутов, которые мы хотим отобразить (в нашем случае просто имя пользователя). Если список пуст, ''ldapsearch'' покажет все атрибуты.&lt;br /&gt;
# Далее мы запрашиваем пароль для входа LDAP.&lt;br /&gt;
&lt;br /&gt;
Наконец, строки 8 и 9 показывают вывод поиска.&lt;br /&gt;
&lt;br /&gt;
Осилим еще один пример?&lt;br /&gt;
&amp;lt;source lang=&amp;quot;ini&amp;quot; line=&amp;quot;GESHI_NORMAL_LINE_NUMBERS&amp;quot;&amp;gt;&lt;br /&gt;
# ldapsearch -x \&lt;br /&gt;
-b “ou=users,dc=example,dc=com” \&lt;br /&gt;
-D cn=admin,dc=example,dc=com -W \&lt;br /&gt;
-s base ‘(objectClass=*)’&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Рассмотрим строки 2 и 4. В строке 2 задан конкретный узел дерева справочника, откуда начнется поиск, а в строке 4 мы говорим LDAP не распространять поиск за пределы этого узла, а изучать только записи, заданные в строке 2. Фильтр поиска здесь фактически и не фильтр: он гласит «любая запись с атрибутом '''objectClass''', независимо от значения», а это вообще все записи. Итак, этот поиск выводит на дисплей содержимое определенного узла дерева.&lt;br /&gt;
&lt;br /&gt;
[[Изображение:LXF104_75_1.png|thumb|Рис. 3. Просмотр справочника LDAP с помощью LAT. Снимок экрана показывает запись, добавленную нами для пользователя cbrown.]]&lt;br /&gt;
[[Изображение:LXF104_75_2.png|thumb|Рис. 4. Выполнение поиска в LDAP при помощи LAT.]]&lt;br /&gt;
&lt;br /&gt;
Если вы предпочли бы использовать графические инструменты для поиска в вашем справочнике LDAP или добавления учетной записи пользователя, обратите внимание на Lat (''LDAP Administration Tool''). Это одно из новоиспеченных приложений, написанное на C# с использованием Mono и ''GTK#'', поэтому вам понадобятся установленные библиотеки Mono для его использования, но на моем клиенте с Ubuntu он установился и работал без каких-либо проблем. Рисунок 3 показывает этот инструмент в работе при обозревании иерархии LDAP, а на рисунке 4 показан пример поиска по UID 555.&lt;br /&gt;
&lt;br /&gt;
===Аутентификация Dovecot===&lt;br /&gt;
&lt;br /&gt;
Давайте закруглимся, применив каталог LDAP к полезному делу. Читатели предыдущего номера могут помнить, что мы оставили нашего героя (почтовый сервер ''Dovecot'') нуждающимся в аутентификации учетных записей POP3 базы данных пользователей, независимых от учетных записей пользователей в Linux.&lt;br /&gt;
&lt;br /&gt;
Оказывается, ''Dovecot'' может использовать LDAP для аутентификации двумя способами: он может войти в LDAP с именем пользователя ‘rootdn’ и паролем ‘rootpw’, затем посмотреть имя пользователя и хэшированный пароль пользователя, который пытается аутентифицироваться, а может просто попробовать подключиться к серверу LDAP с именем и паролем того пользователя, кто пытается войти, и посмотреть, успешна ли попытка. Вход в LDAP известен как ‘связывание’, и эта техника называется аутентификационной связью. Этот метод мы и будем использовать.&lt;br /&gt;
&lt;br /&gt;
Настройка ''Dovecot'' на использование LDAP для аутентификационной связи требует изменений в файле '''/etc/Dovecot.conf'''. Вот строки, которые я менял:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 auth_verbose = yes&lt;br /&gt;
 auth_debug = yes&lt;br /&gt;
 passdb ldap {&lt;br /&gt;
 args = /etc/dovecot-ldap.conf&lt;br /&gt;
 }&lt;br /&gt;
 userdb ldap {&lt;br /&gt;
 args = /etc/dovecot-ldap.conf&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Первые две строки включают вывод отладочных сообщений. На рабочем сервере они вам не понадобятся, но мне файл журнала ('''/var/log/maillog''') очень помог при отладке конфигурации ''Dovecot''. Две остальные строфы файла указывают, что мы будем использовать LDAP и как базу данных паролей, и как базу данных пользователей, и задают место размещения файла конфигурации LDAP для ''Dovecot''.&lt;br /&gt;
&lt;br /&gt;
Дико извиняюсь, но есть еще один файл конфигурации! Для его создания я начал с копирования примера конфигурации LDAP из дистрибутива ''Dovecot'' на место:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  # cp /usr/share/doc/dovecot-1.0/examples/dovecot-ldap.conf /etc&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Затем я сделал следующие изменения в '''/etc/Dovecot-ldap.conf''' (номера строк опять-таки нужны только для ссылок на них в тексте):&lt;br /&gt;
&amp;lt;source lang=&amp;quot;ini&amp;quot; line=&amp;quot;GESHI_NORMAL_LINE_NUMBERS&amp;quot;&amp;gt;&lt;br /&gt;
hosts = localhost&lt;br /&gt;
dn = cn=admin,dc=example,dc=com&lt;br /&gt;
dnpass = adminpw&lt;br /&gt;
auth_bind = yes&lt;br /&gt;
auth_bind_userdn = cn=%u,ou=users,dc=example,dc=com&lt;br /&gt;
base = ou=users,dc=example,dc=com&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Строка 1 задает имя сервера, на котором запущен LDAP. Строка 2 определяет dn учетной записи, которое ''Dovecot'' будет использовать для входа в LDAP, а строка 3 задает пароль для этой учетной записи. (Вообще-то было бы лучше не использовать для этого учетную запись с полными правами rootdn, а создать особую учетную запись для ''Dovecot''). Строка 4 говорит, что будет использоваться аутентификационная связь, а строка 5 задает dn пользователя, которого мы пробуем аутентифицировать как такового (над этим мне пришлось поломать голову!). В файле конфигурации ''Dovecot'', &amp;lt;font color=&amp;quot;darkred&amp;quot;&amp;gt;%u&amp;lt;/font&amp;gt; ссылается на имя пользователя, которое использует MUA (почтовый агент) пользователя, чтобы войти. Строка 6 определяет узел в дереве справочника LDAP, под которым находятся учетные записи пользователей.&lt;br /&gt;
&lt;br /&gt;
Угнездив на месте эти строки, я смог подсоединиться к службе POP3 ''Dovecot'' с учетной записью cbrown и забрать почту.&lt;br /&gt;
&lt;br /&gt;
Если у вас что-то не заработало, загляните в файл журнала, обычно '''/var/log/maillog'''. Сообщения, оставляемые ''Dovecot'', очень подробны и говорят сами за себя. '''LXF'''&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
===Что еще почитать? (врезка)===&lt;br /&gt;
&lt;br /&gt;
# По LDAP существует множество книг. Самыми полезными мне показались две: ''LDAP System Administration by Gerald Carter'' (O’Reilly, 1-56592-491-6), и ''Understanding and Deploying LDAP Directory Services by Howes, Smith and Good'' (Addison Wesley, 0672323168). Последняя более академическая (и тяжелая!)&lt;br /&gt;
# Официальная документация ''Dovecot'' доступна по адресу http://wiki.dovecot.org. В частности, статья http://wiki.dovecot.org/AuthDatabase/LDAP показывает, как сделать аутентификацию LDAP в ''Dovecot''. Кроме того, '''slapd.conf''', '''ldap.conf''' и все инструменты командной строки имеют прекрасные man-страницы.&lt;br /&gt;
# Основную информацию по сборке почтового сервера можно найти по адресам http://freshrpms.net/docs/mail-server и http://wanderingbarque.com/howtos/mailserver/mailserver.html. (Это очень подробное пошаговое руководство, написанное Питером Лэйси [Peter Lacey]; оно охватывает интеграцию ''Postfix'', ''Dovecot'', OpenLDAP, Jamm, ''Cyrus-SASL'' и ''SquirrelMail'', и основано на RHEL 3).&lt;br /&gt;
&lt;br /&gt;
[[Категория:Учебники]]&lt;br /&gt;
[[Категория:Hardcore Linux]]&lt;br /&gt;
[[Категория:Крис Браун]]&lt;/div&gt;</summary>
		<author><name>Kipruss</name></author>	</entry>

	<entry>
		<id>http://wiki.linuxformat.ru/wiki/LXF104:Hardcore_Linux</id>
		<title>LXF104:Hardcore Linux</title>
		<link rel="alternate" type="text/html" href="http://wiki.linuxformat.ru/wiki/LXF104:Hardcore_Linux"/>
				<updated>2009-03-30T21:31:59Z</updated>
		
		<summary type="html">&lt;p&gt;Kipruss: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==LDAP: Защитим вход в Dovecot==&lt;br /&gt;
&lt;br /&gt;
Позволять кому попало использовать наш почтовый сервер без аутентификации пользователя – сущее безумие. '''Д-р Крис Браун''' наведет порядок с помощью LDAP…&lt;br /&gt;
&lt;br /&gt;
Сегодняшнее утреннее чтение начнем с Книги Тукса, главы пятой, с самого первого стиха.&lt;br /&gt;
&lt;br /&gt;
# В начале был файл с паролями, и файл с паролями был Unix. Через него все пользователи могли получить доступ; и без него никто из входящих не мог пройти. И сисадмины сказали, что это хорошо.&lt;br /&gt;
# Но вот настала Великая Сеть, и возроптали сисадмины, говоря: «Файл с паролями свое отслужил, требует он дублирования данных и затрудняет масштабирование на большую сеть». Тогда Sun сказал: «Не бойтесь, ибо мы принесли вам Желтые Страницы, которые централизуют данные пользователей».&lt;br /&gt;
# Но затем явились четыре мудреца из Beetea и сказали: «Не смеете вы взять имя Желтые Страницы, оно наша собственность и наша торговая марка». И ответил им Sun: «Пускай то, что раньше звалось Желтыми Страницами, отныне зовется NIS». И сисадмины сказали, что это хорошо.&lt;br /&gt;
# Но прошло время, и снова разочаровались сисадмины, и возроптали они во второй раз: «Истинно, NIS имеет плоское пространство имен и не имеет контроля доступа».&lt;br /&gt;
# И снова сказал Sun: «Не бойтесь, ибо мы принесли вам NIS+, иерархическое пространство имен в нем и контроль доступа в избытке». Но сисадмины возроптали в третий раз, по своему неразумию.&lt;br /&gt;
# И создан был консорциум, и родил он спецификацию X500. И X500 родил DAP, DAP родил DIXIE, а DIXIE родил LDAP. И увидели сисадмины, что это хорошо. И это конец нашего утреннего чтения.&lt;br /&gt;
&lt;br /&gt;
Истинно говорю вам, в этот день, на этом уроке мы создадим службу каталогов LDAP и используем ее для аутентификации в агенте доступа к почте POP/IMAP ''Dovecot''.&lt;br /&gt;
&lt;br /&gt;
===Азбука LDAP===&lt;br /&gt;
&lt;br /&gt;
LDAP (облегченный протокол доступа к каталогам) – это служба каталогов, которую в принципе можно использовать для хранения любых данных, хотя на практике она чаще используется для хранения информации о пользователях, в частности, аутентификационных данных. Благодаря наличию открытой реализации (OpenLDAP) LDAP стал популярен в мире Linux как замена служб типа NIS или NIS+; в мире Windows она тоже хорошо известна – как основа ''Microsoft Active Directory''.&lt;br /&gt;
&lt;br /&gt;
Служба каталогов немного похожа на базу данных: обе могут хранить большие объемы информации и эффективно выполнять в ней поиск. Однако, служба каталогов оптимизирована для чтения (поиска); отношение времени записи к времени чтения обычно велико, и это не годится для ситуаций, когда требуется частое обновление данных. Для справочника естественно, что чтение выполняется в 10000 раз чаще, чем запись. Реляционные базы данных более симметричны по скорости чтения и записи. Кроме того, каталоги обычно не поддерживают транзакции, откаты и реляционные операции, типа &amp;lt;font color=&amp;quot;darkred&amp;quot;&amp;gt;join&amp;lt;/font&amp;gt;, которые имеют важное значение для реляционных баз данных.&lt;br /&gt;
&lt;br /&gt;
Если вы представите себе печатный телефонный справочник, асимметрия между чтением и записью станет очевидной. Номера телефонов ищутся в телефонном справочнике тысячи раз на дню. Обновление справочника приводит к печати, например, 100000 новых экземпляров и распространению их между абонентами. Обычно телефонные компании делают это раз в год.&lt;br /&gt;
&lt;br /&gt;
Вы можете использовать LDAP в разных целях: например, для аутентификации постоянных пользователей Linux; или для реализации отображений ''Postfix'', таких как виртуальный почтовый ящик, рассмотренный на уроке прошлого месяца. На данном уроке мы используем LDAP для простой аутентификации пользователей в ''Dovecot''.&lt;br /&gt;
&lt;br /&gt;
Отдать должное мощи и гибкости LDAP в ограниченном пространстве статьи – примерно то же, что пытаться открыть мир классической музыки инопланетянину, промычав ему первые четыре ноты Пятой симфонии Бетховена; но мы постараемся.&lt;br /&gt;
&lt;br /&gt;
===Что в имени тебе моем?===&lt;br /&gt;
&lt;br /&gt;
Каталоги LDAP состоят из набора записей, упорядоченных в виде древовидной структуры. Каждая позиция в дереве идентифицируется так называемым «различимым именем» (distinguished name, dn). Например, dn может быть вида &amp;lt;font color=&amp;quot;darkred&amp;quot;&amp;gt;cn=cbrown,ou=users,dc=example,dc=com&amp;lt;/font&amp;gt;. Сравним его с другими видами синтаксиса: как имя файла в Linux, оно бы записалось в виде '''/com/example/users/cbrown''', а «полное доменное имя» в DNS выглядело бы '''cbrown.users.example.com'''.&lt;br /&gt;
&lt;br /&gt;
Каждая запись в справочнике содержит информацию в виде набора пар «атрибут:значение». Какие именно атрибуты присутствуют, определяется так называемым классом объекта записи. Например, наша запись &amp;lt;font color=&amp;quot;darkred&amp;quot;&amp;gt;cn=cbrown,ou=users,dc=example,dc=com&amp;lt;/font&amp;gt; является объектом класса &amp;lt;font color=&amp;quot;darkred&amp;quot;&amp;gt;posixAccount&amp;lt;/font&amp;gt;. Описание, какой атрибут ассоциируется с каким классом, называется схемой, и она задается в файлах схем. Например, здесь описание класса &amp;lt;font color=&amp;quot;darkred&amp;quot;&amp;gt;posixAccount&amp;lt;/font&amp;gt; берется из файла '''/etc/openldap/schema/nis.schema''':&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 objectclass ( 1.3.6.1.1.1.2.0 NAME ‘posixAccount’&lt;br /&gt;
 DESC ‘Abstraction of an account with POSIX attributes’&lt;br /&gt;
 SUP top AUXILIARY&lt;br /&gt;
 MUST ( cn $ uid $ uidNumber $ gidNumber $ homeDirectory )&lt;br /&gt;
 MAY ( userPassword $ loginShell $ gecos $ description ) )&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Здесь важно отметить имя класса, список требуемых атрибутов (условие &amp;lt;font color=&amp;quot;darkred&amp;quot;&amp;gt;MUST&amp;lt;/font&amp;gt;) и список необязательных атрибутов (условие &amp;lt;font color=&amp;quot;darkred&amp;quot;&amp;gt;MAY&amp;lt;/font&amp;gt;). Если вы знакомы с файлом паролей Linux, вы заметите сходство атрибутов в объекте &amp;lt;font color=&amp;quot;darkred&amp;quot;&amp;gt;posixAccount&amp;lt;/font&amp;gt; и полях в '''/etc/passwd'''. (Учтите, однако, что атрибут LDAP &amp;lt;font color=&amp;quot;darkred&amp;quot;&amp;gt;uid&amp;lt;/font&amp;gt; – это то, что мы назвали бы именем учетной записи, а атрибут &amp;lt;font color=&amp;quot;darkred&amp;quot;&amp;gt;uidNumber&amp;lt;/font&amp;gt; – как раз то, что мы называем UID!) В терминах объектно-ориентированного программирования вы можете представить запись в файле схемы как описание класса, а запись в каталоге – как экземпляр класса. Также возможно наследование класса от «вышестоящего» класса (в объектно-ориентированном программировании он называется родительским или базовым). Строка &amp;lt;font color=&amp;quot;darkred&amp;quot;&amp;gt;SUP&amp;lt;/font&amp;gt; top &amp;lt;font color=&amp;quot;darkred&amp;quot;&amp;gt;AUXILIARY&amp;lt;/font&amp;gt; в предыдущем примере говорит нам, что вышестоящий класс, находящийся на вершине иерархии классов – это сам &amp;lt;font color=&amp;quot;darkred&amp;quot;&amp;gt;posixAccount&amp;lt;/font&amp;gt;, который не наследуется ни от чего. Но зайти дальше в аналогиях с ООП не получится: записи LDAP содержат только данные. Никакого запускаемого кода (который ОО-программисты назвали бы методом) с объектом не ассоциируется.&lt;br /&gt;
&lt;br /&gt;
{{Врезка&lt;br /&gt;
    |Заголовок=LDAP как он есть&lt;br /&gt;
    |Содержание=На стороне сервера услуги предоставляет демон ''slapd''. В качестве своей базы данных он использует ''BDB'' (встраиваемая библиотека базы данных, первоначально разработанная UC Berkeley), а прелестно названный ''slurpd'' распространяет изменения на все копии справочника LDAP. На стороне клиента OpenLDAP предоставляет различные инструменты командной строки для манипулирования записями каталога, включающие ''ldapadd'', добавляющий информацию в каталог, и ''ldapsearch'', используемый для (угадали!) поиска по каталогу.&lt;br /&gt;
    |Ширина=200px}}&lt;br /&gt;
&lt;br /&gt;
Для просмотра человеком записи каталога LDAP отображаются в текстовом формате, называемом LDIF (формат обмена данными LDAP). Это формально заданный синтаксис, в соответствии с которым записи каталога представляются «вне» LDAP. Например, LDIF используется для предварительного создания записи при вводе ее в каталог, переноса данных из одного справочника в другой или просмотра содержимого справочника. В развитие нашего примера, LDIF-представление пользователя &amp;lt;font color=&amp;quot;darkred&amp;quot;&amp;gt;cn=cbrown,ou=users,dc=example,dc=com&amp;lt;/font&amp;gt; будет выглядеть так:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 dn: cn=cbrown,ou=users,dc=example,dc=com&lt;br /&gt;
 objectclass: posixAccount&lt;br /&gt;
 objectclass: Account&lt;br /&gt;
 cn: cbrown&lt;br /&gt;
 uid: cbrown&lt;br /&gt;
 uidNumber: 555&lt;br /&gt;
 gidNumber: 555&lt;br /&gt;
 homeDirectory: /home/cbrown&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
Мы сфокусировали здесь внимание на типе объекта '''posixAccount''', потому что он необходим нам для поддержки аутентификации.&lt;br /&gt;
&lt;br /&gt;
===Станция «Рабочая»===&lt;br /&gt;
&lt;br /&gt;
Хватит теории! Давайте же установим и сконфигурируем LDAP. Я использую сервер CentOS, как на прошлом уроке (CentOS – это эквивалент RHEL5), но все, что будет показано далее, легко применимо для других дистрибутивов RedHat или Fedora.&lt;br /&gt;
&lt;br /&gt;
Мы будем использовать LDAP, который создан в Мичиганском университете (см. &amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;'''&amp;lt;nowiki&amp;gt;www.openldap.org&amp;lt;/nowiki&amp;gt;'''&amp;lt;/font&amp;gt;). Установка его в CentOS проста:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 # yum install openldap-clients openldap-servers&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Изображение:LXF104_73_1.png|thumb|300px|Рис. 1. Компоненты OpenLDAP.]]&lt;br /&gt;
&lt;br /&gt;
Рисунок 1 показывает основные компоненты OpenLDAP. Остальные компоненты клиента – модуль PAM LDAP ('''/lib/security/pam_ldap.so''') и библиотека разрешения LDAP ('''/lib/libnss_ldap.so'''), поддерживающая хранение стандартных учетных записей Linux в LDAP; мы займемся ими в следующем месяце.&lt;br /&gt;
&lt;br /&gt;
Для запуска службы LDAP необходимо кое-что изменить в файле конфигурации slapd ('''/etc/openldap/slapd.conf'''). Вот строки, которые я поменял:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  suffix = “dc=example,dc=com”&lt;br /&gt;
  rootdn = “cn=admin,dc=example,dc=com”&lt;br /&gt;
  rootpw = {SSHA}JM2o2+Z07QJ9CZxqD6CIL3aEe/zSzMmW&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Первая задает «именованный контекст» нашей службы LDAP, то есть dn ее верхней записи. Здесь можно использовать все что угодно, но я основывался на доменном имени DNS (&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;'''&amp;lt;nowiki&amp;gt;example.com&amp;lt;/nowiki&amp;gt;'''&amp;lt;/font&amp;gt;) настраиваемой машины: это стандартное решение. Вторая строка задает dn для учетной записи администратора сервера LDAP (он имеет полный контроль над содержимым каталога – это аналог root для Linux), а третья строка задает хэшированный пароль для этой учетной записи. Хэшированный пароль я сгенерировал с помощью '''slappasswd''':&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 # slappasswd&lt;br /&gt;
 New password:&lt;br /&gt;
 Re-enter new password:&lt;br /&gt;
 {SSHA}JM2o2+Z07QJ9CZxqD6CIL3aEe/zSzMmW&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
а затем вырезал и вставил результат в файл. После этого я запустил службу:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 # service ldap start&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Изображение:LXF104_74_1.png|thumb|300px|Рис. 2. Простая структура каталога LDAP для поддержки аутентификации.]]&lt;br /&gt;
&lt;br /&gt;
Далее нам надо заселить наш каталог записями, которые пригодятся для аутентификации. Чтобы сообразить, куда мы движемся, посмотрите на рисунок 2, там показана структура, которую нам надо создать.&lt;br /&gt;
&lt;br /&gt;
Сперва нужно построить и добавить в справочник узлы верхнего уровня. Я решил создать учетные записи пользователей в узле &amp;lt;font color=&amp;quot;darkred&amp;quot;&amp;gt;ou=users,dc=example,dc=com&amp;lt;/font&amp;gt;. Слово ‘&amp;lt;font color=&amp;quot;darkred&amp;quot;&amp;gt;users&amp;lt;/font&amp;gt;’ не является ключевым, просто я взял такое имя. Я начал с создания файла LDIF, названного '''root.ldif''':&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 # Build the root node&lt;br /&gt;
 dn: dc=example,dc=com&lt;br /&gt;
 dc: example&lt;br /&gt;
 objectClass: dcObject&lt;br /&gt;
 objectClass: organizationalUnit&lt;br /&gt;
 ou: example dot com&lt;br /&gt;
 # Build the users ou&lt;br /&gt;
 dn: ou=users,dc=example,dc=com&lt;br /&gt;
 ou: users&lt;br /&gt;
 objectClass:&lt;br /&gt;
 organizationalUnit&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Затем я добавил этот узел в каталог с помощью команды:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 # ldapadd -D “cn=admin,dc=example,dc=com” -x -W -f root.ldif&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Теперь добавим учетную запись пользователя. Выполняется это сходным образом: создается файл LDIF, а затем используется ''ldapadd'' для его добавления. Вот файл ('''newuser.ldif'''), который я создал:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 dn: cn=cbrown,ou=users,dc=&lt;br /&gt;
 example,dc=com&lt;br /&gt;
 objectclass: posixAccount&lt;br /&gt;
 objectclass: Account&lt;br /&gt;
 cn: cbrown&lt;br /&gt;
 uid: cbrown&lt;br /&gt;
 uidNumber: 555&lt;br /&gt;
 gidNumber: 555&lt;br /&gt;
 homeDirectory: /home/cbrown&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Затем я добавил этот узел в каталог:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  # ldapadd -D “cn=admin,dc=example,dc=com” -x -W -f newuser.ldif&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Так как записи LDAP нам понадобятся для аутентификации входа на сервер ''Dovecot'', я должен задать еще и пароль для пользователя, как показано здесь:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  # ldappasswd -x -D “cn=admin,dc=example,dc=com” -W -S “cn=cbrown,ou=users,dc=example,dc=com”&lt;br /&gt;
  New password:&lt;br /&gt;
  Re-enter new password:&lt;br /&gt;
  Enter LDAP Password:&lt;br /&gt;
  Result: Success (0)&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Теперь не мешает проверить, что пользователь был добавлен в каталог; давайте выполним поиск записи. Для этого можно употребить ''ldapsearch'':&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 # ldapsearch -x -b “ou=users,dc=example,dc=com” ‘(cn=cbrown)’&lt;br /&gt;
 # cbrown, users, example.com&lt;br /&gt;
 dn: cn=cbrown,ou=users,dc=example,dc=com&lt;br /&gt;
 objectClass: posixAccount&lt;br /&gt;
 objectClass: account&lt;br /&gt;
 cn: cbrown&lt;br /&gt;
 uid: cbrown&lt;br /&gt;
 uidNumber: 555&lt;br /&gt;
 gidNumber: 555&lt;br /&gt;
 homeDirectory: /home/cbrown&lt;br /&gt;
 userPassword:: e1NTSEF9cCt2Sml1enpCSTdOZjJUSU1ZcEp0c&lt;br /&gt;
 U5LTnQzVHhjZzg=&lt;br /&gt;
 # search result&lt;br /&gt;
 search: 2&lt;br /&gt;
 result: 0 Success&lt;br /&gt;
 # numResponses: 2&lt;br /&gt;
 # numEntries: 1&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Это упражнение следует проделать для других пользователей, но если у вас их много, есть смысл автоматизировать процесс с помощью скрипта.&lt;br /&gt;
&lt;br /&gt;
Справочники создаются именно для поиска в них, поэтому стоит разобрать поиск LDAP более подробно. Команда ldapsearch немного похожа на SQL-запрос к реляционной базе данных. Попробуем обойтись без формального описания синтаксиса. Я придумал хороший пример: разбил команду на несколько строк и для удобства ссылок пронумеровал их. Первые шесть строк из представленных ниже – на самом деле одна команда (обратные слэши у них на конце указывают, что команда продолжается на следующей строке). Для запуска этой команды в терминале просто удалите номера и, естественно, слэши, набрав весь код в одну строку.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;ini&amp;quot; line=&amp;quot;GESHI_NORMAL_LINE_NUMBERS&amp;quot;&amp;gt;&lt;br /&gt;
# ldapsearch -h mail.example.com \&lt;br /&gt;
-x -LLL -b “dc=example,dc=com” \&lt;br /&gt;
-D cn=admin,dc=example,dc=com -W&lt;br /&gt;
-s sub \&lt;br /&gt;
‘(|(uid=*brown)(gidNumber&amp;lt;=100))’ \&lt;br /&gt;
uid&lt;br /&gt;
Enter LDAP Password:&lt;br /&gt;
dn: cn=cbrown,ou=users,dc=example,dc=com&lt;br /&gt;
uid: cbrown&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Теперь давайте вникать:&lt;br /&gt;
# Флаг &amp;lt;font color=&amp;quot;darkred&amp;quot;&amp;gt;-h&amp;lt;/font&amp;gt; используется для указания хоста, где запущен сервер LDAP. По умолчанию считается, что это localhost.&lt;br /&gt;
# Аргумент &amp;lt;font color=&amp;quot;darkred&amp;quot;&amp;gt;-x&amp;lt;/font&amp;gt; велит команде использовать простой метод аутентификации (не SASL), &amp;lt;font color=&amp;quot;darkred&amp;quot;&amp;gt;-LLL&amp;lt;/font&amp;gt; снижает число комментариев и прочих лишних слов в выводе, а флаг &amp;lt;font color=&amp;quot;darkred&amp;quot;&amp;gt;-b&amp;lt;/font&amp;gt; определяет, где мы хотим начать поиск в дереве справочника. В нашем случае мы начинаем с вершины дерева.&lt;br /&gt;
# Флаг &amp;lt;font color=&amp;quot;darkred&amp;quot;&amp;gt;-D&amp;lt;/font&amp;gt; задает dn пользователя, под которым мы хотим зайти (это пользователь, определенный параметром &amp;lt;font color=&amp;quot;darkred&amp;quot;&amp;gt;rootdn&amp;lt;/font&amp;gt; в '''slapd.conf'''), а &amp;lt;font color=&amp;quot;darkred&amp;quot;&amp;gt;-W&amp;lt;/font&amp;gt; велит команде запрашивать пароль.&lt;br /&gt;
# Здесь говорится, что поиск должен захватывать все ветви указанной базы, так что в данном случае мы запускаем поиск по всему справочнику.&lt;br /&gt;
# Пример фильтра поиска. Он говорит «покажите мне записи, где имя пользователя заканчивается на ‘brown’ или ID группы меньше или равно 100». Фильтры поиска – самая трудная часть синтаксиса для правильного написания, но (в определенном смысле) и самая важная.&lt;br /&gt;
# Эта строка содержит список имен атрибутов, которые мы хотим отобразить (в нашем случае просто имя пользователя). Если список пуст, ''ldapsearch'' покажет все атрибуты.&lt;br /&gt;
# Далее мы запрашиваем пароль для входа LDAP.&lt;br /&gt;
&lt;br /&gt;
Наконец, строки 8 и 9 показывают вывод поиска.&lt;br /&gt;
&lt;br /&gt;
Осилим еще один пример?&lt;br /&gt;
&amp;lt;source lang=&amp;quot;ini&amp;quot; line=&amp;quot;GESHI_NORMAL_LINE_NUMBERS&amp;quot;&amp;gt;&lt;br /&gt;
# ldapsearch -x \&lt;br /&gt;
-b “ou=users,dc=example,dc=com” \&lt;br /&gt;
-D cn=admin,dc=example,dc=com -W \&lt;br /&gt;
-s base ‘(objectClass=*)’&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Рассмотрим строки 2 и 4. В строке 2 задан конкретный узел дерева справочника, откуда начнется поиск, а в строке 4 мы говорим LDAP не распространять поиск за пределы этого узла, а изучать только записи, заданные в строке 2. Фильтр поиска здесь фактически и не фильтр: он гласит «любая запись с атрибутом '''objectClass''', независимо от значения», а это вообще все записи. Итак, этот поиск выводит на дисплей содержимое определенного узла дерева.&lt;br /&gt;
&lt;br /&gt;
[[Изображение:LXF104_75_1.png|Thumb|Рис. 3. Просмотр справочника LDAP с помощью LAT. Снимок экрана показывает запись, добавленную нами для пользователя cbrown.]]&lt;br /&gt;
[[Изображение:LXF104_75_2.png|Thumb|Рис. 4. Выполнение поиска в LDAP при помощи LAT.]]&lt;br /&gt;
&lt;br /&gt;
Если вы предпочли бы использовать графические инструменты для поиска в вашем справочнике LDAP или добавления учетной записи пользователя, обратите внимание на Lat (''LDAP Administration Tool''). Это одно из новоиспеченных приложений, написанное на C# с использованием Mono и ''GTK#'', поэтому вам понадобятся установленные библиотеки Mono для его использования, но на моем клиенте с Ubuntu он установился и работал без каких-либо проблем. Рисунок 3 показывает этот инструмент в работе при обозревании иерархии LDAP, а на рисунке 4 показан пример поиска по UID 555.&lt;br /&gt;
&lt;br /&gt;
===Аутентификация Dovecot===&lt;br /&gt;
&lt;br /&gt;
Давайте закруглимся, применив каталог LDAP к полезному делу. Читатели предыдущего номера могут помнить, что мы оставили нашего героя (почтовый сервер ''Dovecot'') нуждающимся в аутентификации учетных записей POP3 базы данных пользователей, независимых от учетных записей пользователей в Linux.&lt;br /&gt;
&lt;br /&gt;
Оказывается, ''Dovecot'' может использовать LDAP для аутентификации двумя способами: он может войти в LDAP с именем пользователя ‘rootdn’ и паролем ‘rootpw’, затем посмотреть имя пользователя и хэшированный пароль пользователя, который пытается аутентифицироваться, а может просто попробовать подключиться к серверу LDAP с именем и паролем того пользователя, кто пытается войти, и посмотреть, успешна ли попытка. Вход в LDAP известен как ‘связывание’, и эта техника называется аутентификационной связью. Этот метод мы и будем использовать.&lt;br /&gt;
&lt;br /&gt;
Настройка ''Dovecot'' на использование LDAP для аутентификационной связи требует изменений в файле '''/etc/Dovecot.conf'''. Вот строки, которые я менял:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 auth_verbose = yes&lt;br /&gt;
 auth_debug = yes&lt;br /&gt;
 passdb ldap {&lt;br /&gt;
 args = /etc/dovecot-ldap.conf&lt;br /&gt;
 }&lt;br /&gt;
 userdb ldap {&lt;br /&gt;
 args = /etc/dovecot-ldap.conf&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Первые две строки включают вывод отладочных сообщений. На рабочем сервере они вам не понадобятся, но мне файл журнала ('''/var/log/maillog''') очень помог при отладке конфигурации ''Dovecot''. Две остальные строфы файла указывают, что мы будем использовать LDAP и как базу данных паролей, и как базу данных пользователей, и задают место размещения файла конфигурации LDAP для ''Dovecot''.&lt;br /&gt;
&lt;br /&gt;
Дико извиняюсь, но есть еще один файл конфигурации! Для его создания я начал с копирования примера конфигурации LDAP из дистрибутива ''Dovecot'' на место:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  # cp /usr/share/doc/dovecot-1.0/examples/dovecot-ldap.conf /etc&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Затем я сделал следующие изменения в '''/etc/Dovecot-ldap.conf''' (номера строк опять-таки нужны только для ссылок на них в тексте):&lt;br /&gt;
&amp;lt;source lang=&amp;quot;ini&amp;quot; line=&amp;quot;GESHI_NORMAL_LINE_NUMBERS&amp;quot;&amp;gt;&lt;br /&gt;
hosts = localhost&lt;br /&gt;
dn = cn=admin,dc=example,dc=com&lt;br /&gt;
dnpass = adminpw&lt;br /&gt;
auth_bind = yes&lt;br /&gt;
auth_bind_userdn = cn=%u,ou=users,dc=example,dc=com&lt;br /&gt;
base = ou=users,dc=example,dc=com&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Строка 1 задает имя сервера, на котором запущен LDAP. Строка 2 определяет dn учетной записи, которое ''Dovecot'' будет использовать для входа в LDAP, а строка 3 задает пароль для этой учетной записи. (Вообще-то было бы лучше не использовать для этого учетную запись с полными правами rootdn, а создать особую учетную запись для ''Dovecot''). Строка 4 говорит, что будет использоваться аутентификационная связь, а строка 5 задает dn пользователя, которого мы пробуем аутентифицировать как такового (над этим мне пришлось поломать голову!). В файле конфигурации ''Dovecot'', &amp;lt;font color=&amp;quot;darkred&amp;quot;&amp;gt;%u&amp;lt;/font&amp;gt; ссылается на имя пользователя, которое использует MUA (почтовый агент) пользователя, чтобы войти. Строка 6 определяет узел в дереве справочника LDAP, под которым находятся учетные записи пользователей.&lt;br /&gt;
&lt;br /&gt;
Угнездив на месте эти строки, я смог подсоединиться к службе POP3 ''Dovecot'' с учетной записью cbrown и забрать почту.&lt;br /&gt;
&lt;br /&gt;
Если у вас что-то не заработало, загляните в файл журнала, обычно '''/var/log/maillog'''. Сообщения, оставляемые ''Dovecot'', очень подробны и говорят сами за себя. '''LXF'''&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
===Что еще почитать? (врезка)===&lt;br /&gt;
&lt;br /&gt;
# По LDAP существует множество книг. Самыми полезными мне показались две: ''LDAP System Administration by Gerald Carter'' (O’Reilly, 1-56592-491-6), и ''Understanding and Deploying LDAP Directory Services by Howes, Smith and Good'' (Addison Wesley, 0672323168). Последняя более академическая (и тяжелая!)&lt;br /&gt;
# Официальная документация ''Dovecot'' доступна по адресу http://wiki.dovecot.org. В частности, статья http://wiki.dovecot.org/AuthDatabase/LDAP показывает, как сделать аутентификацию LDAP в ''Dovecot''. Кроме того, '''slapd.conf''', '''ldap.conf''' и все инструменты командной строки имеют прекрасные man-страницы.&lt;br /&gt;
# Основную информацию по сборке почтового сервера можно найти по адресам http://freshrpms.net/docs/mail-server и http://wanderingbarque.com/howtos/mailserver/mailserver.html. (Это очень подробное пошаговое руководство, написанное Питером Лэйси [Peter Lacey]; оно охватывает интеграцию ''Postfix'', ''Dovecot'', OpenLDAP, Jamm, ''Cyrus-SASL'' и ''SquirrelMail'', и основано на RHEL 3).&lt;br /&gt;
&lt;br /&gt;
[[Категория:Учебники]]&lt;br /&gt;
[[Категория:Hardcore Linux]]&lt;br /&gt;
[[Категория:Крис Браун]]&lt;/div&gt;</summary>
		<author><name>Kipruss</name></author>	</entry>

	<entry>
		<id>http://wiki.linuxformat.ru/wiki/LXF104:Hardcore_Linux</id>
		<title>LXF104:Hardcore Linux</title>
		<link rel="alternate" type="text/html" href="http://wiki.linuxformat.ru/wiki/LXF104:Hardcore_Linux"/>
				<updated>2009-03-30T21:28:40Z</updated>
		
		<summary type="html">&lt;p&gt;Kipruss: викификация&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==LDAP: Защитим вход в Dovecot==&lt;br /&gt;
&lt;br /&gt;
Позволять кому попало использовать наш почтовый сервер без аутентификации пользователя – сущее безумие. '''Д-р Крис Браун''' наведет порядок с помощью LDAP…&lt;br /&gt;
&lt;br /&gt;
Сегодняшнее утреннее чтение начнем с Книги Тукса, главы пятой, с самого первого стиха.&lt;br /&gt;
&lt;br /&gt;
# В начале был файл с паролями, и файл с паролями был Unix. Через него все пользователи могли получить доступ; и без него никто из входящих не мог пройти. И сисадмины сказали, что это хорошо.&lt;br /&gt;
# Но вот настала Великая Сеть, и возроптали сисадмины, говоря: «Файл с паролями свое отслужил, требует он дублирования данных и затрудняет масштабирование на большую сеть». Тогда Sun сказал: «Не бойтесь, ибо мы принесли вам Желтые Страницы, которые централизуют данные пользователей».&lt;br /&gt;
# Но затем явились четыре мудреца из Beetea и сказали: «Не смеете вы взять имя Желтые Страницы, оно наша собственность и наша торговая марка». И ответил им Sun: «Пускай то, что раньше звалось Желтыми Страницами, отныне зовется NIS». И сисадмины сказали, что это хорошо.&lt;br /&gt;
# Но прошло время, и снова разочаровались сисадмины, и возроптали они во второй раз: «Истинно, NIS имеет плоское пространство имен и не имеет контроля доступа».&lt;br /&gt;
# И снова сказал Sun: «Не бойтесь, ибо мы принесли вам NIS+, иерархическое пространство имен в нем и контроль доступа в избытке». Но сисадмины возроптали в третий раз, по своему неразумию.&lt;br /&gt;
# И создан был консорциум, и родил он спецификацию X500. И X500 родил DAP, DAP родил DIXIE, а DIXIE родил LDAP. И увидели сисадмины, что это хорошо. И это конец нашего утреннего чтения.&lt;br /&gt;
&lt;br /&gt;
Истинно говорю вам, в этот день, на этом уроке мы создадим службу каталогов LDAP и используем ее для аутентификации в агенте доступа к почте POP/IMAP ''Dovecot''.&lt;br /&gt;
&lt;br /&gt;
===Азбука LDAP===&lt;br /&gt;
&lt;br /&gt;
LDAP (облегченный протокол доступа к каталогам) – это служба каталогов, которую в принципе можно использовать для хранения любых данных, хотя на практике она чаще используется для хранения информации о пользователях, в частности, аутентификационных данных. Благодаря наличию открытой реализации (OpenLDAP) LDAP стал популярен в мире Linux как замена служб типа NIS или NIS+; в мире Windows она тоже хорошо известна – как основа ''Microsoft Active Directory''.&lt;br /&gt;
&lt;br /&gt;
Служба каталогов немного похожа на базу данных: обе могут хранить большие объемы информации и эффективно выполнять в ней поиск. Однако, служба каталогов оптимизирована для чтения (поиска); отношение времени записи к времени чтения обычно велико, и это не годится для ситуаций, когда требуется частое обновление данных. Для справочника естественно, что чтение выполняется в 10000 раз чаще, чем запись. Реляционные базы данных более симметричны по скорости чтения и записи. Кроме того, каталоги обычно не поддерживают транзакции, откаты и реляционные операции, типа &amp;lt;font color=&amp;quot;darkred&amp;quot;&amp;gt;join&amp;lt;/font&amp;gt;, которые имеют важное значение для реляционных баз данных.&lt;br /&gt;
&lt;br /&gt;
Если вы представите себе печатный телефонный справочник, асимметрия между чтением и записью станет очевидной. Номера телефонов ищутся в телефонном справочнике тысячи раз на дню. Обновление справочника приводит к печати, например, 100000 новых экземпляров и распространению их между абонентами. Обычно телефонные компании делают это раз в год.&lt;br /&gt;
&lt;br /&gt;
Вы можете использовать LDAP в разных целях: например, для аутентификации постоянных пользователей Linux; или для реализации отображений ''Postfix'', таких как виртуальный почтовый ящик, рассмотренный на уроке прошлого месяца. На данном уроке мы используем LDAP для простой аутентификации пользователей в ''Dovecot''.&lt;br /&gt;
&lt;br /&gt;
Отдать должное мощи и гибкости LDAP в ограниченном пространстве статьи – примерно то же, что пытаться открыть мир классической музыки инопланетянину, промычав ему первые четыре ноты Пятой симфонии Бетховена; но мы постараемся.&lt;br /&gt;
&lt;br /&gt;
===Что в имени тебе моем?===&lt;br /&gt;
&lt;br /&gt;
Каталоги LDAP состоят из набора записей, упорядоченных в виде древовидной структуры. Каждая позиция в дереве идентифицируется так называемым «различимым именем» (distinguished name, dn). Например, dn может быть вида &amp;lt;font color=&amp;quot;darkred&amp;quot;&amp;gt;cn=cbrown,ou=users,dc=example,dc=com&amp;lt;/font&amp;gt;. Сравним его с другими видами синтаксиса: как имя файла в Linux, оно бы записалось в виде '''/com/example/users/cbrown''', а «полное доменное имя» в DNS выглядело бы '''cbrown.users.example.com'''.&lt;br /&gt;
&lt;br /&gt;
Каждая запись в справочнике содержит информацию в виде набора пар «атрибут:значение». Какие именно атрибуты присутствуют, определяется так называемым классом объекта записи. Например, наша запись &amp;lt;font color=&amp;quot;darkred&amp;quot;&amp;gt;cn=cbrown,ou=users,dc=example,dc=com&amp;lt;/font&amp;gt; является объектом класса &amp;lt;font color=&amp;quot;darkred&amp;quot;&amp;gt;posixAccount&amp;lt;/font&amp;gt;. Описание, какой атрибут ассоциируется с каким классом, называется схемой, и она задается в файлах схем. Например, здесь описание класса &amp;lt;font color=&amp;quot;darkred&amp;quot;&amp;gt;posixAccount&amp;lt;/font&amp;gt; берется из файла '''/etc/openldap/schema/nis.schema''':&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 objectclass ( 1.3.6.1.1.1.2.0 NAME ‘posixAccount’&lt;br /&gt;
 DESC ‘Abstraction of an account with POSIX attributes’&lt;br /&gt;
 SUP top AUXILIARY&lt;br /&gt;
 MUST ( cn $ uid $ uidNumber $ gidNumber $ homeDirectory )&lt;br /&gt;
 MAY ( userPassword $ loginShell $ gecos $ description ) )&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Здесь важно отметить имя класса, список требуемых атрибутов (условие &amp;lt;font color=&amp;quot;darkred&amp;quot;&amp;gt;MUST&amp;lt;/font&amp;gt;) и список необязательных атрибутов (условие &amp;lt;font color=&amp;quot;darkred&amp;quot;&amp;gt;MAY&amp;lt;/font&amp;gt;). Если вы знакомы с файлом паролей Linux, вы заметите сходство атрибутов в объекте &amp;lt;font color=&amp;quot;darkred&amp;quot;&amp;gt;posixAccount&amp;lt;/font&amp;gt; и полях в '''/etc/passwd'''. (Учтите, однако, что атрибут LDAP &amp;lt;font color=&amp;quot;darkred&amp;quot;&amp;gt;uid&amp;lt;/font&amp;gt; – это то, что мы назвали бы именем учетной записи, а атрибут &amp;lt;font color=&amp;quot;darkred&amp;quot;&amp;gt;uidNumber&amp;lt;/font&amp;gt; – как раз то, что мы называем UID!) В терминах объектно-ориентированного программирования вы можете представить запись в файле схемы как описание класса, а запись в каталоге – как экземпляр класса. Также возможно наследование класса от «вышестоящего» класса (в объектно-ориентированном программировании он называется родительским или базовым). Строка &amp;lt;font color=&amp;quot;darkred&amp;quot;&amp;gt;SUP&amp;lt;/font&amp;gt; top &amp;lt;font color=&amp;quot;darkred&amp;quot;&amp;gt;AUXILIARY&amp;lt;/font&amp;gt; в предыдущем примере говорит нам, что вышестоящий класс, находящийся на вершине иерархии классов – это сам &amp;lt;font color=&amp;quot;darkred&amp;quot;&amp;gt;posixAccount&amp;lt;/font&amp;gt;, который не наследуется ни от чего. Но зайти дальше в аналогиях с ООП не получится: записи LDAP содержат только данные. Никакого запускаемого кода (который ОО-программисты назвали бы методом) с объектом не ассоциируется.&lt;br /&gt;
&lt;br /&gt;
{{Врезка&lt;br /&gt;
    |Заголовок=LDAP как он есть&lt;br /&gt;
    |Содержание=На стороне сервера услуги предоставляет демон ''slapd''. В качестве своей базы данных он использует ''BDB'' (встраиваемая библиотека базы данных, первоначально разработанная UC Berkeley), а прелестно названный ''slurpd'' распространяет изменения на все копии справочника LDAP. На стороне клиента OpenLDAP предоставляет различные инструменты командной строки для манипулирования записями каталога, включающие ''ldapadd'', добавляющий информацию в каталог, и ''ldapsearch'', используемый для (угадали!) поиска по каталогу.&lt;br /&gt;
    |Ширина=200px}}&lt;br /&gt;
&lt;br /&gt;
Для просмотра человеком записи каталога LDAP отображаются в текстовом формате, называемом LDIF (формат обмена данными LDAP). Это формально заданный синтаксис, в соответствии с которым записи каталога представляются «вне» LDAP. Например, LDIF используется для предварительного создания записи при вводе ее в каталог, переноса данных из одного справочника в другой или просмотра содержимого справочника. В развитие нашего примера, LDIF-представление пользователя &amp;lt;font color=&amp;quot;darkred&amp;quot;&amp;gt;cn=cbrown,ou=users,dc=example,dc=com&amp;lt;/font&amp;gt; будет выглядеть так:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 dn: cn=cbrown,ou=users,dc=example,dc=com&lt;br /&gt;
 objectclass: posixAccount&lt;br /&gt;
 objectclass: Account&lt;br /&gt;
 cn: cbrown&lt;br /&gt;
 uid: cbrown&lt;br /&gt;
 uidNumber: 555&lt;br /&gt;
 gidNumber: 555&lt;br /&gt;
 homeDirectory: /home/cbrown&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
Мы сфокусировали здесь внимание на типе объекта '''posixAccount''', потому что он необходим нам для поддержки аутентификации.&lt;br /&gt;
&lt;br /&gt;
===Станция «Рабочая»===&lt;br /&gt;
&lt;br /&gt;
Хватит теории! Давайте же установим и сконфигурируем LDAP. Я использую сервер CentOS, как на прошлом уроке (CentOS – это эквивалент RHEL5), но все, что будет показано далее, легко применимо для других дистрибутивов RedHat или Fedora.&lt;br /&gt;
&lt;br /&gt;
Мы будем использовать LDAP, который создан в Мичиганском университете (см. &amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;'''&amp;lt;nowiki&amp;gt;www.openldap.org&amp;lt;/nowiki&amp;gt;'''&amp;lt;/font&amp;gt;). Установка его в CentOS проста:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 # yum install openldap-clients openldap-servers&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Изображение:LXF104_73_1.png|thumb|300px|Рис. 1. Компоненты OpenLDAP.]]&lt;br /&gt;
&lt;br /&gt;
Рисунок 1 показывает основные компоненты OpenLDAP. Остальные компоненты клиента – модуль PAM LDAP ('''/lib/security/pam_ldap.so''') и библиотека разрешения LDAP ('''/lib/libnss_ldap.so'''), поддерживающая хранение стандартных учетных записей Linux в LDAP; мы займемся ими в следующем месяце.&lt;br /&gt;
&lt;br /&gt;
Для запуска службы LDAP необходимо кое-что изменить в файле конфигурации slapd ('''/etc/openldap/slapd.conf'''). Вот строки, которые я поменял:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  suffix = “dc=example,dc=com”&lt;br /&gt;
  rootdn = “cn=admin,dc=example,dc=com”&lt;br /&gt;
  rootpw = {SSHA}JM2o2+Z07QJ9CZxqD6CIL3aEe/zSzMmW&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Первая задает «именованный контекст» нашей службы LDAP, то есть dn ее верхней записи. Здесь можно использовать все что угодно, но я основывался на доменном имени DNS (&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;'''&amp;lt;nowiki&amp;gt;example.com&amp;lt;/nowiki&amp;gt;'''&amp;lt;/font&amp;gt;) настраиваемой машины: это стандартное решение. Вторая строка задает dn для учетной записи администратора сервера LDAP (он имеет полный контроль над содержимым каталога – это аналог root для Linux), а третья строка задает хэшированный пароль для этой учетной записи. Хэшированный пароль я сгенерировал с помощью '''slappasswd''':&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 # slappasswd&lt;br /&gt;
 New password:&lt;br /&gt;
 Re-enter new password:&lt;br /&gt;
 {SSHA}JM2o2+Z07QJ9CZxqD6CIL3aEe/zSzMmW&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
а затем вырезал и вставил результат в файл. После этого я запустил службу:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 # service ldap start&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Изображение:LXF104_74_1.png|thumb|300px|Рис. 2. Простая структура каталога LDAP для поддержки аутентификации.]]&lt;br /&gt;
&lt;br /&gt;
Далее нам надо заселить наш каталог записями, которые пригодятся для аутентификации. Чтобы сообразить, куда мы движемся, посмотрите на рисунок 2, там показана структура, которую нам надо создать.&lt;br /&gt;
&lt;br /&gt;
Сперва нужно построить и добавить в справочник узлы верхнего уровня. Я решил создать учетные записи пользователей в узле &amp;lt;font color=&amp;quot;darkred&amp;quot;&amp;gt;ou=users,dc=example,dc=com&amp;lt;/font&amp;gt;. Слово ‘&amp;lt;font color=&amp;quot;darkred&amp;quot;&amp;gt;users&amp;lt;/font&amp;gt;’ не является ключевым, просто я взял такое имя. Я начал с создания файла LDIF, названного '''root.ldif''':&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 # Build the root node&lt;br /&gt;
 dn: dc=example,dc=com&lt;br /&gt;
 dc: example&lt;br /&gt;
 objectClass: dcObject&lt;br /&gt;
 objectClass: organizationalUnit&lt;br /&gt;
 ou: example dot com&lt;br /&gt;
 # Build the users ou&lt;br /&gt;
 dn: ou=users,dc=example,dc=com&lt;br /&gt;
 ou: users&lt;br /&gt;
 objectClass:&lt;br /&gt;
 organizationalUnit&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Затем я добавил этот узел в каталог с помощью команды:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 # ldapadd -D “cn=admin,dc=example,dc=com” -x -W -f root.ldif&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Теперь добавим учетную запись пользователя. Выполняется это сходным образом: создается файл LDIF, а затем используется ''ldapadd'' для его добавления. Вот файл ('''newuser.ldif'''), который я создал:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 dn: cn=cbrown,ou=users,dc=&lt;br /&gt;
 example,dc=com&lt;br /&gt;
 objectclass: posixAccount&lt;br /&gt;
 objectclass: Account&lt;br /&gt;
 cn: cbrown&lt;br /&gt;
 uid: cbrown&lt;br /&gt;
 uidNumber: 555&lt;br /&gt;
 gidNumber: 555&lt;br /&gt;
 homeDirectory: /home/cbrown&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Затем я добавил этот узел в каталог:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  # ldapadd -D “cn=admin,dc=example,dc=com” -x -W -f newuser.ldif&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Так как записи LDAP нам понадобятся для аутентификации входа на сервер ''Dovecot'', я должен задать еще и пароль для пользователя, как показано здесь:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  # ldappasswd -x -D “cn=admin,dc=example,dc=com” -W -S “cn=cbrown,ou=users,dc=example,dc=com”&lt;br /&gt;
  New password:&lt;br /&gt;
  Re-enter new password:&lt;br /&gt;
  Enter LDAP Password:&lt;br /&gt;
  Result: Success (0)&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Теперь не мешает проверить, что пользователь был добавлен в каталог; давайте выполним поиск записи. Для этого можно употребить ''ldapsearch'':&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 # ldapsearch -x -b “ou=users,dc=example,dc=com” ‘(cn=cbrown)’&lt;br /&gt;
 # cbrown, users, example.com&lt;br /&gt;
 dn: cn=cbrown,ou=users,dc=example,dc=com&lt;br /&gt;
 objectClass: posixAccount&lt;br /&gt;
 objectClass: account&lt;br /&gt;
 cn: cbrown&lt;br /&gt;
 uid: cbrown&lt;br /&gt;
 uidNumber: 555&lt;br /&gt;
 gidNumber: 555&lt;br /&gt;
 homeDirectory: /home/cbrown&lt;br /&gt;
 userPassword:: e1NTSEF9cCt2Sml1enpCSTdOZjJUSU1ZcEp0c&lt;br /&gt;
 U5LTnQzVHhjZzg=&lt;br /&gt;
 # search result&lt;br /&gt;
 search: 2&lt;br /&gt;
 result: 0 Success&lt;br /&gt;
 # numResponses: 2&lt;br /&gt;
 # numEntries: 1&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Это упражнение следует проделать для других пользователей, но если у вас их много, есть смысл автоматизировать процесс с помощью скрипта.&lt;br /&gt;
&lt;br /&gt;
Справочники создаются именно для поиска в них, поэтому стоит разобрать поиск LDAP более подробно. Команда ldapsearch немного похожа на SQL-запрос к реляционной базе данных. Попробуем обойтись без формального описания синтаксиса. Я придумал хороший пример: разбил команду на несколько строк и для удобства ссылок пронумеровал их. Первые шесть строк из представленных ниже – на самом деле одна команда (обратные слэши у них на конце указывают, что команда продолжается на следующей строке). Для запуска этой команды в терминале просто удалите номера и, естественно, слэши, набрав весь код в одну строку.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;ini&amp;quot; line=&amp;quot;GESHI_NORMAL_LINE_NUMBERS&amp;quot;&amp;gt;&lt;br /&gt;
# ldapsearch -h mail.example.com \&lt;br /&gt;
-x -LLL -b “dc=example,dc=com” \&lt;br /&gt;
-D cn=admin,dc=example,dc=com -W&lt;br /&gt;
-s sub \&lt;br /&gt;
‘(|(uid=*brown)(gidNumber&amp;lt;=100))’ \&lt;br /&gt;
uid&lt;br /&gt;
Enter LDAP Password:&lt;br /&gt;
dn: cn=cbrown,ou=users,dc=example,dc=com&lt;br /&gt;
uid: cbrown&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Теперь давайте вникать:&lt;br /&gt;
# Флаг &amp;lt;font color=&amp;quot;darkred&amp;quot;&amp;gt;-h&amp;lt;/font&amp;gt; используется для указания хоста, где запущен сервер LDAP. По умолчанию считается, что это localhost.&lt;br /&gt;
# Аргумент &amp;lt;font color=&amp;quot;darkred&amp;quot;&amp;gt;-x&amp;lt;/font&amp;gt; велит команде использовать простой метод аутентификации (не SASL), &amp;lt;font color=&amp;quot;darkred&amp;quot;&amp;gt;-LLL&amp;lt;/font&amp;gt; снижает число комментариев и прочих лишних слов в выводе, а флаг &amp;lt;font color=&amp;quot;darkred&amp;quot;&amp;gt;-b&amp;lt;/font&amp;gt; определяет, где мы хотим начать поиск в дереве справочника. В нашем случае мы начинаем с вершины дерева.&lt;br /&gt;
# Флаг &amp;lt;font color=&amp;quot;darkred&amp;quot;&amp;gt;-D&amp;lt;/font&amp;gt; задает dn пользователя, под которым мы хотим зайти (это пользователь, определенный параметром &amp;lt;font color=&amp;quot;darkred&amp;quot;&amp;gt;rootdn&amp;lt;/font&amp;gt; в '''slapd.conf'''), а &amp;lt;font color=&amp;quot;darkred&amp;quot;&amp;gt;-W&amp;lt;/font&amp;gt; велит команде запрашивать пароль.&lt;br /&gt;
# Здесь говорится, что поиск должен захватывать все ветви указанной базы, так что в данном случае мы запускаем поиск по всему справочнику.&lt;br /&gt;
# Пример фильтра поиска. Он говорит «покажите мне записи, где имя пользователя заканчивается на ‘brown’ или ID группы меньше или равно 100». Фильтры поиска – самая трудная часть синтаксиса для правильного написания, но (в определенном смысле) и самая важная.&lt;br /&gt;
# Эта строка содержит список имен атрибутов, которые мы хотим отобразить (в нашем случае просто имя пользователя). Если список пуст, ''ldapsearch'' покажет все атрибуты.&lt;br /&gt;
# Далее мы запрашиваем пароль для входа LDAP.&lt;br /&gt;
&lt;br /&gt;
Наконец, строки 8 и 9 показывают вывод поиска.&lt;br /&gt;
&lt;br /&gt;
Осилим еще один пример?&lt;br /&gt;
&amp;lt;source lang=&amp;quot;ini&amp;quot; line=&amp;quot;GESHI_NORMAL_LINE_NUMBERS&amp;quot;&amp;gt;&lt;br /&gt;
# ldapsearch -x \&lt;br /&gt;
-b “ou=users,dc=example,dc=com” \&lt;br /&gt;
-D cn=admin,dc=example,dc=com -W \&lt;br /&gt;
-s base ‘(objectClass=*)’&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Рассмотрим строки 2 и 4. В строке 2 задан конкретный узел дерева справочника, откуда начнется поиск, а в строке 4 мы говорим LDAP не распространять поиск за пределы этого узла, а изучать только записи, заданные в строке 2. Фильтр поиска здесь фактически и не фильтр: он гласит «любая запись с атрибутом '''objectClass''', независимо от значения», а это вообще все записи. Итак, этот поиск выводит на дисплей содержимое определенного узла дерева.&lt;br /&gt;
&lt;br /&gt;
[[Изображение:LXF104_75_1.png|Рис. 3. Просмотр справочника LDAP с помощью LAT. Снимок экрана показывает запись, добавленную нами для пользователя cbrown.]]&lt;br /&gt;
[[Изображение:LXF104_75_2.png|Рис. 4. Выполнение поиска в LDAP при помощи LAT.]]&lt;br /&gt;
&lt;br /&gt;
Если вы предпочли бы использовать графические инструменты для поиска в вашем справочнике LDAP или добавления учетной записи пользователя, обратите внимание на Lat (''LDAP Administration Tool''). Это одно из новоиспеченных приложений, написанное на C# с использованием Mono и ''GTK#'', поэтому вам понадобятся установленные библиотеки Mono для его использования, но на моем клиенте с Ubuntu он установился и работал без каких-либо проблем. Рисунок 3 показывает этот инструмент в работе при обозревании иерархии LDAP, а на рисунке 4 показан пример поиска по UID 555.&lt;br /&gt;
&lt;br /&gt;
===Аутентификация Dovecot===&lt;br /&gt;
&lt;br /&gt;
Давайте закруглимся, применив каталог LDAP к полезному делу. Читатели предыдущего номера могут помнить, что мы оставили нашего героя (почтовый сервер ''Dovecot'') нуждающимся в аутентификации учетных записей POP3 базы данных пользователей, независимых от учетных записей пользователей в Linux.&lt;br /&gt;
&lt;br /&gt;
Оказывается, ''Dovecot'' может использовать LDAP для аутентификации двумя способами: он может войти в LDAP с именем пользователя ‘rootdn’ и паролем ‘rootpw’, затем посмотреть имя пользователя и хэшированный пароль пользователя, который пытается аутентифицироваться, а может просто попробовать подключиться к серверу LDAP с именем и паролем того пользователя, кто пытается войти, и посмотреть, успешна ли попытка. Вход в LDAP известен как ‘связывание’, и эта техника называется аутентификационной связью. Этот метод мы и будем использовать.&lt;br /&gt;
&lt;br /&gt;
Настройка ''Dovecot'' на использование LDAP для аутентификационной связи требует изменений в файле '''/etc/Dovecot.conf'''. Вот строки, которые я менял:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 auth_verbose = yes&lt;br /&gt;
 auth_debug = yes&lt;br /&gt;
 passdb ldap {&lt;br /&gt;
 args = /etc/dovecot-ldap.conf&lt;br /&gt;
 }&lt;br /&gt;
 userdb ldap {&lt;br /&gt;
 args = /etc/dovecot-ldap.conf&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Первые две строки включают вывод отладочных сообщений. На рабочем сервере они вам не понадобятся, но мне файл журнала ('''/var/log/maillog''') очень помог при отладке конфигурации ''Dovecot''. Две остальные строфы файла указывают, что мы будем использовать LDAP и как базу данных паролей, и как базу данных пользователей, и задают место размещения файла конфигурации LDAP для ''Dovecot''.&lt;br /&gt;
&lt;br /&gt;
Дико извиняюсь, но есть еще один файл конфигурации! Для его создания я начал с копирования примера конфигурации LDAP из дистрибутива ''Dovecot'' на место:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  # cp /usr/share/doc/dovecot-1.0/examples/dovecot-ldap.conf /etc&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Затем я сделал следующие изменения в '''/etc/Dovecot-ldap.conf''' (номера строк опять-таки нужны только для ссылок на них в тексте):&lt;br /&gt;
&amp;lt;source lang=&amp;quot;ini&amp;quot; line=&amp;quot;GESHI_NORMAL_LINE_NUMBERS&amp;quot;&amp;gt;&lt;br /&gt;
hosts = localhost&lt;br /&gt;
dn = cn=admin,dc=example,dc=com&lt;br /&gt;
dnpass = adminpw&lt;br /&gt;
auth_bind = yes&lt;br /&gt;
auth_bind_userdn = cn=%u,ou=users,dc=example,dc=com&lt;br /&gt;
base = ou=users,dc=example,dc=com&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Строка 1 задает имя сервера, на котором запущен LDAP. Строка 2 определяет dn учетной записи, которое ''Dovecot'' будет использовать для входа в LDAP, а строка 3 задает пароль для этой учетной записи. (Вообще-то было бы лучше не использовать для этого учетную запись с полными правами rootdn, а создать особую учетную запись для ''Dovecot''). Строка 4 говорит, что будет использоваться аутентификационная связь, а строка 5 задает dn пользователя, которого мы пробуем аутентифицировать как такового (над этим мне пришлось поломать голову!). В файле конфигурации ''Dovecot'', &amp;lt;font color=&amp;quot;darkred&amp;quot;&amp;gt;%u&amp;lt;/font&amp;gt; ссылается на имя пользователя, которое использует MUA (почтовый агент) пользователя, чтобы войти. Строка 6 определяет узел в дереве справочника LDAP, под которым находятся учетные записи пользователей.&lt;br /&gt;
&lt;br /&gt;
Угнездив на месте эти строки, я смог подсоединиться к службе POP3 ''Dovecot'' с учетной записью cbrown и забрать почту.&lt;br /&gt;
&lt;br /&gt;
Если у вас что-то не заработало, загляните в файл журнала, обычно '''/var/log/maillog'''. Сообщения, оставляемые ''Dovecot'', очень подробны и говорят сами за себя. '''LXF'''&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
===Что еще почитать? (врезка)===&lt;br /&gt;
&lt;br /&gt;
# По LDAP существует множество книг. Самыми полезными мне показались две: ''LDAP System Administration by Gerald Carter'' (O’Reilly, 1-56592-491-6), и ''Understanding and Deploying LDAP Directory Services by Howes, Smith and Good'' (Addison Wesley, 0672323168). Последняя более академическая (и тяжелая!)&lt;br /&gt;
# Официальная документация ''Dovecot'' доступна по адресу http://wiki.dovecot.org. В частности, статья http://wiki.dovecot.org/AuthDatabase/LDAP показывает, как сделать аутентификацию LDAP в ''Dovecot''. Кроме того, '''slapd.conf''', '''ldap.conf''' и все инструменты командной строки имеют прекрасные man-страницы.&lt;br /&gt;
# Основную информацию по сборке почтового сервера можно найти по адресам http://freshrpms.net/docs/mail-server и http://wanderingbarque.com/howtos/mailserver/mailserver.html. (Это очень подробное пошаговое руководство, написанное Питером Лэйси [Peter Lacey]; оно охватывает интеграцию ''Postfix'', ''Dovecot'', OpenLDAP, Jamm, ''Cyrus-SASL'' и ''SquirrelMail'', и основано на RHEL 3).&lt;br /&gt;
&lt;br /&gt;
[[Категория:Учебники]]&lt;br /&gt;
[[Категория:Hardcore Linux]]&lt;br /&gt;
[[Категория:Крис Браун]]&lt;/div&gt;</summary>
		<author><name>Kipruss</name></author>	</entry>

	<entry>
		<id>http://wiki.linuxformat.ru/wiki/%D0%A4%D0%B0%D0%B9%D0%BB:LXF104_75_2.png</id>
		<title>Файл:LXF104 75 2.png</title>
		<link rel="alternate" type="text/html" href="http://wiki.linuxformat.ru/wiki/%D0%A4%D0%B0%D0%B9%D0%BB:LXF104_75_2.png"/>
				<updated>2009-03-30T21:28:27Z</updated>
		
		<summary type="html">&lt;p&gt;Kipruss: Рис. 4. Выполнение поиска в LDAP при помощи LAT.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Рис. 4. Выполнение поиска в LDAP при помощи LAT.&lt;/div&gt;</summary>
		<author><name>Kipruss</name></author>	</entry>

	<entry>
		<id>http://wiki.linuxformat.ru/wiki/%D0%A4%D0%B0%D0%B9%D0%BB:LXF104_75_1.png</id>
		<title>Файл:LXF104 75 1.png</title>
		<link rel="alternate" type="text/html" href="http://wiki.linuxformat.ru/wiki/%D0%A4%D0%B0%D0%B9%D0%BB:LXF104_75_1.png"/>
				<updated>2009-03-30T21:28:08Z</updated>
		
		<summary type="html">&lt;p&gt;Kipruss: Рис. 3. Просмотр справочника LDAP с помощью LAT. Снимок экрана показывает запись, добавленную нами для пользователя cbrown.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Рис. 3. Просмотр справочника LDAP с помощью LAT. Снимок экрана показывает запись, добавленную нами для пользователя cbrown.&lt;/div&gt;</summary>
		<author><name>Kipruss</name></author>	</entry>

	<entry>
		<id>http://wiki.linuxformat.ru/wiki/%D0%A4%D0%B0%D0%B9%D0%BB:LXF104_74_1.png</id>
		<title>Файл:LXF104 74 1.png</title>
		<link rel="alternate" type="text/html" href="http://wiki.linuxformat.ru/wiki/%D0%A4%D0%B0%D0%B9%D0%BB:LXF104_74_1.png"/>
				<updated>2009-03-30T21:27:46Z</updated>
		
		<summary type="html">&lt;p&gt;Kipruss: Рис. 2. Простая структура каталога LDAP для поддержки аутентификации.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Рис. 2. Простая структура каталога LDAP для поддержки аутентификации.&lt;/div&gt;</summary>
		<author><name>Kipruss</name></author>	</entry>

	<entry>
		<id>http://wiki.linuxformat.ru/wiki/%D0%A4%D0%B0%D0%B9%D0%BB:LXF104_73_1.png</id>
		<title>Файл:LXF104 73 1.png</title>
		<link rel="alternate" type="text/html" href="http://wiki.linuxformat.ru/wiki/%D0%A4%D0%B0%D0%B9%D0%BB:LXF104_73_1.png"/>
				<updated>2009-03-30T21:27:25Z</updated>
		
		<summary type="html">&lt;p&gt;Kipruss: Рис. 1. Компоненты OpenLDAP.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Рис. 1. Компоненты OpenLDAP.&lt;/div&gt;</summary>
		<author><name>Kipruss</name></author>	</entry>

	<entry>
		<id>http://wiki.linuxformat.ru/wiki/LXF103:Hardcore_Linux</id>
		<title>LXF103:Hardcore Linux</title>
		<link rel="alternate" type="text/html" href="http://wiki.linuxformat.ru/wiki/LXF103:Hardcore_Linux"/>
				<updated>2009-03-28T22:41:36Z</updated>
		
		<summary type="html">&lt;p&gt;Kipruss: /* Продолжение следует */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Почта: собери свой сервер==&lt;br /&gt;
&lt;br /&gt;
Большинство людей пользуется электронной почтой, понятия не имея, как она работает. Светоч знаний '''д-ра Криса Брауна''' рассеет тьму невежества.&lt;br /&gt;
&lt;br /&gt;
Чтобы вы могли представить, с чем вообще едят почтовый сервер, взгляните на '''Рис. 1''': там показана схема доставки почты в Интернете.&lt;br /&gt;
&lt;br /&gt;
[[Изображение:LXF103_67_1.png|thumb|300px|Рис. 1: Один день из жизни почтового сообщения.]]&lt;br /&gt;
&lt;br /&gt;
Проследим продвижение почтового сообщения на его пути через Интернет от отправителя к получателю и разберемся, как все компоненты работают совместно. Пусть Маша сидит за своим компьютером и составляет электронное послание, используя почтовый клиент (Mail User Agent – MUA). В мире Linux клиент Маши будет чем-то вроде ''Evolution'' или ''KMail''. Она пишет своей маме Ане, электронный адрес которой '''&amp;lt;nowiki&amp;gt;anna@example.com&amp;lt;/nowiki&amp;gt;'''. Когда Маша нажимает кнопку Послать, ее MUA соединяется с Mail Transport Agent (MTA – почтовым транспортным агентом), на который Маша настроила свой MUA для отправки почты. Обычно MTA предоставляется Маше ее интернет-провайдером (ISP). MUA и MTA говорят друг с другом на языке протокола SMTP (Simple Mail Transfer Protocol – простой протокол передачи почты), организовывая доставку сообщений. В ходе этого диалога MUA определяет получателя сообщения и передает текст письма.&lt;br /&gt;
&lt;br /&gt;
MTA отвечает за «дальнюю перевозку» сообщения. Он сделает запрос к DNS (Domain Name System, системе доменных имен) на поиск записи MX (Mail Exchanger), которая скажет ему, какая машина действует как почтовый сервер для домена '''&amp;lt;nowiki&amp;gt;example.com&amp;lt;/nowiki&amp;gt;''', где расположен Анин почтовый ящик. Из этого запроса он может узнать, что почтовый сервер, допустим, '''&amp;lt;nowiki&amp;gt;mail.example.com&amp;lt;/nowiki&amp;gt;'''. MTA Маши теперь соединяется с MTA на '''&amp;lt;nowiki&amp;gt;mail.example.com&amp;lt;/nowiki&amp;gt;''', снова использует SMTP для указания получателя письма и передает тело сообщения. Принимающий MTA проверяет, что он и вправду почтовый сервер для домена получателя, а потом уж дает согласие на прием. Если все проходит нормально, принимающий MTA передает сообщение MDA (Mail Delivery Agent – почтовому агенту доставки), который сохраняет сообщение в хранилище сообщений (оно находится в файловой системе почтового сервера). Для этого сообщения работа MTA выполнена.&lt;br /&gt;
&lt;br /&gt;
Аня проводит выходные с дядей Васей, помогая ему разбирать чердак, и не может в эти дни читать почту. Но когда она доберется до компьютера, ее почтовый клиент соединится с Mail Access Agent (MAA – агентом доступа к почте) на ее почтовом сервере &amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;'''&amp;lt;nowiki&amp;gt;example.com&amp;lt;/nowiki&amp;gt;'''&amp;lt;/font&amp;gt; для проверки почты, которую MTA ее домена сохранил в ее хранилище. Ее MUA может использовать для этого один или два протокола. Чаще всего это Post Office Protocol (POP3 – почтовый протокол) версии 3. POP – это протокол, который скачивает почту с почтового сервера, затем (как правило) удаляет ее с сервера и оставляет ее на клиенте (компьютере в Аниной квартире), обеспечивая долговременное хранение сообщения. Но если Аня работает в корпорации Example.Com, данное учреждение может иметь почтовый сервер, работающий по протоколу IMAP4. IMAP расшифровывается как Internet Message Access Protocol [интернетпротокол доступа к сообщениям]; он позволяет Аниному MUA получать доступ к ее почтовому архиву, но долговременное хранение писем происходит на сервере (хотя некоторые MUA поддерживают локальные копии). Благодаря IMAP можно подключаться к серверу с любого компьютера с IMAP-клиентом и видеть весь почтовый архив – а вот если бы вы читали почту, используя POP на разных машинах, то в итоге ваши письма были бы раскиданы по этим машинам, что я знаю по своему горькому опыту.&lt;br /&gt;
&lt;br /&gt;
Наш почтовый сервер изображен на Рисунке 1 как большой серый квадрат в правом верхнем углу. В реальности необходимы два компьютера – один для почтового сервера, другой для клиента. Возьмем ''Postfix'' как SMTP-сервер и ''Dovecot'' как почтовый POP3-сервер. На почтовом сервере моя основная ОС – CentOS 5 (CentOS – это клон Red Hat Enterprise Linux), но конфигурация и операции с ''Postfix'' и ''Dovecot'' не зависят от используемого дистрибутива Linux. Клиентская машина может быть любой. В моем случае на ней Ubuntu 7.04 с ''Evolution'' в качестве MUA.&lt;br /&gt;
&lt;br /&gt;
===Начнем: Mail Transfer Agent===&lt;br /&gt;
&lt;br /&gt;
Сперва мы установим ''Postfix''. Но предварительно проверим: вдруг ''Sendmail'' уже установлен и запущен. На системах типа Red Hat это могут сделать следующие команды:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 # rpm -q sendmail&lt;br /&gt;
 # service sendmail status&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Если ''Sendmail'' запущен, надо его остановить и позаботиться, чтобы он не запустился после перезагрузки:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 # service sendmail stop&lt;br /&gt;
 # chkconfig sendmail --del&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
При наличии на вашей машине включенного брандмауэра, вы должны открыть порт для SMTP (tcp/25).&lt;br /&gt;
&lt;br /&gt;
Моя собственная установка ''Postfix'' споткнулась, обнаружив отсутствие административной группы под названием &amp;lt;font color=&amp;quot;darkred&amp;quot;&amp;gt;postdrop&amp;lt;/font&amp;gt;. То есть до установки пакетов нужно было создать эту группу:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 # groupadd -r postdrop&lt;br /&gt;
 # yum install postfix&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Возможно, эта проблема касается только моего дистрибутива, и на вашей системе такого не произойдет.&lt;br /&gt;
&lt;br /&gt;
Для обеспечения запуска сервиса ''Postfix'' при загрузке, запустите команду&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  # chkconfig --add postfix&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Файл настройки ''Postfix'' – '''/etc/postfix/main.cf'''. Фактически, ''Postfix'' должен заработать «из коробки» как простой почтовый сервер с минимальной доработкой готовой конфигурации, но есть несколько параметров, требующих внимания. Так, строку в '''main.cf'''&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  inet_interfaces = localhost&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
нужно заменить на&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  inet_interfaces = all&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Это мы велим ''Postfix'' слушать SMTP соединения на всех сетевых интерфейсах машины, а не только на локальном (localhost).&lt;br /&gt;
&lt;br /&gt;
Далее проверим установки параметра &amp;lt;font color=&amp;quot;darkred&amp;quot;&amp;gt;myhostname&amp;lt;/font&amp;gt;. Он определяет FQDN этой почтовой системы. Если он не определен, то по умолчанию берется имя хоста машины, на которой запущен сервер, возвращаемое командой &amp;lt;font color=&amp;quot;darkred&amp;quot;&amp;gt;hostname&amp;lt;/font&amp;gt;. Так, если ваш хост – &amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;'''&amp;lt;nowiki&amp;gt;mail.example.com&amp;lt;/nowiki&amp;gt;'''&amp;lt;/font&amp;gt;, это имя и будет принято по умолчанию.&lt;br /&gt;
&lt;br /&gt;
Наконец, параметр &amp;lt;font color=&amp;quot;darkred&amp;quot;&amp;gt;mydestination&amp;lt;/font&amp;gt; задает список доменов, которые эта машина считает для себя пунктом назначения (то есть домены, для которых машина сохраняет сообщения). Минимальное значение этого параметра должно походить на следующее:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  mydestination = example.com&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Установив все эти параметры, можно запускать ''Postfix''. На RedHat-совместимых системах это делается командой&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  # service postfix start&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Далее, я создал учетную запись для пользователя &amp;lt;font color=&amp;quot;darkred&amp;quot;&amp;gt;anna&amp;lt;/font&amp;gt; и установил пароль:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 # useradd anna&lt;br /&gt;
 # passwd anna&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Без них не обойтись, потому что «локальный» агент доставки почты в ''Postfix'' требует, чтобы получатель имел учетную запись в Linux-системе: по ней происходит аутентификация в ''Dovecot'' (который мы рассмотрим чуть позже).&lt;br /&gt;
&lt;br /&gt;
Теперь у нас все готово для теста доставки почты в хранилище сообщений. На моей настольной системе с Ubuntu я создал запись в файле '''/etc/hosts''', возвращающую IP-адрес машины '''&amp;lt;nowiki&amp;gt;mail.example.com&amp;lt;/nowiki&amp;gt;'''. В моем случае строка выглядела так:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 192.168.0.41 mail.example.com&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
В реальности, почтовый сервер должен иметь DNS-запись, и вам не нужно задавать ее в '''/etc/hosts'''. Затем я сконфигурировал «учетную запись» в моем MUA (''Evolution'') на использование SMTP-сервера &amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;'''&amp;lt;nowiki&amp;gt;mail.example.com&amp;lt;/nowiki&amp;gt;'''&amp;lt;/font&amp;gt; для исходящих сообщений. Я включил эту учетную запись Evolution и отключил остальные. Затем я попытался послать несколько писем на &amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;'''&amp;lt;nowiki&amp;gt;anna@example.com&amp;lt;/nowiki&amp;gt;'''&amp;lt;/font&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Сработало? Ну, тот факт, что письма исчезли из моих Исходящих [Outbox] в ''Evolution'', уже обнадеживал, но лучший способ проверки – найти сообщения сохраненными на почтовом сервере. Что выводит нас на ...&lt;br /&gt;
&lt;br /&gt;
===Хранилище сообщений===&lt;br /&gt;
&lt;br /&gt;
Традиционный способ хранения сообщений на почтовом сервере известен как формат Mbox: для каждого пользователя хранится отдельный текстовый файл. Имя этого файла совпадает с именем учетной записи пользователя, чью почту он хранит, а каталог определяется параметром &amp;lt;font color=&amp;quot;darkred&amp;quot;&amp;gt;mail_spool_directory&amp;lt;/font&amp;gt; настройки ''Postfix'' (обычно '''/var/spool/mail''' или '''/var/mail'''). Например, Анины сообщения могут заноситься в '''/var/spool/mail/anna'''. Внутри этого файла каждое сообщение начинается строкой с первым словом “&amp;lt;font color=&amp;quot;darkred&amp;quot;&amp;gt;From&amp;lt;/font&amp;gt;” и заканчивается пустой строкой. (Вас может сбить с толку наличие в этом файле других строк, тоже начинающихся на “From:” – заметили двоеточие? Это часть заголовков сообщения.) Надеюсь, ''Postfix'' вписал мое тестовое сообщение в этот файл.&lt;br /&gt;
&lt;br /&gt;
Альтернативная схема хранения сообщений (также называемая форматом Maildir) использует отдельную директорию для каждого пользователя (обычно это поддиректория с названием '''maildir''' внутри домашнего каталога пользователя) и, внутри нее, отдельный файл для каждого сообщения. При этом меньше шансов заблокировать или угробить все сообщения разом, чем в формате Mbox.&lt;br /&gt;
&lt;br /&gt;
Если посланное вами сообщение появилось в хранилище, пора перейти к нашему POP3-серверу. Если его нет, прочитайте советы во врезке ''Решение проблем'', внизу .&lt;br /&gt;
&lt;br /&gt;
===Установка и настройка Dovecot===&lt;br /&gt;
&lt;br /&gt;
На моей CentOS для установки ''Dovecot'' надо всего лишь скомандовать:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 # yum install dovecot&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Теперь нужно найти файл конфигурации ''Dovecot''. Обычно это '''/etc/dovecot.conf'''. Как типичный современный файл конфигурации, он довольно длинен (более 1000 строк), но почти целиком состоит из комментариев. Как оказалось, мне нужно было изменить две строчки; одна задает протокол(ы), которые должен обслуживать ''Dovecot'', а вторая говорит, где находятся файлы почтового ящика. Эти два параметра я изменил так:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 protocols = pop3&lt;br /&gt;
     mail_location = mbox:~/mail:INBOX=/var/spool/mail/%n&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Первая строка говорит, что мы будем использовать только протокол POP3. Во второй строке, установка &amp;lt;font color=&amp;quot;darkred&amp;quot;&amp;gt;INBOX&amp;lt;/font&amp;gt; использует специальный параметр &amp;lt;font color=&amp;quot;darkred&amp;quot;&amp;gt;%n&amp;lt;/font&amp;gt; для замены именем пользователя, под которым мы зашли проверить почту (в нашем примере – “&amp;lt;font color=&amp;quot;darkred&amp;quot;&amp;gt;anna&amp;lt;/font&amp;gt;”). Заметим, что значение параметра &amp;lt;font color=&amp;quot;darkred&amp;quot;&amp;gt;INBOX&amp;lt;/font&amp;gt; должно совпадать с расположением хранилища почты, указанном в ''Postfix''.&lt;br /&gt;
&lt;br /&gt;
Если у вас на почтовом сервере запущен брандмауэр, нужно также открыть порт POP3 (110/tcp).&lt;br /&gt;
&lt;br /&gt;
Теперь мы готовы к запуску сервиса:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 # service dovecot start&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Пора тестировать. На клиенте, в настройках MUA мне необходимо установить для приема почты использование протокола POP и сервера &amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;'''&amp;lt;nowiki&amp;gt;mail.example.com&amp;lt;/nowiki&amp;gt;'''&amp;lt;/font&amp;gt;, затем задать имя '''&amp;lt;font color=&amp;quot;darkred&amp;quot;&amp;gt;anna&amp;lt;/font&amp;gt;''' и отключить опции шифрования, предлагаемые MUA. Теперь я готов принять мои сообщения. В этом пункте мой MUA должен (надеюсь) запросить пароль '''&amp;lt;font color=&amp;quot;darkred&amp;quot;&amp;gt;anna&amp;lt;/font&amp;gt;''', а мне необходимо предоставить пароль, который я задал, создавая ее учетную запись Linux на сервере. Если все пройдет гладко, вы должны увидеть ранее посланные письма появившимися во Входящих MUA. И если вы вернетесь на сервер, то обнаружите, что сообщения исчезли из хранилища &amp;lt;font color=&amp;quot;darkred&amp;quot;&amp;gt;anna&amp;lt;/font&amp;gt;. Если опять ничего не выйдет, обратитесь ко врезке ''Решение проблем''.&lt;br /&gt;
&lt;br /&gt;
===Ура, оно работает!===&lt;br /&gt;
&lt;br /&gt;
Если вы дошли досюда, поздравляем! У вас появился работающий почтовый сервер. Как обычно, я создавал максимально простую конфигурацию, чтобы все поскорее заработало. Однако эта реализация подразумевает несколько допущений: во-первых, почтовый сервер обслуживает только один домен (&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;'''&amp;lt;nowiki&amp;gt;example.com&amp;lt;/nowiki&amp;gt;'''&amp;lt;/font&amp;gt;), а во-вторых, все пользователи, желающие получать почту, имеют учетные записи Linux на почтовом сервере. Это последнее ограничение задается как со стороны локального агента доставки в ''Postfix'', так и ''Dovecot'', который, в своей конфигурации по умолчанию, требует действующей учетной записи Linux для аутентификации пользователей, для входа через POP и получения электронной почты. Отметим также, что в нашей конфигурации MTA (''Postfix'') не требуется аутентификации пользователя, в отличие от MAA (''Dovecot'').&lt;br /&gt;
&lt;br /&gt;
===Поддерживаем несколько доменов===&lt;br /&gt;
&lt;br /&gt;
В реальных условиях одной машине приходится быть почтовым сервером для множества доменов. Самый простой путь это обеспечить – добавить домены в параметр mydestination в '''/etc/Postfix/main.cf'''. Например, установка:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 mydestination = example.com example.org example.net &lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
велит Postfix принимать почту для трех указанных доменов. Конечно, если вы что-то поменяли в '''main.cf''', нужно заставить &amp;lt;font color=&amp;quot;darkred&amp;quot;&amp;gt;postfix&amp;lt;/font&amp;gt; перечитать его:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 # service postfix reload&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Конечно, надо также обеспечить, чтобы MX-записи в DNS для всех трех доменов ссылались на сервер &amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;'''&amp;lt;nowiki&amp;gt;mail.example.com&amp;lt;/nowiki&amp;gt;'''&amp;lt;/font&amp;gt;. Однако эта методика имеет ограниченное применение, поскольку у всех доменов – общее пространство имен: так, почта на &amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;'''&amp;lt;nowiki&amp;gt;anna@example.com&amp;lt;/nowiki&amp;gt;'''&amp;lt;/font&amp;gt;, &amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;'''&amp;lt;nowiki&amp;gt;anna@example.org&amp;lt;/nowiki&amp;gt;'''&amp;lt;/font&amp;gt; и &amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;'''&amp;lt;nowiki&amp;gt;anna@example.net&amp;lt;/nowiki&amp;gt;'''&amp;lt;/font&amp;gt; будет в конце концов сохранена в одном и том же месте. И, конечно, Ане (и всем другим получателям почты) нужна учетная запись Linux на сервере.&lt;br /&gt;
&lt;br /&gt;
Более гибкое решение – использовать так называемые «виртуальные» почтовые домены. При таком способе каждый домен имеет отдельное пространство имен, и письма для &amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;'''&amp;lt;nowiki&amp;gt;anna@example.com&amp;lt;/nowiki&amp;gt;'''&amp;lt;/font&amp;gt; и &amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;'''&amp;lt;nowiki&amp;gt;anna@example.net&amp;lt;/nowiki&amp;gt;'''&amp;lt;/font&amp;gt; окажутся в разных хранилищах почты. Получателю также не требуется иметь системную учетную запись Linux. Но зато требуется чуть больше работы по настройке...&lt;br /&gt;
&lt;br /&gt;
Требуемые для этого строки в '''main.cf''' показаны в Листинге А ниже. Учтите, что номера строк проставлены только для удобства ссылки: в файле их нет.&lt;br /&gt;
&lt;br /&gt;
{{Врезка&lt;br /&gt;
    |Заголовок=Альтернативы&lt;br /&gt;
    |Содержание=Как всегда в Linux, существует несколько программных решений для построения почтового сервера. Для MTA вы можете использовать ''Postfix'', ''Exim'' или почтенный ''Sendmail''. ''Postfix'' – самый юный; он написан Вьетсе Венема &amp;lt;nowiki&amp;gt;[Wietse Venema]&amp;lt;/nowiki&amp;gt; в 1999 году, имеет прекрасную репутацию по безопасности и служит MTA по умолчанию во многих текущих дистрибутивах Linux. Exim был разработан в 1995 году в Кембриджском университете Филипом Хейзелом &amp;lt;nowiki&amp;gt;[Philip Hazel]&amp;lt;/nowiki&amp;gt;. ''Sendmail'' написан Эриком Оллманом &amp;lt;nowiki&amp;gt;[Eric Allman]&amp;lt;/nowiki&amp;gt; в 1983 году; много лет он тянул на себе большинство интернет-почты, и стало почти обязательным ссылаться на него, как на «почтенный», хотя у него самый непонятный файл конфигурации по эту сторону Бетельгейзе. Для MAA тоже есть выбор. Это может быть IMAP-сервер ''Cyrus'', ''Courier'', ''qpopper'', инструментарий IMAP University of Washington, Dovecot и другие. Более подробный список и сравнение почтовых серверов вы можете найти на http://en.wikipedia.org/wiki/Comparison_of_mail_servers.&lt;br /&gt;
    |Ширина=200px}}&lt;br /&gt;
&lt;br /&gt;
===ЛИСТИНГ A===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;ini&amp;quot; line=&amp;quot;GESHI_NORMAL_LINE_NUMBERS&amp;quot;&amp;gt;&lt;br /&gt;
virtual_mailbox_domains = example.com example.org example.net&lt;br /&gt;
virtual_mailbox_base = /var/spool/vmail&lt;br /&gt;
virtual_mailbox_maps = hash:/etc/Postfix/virtual_mailbox_map&lt;br /&gt;
virtual_uid_maps = static:550&lt;br /&gt;
virtual_gid_maps = static:101&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Строка 1 в ''Листинге А'' содержит список доменов, которые будут поддерживаться. Их надо удалить из параметра &amp;lt;font color=&amp;quot;darkred&amp;quot;&amp;gt;mydestination&amp;lt;/font&amp;gt;, так как они теперь будут обрабатываться с использованием «виртуального» агента доставки ''Postfix'', и «локальный» агент им больше не нужен.&lt;br /&gt;
&lt;br /&gt;
Если список доменов по-настоящему большой, вы можете предпочесть поместить его в отдельный файл, например, '''/etc/postfix/virtual_domains''', по образцу:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  # list of virtual domains for postfix&lt;br /&gt;
         example.com&lt;br /&gt;
         example.net&lt;br /&gt;
         example.org&lt;br /&gt;
  # ... and lots more ...&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
и ссылаться на этот файл через параметр &amp;lt;font color=&amp;quot;darkred&amp;quot;&amp;gt;virtual_mailbox_domains&amp;lt;/font&amp;gt; в '''main.cf''':&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  virtual_mailbox_domains = /etc/postfix/virtual_domains&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Аналогично, многие параметры в '''main.cf''' могут иметь список требуемых значений, помещенный в отдельный файл.&lt;br /&gt;
&lt;br /&gt;
Строка 2 в ''Листинге А'' задает директорию верхнего уровня, где должны сохраняться сообщения. Очевидно, надо выбрать схему, совместимую с нашими POP- и IMAP-серверами. Здесь выбрано одно из множества возможных решений.&lt;br /&gt;
&lt;br /&gt;
Создадим то, что ''Postfix'' называет «картой» – для отметки, где получатели почтовых адресов будут сохранять сообщения относительно заданного &amp;lt;font color=&amp;quot;darkred&amp;quot;&amp;gt;virtual_mailbox_base&amp;lt;/font&amp;gt;. Я создал простую карту в файле, который назвал '''/etc/postfix/virtual_mailbox_map''':&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 anna@example.com anna&lt;br /&gt;
 anna@example.net anna_smith&lt;br /&gt;
 chris@example.org cbrown&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Теперь, например, письмо, посланное на &amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;'''&amp;lt;nowiki&amp;gt;anna@example.net&amp;lt;/nowiki&amp;gt;'''&amp;lt;/font&amp;gt;, будет сохранено в '''/var/spool/vmail/anna_smith'''; письмо, посланное на адрес &amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;'''&amp;lt;nowiki&amp;gt;chris@example.org&amp;lt;/nowiki&amp;gt;'''&amp;lt;/font&amp;gt;, «упадет» в '''/var/spool/vmail/cbrown''', и так далее. Заметьте, что здесь не требуется совпадения видимых снаружи имен пользователей (в нашем примере, '''&amp;lt;font color=&amp;quot;darkred&amp;quot;&amp;gt;anna&amp;lt;/font&amp;gt;''' и '''&amp;lt;font color=&amp;quot;darkred&amp;quot;&amp;gt;chris&amp;lt;/font&amp;gt;''') со внутренними именами (&amp;lt;font color=&amp;quot;darkred&amp;quot;&amp;gt;anna_smith&amp;lt;/font&amp;gt; и &amp;lt;/font color=&amp;quot;darkred&amp;quot;&amp;gt;cbrown&amp;lt;/font&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
Конвертируем этот файл в «карту», используя команду postmap:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  # postmap /etc/postfix/virtual_mailbox_map&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
В результате появится файл '''virtual_mailbox_map.db'''. Карта, в данном случае, просто вид индексированной структуры данных, ключи которой могут быть эффективно просмотрены ''Postfix''. ''Postfix'' поддерживает несколько типов «карт»; по умолчанию это обычно «хэш».&lt;br /&gt;
&lt;br /&gt;
Далее, в строке 3 ''Листинга А'', вы сообщаете ''Postfix'', где находится карта.&lt;br /&gt;
&lt;br /&gt;
''Postfix'' нуждается в отождествлении пользователя, используемом для доставки сообщения в хранилище. Возможно задание нескольких карт (&amp;lt;font color=&amp;quot;darkred&amp;quot;&amp;gt;uid_map&amp;lt;/font&amp;gt; и &amp;lt;font color=&amp;quot;darkred&amp;quot;&amp;gt;gid_map&amp;lt;/font&amp;gt;), определяющих отдельные отождествления для всех и каждого получателя, но мы сделаем проще и используем одну и ту же личность для всех получателей. Я создал пользователя с именем '''&amp;lt;font color=&amp;quot;darkred&amp;quot;&amp;gt;postmanpat&amp;lt;/font&amp;gt;''' для этой цели.&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  # useradd -d /var/spool/vmail -g postdrop -u 550 -m postmanpat&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Отметим, что домашняя директория '''&amp;lt;font color=&amp;quot;darkred&amp;quot;&amp;gt;postmanpat&amp;lt;/font&amp;gt;''' находится в моей выбранной директории '''virtual_ mailbox_base'''. Далее я смягчил права доступа в '''/var/spool/vmail''', чтобы Dovecot мог ей воспользоваться.&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  # chmod 755 /var/spool/vmail&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Нет необходимости предварительно создавать файл сохраненных сообщений для индивидуальных получателей – ''Postfix'' сделает это по требованию. Наконец, строки 4 и 5 Листинга А задают тождество пользователя и группы, которые ''Postfix'' будет использовать для помещения сообщений в хранилище. Они соответствуют ID пользователя &amp;lt;font color=&amp;quot;darkred&amp;quot;&amp;gt;postmanpat&amp;lt;/font&amp;gt; и группы &amp;lt;font color=&amp;quot;darkred&amp;quot;&amp;gt;postdrop&amp;lt;/font&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
После внесения данных изменений та часть, за которую отвечает ''Postfix'', должна работать. Возвратитесь к клиентской машине и пошлите тестовое сообщение на &amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;'''&amp;lt;nowiki&amp;gt;chris@example.org&amp;lt;/nowiki&amp;gt;'''&amp;lt;/font&amp;gt;. На сервере проверьте, что это сообщение появилось в '''/var/spool/vmail/cbrown'''. Если да, то доставка ''Postfix'' на виртуальные почтовые домены работает!&lt;br /&gt;
&lt;br /&gt;
На стороне ''Dovecot'' я просто изменил определение параметра &amp;lt;font color=&amp;quot;darkred&amp;quot;&amp;gt;mail_location&amp;lt;/font&amp;gt; на следующее:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  mail_location = mbox:~/mail:INBOX=/var/spool/vmail/%n&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Продолжение следует===&lt;br /&gt;
&lt;br /&gt;
Пока мы не касались аутентификации POP3 при входе в ''Dovecot''. В текущем состоянии, чтобы Dovecot заработал, вам необходимо создать очередные учетные записи Linux пользователям anna, anna_smith и cbrown, для новой аутентификации ''Dovecot''. Чтобы виртуальные домены применялись правильно, необходимо рассмотреть вопрос об аутентификации учетных записей POP3 через базу данных пользователей, не зависящую от учетных записей Linux. На данном уроке уже подпущено достаточно ежей под череп, но в следующем номере ''Linux Format'' я попытаюсь решить вопрос об аутентификации внутри почтовых систем и в ''Postfix'' и в ''Dovecot''. Пишите на [[mailto://answers@linuxformat.ru]], если у вас возникнут проблемы с вашим почтовым сервером. '''LXF'''&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
===Решение проблем (врезка)===&lt;br /&gt;
&lt;br /&gt;
[[Изображение:LXF103_68_1.png|thumb|300px|Пример использования команды telnet.]]&lt;br /&gt;
&lt;br /&gt;
Если вы не можете передать и принять почту, используя ваш почтовый сервер, попробуйте проверить следующее:&lt;br /&gt;
&lt;br /&gt;
1. На клиенте проверьте, что почтовый сервер пингуется по его IP-адресу и имени, используя команды:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 # ping 192.168.0.41&lt;br /&gt;
 # ping mail.example.com&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
(Естественно, подставьте сюда IP-адреc вашего сервера.)&lt;br /&gt;
&lt;br /&gt;
2. На сервере проверьте, что серверы SMTP и POP слушают соединения, используя команду&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 # netstat -at&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Вы должны увидеть LISTEN в конце информации о портах SMTP и POP3.&lt;br /&gt;
&lt;br /&gt;
3. На клиенте, попробуйте использовать telnet для соединения с портом 25 на почтовом сервере, используя команду:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 # telnet mail.example.com 25&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Вы должны получить отклик с сервера типа такого:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 220 mail.example.com ESMTP Postfix&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Если вы знакомы с SMTP-протоколом, можете вести полный SMTP-диалог вручную и по-настоящему отправить почтовое сообщение. См. экранный снимок справа с примером такого диалога.&lt;br /&gt;
&lt;br /&gt;
4. На сервере проверьте, что брандмауэр не блокирует доступ к портам 25 (SMTP) и 110 (POP3), используя команду:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 # iptables -L&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Если вы не уверены, отключите брандмауэр командой:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 # itables -F&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
и попробуйте снова. Не забудьте потом восстановить работоспособность брандмауэра.&lt;br /&gt;
&lt;br /&gt;
5. На сервере поищите разгадку в системных журналах почты (обычно /var/log/maillog).&lt;br /&gt;
&lt;br /&gt;
[[Категория:Учебники]]&lt;br /&gt;
[[Категория:Hardcore Linux]]&lt;br /&gt;
[[Категория:Крис Браун]]&lt;/div&gt;</summary>
		<author><name>Kipruss</name></author>	</entry>

	<entry>
		<id>http://wiki.linuxformat.ru/wiki/LXF103</id>
		<title>LXF103</title>
		<link rel="alternate" type="text/html" href="http://wiki.linuxformat.ru/wiki/LXF103"/>
				<updated>2009-03-28T22:25:44Z</updated>
		
		<summary type="html">&lt;p&gt;Kipruss: /* Учебники */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=== Учебники ===&lt;br /&gt;
&lt;br /&gt;
* [[LXF103:Совет месяца|'''Совет месяца:''' Счастье луковое]]&lt;br /&gt;
* [[LXF103:Навести порядок в снимках|'''Фотография.''' Навести порядок в снимках]]&lt;br /&gt;
В Linux нет недостатка в инструментах управления фотографиями. '''Дэйл Стрикланд-Кларк''' рассмотрит все варианты и найдет для вас лучший, будь то ''DigiKam, Picasa'' или ''F-Spot''.&lt;br /&gt;
&lt;br /&gt;
* [[LXF103:Hardcore Linux|'''Hardcore Linux.''' Почта: собери свой сервер.]]&lt;br /&gt;
Большинство людей пользуется электронной почтой, понятия не имея, как она работает. Светоч знаний '''д-ра Криса Брауна''' рассеет тьму невежества. &lt;br /&gt;
&lt;br /&gt;
* R: типы данных&lt;br /&gt;
&lt;br /&gt;
* [[LXF103:Ни строчки кода!|Ни строчки кода!]]&lt;br /&gt;
* [[LXF103:Стрелялка|Стрелялка за выходные]]&lt;br /&gt;
&lt;br /&gt;
[[Категория:Математические пакеты]]&lt;br /&gt;
&lt;br /&gt;
=== [[LXF103:Ответы|Ответы]]===&lt;br /&gt;
&lt;br /&gt;
Устраняем проблемы Linux: память, смена IP-адреса, проблемы с загрузкой, ''apt-get'' без сети, шрифты, компиляция ПО, брандмауэры и поиски Луны с ''KMoon''.&lt;/div&gt;</summary>
		<author><name>Kipruss</name></author>	</entry>

	<entry>
		<id>http://wiki.linuxformat.ru/wiki/LXF103</id>
		<title>LXF103</title>
		<link rel="alternate" type="text/html" href="http://wiki.linuxformat.ru/wiki/LXF103"/>
				<updated>2009-03-28T22:24:56Z</updated>
		
		<summary type="html">&lt;p&gt;Kipruss: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=== Учебники ===&lt;br /&gt;
&lt;br /&gt;
* [[LXF103:Совет месяца|'''Совет месяца:''' Счастье луковое]]&lt;br /&gt;
* [[LXF103:Навести порядок в снимках|'''Фотография.''' Навести порядок в снимках]]&lt;br /&gt;
В Linux нет недостатка в инструментах управления фотографиями. '''Дэйл Стрикланд-Кларк''' рассмотрит все варианты и найдет для вас лучший, будь то ''DigiKam, Picasa'' или ''F-Spot''.&lt;br /&gt;
&lt;br /&gt;
* [[LXF103:Hardcore Linux|'''Hardcore Linux.''' Почта: собери свой сервер.]]&lt;br /&gt;
Большинство людей пользуется электронной почтой, понятия не имея, как она работает. Светоч знаний д-ра Криса Брауна рассеет тьму невежества. &lt;br /&gt;
&lt;br /&gt;
* R: типы данных&lt;br /&gt;
&lt;br /&gt;
* [[LXF103:Ни строчки кода!|Ни строчки кода!]]&lt;br /&gt;
* [[LXF103:Стрелялка|Стрелялка за выходные]]&lt;br /&gt;
&lt;br /&gt;
[[Категория:Математические пакеты]]&lt;br /&gt;
&lt;br /&gt;
=== [[LXF103:Ответы|Ответы]]===&lt;br /&gt;
&lt;br /&gt;
Устраняем проблемы Linux: память, смена IP-адреса, проблемы с загрузкой, ''apt-get'' без сети, шрифты, компиляция ПО, брандмауэры и поиски Луны с ''KMoon''.&lt;/div&gt;</summary>
		<author><name>Kipruss</name></author>	</entry>

	<entry>
		<id>http://wiki.linuxformat.ru/wiki/LXF103:Hardcore_Linux</id>
		<title>LXF103:Hardcore Linux</title>
		<link rel="alternate" type="text/html" href="http://wiki.linuxformat.ru/wiki/LXF103:Hardcore_Linux"/>
				<updated>2009-03-28T22:23:00Z</updated>
		
		<summary type="html">&lt;p&gt;Kipruss: /* Продолжение следует */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Почта: собери свой сервер==&lt;br /&gt;
&lt;br /&gt;
Большинство людей пользуется электронной почтой, понятия не имея, как она работает. Светоч знаний '''д-ра Криса Брауна''' рассеет тьму невежества.&lt;br /&gt;
&lt;br /&gt;
Чтобы вы могли представить, с чем вообще едят почтовый сервер, взгляните на '''Рис. 1''': там показана схема доставки почты в Интернете.&lt;br /&gt;
&lt;br /&gt;
[[Изображение:LXF103_67_1.png|thumb|300px|Рис. 1: Один день из жизни почтового сообщения.]]&lt;br /&gt;
&lt;br /&gt;
Проследим продвижение почтового сообщения на его пути через Интернет от отправителя к получателю и разберемся, как все компоненты работают совместно. Пусть Маша сидит за своим компьютером и составляет электронное послание, используя почтовый клиент (Mail User Agent – MUA). В мире Linux клиент Маши будет чем-то вроде ''Evolution'' или ''KMail''. Она пишет своей маме Ане, электронный адрес которой '''&amp;lt;nowiki&amp;gt;anna@example.com&amp;lt;/nowiki&amp;gt;'''. Когда Маша нажимает кнопку Послать, ее MUA соединяется с Mail Transport Agent (MTA – почтовым транспортным агентом), на который Маша настроила свой MUA для отправки почты. Обычно MTA предоставляется Маше ее интернет-провайдером (ISP). MUA и MTA говорят друг с другом на языке протокола SMTP (Simple Mail Transfer Protocol – простой протокол передачи почты), организовывая доставку сообщений. В ходе этого диалога MUA определяет получателя сообщения и передает текст письма.&lt;br /&gt;
&lt;br /&gt;
MTA отвечает за «дальнюю перевозку» сообщения. Он сделает запрос к DNS (Domain Name System, системе доменных имен) на поиск записи MX (Mail Exchanger), которая скажет ему, какая машина действует как почтовый сервер для домена '''&amp;lt;nowiki&amp;gt;example.com&amp;lt;/nowiki&amp;gt;''', где расположен Анин почтовый ящик. Из этого запроса он может узнать, что почтовый сервер, допустим, '''&amp;lt;nowiki&amp;gt;mail.example.com&amp;lt;/nowiki&amp;gt;'''. MTA Маши теперь соединяется с MTA на '''&amp;lt;nowiki&amp;gt;mail.example.com&amp;lt;/nowiki&amp;gt;''', снова использует SMTP для указания получателя письма и передает тело сообщения. Принимающий MTA проверяет, что он и вправду почтовый сервер для домена получателя, а потом уж дает согласие на прием. Если все проходит нормально, принимающий MTA передает сообщение MDA (Mail Delivery Agent – почтовому агенту доставки), который сохраняет сообщение в хранилище сообщений (оно находится в файловой системе почтового сервера). Для этого сообщения работа MTA выполнена.&lt;br /&gt;
&lt;br /&gt;
Аня проводит выходные с дядей Васей, помогая ему разбирать чердак, и не может в эти дни читать почту. Но когда она доберется до компьютера, ее почтовый клиент соединится с Mail Access Agent (MAA – агентом доступа к почте) на ее почтовом сервере &amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;'''&amp;lt;nowiki&amp;gt;example.com&amp;lt;/nowiki&amp;gt;'''&amp;lt;/font&amp;gt; для проверки почты, которую MTA ее домена сохранил в ее хранилище. Ее MUA может использовать для этого один или два протокола. Чаще всего это Post Office Protocol (POP3 – почтовый протокол) версии 3. POP – это протокол, который скачивает почту с почтового сервера, затем (как правило) удаляет ее с сервера и оставляет ее на клиенте (компьютере в Аниной квартире), обеспечивая долговременное хранение сообщения. Но если Аня работает в корпорации Example.Com, данное учреждение может иметь почтовый сервер, работающий по протоколу IMAP4. IMAP расшифровывается как Internet Message Access Protocol [интернетпротокол доступа к сообщениям]; он позволяет Аниному MUA получать доступ к ее почтовому архиву, но долговременное хранение писем происходит на сервере (хотя некоторые MUA поддерживают локальные копии). Благодаря IMAP можно подключаться к серверу с любого компьютера с IMAP-клиентом и видеть весь почтовый архив – а вот если бы вы читали почту, используя POP на разных машинах, то в итоге ваши письма были бы раскиданы по этим машинам, что я знаю по своему горькому опыту.&lt;br /&gt;
&lt;br /&gt;
Наш почтовый сервер изображен на Рисунке 1 как большой серый квадрат в правом верхнем углу. В реальности необходимы два компьютера – один для почтового сервера, другой для клиента. Возьмем ''Postfix'' как SMTP-сервер и ''Dovecot'' как почтовый POP3-сервер. На почтовом сервере моя основная ОС – CentOS 5 (CentOS – это клон Red Hat Enterprise Linux), но конфигурация и операции с ''Postfix'' и ''Dovecot'' не зависят от используемого дистрибутива Linux. Клиентская машина может быть любой. В моем случае на ней Ubuntu 7.04 с ''Evolution'' в качестве MUA.&lt;br /&gt;
&lt;br /&gt;
===Начнем: Mail Transfer Agent===&lt;br /&gt;
&lt;br /&gt;
Сперва мы установим ''Postfix''. Но предварительно проверим: вдруг ''Sendmail'' уже установлен и запущен. На системах типа Red Hat это могут сделать следующие команды:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 # rpm -q sendmail&lt;br /&gt;
 # service sendmail status&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Если ''Sendmail'' запущен, надо его остановить и позаботиться, чтобы он не запустился после перезагрузки:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 # service sendmail stop&lt;br /&gt;
 # chkconfig sendmail --del&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
При наличии на вашей машине включенного брандмауэра, вы должны открыть порт для SMTP (tcp/25).&lt;br /&gt;
&lt;br /&gt;
Моя собственная установка ''Postfix'' споткнулась, обнаружив отсутствие административной группы под названием &amp;lt;font color=&amp;quot;darkred&amp;quot;&amp;gt;postdrop&amp;lt;/font&amp;gt;. То есть до установки пакетов нужно было создать эту группу:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 # groupadd -r postdrop&lt;br /&gt;
 # yum install postfix&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Возможно, эта проблема касается только моего дистрибутива, и на вашей системе такого не произойдет.&lt;br /&gt;
&lt;br /&gt;
Для обеспечения запуска сервиса ''Postfix'' при загрузке, запустите команду&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  # chkconfig --add postfix&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Файл настройки ''Postfix'' – '''/etc/postfix/main.cf'''. Фактически, ''Postfix'' должен заработать «из коробки» как простой почтовый сервер с минимальной доработкой готовой конфигурации, но есть несколько параметров, требующих внимания. Так, строку в '''main.cf'''&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  inet_interfaces = localhost&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
нужно заменить на&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  inet_interfaces = all&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Это мы велим ''Postfix'' слушать SMTP соединения на всех сетевых интерфейсах машины, а не только на локальном (localhost).&lt;br /&gt;
&lt;br /&gt;
Далее проверим установки параметра &amp;lt;font color=&amp;quot;darkred&amp;quot;&amp;gt;myhostname&amp;lt;/font&amp;gt;. Он определяет FQDN этой почтовой системы. Если он не определен, то по умолчанию берется имя хоста машины, на которой запущен сервер, возвращаемое командой &amp;lt;font color=&amp;quot;darkred&amp;quot;&amp;gt;hostname&amp;lt;/font&amp;gt;. Так, если ваш хост – &amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;'''&amp;lt;nowiki&amp;gt;mail.example.com&amp;lt;/nowiki&amp;gt;'''&amp;lt;/font&amp;gt;, это имя и будет принято по умолчанию.&lt;br /&gt;
&lt;br /&gt;
Наконец, параметр &amp;lt;font color=&amp;quot;darkred&amp;quot;&amp;gt;mydestination&amp;lt;/font&amp;gt; задает список доменов, которые эта машина считает для себя пунктом назначения (то есть домены, для которых машина сохраняет сообщения). Минимальное значение этого параметра должно походить на следующее:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  mydestination = example.com&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Установив все эти параметры, можно запускать ''Postfix''. На RedHat-совместимых системах это делается командой&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  # service postfix start&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Далее, я создал учетную запись для пользователя &amp;lt;font color=&amp;quot;darkred&amp;quot;&amp;gt;anna&amp;lt;/font&amp;gt; и установил пароль:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 # useradd anna&lt;br /&gt;
 # passwd anna&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Без них не обойтись, потому что «локальный» агент доставки почты в ''Postfix'' требует, чтобы получатель имел учетную запись в Linux-системе: по ней происходит аутентификация в ''Dovecot'' (который мы рассмотрим чуть позже).&lt;br /&gt;
&lt;br /&gt;
Теперь у нас все готово для теста доставки почты в хранилище сообщений. На моей настольной системе с Ubuntu я создал запись в файле '''/etc/hosts''', возвращающую IP-адрес машины '''&amp;lt;nowiki&amp;gt;mail.example.com&amp;lt;/nowiki&amp;gt;'''. В моем случае строка выглядела так:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 192.168.0.41 mail.example.com&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
В реальности, почтовый сервер должен иметь DNS-запись, и вам не нужно задавать ее в '''/etc/hosts'''. Затем я сконфигурировал «учетную запись» в моем MUA (''Evolution'') на использование SMTP-сервера &amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;'''&amp;lt;nowiki&amp;gt;mail.example.com&amp;lt;/nowiki&amp;gt;'''&amp;lt;/font&amp;gt; для исходящих сообщений. Я включил эту учетную запись Evolution и отключил остальные. Затем я попытался послать несколько писем на &amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;'''&amp;lt;nowiki&amp;gt;anna@example.com&amp;lt;/nowiki&amp;gt;'''&amp;lt;/font&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Сработало? Ну, тот факт, что письма исчезли из моих Исходящих [Outbox] в ''Evolution'', уже обнадеживал, но лучший способ проверки – найти сообщения сохраненными на почтовом сервере. Что выводит нас на ...&lt;br /&gt;
&lt;br /&gt;
===Хранилище сообщений===&lt;br /&gt;
&lt;br /&gt;
Традиционный способ хранения сообщений на почтовом сервере известен как формат Mbox: для каждого пользователя хранится отдельный текстовый файл. Имя этого файла совпадает с именем учетной записи пользователя, чью почту он хранит, а каталог определяется параметром &amp;lt;font color=&amp;quot;darkred&amp;quot;&amp;gt;mail_spool_directory&amp;lt;/font&amp;gt; настройки ''Postfix'' (обычно '''/var/spool/mail''' или '''/var/mail'''). Например, Анины сообщения могут заноситься в '''/var/spool/mail/anna'''. Внутри этого файла каждое сообщение начинается строкой с первым словом “&amp;lt;font color=&amp;quot;darkred&amp;quot;&amp;gt;From&amp;lt;/font&amp;gt;” и заканчивается пустой строкой. (Вас может сбить с толку наличие в этом файле других строк, тоже начинающихся на “From:” – заметили двоеточие? Это часть заголовков сообщения.) Надеюсь, ''Postfix'' вписал мое тестовое сообщение в этот файл.&lt;br /&gt;
&lt;br /&gt;
Альтернативная схема хранения сообщений (также называемая форматом Maildir) использует отдельную директорию для каждого пользователя (обычно это поддиректория с названием '''maildir''' внутри домашнего каталога пользователя) и, внутри нее, отдельный файл для каждого сообщения. При этом меньше шансов заблокировать или угробить все сообщения разом, чем в формате Mbox.&lt;br /&gt;
&lt;br /&gt;
Если посланное вами сообщение появилось в хранилище, пора перейти к нашему POP3-серверу. Если его нет, прочитайте советы во врезке ''Решение проблем'', внизу .&lt;br /&gt;
&lt;br /&gt;
===Установка и настройка Dovecot===&lt;br /&gt;
&lt;br /&gt;
На моей CentOS для установки ''Dovecot'' надо всего лишь скомандовать:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 # yum install dovecot&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Теперь нужно найти файл конфигурации ''Dovecot''. Обычно это '''/etc/dovecot.conf'''. Как типичный современный файл конфигурации, он довольно длинен (более 1000 строк), но почти целиком состоит из комментариев. Как оказалось, мне нужно было изменить две строчки; одна задает протокол(ы), которые должен обслуживать ''Dovecot'', а вторая говорит, где находятся файлы почтового ящика. Эти два параметра я изменил так:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 protocols = pop3&lt;br /&gt;
     mail_location = mbox:~/mail:INBOX=/var/spool/mail/%n&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Первая строка говорит, что мы будем использовать только протокол POP3. Во второй строке, установка &amp;lt;font color=&amp;quot;darkred&amp;quot;&amp;gt;INBOX&amp;lt;/font&amp;gt; использует специальный параметр &amp;lt;font color=&amp;quot;darkred&amp;quot;&amp;gt;%n&amp;lt;/font&amp;gt; для замены именем пользователя, под которым мы зашли проверить почту (в нашем примере – “&amp;lt;font color=&amp;quot;darkred&amp;quot;&amp;gt;anna&amp;lt;/font&amp;gt;”). Заметим, что значение параметра &amp;lt;font color=&amp;quot;darkred&amp;quot;&amp;gt;INBOX&amp;lt;/font&amp;gt; должно совпадать с расположением хранилища почты, указанном в ''Postfix''.&lt;br /&gt;
&lt;br /&gt;
Если у вас на почтовом сервере запущен брандмауэр, нужно также открыть порт POP3 (110/tcp).&lt;br /&gt;
&lt;br /&gt;
Теперь мы готовы к запуску сервиса:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 # service dovecot start&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Пора тестировать. На клиенте, в настройках MUA мне необходимо установить для приема почты использование протокола POP и сервера &amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;'''&amp;lt;nowiki&amp;gt;mail.example.com&amp;lt;/nowiki&amp;gt;'''&amp;lt;/font&amp;gt;, затем задать имя '''&amp;lt;font color=&amp;quot;darkred&amp;quot;&amp;gt;anna&amp;lt;/font&amp;gt;''' и отключить опции шифрования, предлагаемые MUA. Теперь я готов принять мои сообщения. В этом пункте мой MUA должен (надеюсь) запросить пароль '''&amp;lt;font color=&amp;quot;darkred&amp;quot;&amp;gt;anna&amp;lt;/font&amp;gt;''', а мне необходимо предоставить пароль, который я задал, создавая ее учетную запись Linux на сервере. Если все пройдет гладко, вы должны увидеть ранее посланные письма появившимися во Входящих MUA. И если вы вернетесь на сервер, то обнаружите, что сообщения исчезли из хранилища &amp;lt;font color=&amp;quot;darkred&amp;quot;&amp;gt;anna&amp;lt;/font&amp;gt;. Если опять ничего не выйдет, обратитесь ко врезке ''Решение проблем''.&lt;br /&gt;
&lt;br /&gt;
===Ура, оно работает!===&lt;br /&gt;
&lt;br /&gt;
Если вы дошли досюда, поздравляем! У вас появился работающий почтовый сервер. Как обычно, я создавал максимально простую конфигурацию, чтобы все поскорее заработало. Однако эта реализация подразумевает несколько допущений: во-первых, почтовый сервер обслуживает только один домен (&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;'''&amp;lt;nowiki&amp;gt;example.com&amp;lt;/nowiki&amp;gt;'''&amp;lt;/font&amp;gt;), а во-вторых, все пользователи, желающие получать почту, имеют учетные записи Linux на почтовом сервере. Это последнее ограничение задается как со стороны локального агента доставки в ''Postfix'', так и ''Dovecot'', который, в своей конфигурации по умолчанию, требует действующей учетной записи Linux для аутентификации пользователей, для входа через POP и получения электронной почты. Отметим также, что в нашей конфигурации MTA (''Postfix'') не требуется аутентификации пользователя, в отличие от MAA (''Dovecot'').&lt;br /&gt;
&lt;br /&gt;
===Поддерживаем несколько доменов===&lt;br /&gt;
&lt;br /&gt;
В реальных условиях одной машине приходится быть почтовым сервером для множества доменов. Самый простой путь это обеспечить – добавить домены в параметр mydestination в '''/etc/Postfix/main.cf'''. Например, установка:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 mydestination = example.com example.org example.net &lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
велит Postfix принимать почту для трех указанных доменов. Конечно, если вы что-то поменяли в '''main.cf''', нужно заставить &amp;lt;font color=&amp;quot;darkred&amp;quot;&amp;gt;postfix&amp;lt;/font&amp;gt; перечитать его:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 # service postfix reload&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Конечно, надо также обеспечить, чтобы MX-записи в DNS для всех трех доменов ссылались на сервер &amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;'''&amp;lt;nowiki&amp;gt;mail.example.com&amp;lt;/nowiki&amp;gt;'''&amp;lt;/font&amp;gt;. Однако эта методика имеет ограниченное применение, поскольку у всех доменов – общее пространство имен: так, почта на &amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;'''&amp;lt;nowiki&amp;gt;anna@example.com&amp;lt;/nowiki&amp;gt;'''&amp;lt;/font&amp;gt;, &amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;'''&amp;lt;nowiki&amp;gt;anna@example.org&amp;lt;/nowiki&amp;gt;'''&amp;lt;/font&amp;gt; и &amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;'''&amp;lt;nowiki&amp;gt;anna@example.net&amp;lt;/nowiki&amp;gt;'''&amp;lt;/font&amp;gt; будет в конце концов сохранена в одном и том же месте. И, конечно, Ане (и всем другим получателям почты) нужна учетная запись Linux на сервере.&lt;br /&gt;
&lt;br /&gt;
Более гибкое решение – использовать так называемые «виртуальные» почтовые домены. При таком способе каждый домен имеет отдельное пространство имен, и письма для &amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;'''&amp;lt;nowiki&amp;gt;anna@example.com&amp;lt;/nowiki&amp;gt;'''&amp;lt;/font&amp;gt; и &amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;'''&amp;lt;nowiki&amp;gt;anna@example.net&amp;lt;/nowiki&amp;gt;'''&amp;lt;/font&amp;gt; окажутся в разных хранилищах почты. Получателю также не требуется иметь системную учетную запись Linux. Но зато требуется чуть больше работы по настройке...&lt;br /&gt;
&lt;br /&gt;
Требуемые для этого строки в '''main.cf''' показаны в Листинге А ниже. Учтите, что номера строк проставлены только для удобства ссылки: в файле их нет.&lt;br /&gt;
&lt;br /&gt;
{{Врезка&lt;br /&gt;
    |Заголовок=Альтернативы&lt;br /&gt;
    |Содержание=Как всегда в Linux, существует несколько программных решений для построения почтового сервера. Для MTA вы можете использовать ''Postfix'', ''Exim'' или почтенный ''Sendmail''. ''Postfix'' – самый юный; он написан Вьетсе Венема &amp;lt;nowiki&amp;gt;[Wietse Venema]&amp;lt;/nowiki&amp;gt; в 1999 году, имеет прекрасную репутацию по безопасности и служит MTA по умолчанию во многих текущих дистрибутивах Linux. Exim был разработан в 1995 году в Кембриджском университете Филипом Хейзелом &amp;lt;nowiki&amp;gt;[Philip Hazel]&amp;lt;/nowiki&amp;gt;. ''Sendmail'' написан Эриком Оллманом &amp;lt;nowiki&amp;gt;[Eric Allman]&amp;lt;/nowiki&amp;gt; в 1983 году; много лет он тянул на себе большинство интернет-почты, и стало почти обязательным ссылаться на него, как на «почтенный», хотя у него самый непонятный файл конфигурации по эту сторону Бетельгейзе. Для MAA тоже есть выбор. Это может быть IMAP-сервер ''Cyrus'', ''Courier'', ''qpopper'', инструментарий IMAP University of Washington, Dovecot и другие. Более подробный список и сравнение почтовых серверов вы можете найти на http://en.wikipedia.org/wiki/Comparison_of_mail_servers.&lt;br /&gt;
    |Ширина=200px}}&lt;br /&gt;
&lt;br /&gt;
===ЛИСТИНГ A===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;ini&amp;quot; line=&amp;quot;GESHI_NORMAL_LINE_NUMBERS&amp;quot;&amp;gt;&lt;br /&gt;
virtual_mailbox_domains = example.com example.org example.net&lt;br /&gt;
virtual_mailbox_base = /var/spool/vmail&lt;br /&gt;
virtual_mailbox_maps = hash:/etc/Postfix/virtual_mailbox_map&lt;br /&gt;
virtual_uid_maps = static:550&lt;br /&gt;
virtual_gid_maps = static:101&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Строка 1 в ''Листинге А'' содержит список доменов, которые будут поддерживаться. Их надо удалить из параметра &amp;lt;font color=&amp;quot;darkred&amp;quot;&amp;gt;mydestination&amp;lt;/font&amp;gt;, так как они теперь будут обрабатываться с использованием «виртуального» агента доставки ''Postfix'', и «локальный» агент им больше не нужен.&lt;br /&gt;
&lt;br /&gt;
Если список доменов по-настоящему большой, вы можете предпочесть поместить его в отдельный файл, например, '''/etc/postfix/virtual_domains''', по образцу:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  # list of virtual domains for postfix&lt;br /&gt;
         example.com&lt;br /&gt;
         example.net&lt;br /&gt;
         example.org&lt;br /&gt;
  # ... and lots more ...&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
и ссылаться на этот файл через параметр &amp;lt;font color=&amp;quot;darkred&amp;quot;&amp;gt;virtual_mailbox_domains&amp;lt;/font&amp;gt; в '''main.cf''':&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  virtual_mailbox_domains = /etc/postfix/virtual_domains&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Аналогично, многие параметры в '''main.cf''' могут иметь список требуемых значений, помещенный в отдельный файл.&lt;br /&gt;
&lt;br /&gt;
Строка 2 в ''Листинге А'' задает директорию верхнего уровня, где должны сохраняться сообщения. Очевидно, надо выбрать схему, совместимую с нашими POP- и IMAP-серверами. Здесь выбрано одно из множества возможных решений.&lt;br /&gt;
&lt;br /&gt;
Создадим то, что ''Postfix'' называет «картой» – для отметки, где получатели почтовых адресов будут сохранять сообщения относительно заданного &amp;lt;font color=&amp;quot;darkred&amp;quot;&amp;gt;virtual_mailbox_base&amp;lt;/font&amp;gt;. Я создал простую карту в файле, который назвал '''/etc/postfix/virtual_mailbox_map''':&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 anna@example.com anna&lt;br /&gt;
 anna@example.net anna_smith&lt;br /&gt;
 chris@example.org cbrown&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Теперь, например, письмо, посланное на &amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;'''&amp;lt;nowiki&amp;gt;anna@example.net&amp;lt;/nowiki&amp;gt;'''&amp;lt;/font&amp;gt;, будет сохранено в '''/var/spool/vmail/anna_smith'''; письмо, посланное на адрес &amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;'''&amp;lt;nowiki&amp;gt;chris@example.org&amp;lt;/nowiki&amp;gt;'''&amp;lt;/font&amp;gt;, «упадет» в '''/var/spool/vmail/cbrown''', и так далее. Заметьте, что здесь не требуется совпадения видимых снаружи имен пользователей (в нашем примере, '''&amp;lt;font color=&amp;quot;darkred&amp;quot;&amp;gt;anna&amp;lt;/font&amp;gt;''' и '''&amp;lt;font color=&amp;quot;darkred&amp;quot;&amp;gt;chris&amp;lt;/font&amp;gt;''') со внутренними именами (&amp;lt;font color=&amp;quot;darkred&amp;quot;&amp;gt;anna_smith&amp;lt;/font&amp;gt; и &amp;lt;/font color=&amp;quot;darkred&amp;quot;&amp;gt;cbrown&amp;lt;/font&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
Конвертируем этот файл в «карту», используя команду postmap:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  # postmap /etc/postfix/virtual_mailbox_map&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
В результате появится файл '''virtual_mailbox_map.db'''. Карта, в данном случае, просто вид индексированной структуры данных, ключи которой могут быть эффективно просмотрены ''Postfix''. ''Postfix'' поддерживает несколько типов «карт»; по умолчанию это обычно «хэш».&lt;br /&gt;
&lt;br /&gt;
Далее, в строке 3 ''Листинга А'', вы сообщаете ''Postfix'', где находится карта.&lt;br /&gt;
&lt;br /&gt;
''Postfix'' нуждается в отождествлении пользователя, используемом для доставки сообщения в хранилище. Возможно задание нескольких карт (&amp;lt;font color=&amp;quot;darkred&amp;quot;&amp;gt;uid_map&amp;lt;/font&amp;gt; и &amp;lt;font color=&amp;quot;darkred&amp;quot;&amp;gt;gid_map&amp;lt;/font&amp;gt;), определяющих отдельные отождествления для всех и каждого получателя, но мы сделаем проще и используем одну и ту же личность для всех получателей. Я создал пользователя с именем '''&amp;lt;font color=&amp;quot;darkred&amp;quot;&amp;gt;postmanpat&amp;lt;/font&amp;gt;''' для этой цели.&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  # useradd -d /var/spool/vmail -g postdrop -u 550 -m postmanpat&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Отметим, что домашняя директория '''&amp;lt;font color=&amp;quot;darkred&amp;quot;&amp;gt;postmanpat&amp;lt;/font&amp;gt;''' находится в моей выбранной директории '''virtual_ mailbox_base'''. Далее я смягчил права доступа в '''/var/spool/vmail''', чтобы Dovecot мог ей воспользоваться.&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  # chmod 755 /var/spool/vmail&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Нет необходимости предварительно создавать файл сохраненных сообщений для индивидуальных получателей – ''Postfix'' сделает это по требованию. Наконец, строки 4 и 5 Листинга А задают тождество пользователя и группы, которые ''Postfix'' будет использовать для помещения сообщений в хранилище. Они соответствуют ID пользователя &amp;lt;font color=&amp;quot;darkred&amp;quot;&amp;gt;postmanpat&amp;lt;/font&amp;gt; и группы &amp;lt;font color=&amp;quot;darkred&amp;quot;&amp;gt;postdrop&amp;lt;/font&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
После внесения данных изменений та часть, за которую отвечает ''Postfix'', должна работать. Возвратитесь к клиентской машине и пошлите тестовое сообщение на &amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;'''&amp;lt;nowiki&amp;gt;chris@example.org&amp;lt;/nowiki&amp;gt;'''&amp;lt;/font&amp;gt;. На сервере проверьте, что это сообщение появилось в '''/var/spool/vmail/cbrown'''. Если да, то доставка ''Postfix'' на виртуальные почтовые домены работает!&lt;br /&gt;
&lt;br /&gt;
На стороне ''Dovecot'' я просто изменил определение параметра &amp;lt;font color=&amp;quot;darkred&amp;quot;&amp;gt;mail_location&amp;lt;/font&amp;gt; на следующее:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  mail_location = mbox:~/mail:INBOX=/var/spool/vmail/%n&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Продолжение следует===&lt;br /&gt;
&lt;br /&gt;
Пока мы не касались аутентификации POP3 при входе в ''Dovecot''. В текущем состоянии, чтобы Dovecot заработал, вам необходимо создать очередные учетные записи Linux пользователям anna, anna_smith и cbrown, для новой аутентификации ''Dovecot''. Чтобы виртуальные домены применялись правильно, необходимо рассмотреть вопрос об аутентификации учетных записей POP3 через базу данных пользователей, не зависящую от учетных записей Linux. На данном уроке уже подпущено достаточно ежей под череп, но в следующем номере ''Linux Format'' я попытаюсь решить вопрос об аутентификации внутри почтовых систем и в ''Postfix'' и в ''Dovecot''. Пишите на [[mailto://answers@linuxformat.ru|answers@linuxformat.ru]], если у вас возникнут проблемы с вашим почтовым сервером. '''LXF'''&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
===Решение проблем (врезка)===&lt;br /&gt;
&lt;br /&gt;
[[Изображение:LXF103_68_1.png|thumb|300px|Пример использования команды telnet.]]&lt;br /&gt;
&lt;br /&gt;
Если вы не можете передать и принять почту, используя ваш почтовый сервер, попробуйте проверить следующее:&lt;br /&gt;
&lt;br /&gt;
1. На клиенте проверьте, что почтовый сервер пингуется по его IP-адресу и имени, используя команды:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 # ping 192.168.0.41&lt;br /&gt;
 # ping mail.example.com&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
(Естественно, подставьте сюда IP-адреc вашего сервера.)&lt;br /&gt;
&lt;br /&gt;
2. На сервере проверьте, что серверы SMTP и POP слушают соединения, используя команду&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 # netstat -at&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Вы должны увидеть LISTEN в конце информации о портах SMTP и POP3.&lt;br /&gt;
&lt;br /&gt;
3. На клиенте, попробуйте использовать telnet для соединения с портом 25 на почтовом сервере, используя команду:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 # telnet mail.example.com 25&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Вы должны получить отклик с сервера типа такого:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 220 mail.example.com ESMTP Postfix&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Если вы знакомы с SMTP-протоколом, можете вести полный SMTP-диалог вручную и по-настоящему отправить почтовое сообщение. См. экранный снимок справа с примером такого диалога.&lt;br /&gt;
&lt;br /&gt;
4. На сервере проверьте, что брандмауэр не блокирует доступ к портам 25 (SMTP) и 110 (POP3), используя команду:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 # iptables -L&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Если вы не уверены, отключите брандмауэр командой:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 # itables -F&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
и попробуйте снова. Не забудьте потом восстановить работоспособность брандмауэра.&lt;br /&gt;
&lt;br /&gt;
5. На сервере поищите разгадку в системных журналах почты (обычно /var/log/maillog).&lt;br /&gt;
&lt;br /&gt;
[[Категория:Учебники]]&lt;br /&gt;
[[Категория:Hardcore Linux]]&lt;br /&gt;
[[Категория:Крис Браун]]&lt;/div&gt;</summary>
		<author><name>Kipruss</name></author>	</entry>

	<entry>
		<id>http://wiki.linuxformat.ru/wiki/LXF103:Hardcore_Linux</id>
		<title>LXF103:Hardcore Linux</title>
		<link rel="alternate" type="text/html" href="http://wiki.linuxformat.ru/wiki/LXF103:Hardcore_Linux"/>
				<updated>2009-03-28T22:22:12Z</updated>
		
		<summary type="html">&lt;p&gt;Kipruss: /* Продолжение следует */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Почта: собери свой сервер==&lt;br /&gt;
&lt;br /&gt;
Большинство людей пользуется электронной почтой, понятия не имея, как она работает. Светоч знаний '''д-ра Криса Брауна''' рассеет тьму невежества.&lt;br /&gt;
&lt;br /&gt;
Чтобы вы могли представить, с чем вообще едят почтовый сервер, взгляните на '''Рис. 1''': там показана схема доставки почты в Интернете.&lt;br /&gt;
&lt;br /&gt;
[[Изображение:LXF103_67_1.png|thumb|300px|Рис. 1: Один день из жизни почтового сообщения.]]&lt;br /&gt;
&lt;br /&gt;
Проследим продвижение почтового сообщения на его пути через Интернет от отправителя к получателю и разберемся, как все компоненты работают совместно. Пусть Маша сидит за своим компьютером и составляет электронное послание, используя почтовый клиент (Mail User Agent – MUA). В мире Linux клиент Маши будет чем-то вроде ''Evolution'' или ''KMail''. Она пишет своей маме Ане, электронный адрес которой '''&amp;lt;nowiki&amp;gt;anna@example.com&amp;lt;/nowiki&amp;gt;'''. Когда Маша нажимает кнопку Послать, ее MUA соединяется с Mail Transport Agent (MTA – почтовым транспортным агентом), на который Маша настроила свой MUA для отправки почты. Обычно MTA предоставляется Маше ее интернет-провайдером (ISP). MUA и MTA говорят друг с другом на языке протокола SMTP (Simple Mail Transfer Protocol – простой протокол передачи почты), организовывая доставку сообщений. В ходе этого диалога MUA определяет получателя сообщения и передает текст письма.&lt;br /&gt;
&lt;br /&gt;
MTA отвечает за «дальнюю перевозку» сообщения. Он сделает запрос к DNS (Domain Name System, системе доменных имен) на поиск записи MX (Mail Exchanger), которая скажет ему, какая машина действует как почтовый сервер для домена '''&amp;lt;nowiki&amp;gt;example.com&amp;lt;/nowiki&amp;gt;''', где расположен Анин почтовый ящик. Из этого запроса он может узнать, что почтовый сервер, допустим, '''&amp;lt;nowiki&amp;gt;mail.example.com&amp;lt;/nowiki&amp;gt;'''. MTA Маши теперь соединяется с MTA на '''&amp;lt;nowiki&amp;gt;mail.example.com&amp;lt;/nowiki&amp;gt;''', снова использует SMTP для указания получателя письма и передает тело сообщения. Принимающий MTA проверяет, что он и вправду почтовый сервер для домена получателя, а потом уж дает согласие на прием. Если все проходит нормально, принимающий MTA передает сообщение MDA (Mail Delivery Agent – почтовому агенту доставки), который сохраняет сообщение в хранилище сообщений (оно находится в файловой системе почтового сервера). Для этого сообщения работа MTA выполнена.&lt;br /&gt;
&lt;br /&gt;
Аня проводит выходные с дядей Васей, помогая ему разбирать чердак, и не может в эти дни читать почту. Но когда она доберется до компьютера, ее почтовый клиент соединится с Mail Access Agent (MAA – агентом доступа к почте) на ее почтовом сервере &amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;'''&amp;lt;nowiki&amp;gt;example.com&amp;lt;/nowiki&amp;gt;'''&amp;lt;/font&amp;gt; для проверки почты, которую MTA ее домена сохранил в ее хранилище. Ее MUA может использовать для этого один или два протокола. Чаще всего это Post Office Protocol (POP3 – почтовый протокол) версии 3. POP – это протокол, который скачивает почту с почтового сервера, затем (как правило) удаляет ее с сервера и оставляет ее на клиенте (компьютере в Аниной квартире), обеспечивая долговременное хранение сообщения. Но если Аня работает в корпорации Example.Com, данное учреждение может иметь почтовый сервер, работающий по протоколу IMAP4. IMAP расшифровывается как Internet Message Access Protocol [интернетпротокол доступа к сообщениям]; он позволяет Аниному MUA получать доступ к ее почтовому архиву, но долговременное хранение писем происходит на сервере (хотя некоторые MUA поддерживают локальные копии). Благодаря IMAP можно подключаться к серверу с любого компьютера с IMAP-клиентом и видеть весь почтовый архив – а вот если бы вы читали почту, используя POP на разных машинах, то в итоге ваши письма были бы раскиданы по этим машинам, что я знаю по своему горькому опыту.&lt;br /&gt;
&lt;br /&gt;
Наш почтовый сервер изображен на Рисунке 1 как большой серый квадрат в правом верхнем углу. В реальности необходимы два компьютера – один для почтового сервера, другой для клиента. Возьмем ''Postfix'' как SMTP-сервер и ''Dovecot'' как почтовый POP3-сервер. На почтовом сервере моя основная ОС – CentOS 5 (CentOS – это клон Red Hat Enterprise Linux), но конфигурация и операции с ''Postfix'' и ''Dovecot'' не зависят от используемого дистрибутива Linux. Клиентская машина может быть любой. В моем случае на ней Ubuntu 7.04 с ''Evolution'' в качестве MUA.&lt;br /&gt;
&lt;br /&gt;
===Начнем: Mail Transfer Agent===&lt;br /&gt;
&lt;br /&gt;
Сперва мы установим ''Postfix''. Но предварительно проверим: вдруг ''Sendmail'' уже установлен и запущен. На системах типа Red Hat это могут сделать следующие команды:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 # rpm -q sendmail&lt;br /&gt;
 # service sendmail status&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Если ''Sendmail'' запущен, надо его остановить и позаботиться, чтобы он не запустился после перезагрузки:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 # service sendmail stop&lt;br /&gt;
 # chkconfig sendmail --del&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
При наличии на вашей машине включенного брандмауэра, вы должны открыть порт для SMTP (tcp/25).&lt;br /&gt;
&lt;br /&gt;
Моя собственная установка ''Postfix'' споткнулась, обнаружив отсутствие административной группы под названием &amp;lt;font color=&amp;quot;darkred&amp;quot;&amp;gt;postdrop&amp;lt;/font&amp;gt;. То есть до установки пакетов нужно было создать эту группу:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 # groupadd -r postdrop&lt;br /&gt;
 # yum install postfix&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Возможно, эта проблема касается только моего дистрибутива, и на вашей системе такого не произойдет.&lt;br /&gt;
&lt;br /&gt;
Для обеспечения запуска сервиса ''Postfix'' при загрузке, запустите команду&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  # chkconfig --add postfix&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Файл настройки ''Postfix'' – '''/etc/postfix/main.cf'''. Фактически, ''Postfix'' должен заработать «из коробки» как простой почтовый сервер с минимальной доработкой готовой конфигурации, но есть несколько параметров, требующих внимания. Так, строку в '''main.cf'''&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  inet_interfaces = localhost&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
нужно заменить на&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  inet_interfaces = all&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Это мы велим ''Postfix'' слушать SMTP соединения на всех сетевых интерфейсах машины, а не только на локальном (localhost).&lt;br /&gt;
&lt;br /&gt;
Далее проверим установки параметра &amp;lt;font color=&amp;quot;darkred&amp;quot;&amp;gt;myhostname&amp;lt;/font&amp;gt;. Он определяет FQDN этой почтовой системы. Если он не определен, то по умолчанию берется имя хоста машины, на которой запущен сервер, возвращаемое командой &amp;lt;font color=&amp;quot;darkred&amp;quot;&amp;gt;hostname&amp;lt;/font&amp;gt;. Так, если ваш хост – &amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;'''&amp;lt;nowiki&amp;gt;mail.example.com&amp;lt;/nowiki&amp;gt;'''&amp;lt;/font&amp;gt;, это имя и будет принято по умолчанию.&lt;br /&gt;
&lt;br /&gt;
Наконец, параметр &amp;lt;font color=&amp;quot;darkred&amp;quot;&amp;gt;mydestination&amp;lt;/font&amp;gt; задает список доменов, которые эта машина считает для себя пунктом назначения (то есть домены, для которых машина сохраняет сообщения). Минимальное значение этого параметра должно походить на следующее:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  mydestination = example.com&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Установив все эти параметры, можно запускать ''Postfix''. На RedHat-совместимых системах это делается командой&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  # service postfix start&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Далее, я создал учетную запись для пользователя &amp;lt;font color=&amp;quot;darkred&amp;quot;&amp;gt;anna&amp;lt;/font&amp;gt; и установил пароль:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 # useradd anna&lt;br /&gt;
 # passwd anna&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Без них не обойтись, потому что «локальный» агент доставки почты в ''Postfix'' требует, чтобы получатель имел учетную запись в Linux-системе: по ней происходит аутентификация в ''Dovecot'' (который мы рассмотрим чуть позже).&lt;br /&gt;
&lt;br /&gt;
Теперь у нас все готово для теста доставки почты в хранилище сообщений. На моей настольной системе с Ubuntu я создал запись в файле '''/etc/hosts''', возвращающую IP-адрес машины '''&amp;lt;nowiki&amp;gt;mail.example.com&amp;lt;/nowiki&amp;gt;'''. В моем случае строка выглядела так:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 192.168.0.41 mail.example.com&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
В реальности, почтовый сервер должен иметь DNS-запись, и вам не нужно задавать ее в '''/etc/hosts'''. Затем я сконфигурировал «учетную запись» в моем MUA (''Evolution'') на использование SMTP-сервера &amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;'''&amp;lt;nowiki&amp;gt;mail.example.com&amp;lt;/nowiki&amp;gt;'''&amp;lt;/font&amp;gt; для исходящих сообщений. Я включил эту учетную запись Evolution и отключил остальные. Затем я попытался послать несколько писем на &amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;'''&amp;lt;nowiki&amp;gt;anna@example.com&amp;lt;/nowiki&amp;gt;'''&amp;lt;/font&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Сработало? Ну, тот факт, что письма исчезли из моих Исходящих [Outbox] в ''Evolution'', уже обнадеживал, но лучший способ проверки – найти сообщения сохраненными на почтовом сервере. Что выводит нас на ...&lt;br /&gt;
&lt;br /&gt;
===Хранилище сообщений===&lt;br /&gt;
&lt;br /&gt;
Традиционный способ хранения сообщений на почтовом сервере известен как формат Mbox: для каждого пользователя хранится отдельный текстовый файл. Имя этого файла совпадает с именем учетной записи пользователя, чью почту он хранит, а каталог определяется параметром &amp;lt;font color=&amp;quot;darkred&amp;quot;&amp;gt;mail_spool_directory&amp;lt;/font&amp;gt; настройки ''Postfix'' (обычно '''/var/spool/mail''' или '''/var/mail'''). Например, Анины сообщения могут заноситься в '''/var/spool/mail/anna'''. Внутри этого файла каждое сообщение начинается строкой с первым словом “&amp;lt;font color=&amp;quot;darkred&amp;quot;&amp;gt;From&amp;lt;/font&amp;gt;” и заканчивается пустой строкой. (Вас может сбить с толку наличие в этом файле других строк, тоже начинающихся на “From:” – заметили двоеточие? Это часть заголовков сообщения.) Надеюсь, ''Postfix'' вписал мое тестовое сообщение в этот файл.&lt;br /&gt;
&lt;br /&gt;
Альтернативная схема хранения сообщений (также называемая форматом Maildir) использует отдельную директорию для каждого пользователя (обычно это поддиректория с названием '''maildir''' внутри домашнего каталога пользователя) и, внутри нее, отдельный файл для каждого сообщения. При этом меньше шансов заблокировать или угробить все сообщения разом, чем в формате Mbox.&lt;br /&gt;
&lt;br /&gt;
Если посланное вами сообщение появилось в хранилище, пора перейти к нашему POP3-серверу. Если его нет, прочитайте советы во врезке ''Решение проблем'', внизу .&lt;br /&gt;
&lt;br /&gt;
===Установка и настройка Dovecot===&lt;br /&gt;
&lt;br /&gt;
На моей CentOS для установки ''Dovecot'' надо всего лишь скомандовать:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 # yum install dovecot&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Теперь нужно найти файл конфигурации ''Dovecot''. Обычно это '''/etc/dovecot.conf'''. Как типичный современный файл конфигурации, он довольно длинен (более 1000 строк), но почти целиком состоит из комментариев. Как оказалось, мне нужно было изменить две строчки; одна задает протокол(ы), которые должен обслуживать ''Dovecot'', а вторая говорит, где находятся файлы почтового ящика. Эти два параметра я изменил так:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 protocols = pop3&lt;br /&gt;
     mail_location = mbox:~/mail:INBOX=/var/spool/mail/%n&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Первая строка говорит, что мы будем использовать только протокол POP3. Во второй строке, установка &amp;lt;font color=&amp;quot;darkred&amp;quot;&amp;gt;INBOX&amp;lt;/font&amp;gt; использует специальный параметр &amp;lt;font color=&amp;quot;darkred&amp;quot;&amp;gt;%n&amp;lt;/font&amp;gt; для замены именем пользователя, под которым мы зашли проверить почту (в нашем примере – “&amp;lt;font color=&amp;quot;darkred&amp;quot;&amp;gt;anna&amp;lt;/font&amp;gt;”). Заметим, что значение параметра &amp;lt;font color=&amp;quot;darkred&amp;quot;&amp;gt;INBOX&amp;lt;/font&amp;gt; должно совпадать с расположением хранилища почты, указанном в ''Postfix''.&lt;br /&gt;
&lt;br /&gt;
Если у вас на почтовом сервере запущен брандмауэр, нужно также открыть порт POP3 (110/tcp).&lt;br /&gt;
&lt;br /&gt;
Теперь мы готовы к запуску сервиса:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 # service dovecot start&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Пора тестировать. На клиенте, в настройках MUA мне необходимо установить для приема почты использование протокола POP и сервера &amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;'''&amp;lt;nowiki&amp;gt;mail.example.com&amp;lt;/nowiki&amp;gt;'''&amp;lt;/font&amp;gt;, затем задать имя '''&amp;lt;font color=&amp;quot;darkred&amp;quot;&amp;gt;anna&amp;lt;/font&amp;gt;''' и отключить опции шифрования, предлагаемые MUA. Теперь я готов принять мои сообщения. В этом пункте мой MUA должен (надеюсь) запросить пароль '''&amp;lt;font color=&amp;quot;darkred&amp;quot;&amp;gt;anna&amp;lt;/font&amp;gt;''', а мне необходимо предоставить пароль, который я задал, создавая ее учетную запись Linux на сервере. Если все пройдет гладко, вы должны увидеть ранее посланные письма появившимися во Входящих MUA. И если вы вернетесь на сервер, то обнаружите, что сообщения исчезли из хранилища &amp;lt;font color=&amp;quot;darkred&amp;quot;&amp;gt;anna&amp;lt;/font&amp;gt;. Если опять ничего не выйдет, обратитесь ко врезке ''Решение проблем''.&lt;br /&gt;
&lt;br /&gt;
===Ура, оно работает!===&lt;br /&gt;
&lt;br /&gt;
Если вы дошли досюда, поздравляем! У вас появился работающий почтовый сервер. Как обычно, я создавал максимально простую конфигурацию, чтобы все поскорее заработало. Однако эта реализация подразумевает несколько допущений: во-первых, почтовый сервер обслуживает только один домен (&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;'''&amp;lt;nowiki&amp;gt;example.com&amp;lt;/nowiki&amp;gt;'''&amp;lt;/font&amp;gt;), а во-вторых, все пользователи, желающие получать почту, имеют учетные записи Linux на почтовом сервере. Это последнее ограничение задается как со стороны локального агента доставки в ''Postfix'', так и ''Dovecot'', который, в своей конфигурации по умолчанию, требует действующей учетной записи Linux для аутентификации пользователей, для входа через POP и получения электронной почты. Отметим также, что в нашей конфигурации MTA (''Postfix'') не требуется аутентификации пользователя, в отличие от MAA (''Dovecot'').&lt;br /&gt;
&lt;br /&gt;
===Поддерживаем несколько доменов===&lt;br /&gt;
&lt;br /&gt;
В реальных условиях одной машине приходится быть почтовым сервером для множества доменов. Самый простой путь это обеспечить – добавить домены в параметр mydestination в '''/etc/Postfix/main.cf'''. Например, установка:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 mydestination = example.com example.org example.net &lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
велит Postfix принимать почту для трех указанных доменов. Конечно, если вы что-то поменяли в '''main.cf''', нужно заставить &amp;lt;font color=&amp;quot;darkred&amp;quot;&amp;gt;postfix&amp;lt;/font&amp;gt; перечитать его:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 # service postfix reload&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Конечно, надо также обеспечить, чтобы MX-записи в DNS для всех трех доменов ссылались на сервер &amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;'''&amp;lt;nowiki&amp;gt;mail.example.com&amp;lt;/nowiki&amp;gt;'''&amp;lt;/font&amp;gt;. Однако эта методика имеет ограниченное применение, поскольку у всех доменов – общее пространство имен: так, почта на &amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;'''&amp;lt;nowiki&amp;gt;anna@example.com&amp;lt;/nowiki&amp;gt;'''&amp;lt;/font&amp;gt;, &amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;'''&amp;lt;nowiki&amp;gt;anna@example.org&amp;lt;/nowiki&amp;gt;'''&amp;lt;/font&amp;gt; и &amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;'''&amp;lt;nowiki&amp;gt;anna@example.net&amp;lt;/nowiki&amp;gt;'''&amp;lt;/font&amp;gt; будет в конце концов сохранена в одном и том же месте. И, конечно, Ане (и всем другим получателям почты) нужна учетная запись Linux на сервере.&lt;br /&gt;
&lt;br /&gt;
Более гибкое решение – использовать так называемые «виртуальные» почтовые домены. При таком способе каждый домен имеет отдельное пространство имен, и письма для &amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;'''&amp;lt;nowiki&amp;gt;anna@example.com&amp;lt;/nowiki&amp;gt;'''&amp;lt;/font&amp;gt; и &amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;'''&amp;lt;nowiki&amp;gt;anna@example.net&amp;lt;/nowiki&amp;gt;'''&amp;lt;/font&amp;gt; окажутся в разных хранилищах почты. Получателю также не требуется иметь системную учетную запись Linux. Но зато требуется чуть больше работы по настройке...&lt;br /&gt;
&lt;br /&gt;
Требуемые для этого строки в '''main.cf''' показаны в Листинге А ниже. Учтите, что номера строк проставлены только для удобства ссылки: в файле их нет.&lt;br /&gt;
&lt;br /&gt;
{{Врезка&lt;br /&gt;
    |Заголовок=Альтернативы&lt;br /&gt;
    |Содержание=Как всегда в Linux, существует несколько программных решений для построения почтового сервера. Для MTA вы можете использовать ''Postfix'', ''Exim'' или почтенный ''Sendmail''. ''Postfix'' – самый юный; он написан Вьетсе Венема &amp;lt;nowiki&amp;gt;[Wietse Venema]&amp;lt;/nowiki&amp;gt; в 1999 году, имеет прекрасную репутацию по безопасности и служит MTA по умолчанию во многих текущих дистрибутивах Linux. Exim был разработан в 1995 году в Кембриджском университете Филипом Хейзелом &amp;lt;nowiki&amp;gt;[Philip Hazel]&amp;lt;/nowiki&amp;gt;. ''Sendmail'' написан Эриком Оллманом &amp;lt;nowiki&amp;gt;[Eric Allman]&amp;lt;/nowiki&amp;gt; в 1983 году; много лет он тянул на себе большинство интернет-почты, и стало почти обязательным ссылаться на него, как на «почтенный», хотя у него самый непонятный файл конфигурации по эту сторону Бетельгейзе. Для MAA тоже есть выбор. Это может быть IMAP-сервер ''Cyrus'', ''Courier'', ''qpopper'', инструментарий IMAP University of Washington, Dovecot и другие. Более подробный список и сравнение почтовых серверов вы можете найти на http://en.wikipedia.org/wiki/Comparison_of_mail_servers.&lt;br /&gt;
    |Ширина=200px}}&lt;br /&gt;
&lt;br /&gt;
===ЛИСТИНГ A===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;ini&amp;quot; line=&amp;quot;GESHI_NORMAL_LINE_NUMBERS&amp;quot;&amp;gt;&lt;br /&gt;
virtual_mailbox_domains = example.com example.org example.net&lt;br /&gt;
virtual_mailbox_base = /var/spool/vmail&lt;br /&gt;
virtual_mailbox_maps = hash:/etc/Postfix/virtual_mailbox_map&lt;br /&gt;
virtual_uid_maps = static:550&lt;br /&gt;
virtual_gid_maps = static:101&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Строка 1 в ''Листинге А'' содержит список доменов, которые будут поддерживаться. Их надо удалить из параметра &amp;lt;font color=&amp;quot;darkred&amp;quot;&amp;gt;mydestination&amp;lt;/font&amp;gt;, так как они теперь будут обрабатываться с использованием «виртуального» агента доставки ''Postfix'', и «локальный» агент им больше не нужен.&lt;br /&gt;
&lt;br /&gt;
Если список доменов по-настоящему большой, вы можете предпочесть поместить его в отдельный файл, например, '''/etc/postfix/virtual_domains''', по образцу:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  # list of virtual domains for postfix&lt;br /&gt;
         example.com&lt;br /&gt;
         example.net&lt;br /&gt;
         example.org&lt;br /&gt;
  # ... and lots more ...&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
и ссылаться на этот файл через параметр &amp;lt;font color=&amp;quot;darkred&amp;quot;&amp;gt;virtual_mailbox_domains&amp;lt;/font&amp;gt; в '''main.cf''':&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  virtual_mailbox_domains = /etc/postfix/virtual_domains&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Аналогично, многие параметры в '''main.cf''' могут иметь список требуемых значений, помещенный в отдельный файл.&lt;br /&gt;
&lt;br /&gt;
Строка 2 в ''Листинге А'' задает директорию верхнего уровня, где должны сохраняться сообщения. Очевидно, надо выбрать схему, совместимую с нашими POP- и IMAP-серверами. Здесь выбрано одно из множества возможных решений.&lt;br /&gt;
&lt;br /&gt;
Создадим то, что ''Postfix'' называет «картой» – для отметки, где получатели почтовых адресов будут сохранять сообщения относительно заданного &amp;lt;font color=&amp;quot;darkred&amp;quot;&amp;gt;virtual_mailbox_base&amp;lt;/font&amp;gt;. Я создал простую карту в файле, который назвал '''/etc/postfix/virtual_mailbox_map''':&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 anna@example.com anna&lt;br /&gt;
 anna@example.net anna_smith&lt;br /&gt;
 chris@example.org cbrown&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Теперь, например, письмо, посланное на &amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;'''&amp;lt;nowiki&amp;gt;anna@example.net&amp;lt;/nowiki&amp;gt;'''&amp;lt;/font&amp;gt;, будет сохранено в '''/var/spool/vmail/anna_smith'''; письмо, посланное на адрес &amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;'''&amp;lt;nowiki&amp;gt;chris@example.org&amp;lt;/nowiki&amp;gt;'''&amp;lt;/font&amp;gt;, «упадет» в '''/var/spool/vmail/cbrown''', и так далее. Заметьте, что здесь не требуется совпадения видимых снаружи имен пользователей (в нашем примере, '''&amp;lt;font color=&amp;quot;darkred&amp;quot;&amp;gt;anna&amp;lt;/font&amp;gt;''' и '''&amp;lt;font color=&amp;quot;darkred&amp;quot;&amp;gt;chris&amp;lt;/font&amp;gt;''') со внутренними именами (&amp;lt;font color=&amp;quot;darkred&amp;quot;&amp;gt;anna_smith&amp;lt;/font&amp;gt; и &amp;lt;/font color=&amp;quot;darkred&amp;quot;&amp;gt;cbrown&amp;lt;/font&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
Конвертируем этот файл в «карту», используя команду postmap:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  # postmap /etc/postfix/virtual_mailbox_map&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
В результате появится файл '''virtual_mailbox_map.db'''. Карта, в данном случае, просто вид индексированной структуры данных, ключи которой могут быть эффективно просмотрены ''Postfix''. ''Postfix'' поддерживает несколько типов «карт»; по умолчанию это обычно «хэш».&lt;br /&gt;
&lt;br /&gt;
Далее, в строке 3 ''Листинга А'', вы сообщаете ''Postfix'', где находится карта.&lt;br /&gt;
&lt;br /&gt;
''Postfix'' нуждается в отождествлении пользователя, используемом для доставки сообщения в хранилище. Возможно задание нескольких карт (&amp;lt;font color=&amp;quot;darkred&amp;quot;&amp;gt;uid_map&amp;lt;/font&amp;gt; и &amp;lt;font color=&amp;quot;darkred&amp;quot;&amp;gt;gid_map&amp;lt;/font&amp;gt;), определяющих отдельные отождествления для всех и каждого получателя, но мы сделаем проще и используем одну и ту же личность для всех получателей. Я создал пользователя с именем '''&amp;lt;font color=&amp;quot;darkred&amp;quot;&amp;gt;postmanpat&amp;lt;/font&amp;gt;''' для этой цели.&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  # useradd -d /var/spool/vmail -g postdrop -u 550 -m postmanpat&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Отметим, что домашняя директория '''&amp;lt;font color=&amp;quot;darkred&amp;quot;&amp;gt;postmanpat&amp;lt;/font&amp;gt;''' находится в моей выбранной директории '''virtual_ mailbox_base'''. Далее я смягчил права доступа в '''/var/spool/vmail''', чтобы Dovecot мог ей воспользоваться.&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  # chmod 755 /var/spool/vmail&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Нет необходимости предварительно создавать файл сохраненных сообщений для индивидуальных получателей – ''Postfix'' сделает это по требованию. Наконец, строки 4 и 5 Листинга А задают тождество пользователя и группы, которые ''Postfix'' будет использовать для помещения сообщений в хранилище. Они соответствуют ID пользователя &amp;lt;font color=&amp;quot;darkred&amp;quot;&amp;gt;postmanpat&amp;lt;/font&amp;gt; и группы &amp;lt;font color=&amp;quot;darkred&amp;quot;&amp;gt;postdrop&amp;lt;/font&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
После внесения данных изменений та часть, за которую отвечает ''Postfix'', должна работать. Возвратитесь к клиентской машине и пошлите тестовое сообщение на &amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;'''&amp;lt;nowiki&amp;gt;chris@example.org&amp;lt;/nowiki&amp;gt;'''&amp;lt;/font&amp;gt;. На сервере проверьте, что это сообщение появилось в '''/var/spool/vmail/cbrown'''. Если да, то доставка ''Postfix'' на виртуальные почтовые домены работает!&lt;br /&gt;
&lt;br /&gt;
На стороне ''Dovecot'' я просто изменил определение параметра &amp;lt;font color=&amp;quot;darkred&amp;quot;&amp;gt;mail_location&amp;lt;/font&amp;gt; на следующее:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  mail_location = mbox:~/mail:INBOX=/var/spool/vmail/%n&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Продолжение следует===&lt;br /&gt;
&lt;br /&gt;
Пока мы не касались аутентификации POP3 при входе в ''Dovecot''. В текущем состоянии, чтобы Dovecot заработал, вам необходимо создать очередные учетные записи Linux пользователям anna, anna_smith и cbrown, для новой аутентификации ''Dovecot''. Чтобы виртуальные домены применялись правильно, необходимо рассмотреть вопрос об аутентификации учетных записей POP3 через базу данных пользователей, не зависящую от учетных записей Linux. На данном уроке уже подпущено достаточно ежей под череп, но в следующем номере ''Linux Format'' я попытаюсь решить вопрос об аутентификации внутри почтовых систем и в ''Postfix'' и в ''Dovecot''. Пишите на mailto://answers@linuxformat.ru, если у вас возникнут проблемы с вашим почтовым сервером. '''LXF'''&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
===Решение проблем (врезка)===&lt;br /&gt;
&lt;br /&gt;
[[Изображение:LXF103_68_1.png|thumb|300px|Пример использования команды telnet.]]&lt;br /&gt;
&lt;br /&gt;
Если вы не можете передать и принять почту, используя ваш почтовый сервер, попробуйте проверить следующее:&lt;br /&gt;
&lt;br /&gt;
1. На клиенте проверьте, что почтовый сервер пингуется по его IP-адресу и имени, используя команды:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 # ping 192.168.0.41&lt;br /&gt;
 # ping mail.example.com&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
(Естественно, подставьте сюда IP-адреc вашего сервера.)&lt;br /&gt;
&lt;br /&gt;
2. На сервере проверьте, что серверы SMTP и POP слушают соединения, используя команду&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 # netstat -at&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Вы должны увидеть LISTEN в конце информации о портах SMTP и POP3.&lt;br /&gt;
&lt;br /&gt;
3. На клиенте, попробуйте использовать telnet для соединения с портом 25 на почтовом сервере, используя команду:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 # telnet mail.example.com 25&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Вы должны получить отклик с сервера типа такого:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 220 mail.example.com ESMTP Postfix&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Если вы знакомы с SMTP-протоколом, можете вести полный SMTP-диалог вручную и по-настоящему отправить почтовое сообщение. См. экранный снимок справа с примером такого диалога.&lt;br /&gt;
&lt;br /&gt;
4. На сервере проверьте, что брандмауэр не блокирует доступ к портам 25 (SMTP) и 110 (POP3), используя команду:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 # iptables -L&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Если вы не уверены, отключите брандмауэр командой:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 # itables -F&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
и попробуйте снова. Не забудьте потом восстановить работоспособность брандмауэра.&lt;br /&gt;
&lt;br /&gt;
5. На сервере поищите разгадку в системных журналах почты (обычно /var/log/maillog).&lt;br /&gt;
&lt;br /&gt;
[[Категория:Учебники]]&lt;br /&gt;
[[Категория:Hardcore Linux]]&lt;br /&gt;
[[Категория:Крис Браун]]&lt;/div&gt;</summary>
		<author><name>Kipruss</name></author>	</entry>

	<entry>
		<id>http://wiki.linuxformat.ru/wiki/LXF103:Hardcore_Linux</id>
		<title>LXF103:Hardcore Linux</title>
		<link rel="alternate" type="text/html" href="http://wiki.linuxformat.ru/wiki/LXF103:Hardcore_Linux"/>
				<updated>2009-03-28T22:19:45Z</updated>
		
		<summary type="html">&lt;p&gt;Kipruss: викификация&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Почта: собери свой сервер==&lt;br /&gt;
&lt;br /&gt;
Большинство людей пользуется электронной почтой, понятия не имея, как она работает. Светоч знаний '''д-ра Криса Брауна''' рассеет тьму невежества.&lt;br /&gt;
&lt;br /&gt;
Чтобы вы могли представить, с чем вообще едят почтовый сервер, взгляните на '''Рис. 1''': там показана схема доставки почты в Интернете.&lt;br /&gt;
&lt;br /&gt;
[[Изображение:LXF103_67_1.png|thumb|300px|Рис. 1: Один день из жизни почтового сообщения.]]&lt;br /&gt;
&lt;br /&gt;
Проследим продвижение почтового сообщения на его пути через Интернет от отправителя к получателю и разберемся, как все компоненты работают совместно. Пусть Маша сидит за своим компьютером и составляет электронное послание, используя почтовый клиент (Mail User Agent – MUA). В мире Linux клиент Маши будет чем-то вроде ''Evolution'' или ''KMail''. Она пишет своей маме Ане, электронный адрес которой '''&amp;lt;nowiki&amp;gt;anna@example.com&amp;lt;/nowiki&amp;gt;'''. Когда Маша нажимает кнопку Послать, ее MUA соединяется с Mail Transport Agent (MTA – почтовым транспортным агентом), на который Маша настроила свой MUA для отправки почты. Обычно MTA предоставляется Маше ее интернет-провайдером (ISP). MUA и MTA говорят друг с другом на языке протокола SMTP (Simple Mail Transfer Protocol – простой протокол передачи почты), организовывая доставку сообщений. В ходе этого диалога MUA определяет получателя сообщения и передает текст письма.&lt;br /&gt;
&lt;br /&gt;
MTA отвечает за «дальнюю перевозку» сообщения. Он сделает запрос к DNS (Domain Name System, системе доменных имен) на поиск записи MX (Mail Exchanger), которая скажет ему, какая машина действует как почтовый сервер для домена '''&amp;lt;nowiki&amp;gt;example.com&amp;lt;/nowiki&amp;gt;''', где расположен Анин почтовый ящик. Из этого запроса он может узнать, что почтовый сервер, допустим, '''&amp;lt;nowiki&amp;gt;mail.example.com&amp;lt;/nowiki&amp;gt;'''. MTA Маши теперь соединяется с MTA на '''&amp;lt;nowiki&amp;gt;mail.example.com&amp;lt;/nowiki&amp;gt;''', снова использует SMTP для указания получателя письма и передает тело сообщения. Принимающий MTA проверяет, что он и вправду почтовый сервер для домена получателя, а потом уж дает согласие на прием. Если все проходит нормально, принимающий MTA передает сообщение MDA (Mail Delivery Agent – почтовому агенту доставки), который сохраняет сообщение в хранилище сообщений (оно находится в файловой системе почтового сервера). Для этого сообщения работа MTA выполнена.&lt;br /&gt;
&lt;br /&gt;
Аня проводит выходные с дядей Васей, помогая ему разбирать чердак, и не может в эти дни читать почту. Но когда она доберется до компьютера, ее почтовый клиент соединится с Mail Access Agent (MAA – агентом доступа к почте) на ее почтовом сервере &amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;'''&amp;lt;nowiki&amp;gt;example.com&amp;lt;/nowiki&amp;gt;'''&amp;lt;/font&amp;gt; для проверки почты, которую MTA ее домена сохранил в ее хранилище. Ее MUA может использовать для этого один или два протокола. Чаще всего это Post Office Protocol (POP3 – почтовый протокол) версии 3. POP – это протокол, который скачивает почту с почтового сервера, затем (как правило) удаляет ее с сервера и оставляет ее на клиенте (компьютере в Аниной квартире), обеспечивая долговременное хранение сообщения. Но если Аня работает в корпорации Example.Com, данное учреждение может иметь почтовый сервер, работающий по протоколу IMAP4. IMAP расшифровывается как Internet Message Access Protocol [интернетпротокол доступа к сообщениям]; он позволяет Аниному MUA получать доступ к ее почтовому архиву, но долговременное хранение писем происходит на сервере (хотя некоторые MUA поддерживают локальные копии). Благодаря IMAP можно подключаться к серверу с любого компьютера с IMAP-клиентом и видеть весь почтовый архив – а вот если бы вы читали почту, используя POP на разных машинах, то в итоге ваши письма были бы раскиданы по этим машинам, что я знаю по своему горькому опыту.&lt;br /&gt;
&lt;br /&gt;
Наш почтовый сервер изображен на Рисунке 1 как большой серый квадрат в правом верхнем углу. В реальности необходимы два компьютера – один для почтового сервера, другой для клиента. Возьмем ''Postfix'' как SMTP-сервер и ''Dovecot'' как почтовый POP3-сервер. На почтовом сервере моя основная ОС – CentOS 5 (CentOS – это клон Red Hat Enterprise Linux), но конфигурация и операции с ''Postfix'' и ''Dovecot'' не зависят от используемого дистрибутива Linux. Клиентская машина может быть любой. В моем случае на ней Ubuntu 7.04 с ''Evolution'' в качестве MUA.&lt;br /&gt;
&lt;br /&gt;
===Начнем: Mail Transfer Agent===&lt;br /&gt;
&lt;br /&gt;
Сперва мы установим ''Postfix''. Но предварительно проверим: вдруг ''Sendmail'' уже установлен и запущен. На системах типа Red Hat это могут сделать следующие команды:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 # rpm -q sendmail&lt;br /&gt;
 # service sendmail status&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Если ''Sendmail'' запущен, надо его остановить и позаботиться, чтобы он не запустился после перезагрузки:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 # service sendmail stop&lt;br /&gt;
 # chkconfig sendmail --del&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
При наличии на вашей машине включенного брандмауэра, вы должны открыть порт для SMTP (tcp/25).&lt;br /&gt;
&lt;br /&gt;
Моя собственная установка ''Postfix'' споткнулась, обнаружив отсутствие административной группы под названием &amp;lt;font color=&amp;quot;darkred&amp;quot;&amp;gt;postdrop&amp;lt;/font&amp;gt;. То есть до установки пакетов нужно было создать эту группу:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 # groupadd -r postdrop&lt;br /&gt;
 # yum install postfix&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Возможно, эта проблема касается только моего дистрибутива, и на вашей системе такого не произойдет.&lt;br /&gt;
&lt;br /&gt;
Для обеспечения запуска сервиса ''Postfix'' при загрузке, запустите команду&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  # chkconfig --add postfix&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Файл настройки ''Postfix'' – '''/etc/postfix/main.cf'''. Фактически, ''Postfix'' должен заработать «из коробки» как простой почтовый сервер с минимальной доработкой готовой конфигурации, но есть несколько параметров, требующих внимания. Так, строку в '''main.cf'''&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  inet_interfaces = localhost&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
нужно заменить на&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  inet_interfaces = all&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Это мы велим ''Postfix'' слушать SMTP соединения на всех сетевых интерфейсах машины, а не только на локальном (localhost).&lt;br /&gt;
&lt;br /&gt;
Далее проверим установки параметра &amp;lt;font color=&amp;quot;darkred&amp;quot;&amp;gt;myhostname&amp;lt;/font&amp;gt;. Он определяет FQDN этой почтовой системы. Если он не определен, то по умолчанию берется имя хоста машины, на которой запущен сервер, возвращаемое командой &amp;lt;font color=&amp;quot;darkred&amp;quot;&amp;gt;hostname&amp;lt;/font&amp;gt;. Так, если ваш хост – &amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;'''&amp;lt;nowiki&amp;gt;mail.example.com&amp;lt;/nowiki&amp;gt;'''&amp;lt;/font&amp;gt;, это имя и будет принято по умолчанию.&lt;br /&gt;
&lt;br /&gt;
Наконец, параметр &amp;lt;font color=&amp;quot;darkred&amp;quot;&amp;gt;mydestination&amp;lt;/font&amp;gt; задает список доменов, которые эта машина считает для себя пунктом назначения (то есть домены, для которых машина сохраняет сообщения). Минимальное значение этого параметра должно походить на следующее:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  mydestination = example.com&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Установив все эти параметры, можно запускать ''Postfix''. На RedHat-совместимых системах это делается командой&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  # service postfix start&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Далее, я создал учетную запись для пользователя &amp;lt;font color=&amp;quot;darkred&amp;quot;&amp;gt;anna&amp;lt;/font&amp;gt; и установил пароль:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 # useradd anna&lt;br /&gt;
 # passwd anna&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Без них не обойтись, потому что «локальный» агент доставки почты в ''Postfix'' требует, чтобы получатель имел учетную запись в Linux-системе: по ней происходит аутентификация в ''Dovecot'' (который мы рассмотрим чуть позже).&lt;br /&gt;
&lt;br /&gt;
Теперь у нас все готово для теста доставки почты в хранилище сообщений. На моей настольной системе с Ubuntu я создал запись в файле '''/etc/hosts''', возвращающую IP-адрес машины '''&amp;lt;nowiki&amp;gt;mail.example.com&amp;lt;/nowiki&amp;gt;'''. В моем случае строка выглядела так:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 192.168.0.41 mail.example.com&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
В реальности, почтовый сервер должен иметь DNS-запись, и вам не нужно задавать ее в '''/etc/hosts'''. Затем я сконфигурировал «учетную запись» в моем MUA (''Evolution'') на использование SMTP-сервера &amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;'''&amp;lt;nowiki&amp;gt;mail.example.com&amp;lt;/nowiki&amp;gt;'''&amp;lt;/font&amp;gt; для исходящих сообщений. Я включил эту учетную запись Evolution и отключил остальные. Затем я попытался послать несколько писем на &amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;'''&amp;lt;nowiki&amp;gt;anna@example.com&amp;lt;/nowiki&amp;gt;'''&amp;lt;/font&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Сработало? Ну, тот факт, что письма исчезли из моих Исходящих [Outbox] в ''Evolution'', уже обнадеживал, но лучший способ проверки – найти сообщения сохраненными на почтовом сервере. Что выводит нас на ...&lt;br /&gt;
&lt;br /&gt;
===Хранилище сообщений===&lt;br /&gt;
&lt;br /&gt;
Традиционный способ хранения сообщений на почтовом сервере известен как формат Mbox: для каждого пользователя хранится отдельный текстовый файл. Имя этого файла совпадает с именем учетной записи пользователя, чью почту он хранит, а каталог определяется параметром &amp;lt;font color=&amp;quot;darkred&amp;quot;&amp;gt;mail_spool_directory&amp;lt;/font&amp;gt; настройки ''Postfix'' (обычно '''/var/spool/mail''' или '''/var/mail'''). Например, Анины сообщения могут заноситься в '''/var/spool/mail/anna'''. Внутри этого файла каждое сообщение начинается строкой с первым словом “&amp;lt;font color=&amp;quot;darkred&amp;quot;&amp;gt;From&amp;lt;/font&amp;gt;” и заканчивается пустой строкой. (Вас может сбить с толку наличие в этом файле других строк, тоже начинающихся на “From:” – заметили двоеточие? Это часть заголовков сообщения.) Надеюсь, ''Postfix'' вписал мое тестовое сообщение в этот файл.&lt;br /&gt;
&lt;br /&gt;
Альтернативная схема хранения сообщений (также называемая форматом Maildir) использует отдельную директорию для каждого пользователя (обычно это поддиректория с названием '''maildir''' внутри домашнего каталога пользователя) и, внутри нее, отдельный файл для каждого сообщения. При этом меньше шансов заблокировать или угробить все сообщения разом, чем в формате Mbox.&lt;br /&gt;
&lt;br /&gt;
Если посланное вами сообщение появилось в хранилище, пора перейти к нашему POP3-серверу. Если его нет, прочитайте советы во врезке ''Решение проблем'', внизу .&lt;br /&gt;
&lt;br /&gt;
===Установка и настройка Dovecot===&lt;br /&gt;
&lt;br /&gt;
На моей CentOS для установки ''Dovecot'' надо всего лишь скомандовать:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 # yum install dovecot&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Теперь нужно найти файл конфигурации ''Dovecot''. Обычно это '''/etc/dovecot.conf'''. Как типичный современный файл конфигурации, он довольно длинен (более 1000 строк), но почти целиком состоит из комментариев. Как оказалось, мне нужно было изменить две строчки; одна задает протокол(ы), которые должен обслуживать ''Dovecot'', а вторая говорит, где находятся файлы почтового ящика. Эти два параметра я изменил так:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 protocols = pop3&lt;br /&gt;
     mail_location = mbox:~/mail:INBOX=/var/spool/mail/%n&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Первая строка говорит, что мы будем использовать только протокол POP3. Во второй строке, установка &amp;lt;font color=&amp;quot;darkred&amp;quot;&amp;gt;INBOX&amp;lt;/font&amp;gt; использует специальный параметр &amp;lt;font color=&amp;quot;darkred&amp;quot;&amp;gt;%n&amp;lt;/font&amp;gt; для замены именем пользователя, под которым мы зашли проверить почту (в нашем примере – “&amp;lt;font color=&amp;quot;darkred&amp;quot;&amp;gt;anna&amp;lt;/font&amp;gt;”). Заметим, что значение параметра &amp;lt;font color=&amp;quot;darkred&amp;quot;&amp;gt;INBOX&amp;lt;/font&amp;gt; должно совпадать с расположением хранилища почты, указанном в ''Postfix''.&lt;br /&gt;
&lt;br /&gt;
Если у вас на почтовом сервере запущен брандмауэр, нужно также открыть порт POP3 (110/tcp).&lt;br /&gt;
&lt;br /&gt;
Теперь мы готовы к запуску сервиса:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 # service dovecot start&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Пора тестировать. На клиенте, в настройках MUA мне необходимо установить для приема почты использование протокола POP и сервера &amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;'''&amp;lt;nowiki&amp;gt;mail.example.com&amp;lt;/nowiki&amp;gt;'''&amp;lt;/font&amp;gt;, затем задать имя '''&amp;lt;font color=&amp;quot;darkred&amp;quot;&amp;gt;anna&amp;lt;/font&amp;gt;''' и отключить опции шифрования, предлагаемые MUA. Теперь я готов принять мои сообщения. В этом пункте мой MUA должен (надеюсь) запросить пароль '''&amp;lt;font color=&amp;quot;darkred&amp;quot;&amp;gt;anna&amp;lt;/font&amp;gt;''', а мне необходимо предоставить пароль, который я задал, создавая ее учетную запись Linux на сервере. Если все пройдет гладко, вы должны увидеть ранее посланные письма появившимися во Входящих MUA. И если вы вернетесь на сервер, то обнаружите, что сообщения исчезли из хранилища &amp;lt;font color=&amp;quot;darkred&amp;quot;&amp;gt;anna&amp;lt;/font&amp;gt;. Если опять ничего не выйдет, обратитесь ко врезке ''Решение проблем''.&lt;br /&gt;
&lt;br /&gt;
===Ура, оно работает!===&lt;br /&gt;
&lt;br /&gt;
Если вы дошли досюда, поздравляем! У вас появился работающий почтовый сервер. Как обычно, я создавал максимально простую конфигурацию, чтобы все поскорее заработало. Однако эта реализация подразумевает несколько допущений: во-первых, почтовый сервер обслуживает только один домен (&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;'''&amp;lt;nowiki&amp;gt;example.com&amp;lt;/nowiki&amp;gt;'''&amp;lt;/font&amp;gt;), а во-вторых, все пользователи, желающие получать почту, имеют учетные записи Linux на почтовом сервере. Это последнее ограничение задается как со стороны локального агента доставки в ''Postfix'', так и ''Dovecot'', который, в своей конфигурации по умолчанию, требует действующей учетной записи Linux для аутентификации пользователей, для входа через POP и получения электронной почты. Отметим также, что в нашей конфигурации MTA (''Postfix'') не требуется аутентификации пользователя, в отличие от MAA (''Dovecot'').&lt;br /&gt;
&lt;br /&gt;
===Поддерживаем несколько доменов===&lt;br /&gt;
&lt;br /&gt;
В реальных условиях одной машине приходится быть почтовым сервером для множества доменов. Самый простой путь это обеспечить – добавить домены в параметр mydestination в '''/etc/Postfix/main.cf'''. Например, установка:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 mydestination = example.com example.org example.net &lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
велит Postfix принимать почту для трех указанных доменов. Конечно, если вы что-то поменяли в '''main.cf''', нужно заставить &amp;lt;font color=&amp;quot;darkred&amp;quot;&amp;gt;postfix&amp;lt;/font&amp;gt; перечитать его:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 # service postfix reload&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Конечно, надо также обеспечить, чтобы MX-записи в DNS для всех трех доменов ссылались на сервер &amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;'''&amp;lt;nowiki&amp;gt;mail.example.com&amp;lt;/nowiki&amp;gt;'''&amp;lt;/font&amp;gt;. Однако эта методика имеет ограниченное применение, поскольку у всех доменов – общее пространство имен: так, почта на &amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;'''&amp;lt;nowiki&amp;gt;anna@example.com&amp;lt;/nowiki&amp;gt;'''&amp;lt;/font&amp;gt;, &amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;'''&amp;lt;nowiki&amp;gt;anna@example.org&amp;lt;/nowiki&amp;gt;'''&amp;lt;/font&amp;gt; и &amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;'''&amp;lt;nowiki&amp;gt;anna@example.net&amp;lt;/nowiki&amp;gt;'''&amp;lt;/font&amp;gt; будет в конце концов сохранена в одном и том же месте. И, конечно, Ане (и всем другим получателям почты) нужна учетная запись Linux на сервере.&lt;br /&gt;
&lt;br /&gt;
Более гибкое решение – использовать так называемые «виртуальные» почтовые домены. При таком способе каждый домен имеет отдельное пространство имен, и письма для &amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;'''&amp;lt;nowiki&amp;gt;anna@example.com&amp;lt;/nowiki&amp;gt;'''&amp;lt;/font&amp;gt; и &amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;'''&amp;lt;nowiki&amp;gt;anna@example.net&amp;lt;/nowiki&amp;gt;'''&amp;lt;/font&amp;gt; окажутся в разных хранилищах почты. Получателю также не требуется иметь системную учетную запись Linux. Но зато требуется чуть больше работы по настройке...&lt;br /&gt;
&lt;br /&gt;
Требуемые для этого строки в '''main.cf''' показаны в Листинге А ниже. Учтите, что номера строк проставлены только для удобства ссылки: в файле их нет.&lt;br /&gt;
&lt;br /&gt;
{{Врезка&lt;br /&gt;
    |Заголовок=Альтернативы&lt;br /&gt;
    |Содержание=Как всегда в Linux, существует несколько программных решений для построения почтового сервера. Для MTA вы можете использовать ''Postfix'', ''Exim'' или почтенный ''Sendmail''. ''Postfix'' – самый юный; он написан Вьетсе Венема &amp;lt;nowiki&amp;gt;[Wietse Venema]&amp;lt;/nowiki&amp;gt; в 1999 году, имеет прекрасную репутацию по безопасности и служит MTA по умолчанию во многих текущих дистрибутивах Linux. Exim был разработан в 1995 году в Кембриджском университете Филипом Хейзелом &amp;lt;nowiki&amp;gt;[Philip Hazel]&amp;lt;/nowiki&amp;gt;. ''Sendmail'' написан Эриком Оллманом &amp;lt;nowiki&amp;gt;[Eric Allman]&amp;lt;/nowiki&amp;gt; в 1983 году; много лет он тянул на себе большинство интернет-почты, и стало почти обязательным ссылаться на него, как на «почтенный», хотя у него самый непонятный файл конфигурации по эту сторону Бетельгейзе. Для MAA тоже есть выбор. Это может быть IMAP-сервер ''Cyrus'', ''Courier'', ''qpopper'', инструментарий IMAP University of Washington, Dovecot и другие. Более подробный список и сравнение почтовых серверов вы можете найти на http://en.wikipedia.org/wiki/Comparison_of_mail_servers.&lt;br /&gt;
    |Ширина=200px}}&lt;br /&gt;
&lt;br /&gt;
===ЛИСТИНГ A===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;ini&amp;quot; line=&amp;quot;GESHI_NORMAL_LINE_NUMBERS&amp;quot;&amp;gt;&lt;br /&gt;
virtual_mailbox_domains = example.com example.org example.net&lt;br /&gt;
virtual_mailbox_base = /var/spool/vmail&lt;br /&gt;
virtual_mailbox_maps = hash:/etc/Postfix/virtual_mailbox_map&lt;br /&gt;
virtual_uid_maps = static:550&lt;br /&gt;
virtual_gid_maps = static:101&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Строка 1 в ''Листинге А'' содержит список доменов, которые будут поддерживаться. Их надо удалить из параметра &amp;lt;font color=&amp;quot;darkred&amp;quot;&amp;gt;mydestination&amp;lt;/font&amp;gt;, так как они теперь будут обрабатываться с использованием «виртуального» агента доставки ''Postfix'', и «локальный» агент им больше не нужен.&lt;br /&gt;
&lt;br /&gt;
Если список доменов по-настоящему большой, вы можете предпочесть поместить его в отдельный файл, например, '''/etc/postfix/virtual_domains''', по образцу:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  # list of virtual domains for postfix&lt;br /&gt;
         example.com&lt;br /&gt;
         example.net&lt;br /&gt;
         example.org&lt;br /&gt;
  # ... and lots more ...&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
и ссылаться на этот файл через параметр &amp;lt;font color=&amp;quot;darkred&amp;quot;&amp;gt;virtual_mailbox_domains&amp;lt;/font&amp;gt; в '''main.cf''':&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  virtual_mailbox_domains = /etc/postfix/virtual_domains&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Аналогично, многие параметры в '''main.cf''' могут иметь список требуемых значений, помещенный в отдельный файл.&lt;br /&gt;
&lt;br /&gt;
Строка 2 в ''Листинге А'' задает директорию верхнего уровня, где должны сохраняться сообщения. Очевидно, надо выбрать схему, совместимую с нашими POP- и IMAP-серверами. Здесь выбрано одно из множества возможных решений.&lt;br /&gt;
&lt;br /&gt;
Создадим то, что ''Postfix'' называет «картой» – для отметки, где получатели почтовых адресов будут сохранять сообщения относительно заданного &amp;lt;font color=&amp;quot;darkred&amp;quot;&amp;gt;virtual_mailbox_base&amp;lt;/font&amp;gt;. Я создал простую карту в файле, который назвал '''/etc/postfix/virtual_mailbox_map''':&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 anna@example.com anna&lt;br /&gt;
 anna@example.net anna_smith&lt;br /&gt;
 chris@example.org cbrown&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Теперь, например, письмо, посланное на &amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;'''&amp;lt;nowiki&amp;gt;anna@example.net&amp;lt;/nowiki&amp;gt;'''&amp;lt;/font&amp;gt;, будет сохранено в '''/var/spool/vmail/anna_smith'''; письмо, посланное на адрес &amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;'''&amp;lt;nowiki&amp;gt;chris@example.org&amp;lt;/nowiki&amp;gt;'''&amp;lt;/font&amp;gt;, «упадет» в '''/var/spool/vmail/cbrown''', и так далее. Заметьте, что здесь не требуется совпадения видимых снаружи имен пользователей (в нашем примере, '''&amp;lt;font color=&amp;quot;darkred&amp;quot;&amp;gt;anna&amp;lt;/font&amp;gt;''' и '''&amp;lt;font color=&amp;quot;darkred&amp;quot;&amp;gt;chris&amp;lt;/font&amp;gt;''') со внутренними именами (&amp;lt;font color=&amp;quot;darkred&amp;quot;&amp;gt;anna_smith&amp;lt;/font&amp;gt; и &amp;lt;/font color=&amp;quot;darkred&amp;quot;&amp;gt;cbrown&amp;lt;/font&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
Конвертируем этот файл в «карту», используя команду postmap:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  # postmap /etc/postfix/virtual_mailbox_map&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
В результате появится файл '''virtual_mailbox_map.db'''. Карта, в данном случае, просто вид индексированной структуры данных, ключи которой могут быть эффективно просмотрены ''Postfix''. ''Postfix'' поддерживает несколько типов «карт»; по умолчанию это обычно «хэш».&lt;br /&gt;
&lt;br /&gt;
Далее, в строке 3 ''Листинга А'', вы сообщаете ''Postfix'', где находится карта.&lt;br /&gt;
&lt;br /&gt;
''Postfix'' нуждается в отождествлении пользователя, используемом для доставки сообщения в хранилище. Возможно задание нескольких карт (&amp;lt;font color=&amp;quot;darkred&amp;quot;&amp;gt;uid_map&amp;lt;/font&amp;gt; и &amp;lt;font color=&amp;quot;darkred&amp;quot;&amp;gt;gid_map&amp;lt;/font&amp;gt;), определяющих отдельные отождествления для всех и каждого получателя, но мы сделаем проще и используем одну и ту же личность для всех получателей. Я создал пользователя с именем '''&amp;lt;font color=&amp;quot;darkred&amp;quot;&amp;gt;postmanpat&amp;lt;/font&amp;gt;''' для этой цели.&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  # useradd -d /var/spool/vmail -g postdrop -u 550 -m postmanpat&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Отметим, что домашняя директория '''&amp;lt;font color=&amp;quot;darkred&amp;quot;&amp;gt;postmanpat&amp;lt;/font&amp;gt;''' находится в моей выбранной директории '''virtual_ mailbox_base'''. Далее я смягчил права доступа в '''/var/spool/vmail''', чтобы Dovecot мог ей воспользоваться.&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  # chmod 755 /var/spool/vmail&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Нет необходимости предварительно создавать файл сохраненных сообщений для индивидуальных получателей – ''Postfix'' сделает это по требованию. Наконец, строки 4 и 5 Листинга А задают тождество пользователя и группы, которые ''Postfix'' будет использовать для помещения сообщений в хранилище. Они соответствуют ID пользователя &amp;lt;font color=&amp;quot;darkred&amp;quot;&amp;gt;postmanpat&amp;lt;/font&amp;gt; и группы &amp;lt;font color=&amp;quot;darkred&amp;quot;&amp;gt;postdrop&amp;lt;/font&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
После внесения данных изменений та часть, за которую отвечает ''Postfix'', должна работать. Возвратитесь к клиентской машине и пошлите тестовое сообщение на &amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;'''&amp;lt;nowiki&amp;gt;chris@example.org&amp;lt;/nowiki&amp;gt;'''&amp;lt;/font&amp;gt;. На сервере проверьте, что это сообщение появилось в '''/var/spool/vmail/cbrown'''. Если да, то доставка ''Postfix'' на виртуальные почтовые домены работает!&lt;br /&gt;
&lt;br /&gt;
На стороне ''Dovecot'' я просто изменил определение параметра &amp;lt;font color=&amp;quot;darkred&amp;quot;&amp;gt;mail_location&amp;lt;/font&amp;gt; на следующее:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  mail_location = mbox:~/mail:INBOX=/var/spool/vmail/%n&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Продолжение следует===&lt;br /&gt;
&lt;br /&gt;
Пока мы не касались аутентификации POP3 при входе в ''Dovecot''. В текущем состоянии, чтобы Dovecot заработал, вам необходимо создать очередные учетные записи Linux пользователям anna, anna_smith и cbrown, для новой аутентификации ''Dovecot''. Чтобы виртуальные домены применялись правильно, необходимо рассмотреть вопрос об аутентификации учетных записей POP3 через базу данных пользователей, не зависящую от учетных записей Linux. На данном уроке уже подпущено достаточно ежей под череп, но в следующем номере ''Linux Format'' я попытаюсь решить вопрос об аутентификации внутри почтовых систем и в ''Postfix'' и в ''Dovecot''. Пишите на answers@linuxformat.ru, если у вас возникнут проблемы с вашим почтовым сервером. '''LXF'''&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
===Решение проблем (врезка)===&lt;br /&gt;
&lt;br /&gt;
[[Изображение:LXF103_68_1.png|thumb|300px|Пример использования команды telnet.]]&lt;br /&gt;
&lt;br /&gt;
Если вы не можете передать и принять почту, используя ваш почтовый сервер, попробуйте проверить следующее:&lt;br /&gt;
&lt;br /&gt;
1. На клиенте проверьте, что почтовый сервер пингуется по его IP-адресу и имени, используя команды:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 # ping 192.168.0.41&lt;br /&gt;
 # ping mail.example.com&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
(Естественно, подставьте сюда IP-адреc вашего сервера.)&lt;br /&gt;
&lt;br /&gt;
2. На сервере проверьте, что серверы SMTP и POP слушают соединения, используя команду&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 # netstat -at&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Вы должны увидеть LISTEN в конце информации о портах SMTP и POP3.&lt;br /&gt;
&lt;br /&gt;
3. На клиенте, попробуйте использовать telnet для соединения с портом 25 на почтовом сервере, используя команду:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 # telnet mail.example.com 25&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Вы должны получить отклик с сервера типа такого:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 220 mail.example.com ESMTP Postfix&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Если вы знакомы с SMTP-протоколом, можете вести полный SMTP-диалог вручную и по-настоящему отправить почтовое сообщение. См. экранный снимок справа с примером такого диалога.&lt;br /&gt;
&lt;br /&gt;
4. На сервере проверьте, что брандмауэр не блокирует доступ к портам 25 (SMTP) и 110 (POP3), используя команду:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 # iptables -L&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Если вы не уверены, отключите брандмауэр командой:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 # itables -F&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
и попробуйте снова. Не забудьте потом восстановить работоспособность брандмауэра.&lt;br /&gt;
&lt;br /&gt;
5. На сервере поищите разгадку в системных журналах почты (обычно /var/log/maillog).&lt;br /&gt;
&lt;br /&gt;
[[Категория:Учебники]]&lt;br /&gt;
[[Категория:Hardcore Linux]]&lt;br /&gt;
[[Категория:Крис Браун]]&lt;/div&gt;</summary>
		<author><name>Kipruss</name></author>	</entry>

	<entry>
		<id>http://wiki.linuxformat.ru/wiki/%D0%A4%D0%B0%D0%B9%D0%BB:LXF103_68_1.png</id>
		<title>Файл:LXF103 68 1.png</title>
		<link rel="alternate" type="text/html" href="http://wiki.linuxformat.ru/wiki/%D0%A4%D0%B0%D0%B9%D0%BB:LXF103_68_1.png"/>
				<updated>2009-03-28T21:26:08Z</updated>
		
		<summary type="html">&lt;p&gt;Kipruss: Пример использования команды telnet&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Пример использования команды telnet&lt;/div&gt;</summary>
		<author><name>Kipruss</name></author>	</entry>

	<entry>
		<id>http://wiki.linuxformat.ru/wiki/%D0%A4%D0%B0%D0%B9%D0%BB:LXF103_67_1.png</id>
		<title>Файл:LXF103 67 1.png</title>
		<link rel="alternate" type="text/html" href="http://wiki.linuxformat.ru/wiki/%D0%A4%D0%B0%D0%B9%D0%BB:LXF103_67_1.png"/>
				<updated>2009-03-28T20:58:51Z</updated>
		
		<summary type="html">&lt;p&gt;Kipruss: Рис. 1: Один день из жизни почтового сообщения.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Рис. 1: Один день из жизни почтового сообщения.&lt;/div&gt;</summary>
		<author><name>Kipruss</name></author>	</entry>

	<entry>
		<id>http://wiki.linuxformat.ru/wiki/LXF102</id>
		<title>LXF102</title>
		<link rel="alternate" type="text/html" href="http://wiki.linuxformat.ru/wiki/LXF102"/>
				<updated>2009-03-07T21:54:54Z</updated>
		
		<summary type="html">&lt;p&gt;Kipruss: дополнение&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=== Учебники ===&lt;br /&gt;
&lt;br /&gt;
* [[LXF102:Hardcore Linux|'''Hardcore Linux.''' Виртуальный сервер Linux.]]&lt;br /&gt;
Строить сбалансированный по нагрузке кластер с LVS – отличный способ согреться в зимний день: не хуже, чем колоть дрова, уверяет д-р Крис Браун.&lt;br /&gt;
* R: данные и графики&lt;br /&gt;
[[Категория:Математические пакеты]]&lt;br /&gt;
&lt;br /&gt;
* [[LXF102:Кодирование DVD|DVD: уложиться в формат]]&lt;br /&gt;
Что делать, если отснятый вами материал чуть-чуть не умещается на DVD-диск.&lt;/div&gt;</summary>
		<author><name>Kipruss</name></author>	</entry>

	<entry>
		<id>http://wiki.linuxformat.ru/wiki/LXF102:Hardcore_Linux</id>
		<title>LXF102:Hardcore Linux</title>
		<link rel="alternate" type="text/html" href="http://wiki.linuxformat.ru/wiki/LXF102:Hardcore_Linux"/>
				<updated>2009-03-07T21:50:29Z</updated>
		
		<summary type="html">&lt;p&gt;Kipruss: викификация&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Виртуальный сервер Linux==&lt;br /&gt;
&lt;br /&gt;
Строить сбалансированный по нагрузке кластер с LVS – отличный способ согреться&lt;br /&gt;
в зимний день: не хуже, чем колоть дрова, уверяет '''д-р Крис Браун'''.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Данный урок покажет вам, как создать сбалансированный по нагрузке кластер web-серверов, с масштабируемой производительностью, значительно превышающей возможности индивидуального сервера. Мы будем использовать программное обеспечение для кластеров от Red Hat, но основная функциональность, описанная в данном учебнике, основана на модуле виртуального сервера ядра Linux и не привязана к Red Hat.&lt;br /&gt;
&lt;br /&gt;
Если вы захотите последовать уроку «в натуре», вам потребуется как минимум четыре компьютера, как показано на рис. 1 (на следующей странице). Я понимаю, что для некоторых читателей такой проект будет практически недосягаемым, но, надеюсь, он пригодится как мысленный эксперимент, вроде того, что Шредингер проделывал со своим котом.&lt;br /&gt;
&lt;br /&gt;
Машина 1 – просто клиент, используемый для тестирования: ею может быть все, что имеет web-браузер. Я экспроприировал машину моей жены, на ней стоит Vista. Машина 2 – стенд для эксперимента. Она должна работать под Linux и, предпочтительно, иметь два сетевых интерфейса, как показано на рисунке. (Можно собрать кластер, используя всего одну сеть, но этот механизм не годится для промышленного применения и требует немного колдовства на уровне IP, чтобы заставить его работать.)&lt;br /&gt;
&lt;br /&gt;
Эта машина выполняет обязанности балансировщика нагрузки и маршрутизатора в кластере, и в документации LVS ее называют “director” &amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;[активный маршрутизатор, – прим. пер.]&amp;lt;/font&amp;gt;. В моем случае на машине 2 запущен CentOS5 (по сути, эквивалент RHEL5). Машины 3 и 4 – дополнительные серверы [в документации их называют «реальными»]; в принципе, вы можете использовать что-то вроде webсерверов. Я использовал пару ноутбуков, один с SUSE 10.3, второй с Ubuntu 7.04. На деле вам потребуется больше дополнительных серверов, но двух достаточно для получения результата.&lt;br /&gt;
&lt;br /&gt;
Вы, верно, недоумеваете, почему на всех четырех компьютеров я запустил разные ОС. Хороший вопрос – я сам часто его себе задаю! Увы, это просто факт из жизни тех из нас, кто зарабатывает на хлеб с Linux.&lt;br /&gt;
&lt;br /&gt;
===Как работает сбалансированный по нагрузке кластер===&lt;br /&gt;
&lt;br /&gt;
Машины клиентов посылают запрос (например, запрос на web-страницу HTTP GET) на публичный IP-адрес активного маршрутизатора (на рисунке, &amp;lt;font color=&amp;quot;darkred&amp;quot;&amp;gt;'''192.168.0.41'''&amp;lt;/font&amp;gt;; для клиентов это адрес, по которому предоставляется услуга).&lt;br /&gt;
&lt;br /&gt;
Активный маршрутизатор выбирает один из реальных серверов для перенаправления запроса. Он перезаписывает IP-адрес назначения пакета на выбранный реальный сервер и перенаправляет пакет во внутреннюю сеть.&lt;br /&gt;
&lt;br /&gt;
Выбранный реальный сервер обрабатывает запрос и отсылает HTTP-ответ, который теоретически содержит запрошенную страницу. Этот ответ адресован клиентской машине (&amp;lt;font color=&amp;quot;darkred&amp;quot;&amp;gt;'''192.168.0.2'''&amp;lt;/font&amp;gt;), но вначале он возвращается к активному маршрутизатору (&amp;lt;font color=&amp;quot;darkred&amp;quot;&amp;gt;'''10.0.0.1'''&amp;lt;/font&amp;gt;), потому что тот сконфигурирован как шлюз по умолчанию для реальных серверов. Активный маршрутизатор меняет IP-адрес источника в пакете на свой публичный IP-адрес и посылает пакет обратно клиенту.&lt;br /&gt;
&lt;br /&gt;
Все эти трюки на уровне IP выполняются с помощью LVS-модуля ядра Linux. Активный маршрутизатор работает не просто в качестве обратного web-прокси, и команды типа &amp;lt;font color=&amp;quot;darkred&amp;quot;&amp;gt;netstat -ant&amp;lt;/font&amp;gt; не покажут каких либо процессов уровня пользователя, прослушивающих 80 порт. Перезапись адреса – это разновидность NAT (Network Address Translation), позволяющая активному маршрутизатору маскироваться под реальный сервер, скрыв наличие внутренней сети, выполняющей реальную работу.&lt;br /&gt;
&lt;br /&gt;
===Балансируя нагрузку===&lt;br /&gt;
&lt;br /&gt;
Балансировка нагрузки – ключевая особенность LVS: благодаря ей, можно быть уверенным, что каждый реальный сервер получает примерно одинаковый объем работы. LVS имеет для этого несколько алгоритмов; мы упомянем четыре из них.&lt;br /&gt;
&lt;br /&gt;
* '''Циклическое распределение [round-robin scheduling]''' – самый простой алгоритм. Активный маршрутизатор просто работает по кругу, переходя снова на первый реальный сервер, когда исчерпает список. Этот метод хорошо подходит для тестирования, потому что позволяет легко проверить на работоспособность все реальные сервера, но он не самый лучший при промышленном применении.&lt;br /&gt;
* '''Циклическое распределение с весовыми коэффициентами [weighted round-robin]''' – аналогично, но позволяет назначать для каждого реального сервера «вес», соответствующий его относительной скорости. Сервер с весовым коэффициентом «два» считается в два раза мощнее сервера с весовым коэффициентом «один», и может обработать в два раза больше запросов.&lt;br /&gt;
* '''Минимум соединений [least-connection]''' – наименее нагруженный сервер отслеживается по количеству активных соединений, и запрос отправляется на сервер с наименьшей загрузкой.&lt;br /&gt;
* '''Минимум соединений с весовыми коэффициентами [weighted least connection]''' также выполняет подсчет относительной производительности (весов) серверов. Этот метод хорош для производственных кластеров, потому что он прекрасно работает, когда запросы сильно различаются по времени их обработки и/или когда реальные сервера в кластере имеют различную мощность.&lt;br /&gt;
&lt;br /&gt;
Два последних метода динамические, то есть учитывают данные о текущей загрузке машин в кластере.&lt;br /&gt;
&lt;br /&gt;
[[Изображение:LXF102_73_1.png|thumb|300px|Рис. 1. Простой кластер со сбалансированной нагрузкой.]]&lt;br /&gt;
&lt;br /&gt;
===Инструменты для работы===&lt;br /&gt;
&lt;br /&gt;
Чтобы все это заработало, ядро поддерживает таблицу виртуального сервера, которая содержит, кроме прочего, IP-адреса реальных серверов. Для поддержания и просмотра этой таблицы используется инструмент командной строки ''ipvsadm''.&lt;br /&gt;
&lt;br /&gt;
Если ваше ядро (как большинство других современных ядер) собрано с поддержкой LVS, то ''ipvsadm'' – единственная программа, которую вы обязаны иметь, чтоб заставить LVS работать; однако есть другие инструменты, облегчающие жизнь. (Ситуация похожа на механизм пакетной фильтрации в ядре. В теории для управления им и создания межсетевого экрана нужна только утилита командной строки ''iptables'', на практике же большинство из нас использует для построения собственных правил фильтрации инструменты высокого уровня, часто графические). На данном уроке мы воспользуемся инструментами для кластеров от Red Hat, включая web-ориентированный инструмент настройки ''Piranha''.&lt;br /&gt;
&lt;br /&gt;
Основной недостаток конфигурации, показанной на '''рис. 1''' – активный маршрутизатор является единой точкой отказа в пределах кластера. Чтобы этого избежать, можно использовать в качестве активного маршрутизатора пару серверов (основной и резервный); используя обмен сообщениями heartbeat, резервный сервер может определить сбой основного сервера и взять на себя его работу.&lt;br /&gt;
&lt;br /&gt;
На нашем уроке я игнорирую эту проблему, отчасти потому, что о ней говорилось в прошлом месяце, а отчасти потому, что тогда нужно было бы пять машин для построения кластера, а у меня их только четыре! Отметим, что инструменты кластеризации от RedHat действительно включают функциональность для переключения с основного на резервный маршрутизаторы.&lt;br /&gt;
&lt;br /&gt;
===Настраиваем реальные сервера===&lt;br /&gt;
&lt;br /&gt;
Если вы хотите по-настоящему построить кластер, описанный на этом уроке, начните с реальных серверов. Это могут быть любые машины, имеющие web-сервер HTTP на 80-м порту; в моем случае на них был запущен Linux и ''Apache''.&lt;br /&gt;
&lt;br /&gt;
Нужно создать какие-нибудь данные в директории '''DocumentRoot''' на каждом сервере, и для тестирования было бы неплохо, чтобы на каждой машине эти данные были свои: тогда легко различить, какой сервер обрабатывает запрос в данный момент. Например, на реальном сервере 1 я создал файл '''proverb.html''', содержащий строку «&amp;lt;font color=&amp;quot;darkred&amp;quot;&amp;gt;Дорога ложка к обеду&amp;lt;/font&amp;gt;». На сервере 2 строка была уже «&amp;lt;font color=&amp;quot;darkred&amp;quot;&amp;gt;Не зная броду, не суйся в воду&amp;lt;/font&amp;gt;». Конечно, в реальных условиях нужно, наоборот, «синхронизировать» все реальные сервера, чтобы они хранили одно и то же содержимое – к этой проблеме мы вернемся позднее.&lt;br /&gt;
&lt;br /&gt;
Назначьте машинам реальные IP-адреса, предназначенные для внутренних сетей; в моем случае это &amp;lt;font color=&amp;quot;darkred&amp;quot;&amp;gt;'''10.0.0.2'''&amp;lt;/font&amp;gt; и &amp;lt;font color=&amp;quot;darkred&amp;quot;&amp;gt;'''10.0.0.3'''&amp;lt;/font&amp;gt;. Установите маршрутизацию по умолчанию на этих машинах на приватный IP-адрес активного маршрутизатора (&amp;lt;font color=&amp;quot;darkred&amp;quot;&amp;gt;'''10.0.0.1'''&amp;lt;/font&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
[[Изображение:LXF102_74_1.jpg|thumb|200px|Рис. 2. Конфигурирование виртуального сервера с Piranha.]]&lt;br /&gt;
&lt;br /&gt;
===Установка активного маршрутизатора===&lt;br /&gt;
&lt;br /&gt;
На активном маршрутизаторе начните с закачки и установки инструментов кластеризации Red Hat. В моем случае (вспомните, что я запустил на этой машине CentOS5) я просто использовал графический инструмент установки (''pirut'') для добавления пакетов ''ipvsadm'' и ''Piranha'' из репозитория CentOS5. Моим следующим шагом был запуск команды &amp;lt;font color=&amp;quot;darkred&amp;quot;&amp;gt;piranha-passwd&amp;lt;/font&amp;gt; для установки пароля на инструмент конфигурации ''piranha'':&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
# /etc/init.d/piranha-gui start&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Изображение:LXF102_74_2.jpg|thumb|200px|Рис. 3. Определяем реальные сервера.]]&lt;br /&gt;
&lt;br /&gt;
Этот сервис слушает порт 3636 и предоставляет web-интерфейс для конфигурирования инструментов кластеризации, так что после его запуска мне осталось набрать в браузере &amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;'''&amp;lt;nowiki&amp;gt;http://localhost:3636&amp;lt;/nowiki&amp;gt;'''&amp;lt;/font&amp;gt; для доступа к нему. Далее мне нужно было зайти, используя имя пользователя &amp;lt;font color=&amp;quot;darkred&amp;quot;&amp;gt;piranha&amp;lt;/font&amp;gt; и пароль, который я установил. После этого стали доступны четыре основных окна: &amp;lt;font color=&amp;quot;darkblue&amp;quot;&amp;gt;Control/Monitoring, Global Settings, Redundancy&amp;lt;/font&amp;gt; и &amp;lt;font color=&amp;quot;darkblue&amp;quot;&amp;gt;Virtual Servers&amp;lt;/font&amp;gt; (вы можете увидеть ссылку на них на '''рис. 3'''). Для начала зайдите в окно Virtual Servers и добавьте новый сервис. На '''рис. 2''' показана форма, которую вы должны заполнить. Среди прочего, вы должны задать имя сервиса, указать номер порта и интерфейс, через который он будет принимать пакеты, и выбрать алгоритм работы (для начального тестирования я выбрал &amp;lt;font color=&amp;quot;darkblue&amp;quot;&amp;gt;‘Round Robin’ [Циклическое распределение]&amp;lt;/font&amp;gt;). Кликнув на ссылку &amp;lt;font color=&amp;quot;darkblue&amp;quot;&amp;gt;Real Server&amp;lt;/font&amp;gt; вверху этой страницы, вы попадете на страницу, показанную на '''рис. 3'''. Здесь вы должны указать имя, IP-адрес и веса ваших реальных серверов.&lt;br /&gt;
&lt;br /&gt;
За кадром, большинство настроек, захваченных ''Piranha'', хранятся в файле конфигурации '''/etc/sysconfig/ha/lvs.cf'''. Другие инструменты кластеризации читают его; это обычный текстовый файл, и ник-&lt;br /&gt;
&lt;br /&gt;
то не запрещает вам редактировать его напрямую. Выполнив данную настройку, можно начинать. Запустите сервис кластеризации из командной строки:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 # /etc/init.d/pulse start&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
(В реальности вы должны сделать этот сервис автоматически запускаемым при загрузке.)&lt;br /&gt;
&lt;br /&gt;
[[Изображение:LXF102_75_1.jpg|thumb|200px|Рис. 4. Экран управления и мониторинга Piranha.]]&lt;br /&gt;
&lt;br /&gt;
Теперь идите на экран управления/мониторинга ''Piranha'', как показано на '''рис. 4'''. Внимательно посмотрите на таблицу маршрутизации LVS. Вы должны увидеть записи о вашем виртуальном сервере (это строки, начинающиеся с &amp;lt;font color=&amp;quot;darkred&amp;quot;&amp;gt;TCP...&amp;lt;/font&amp;gt;), а пониже – строки для каждого реального сервера. Ту же информацию можно добыть из командной строки, набрав&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 # ipvsadm -L&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Периодическая проверка здоровья===&lt;br /&gt;
&lt;br /&gt;
Также на экране управления/мониторинга есть таблица процессов LVS. Здесь вы можете увидеть множество «процессов-нянек». Они отвечают за проверку присутствия и работоспособности реальных серверов – по няньке на сервер. Их работа – периодически посылать простой запрос &amp;lt;font color=&amp;quot;darkred&amp;quot;&amp;gt;HTTP GET&amp;lt;/font&amp;gt; и проверять ответ. Внимательно рассмотрев опции &amp;lt;font color=&amp;quot;darkred&amp;quot;&amp;gt;-s&amp;lt;/font&amp;gt; и &amp;lt;font color=&amp;quot;darkred&amp;quot;&amp;gt;-x&amp;lt;/font&amp;gt; для няньки, вы распознаете посылаемые и ожидаемые строки, используемые для теста. (Вы можете задать эти строки, как вам нравится, используя страницу &amp;lt;font color=&amp;quot;darkblue&amp;quot;&amp;gt;Virtual Servers &amp;gt; Monitoring Scripts Piranha.&amp;lt;/font&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
{{Врезка&lt;br /&gt;
    |Заголовок=Боитесь за узкие места?&lt;br /&gt;
    |Содержание=Так как весь входящий и исходящий трафик идет через активный маршрутизатор, вы, возможно, опасаетесь, что его производительность создаст узкое место. Но это маловероятно. Вспомните, что активный маршрутизатор выполняет только простые манипуляции над заголовками пакетов внутри ядра; даже скромная машина способна разобраться со 100-мегабитной сетью. Более вероятно, что узким местом будет ширина канала при доступе к сайту. Для более подробной информации об использовании старых ПК для задач типа сетевых, см. [[LXF102:Вторая_жизнь_старого_ПК|спецрепортаж этого месяца]]&lt;br /&gt;
    |Ширина=200px}}&lt;br /&gt;
&lt;br /&gt;
Просмотрев журнал доступа ''Apache'' на реальном сервере, вы увидите, что эти запросы выполняются каждые шесть секунд. Если нянька обнаружит, что ее сервер замолк, она вызовет ''ipvsadm'' для удаления записи о машине из таблицы маршрутизации LVS, и активный маршрутизатор не сможет пересылать запросы на эту машину. Нянька будет продолжать опрашивать сервер, и если он восстановится, она снова запустит ''ipvsadm'' для восстановления записи маршрутизации.&lt;br /&gt;
&lt;br /&gt;
Вы можете наблюдать такое поведение, отключив сетевой кабель от реального сервера (или просто остановив демон ''httpd'') и изучив таблицу маршрутизации LVS: окажется, что запись о вашем покойном сервере исчезла. Подключите сетевой кабель или перезапустите сервер, и запись возникнет снова. Будьте терпеливы: прежде чем эти изменения проявятся, может пройти 20 секунд, а то и больше.&lt;br /&gt;
&lt;br /&gt;
===Развязка===&lt;br /&gt;
&lt;br /&gt;
Если все в порядке, пора заняться клиентской машиной (под номером 1 на первом рисунке) и попробовать получить доступ к странице из браузера. В нашем примере, вы должны обратиться к &amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;'''&amp;lt;nowiki&amp;gt;http://192.168.0.41/proverbs.html&amp;lt;/nowiki&amp;gt;'''&amp;lt;/font&amp;gt; и увидеть страницу с пословицей, хранящуюся на одном из ваших реальных серверов. Обновившись, вы увидите страницу с другой пословицей со следующего сервера в циклическом порядке. Можете также проверить поведение циклического распределения, изучив журнал доступа Apache на каждом реальном сервере. (Вглядевшись в записи журнала, вы увидите, что доступ был с &amp;lt;font color=&amp;quot;darkred&amp;quot;&amp;gt;'''192.168.0.2'''&amp;lt;/font&amp;gt;, а няня запрашивала состояние с &amp;lt;font color=&amp;quot;darkred&amp;quot;&amp;gt;'''10.0.0.1'''&amp;lt;/font&amp;gt;.) Если все заработало, поздравляю! Вы только что построили свой первый сбалансированный по нагрузке Linux-кластер.&lt;br /&gt;
&lt;br /&gt;
===Постскриптум===&lt;br /&gt;
&lt;br /&gt;
Давайте сделаем паузу и выясним, что мы изучили на двух наших уроках. Мы увидели, как построить отказоустойчивое кластерное решение, добавляющее лишнюю девятку к коэффициенту доступности вашего сервиса (например, с доступности 99.9% до 99.99%); и увидели, как построить сбалансированный по нагрузке кластер, превышающий по производительности индивидуальный web-сервер. В обоих случаях мы использовали свободное, открытое ПО, запускаемое на свободной открытой ОС. Иногда я представляю, что именно об этом думает Стив Балмер на сон грядущий; и всякий раз мне чертовски приятно. '''LXF'''&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
===Если он не работает... (врезка)===&lt;br /&gt;
&lt;br /&gt;
Не исключено, что ваш кластер с первой попытки не заработает. У вас есть несколько вариантов выхода из этого положения. Первый – швырнуть один из ноутбуков через всю комнату и проклясть Microsoft.&lt;br /&gt;
&lt;br /&gt;
Это, конечно, не конструктивная мера, хотя бы вы и почувствовали себя лучше. И Microsoft обвинять не за что, потому что мы не пользуемся никаким ее программным обеспечением. Второй вариант – сделать несколько глубоких вдохов, успокоиться и провести серию диагностических тестов.&lt;br /&gt;
&lt;br /&gt;
Первым делом неплохо проверить соединение с LVS-машиной, используя старый добрый ''ping''. Сперва убедитесь, что пингуется ваша тестовая машина (&amp;lt;font color=&amp;quot;darkred&amp;quot;&amp;gt;'''192.168.0.2'''&amp;lt;/font&amp;gt;). Затем проверьте доступность обоих реальных серверов (&amp;lt;font color=&amp;quot;darkred&amp;quot;&amp;gt;'''10.0.0.2'''&amp;lt;/font&amp;gt; и &amp;lt;font color=&amp;quot;darkred&amp;quot;&amp;gt;'''10.0.0.3'''&amp;lt;/font&amp;gt;). Если это не работает, запустите &amp;lt;font color=&amp;quot;darkred&amp;quot;&amp;gt;ifconfig -a&amp;lt;/font&amp;gt; и убедитесь, что '''eth0''' имеет IP-адрес &amp;lt;font color=&amp;quot;darkred&amp;quot;&amp;gt;'''192.168.0.41'''&amp;lt;/font&amp;gt;, а '''eth1''' – &amp;lt;font color=&amp;quot;darkred&amp;quot;&amp;gt;'''10.0.0.1'''&amp;lt;/font&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Также запустите &amp;lt;font color=&amp;quot;darkred&amp;quot;&amp;gt;route -n&amp;lt;/font&amp;gt; для проверки таблицы маршрутизации – убедитесь, что вы имеете маршруты к сетям &amp;lt;font color=&amp;quot;darkred&amp;quot;&amp;gt;'''192.168.0.0'''&amp;lt;/font&amp;gt; и &amp;lt;font color=&amp;quot;darkred&amp;quot;&amp;gt;'''10.0.0.0'''&amp;lt;/font&amp;gt; через соответствующие интерфейсы.&lt;br /&gt;
&lt;br /&gt;
Если ваши реальные серверы пингуются, запустите web-браузер на LVS-машине (исходя из того, что браузер установлен – вообще-то он там ни к чему). Убедитесь, что вы можете открыть URL &amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;'''&amp;lt;nowiki&amp;gt;http://10.0.0.2&amp;lt;/nowiki&amp;gt;'''&amp;lt;/font&amp;gt; и &amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;'''&amp;lt;nowiki&amp;gt;http://10.0.0.3&amp;lt;/nowiki&amp;gt;'''&amp;lt;/font&amp;gt; и видите содержимое web-страниц, хранящихся на этих серверах. (Если машины пингуются, но web-сервера недоступны, убедитесь, что они запущены на реальных серверах и эти сервера не имеют правил брандмауэра, запрещающих к ним доступ.)&lt;br /&gt;
&lt;br /&gt;
Нужно также внимательно проверить таблицу маршрутизации LVS, отображаемую на странице &amp;lt;font color=&amp;quot;darkblue&amp;quot;&amp;gt;Control/Monitoring&amp;lt;/font&amp;gt; в ''Piranha'', и убедиться, что ваши реальные сервера там показаны. Если у вас опять ничего не вышло, проверьте, включена ли на LVS-машине маршрутизация IP-пакетов (IP-forwarding) – например, командой&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  # cat /proc/sys/net/ipv4/ip_forward&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Если она вернет &amp;lt;font color=&amp;quot;darkred&amp;quot;&amp;gt;'''1'''&amp;lt;/font&amp;gt;, то все прекрасно, а если &amp;lt;font color=&amp;quot;darkred&amp;quot;&amp;gt;'''0'''&amp;lt;/font&amp;gt;, включайте функцию командой:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 # echo 1 &amp;gt; /proc/sys/net/ipv4/ip_forward&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Вы можете также проверить, настроено ли ваше ядро для работы с LVS. Если ваш дистрибутив содержит копию файла конфигурации, использованного при сборке ядра (с именем '''/boot/config-так-или-сяк'''), примените ''grep'' для поиска строки &amp;lt;font color=&amp;quot;darkred&amp;quot;&amp;gt;CONFIG_IP_VS&amp;lt;/font&amp;gt; и убедитесь, что вы видите &amp;lt;font color=&amp;quot;darkred&amp;quot;&amp;gt;CONFIG_IP_VS=m&amp;lt;/font&amp;gt; среди прочих. Вы также можете попробовать&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 # lsmod | grep vs&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
для проверки, что модуль ''ip_vs'' загружен. Если вы не можете найти доказательства поддержки виртуального сервера в ядре, придется перенастроить и пересобрать ядро; порядок действий при этом выходит за рамки данного урока.&lt;br /&gt;
&lt;br /&gt;
Если все тесты дают OK, но все еще ничего не работает, теперь уже можно шваркнуть одним из ноутбуков об стену. Кластер от этого не оживет, но зато станет ясно, что именно поломалось.&lt;br /&gt;
&lt;br /&gt;
[[Категория:Учебники]]&lt;br /&gt;
[[Категория:Hardcore Linux]]&lt;br /&gt;
[[Категория:Крис Браун]]&lt;/div&gt;</summary>
		<author><name>Kipruss</name></author>	</entry>

	<entry>
		<id>http://wiki.linuxformat.ru/wiki/%D0%A4%D0%B0%D0%B9%D0%BB:LXF102_75_1.jpg</id>
		<title>Файл:LXF102 75 1.jpg</title>
		<link rel="alternate" type="text/html" href="http://wiki.linuxformat.ru/wiki/%D0%A4%D0%B0%D0%B9%D0%BB:LXF102_75_1.jpg"/>
				<updated>2009-03-07T21:03:50Z</updated>
		
		<summary type="html">&lt;p&gt;Kipruss: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Рис. 4. Экран управления и мониторинга Piranha.&lt;/div&gt;</summary>
		<author><name>Kipruss</name></author>	</entry>

	<entry>
		<id>http://wiki.linuxformat.ru/wiki/%D0%A4%D0%B0%D0%B9%D0%BB:LXF102_75_1.jpg</id>
		<title>Файл:LXF102 75 1.jpg</title>
		<link rel="alternate" type="text/html" href="http://wiki.linuxformat.ru/wiki/%D0%A4%D0%B0%D0%B9%D0%BB:LXF102_75_1.jpg"/>
				<updated>2009-03-07T21:03:38Z</updated>
		
		<summary type="html">&lt;p&gt;Kipruss: Рис. 5. Экран управления и мониторинга Piranha.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Рис. 5. Экран управления и мониторинга Piranha.&lt;/div&gt;</summary>
		<author><name>Kipruss</name></author>	</entry>

	<entry>
		<id>http://wiki.linuxformat.ru/wiki/%D0%A4%D0%B0%D0%B9%D0%BB:LXF102_74_2.jpg</id>
		<title>Файл:LXF102 74 2.jpg</title>
		<link rel="alternate" type="text/html" href="http://wiki.linuxformat.ru/wiki/%D0%A4%D0%B0%D0%B9%D0%BB:LXF102_74_2.jpg"/>
				<updated>2009-03-07T20:55:59Z</updated>
		
		<summary type="html">&lt;p&gt;Kipruss: Рис. 3. Определяем реальные сервера.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Рис. 3. Определяем реальные сервера.&lt;/div&gt;</summary>
		<author><name>Kipruss</name></author>	</entry>

	<entry>
		<id>http://wiki.linuxformat.ru/wiki/%D0%A4%D0%B0%D0%B9%D0%BB:LXF102_74_1.jpg</id>
		<title>Файл:LXF102 74 1.jpg</title>
		<link rel="alternate" type="text/html" href="http://wiki.linuxformat.ru/wiki/%D0%A4%D0%B0%D0%B9%D0%BB:LXF102_74_1.jpg"/>
				<updated>2009-03-07T20:55:31Z</updated>
		
		<summary type="html">&lt;p&gt;Kipruss: Рис. 2. Конфигурирование виртуального сервера с Piranha.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Рис. 2. Конфигурирование виртуального сервера с Piranha.&lt;/div&gt;</summary>
		<author><name>Kipruss</name></author>	</entry>

	<entry>
		<id>http://wiki.linuxformat.ru/wiki/%D0%A4%D0%B0%D0%B9%D0%BB:LXF102_73_1.png</id>
		<title>Файл:LXF102 73 1.png</title>
		<link rel="alternate" type="text/html" href="http://wiki.linuxformat.ru/wiki/%D0%A4%D0%B0%D0%B9%D0%BB:LXF102_73_1.png"/>
				<updated>2009-03-07T20:38:37Z</updated>
		
		<summary type="html">&lt;p&gt;Kipruss: Рис. 1. Простой кластер со сбалансированной нагрузкой.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Рис. 1. Простой кластер со сбалансированной нагрузкой.&lt;/div&gt;</summary>
		<author><name>Kipruss</name></author>	</entry>

	<entry>
		<id>http://wiki.linuxformat.ru/wiki/LXF98:Hardcore_Linux</id>
		<title>LXF98:Hardcore Linux</title>
		<link rel="alternate" type="text/html" href="http://wiki.linuxformat.ru/wiki/LXF98:Hardcore_Linux"/>
				<updated>2009-03-07T20:23:02Z</updated>
		
		<summary type="html">&lt;p&gt;Kipruss: /* Установка VirtualBox */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==&amp;lt;font color=darkred&amp;gt;VirtualBox:&amp;lt;/font&amp;gt; Windows в Ubuntu==&lt;br /&gt;
&lt;br /&gt;
''Запускайте приложения Microsoft под Linux в Ubuntu Feisty при помощи VirtualBox от Innotek и Windows XP – '''Джек Найт''' здесь на коне….''&lt;br /&gt;
&lt;br /&gt;
Требовалось ли вам когда-нибудь на вашей машине одно или несколько Windows-приложений для решения некоторой задачи? А может, у вас есть клиент, использующий Windows, и вам надо работать с документами ''MS Project'' или запускать непосредственно ''Outlook'' для совместного использования их календарей ''MS Exchange''? Один из выходов – двойная загрузка, другой – запуск Windows XP в качестве гостевой ОС на виртуальной машине (ВМ); но&lt;br /&gt;
есть действительно классное решение – угадайте, какое? Бесплатное, по крайней мере для большинства из нас! ''VirtualBox'' от ''Innotek'' – удивительный продукт, и хотя я на самом деле не проверял его производительность, навскидку кажется, что он значительно превосходит и ''VMWare Workstation'', и ''Server''. Он располагает набором приятных функций и возможностью организовать сетевой мост через беспроводной адаптер ноутбука (нечто прежде немыслимое в ''VMWare'') – чем не продукт-конфетка?&lt;br /&gt;
&lt;br /&gt;
Innotek применяет дуальную схему лицензирования – существуют открытая и закрытая двоичная версии ''VirtualBox'' (последняя бесплатна для ознакомления или персонального использования). Более того, у Innonek весьма разумная политика лицензирования для малого бизнеса – по запросу о покупке коммерческих лицензий на две машины я был любезно извещен, что это относится к категории «бесплатно»! Уже в восторге? Ну, это только начало – а вот и убойный довод: при помощи этой штуки можно запускать отдельные приложения Windows на рабочем столе Linux, и они появятся как обычные окна Gnome, KDE (или другие) на вашем X-столе. Прибавьте сюда ''Beryl/Compiz'', и получите весьма впечатляющий инструмент. Качайте с [http://www.virtualbox.org www.virtualbox.org].&lt;br /&gt;
&lt;br /&gt;
Но как заставить все это работать? Что ж, понадобится кое-какая подгонка и на стороне Linux, и на стороне Windows – но результат стоящий, по крайней мере, по моему скромному мнению. В этой статье я проведу вас через настройку моста через беспроводной адаптер на ноутбуке, а продолжу настройкой двух типичных приложений, зависящих от Windows – ''MS Project'' и ''Outlook'', чтобы под Ubuntu Feisty они выглядели как родные.&lt;br /&gt;
&lt;br /&gt;
===План действий===&lt;br /&gt;
&lt;br /&gt;
Вот что мы проделаем на следующих страницах:&lt;br /&gt;
&lt;br /&gt;
*Кое-что подправим для устранения неприятностей с USB и DVD.&lt;br /&gt;
*Создадим TAP-устройство на сетевом интерфейсе базовой машины (идеально для WLAN-интерфейса ноутбука).&lt;br /&gt;
*Установим персональную/пробную версию ''VirtualBox'' от Innotek.&lt;br /&gt;
*Создадим ВМ для Windows XP и настроим ее на использование сетевого TAP-устройства.&lt;br /&gt;
*Установим Windows XP (самые общие моменты).&lt;br /&gt;
*Настроим Windows XP со всеми тонкостями, для безупречной работы.&lt;br /&gt;
*Настроим ''VirtualBox'' на работу без ручного вмешательства и автоматический старт.&lt;br /&gt;
*Введем пункты меню для наших приложений-примеров.&lt;br /&gt;
&lt;br /&gt;
В детали установки гостевой ОС я вдаваться не буду: если кто не знает, как это сделать, описание найти легко. Зато приведу простой метод установки самого ''VirtualBox''.&lt;br /&gt;
&lt;br /&gt;
Лично я использую на этом уроке Ubuntu 7.04 (Feisty), но эти инструкции должны отлично работать для dapper или edgy, при мелких изменениях (например, замене всех вхождений слова «feisty» по смыслу). Они должны работать и в Kubuntu; правда, я еще не проделывал мои операции в KDE, чтобы разобраться с отличиями. Машину, где запущен VirtualBox, я буду называть HOST [хост], а запущенные в нем системы – GUEST [гость]. Предполагается, что вы можете запускать командную оболочку и использовать редактор для изменения текстовых файлов. Прежде чем продолжить, познакомьтесь со врезкой&lt;br /&gt;
Избавляемся от неприятностей.&lt;br /&gt;
&lt;br /&gt;
===Настраиваем TAP-устройство===&lt;br /&gt;
&lt;br /&gt;
Нам нужно установить пакеты, а именно ''User Mode Linux Utilities'' и ''Proxy Arp Routing Daemon''. Для начала убедитесь, что подключен репозиторий '''universe''': в строке-меню Gnome выберите &amp;lt;font color=darkblue&amp;gt;Система &amp;gt; Администрирование &amp;gt; Источники приложений&amp;lt;/font&amp;gt;, затем установите галочку &amp;lt;font color=darkblue&amp;gt;Свободное ПО, поддерживаемое сообществом&amp;lt;/font&amp;gt; (&amp;lt;font color=darkblue&amp;gt;universe&amp;lt;/font&amp;gt;). Теперь откройте терминал и введите:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
 sudo apt-get install uml-utilities parprouted&lt;br /&gt;
 sudo chgrp vboxusers /dev/net/tun&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Теперь надо встроить TAP в сетевой адаптер хост-системы. Это особенно полезно для ноутбуков с беспроводными интерфейсами, поскольку WLAN-адаптер обычно получает IP-адрес через DHCP, но гостевая машина не может делать этого – как правило, несколько IP-адресов нельзя получить для того, что в сущности является клонированным интерфейсом. К тому же если беспроводной интерфейс использует защиту WPA, то появление интерфейса-клона, вероятно, заставит WAP&lt;br /&gt;
(Wireless Access Point – точка беспроводного доступа) заподозрить, что компьютер под атакой. Итак, сделаем вот что: выявим неиспользованные подсети, выберем пару уникальных IP-адресов и присвоим один TAP-устройству, а другой гостевой машине. Неважно, что они фиксированы: адрес хост-машины будет динамическим, и они будут проходить через маскардинг. В итоге гостевая машина будет «просто работать», где бы вы ни получили WLAN-соединение для хоста.&lt;br /&gt;
&lt;br /&gt;
Проще всего создать скрипт для инициализации TAP-устройства и поддержки конфигурации сети. Вот мой вариант:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
 #!/bin/bash&lt;br /&gt;
 # Имя: tapctrl&lt;br /&gt;
 # Использование: tapctrl start|stop&lt;br /&gt;
 # Обеспечивает: tap для virtualbox во внешней сети, включая беспроводные&lt;br /&gt;
 # Аннотация:&lt;br /&gt;
 # устанавливает tap-устройство для совместного использования  интерфейса wifi с vbox&lt;br /&gt;
 # Описание: создает виртуальный tap-интерфейс, присваивает IP- адрес, настраивает iptables&lt;br /&gt;
 # для маскарадинга через устройство по умолчанию&lt;br /&gt;
 # и настраивает прокси arp с демоном parprouted для корректной маршрутизации&lt;br /&gt;
 # Автор: Jack Knight&lt;br /&gt;
 # - Open Source Migrations Ltd, UK (http://www.osml.co.uk)&lt;br /&gt;
 # Настраиваем переменные здесь:&lt;br /&gt;
 DESC=&amp;quot;Virtualbox IP tap&amp;quot;&lt;br /&gt;
 PATH=/sbin:/bin:/usr/sbin:/usr/bin&lt;br /&gt;
 TUNDEVICE=tap1 # Произвольно, но должно соответствовать устройству, указанному в сетевых настройках VirtualBox.&lt;br /&gt;
 LANDEVICE=eth1 # Исправьте, чтобы соответствовало вашему сетевому устройству – может быть eth0, eth1 ath0, wlan1 и т. д.&lt;br /&gt;
 IPADDR=172.16.254.254 # Произвольно, но убедитесь, что вы взяли нечто из неиспользуемой подсети&lt;br /&gt;
 case &amp;quot;$1&amp;quot; in start|restart|force-reload)&lt;br /&gt;
           echo -n &amp;quot;Starting $DESC: &amp;quot;&lt;br /&gt;
           tunctl -t $TUNDEVICE -u $USER&lt;br /&gt;
           ip link set $TUNDEVICE up&lt;br /&gt;
           ip addr add $IPADDR dev $TUNDEVICE&lt;br /&gt;
              arp -Ds $IPADDR $TUNDEVICE pub&lt;br /&gt;
           iptables -t nat -A POSTROUTING -o $LANDEVICE -j MASQUERADE&lt;br /&gt;
           iptables -t nat -P POSTROUTING ACCEPT # Разрешаем работу других интерфейсов&lt;br /&gt;
              echo 1 &amp;gt; /proc/sys/net/ipv4/ip_forward&lt;br /&gt;
              echo 1 &amp;gt; /proc/sys/net/ipv4/conf/$TUNDEVICE/proxy_arp&lt;br /&gt;
              parprouted $LANDEVICE $TUNDEVICE&lt;br /&gt;
           ;;&lt;br /&gt;
 stop)&lt;br /&gt;
              echo -n &amp;quot;Stopping $DESC: &amp;quot;&lt;br /&gt;
              iptables --table nat -F&lt;br /&gt;
              killall parprouted&lt;br /&gt;
              ip link set $TUNDEVICE down &lt;br /&gt;
           ;;&lt;br /&gt;
 *)&lt;br /&gt;
           N=/etc/init.d/$NAME&lt;br /&gt;
              echo &amp;quot;Usage: $N start|stop&amp;quot; &amp;gt;&amp;amp;2&lt;br /&gt;
              exit 1&lt;br /&gt;
           ;;&lt;br /&gt;
 esac&lt;br /&gt;
 exit 0&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Этот код есть на DVD; если кому-то нужно, у меня также есть более проработанный скрипт, работающий со многими пользователями, виртуальными машинами и устройствами и не опубликованный здесь ради простоты. Не стесняйтесь обращаться за ним ко мне по электронной почте через мой web-сайт.&lt;br /&gt;
&lt;br /&gt;
===Установка VirtualBox===&lt;br /&gt;
&lt;br /&gt;
К сожалению, поскольку на момент написания ''VirtualBox'' еще не попал в основные репозитории Ubuntu, перед установкой пакета придется добавить новый сторонний репозиторий от ''VirtualBox'':&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
 sudo sh -c 'echo &amp;quot;# VirtualBox репозиторий для Ubuntu Feisty Fawn&lt;br /&gt;
 deb http://www.virtualbox.org/debian feisty non-free&amp;quot; \&lt;br /&gt;
   &amp;gt; /etc/apt/sources.list.d/feisty-virtualbox.list'&lt;br /&gt;
 wget http://www.virtualbox.org/debian/innotek.asc -O- | sudo apt-key add -&lt;br /&gt;
 sudo apt-get update&lt;br /&gt;
 sudo apt-get -y install virtualbox&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Настройка виртуальной машины===&lt;br /&gt;
&lt;br /&gt;
На хост-ситеме Ubuntu нам понадобится механизм совместного использования файлов мирами Linux и Windows. К счастью, ''VirtualBox'' имеет для этого встроенный механизм , так что Samba на хост-машине или NFS на обеих сторонах можно не устанавливать. Учтите: совместного использования вашего жесткого диска НЕ получится, пока вы не установите ''Vbox GuestAdditions'' в гостевой системе! При создании общих папок гостевая система должна быть выключена.&lt;br /&gt;
&lt;br /&gt;
Общие папки работают только в версии 1.3.8; в версию 1.4.0 вкралась ошибка! Если у вас та самая версия, и вы не хотите возиться с Samba ради совместного доступа, скачайте iso с [http://www.virtualbox.de/download/1.3.8/VBoxGuestAdditions_1.3.8.iso www.virtualbox.de/download/1.3.8/VBoxGuestAdditions_1.3.8.iso].&lt;br /&gt;
&lt;br /&gt;
Выключите ВМ, смените виртуальный '''cdrom''' на этот '''iso''' и перезапустите гостевую систему. Установите ''VirtualBoxGuest Additions'', и все должно заработать. Пока что я не слыхал о неприятностях, связанных с «не той» версией гостевых дополнений. Это должно вас временно выручить, до следующей версии, где Innotek, скорее всего, исправит эту ошибку.&lt;br /&gt;
&lt;br /&gt;
Для настройки на стороне хоста, с выключенной гостевой ОС, просто выберите вашу ВМ в окне ''VirtualBox Manager'' и нажмите &amp;lt;font color=darkblue&amp;gt;Свойства&amp;lt;/font&amp;gt;, а затем &amp;lt;font color=darkblue&amp;gt;Общие папки&amp;lt;/font&amp;gt; у нижнего края, как показано на экранном снимке справа, заполните два поля подходящими значениями и нажмите &amp;lt;font color=darkblue&amp;gt;OK&amp;lt;/font&amp;gt;. Теперь запустите гостевую ОС и, открыв окно DOS, введите:&lt;br /&gt;
&lt;br /&gt;
 net use E: \\vboxsvr\Shared_Folder&lt;br /&gt;
&lt;br /&gt;
и добавьте &amp;lt;font color=darkred&amp;gt;/Persistent:Yes&amp;lt;/font&amp;gt; к этой команде, если хотите сохранить это при перезапуске. Внимание: не ошибитесь в написании &amp;lt;font color=darkred&amp;gt;vboxsvr&amp;lt;/font&amp;gt; – это важно!&lt;br /&gt;
&lt;br /&gt;
Альтернативный метод – открыть окно ''Проводника'' Windows и выбрать &amp;lt;font color=darkblue&amp;gt;Сервис &amp;gt; Подключить сетевой диск&amp;lt;/font&amp;gt;; вы увидите диалоговое окно, похожее на то, что справа. Тем же манером вставьте подходящие значения и нажмите &amp;lt;font color=darkblue&amp;gt;Готово&amp;lt;/font&amp;gt;. Если все в порядке, то появится новое окно ''Проводника'' с содержимым каталога хост-машины.&lt;br /&gt;
&lt;br /&gt;
Далее включим RDP-протокол, чтобы разрешить удаленные сессии. Просто щелкните на флажке &amp;lt;font color=darkblue&amp;gt;Enable VRDP Server&amp;lt;/font&amp;gt;, как показано в этой колонке ниже.&lt;br /&gt;
&lt;br /&gt;
===Настройка Windows XP===&lt;br /&gt;
&lt;br /&gt;
Следующие настройки в принципе могут работать и для других версий Windows, не XP, но я не берусь этого утверждать, поскольку не успел протестировать. Нам нужны такие настройки, чтобы наша установленная Windows выводила на экран только панель задач, но не рабочий стол. Для этого поковыряемся в реестре; но учтите, что в Windows XP SP2 доступ к рассматриваемым настройкам ограничен, и обычный пользователь не вправе изменять эту часть – поэтому сперва мы временно присвоим права администратора пользователю, который будет использовать сессию Windows.&lt;br /&gt;
&lt;br /&gt;
Войдите как «Администратор» (или любой другой пользователь с достаточными правами), затем перейдите в нужное место посредством &amp;lt;font color=darkblue&amp;gt;Пуск &amp;gt; Настройки &amp;gt; Панель управления &amp;gt; Пользователи&amp;lt;/font&amp;gt; и щелкните на записи, которую хотите использовать для запуска Windows-программ. Щелкните на &amp;lt;font color=darkblue&amp;gt;Изменить тип учетной записи&amp;lt;/font&amp;gt; и установите переключатель в &amp;lt;font color=darkblue&amp;gt;Администратор компьютера&amp;lt;/font&amp;gt;, затем обратитесь к кнопке &amp;lt;font color=darkblue&amp;gt;Изменить тип учетной записи&amp;lt;/font&amp;gt;. Теперь выйдите из-под администратора и войдите как ваш пользователь, запустите ''regedit32'' и найдите следующий ключ:&lt;br /&gt;
&lt;br /&gt;
 HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer&lt;br /&gt;
&lt;br /&gt;
Нам необходимо создать новое значение &amp;lt;font color=darkred&amp;gt;DWORD&amp;lt;/font&amp;gt; с именем &amp;lt;font color=darkred&amp;gt;NoDesktop&amp;lt;/font&amp;gt; и присвоить ему значение &amp;lt;font color=darkblue&amp;gt;1&amp;lt;/font&amp;gt;, чтобы Windows отображала только приложение, которое мы хотим запустить, а не весь рабочий стол. Для этого выберите &amp;lt;font color=darkblue&amp;gt;Правка&amp;lt;/font&amp;gt; в главном меню, далее &amp;lt;font color=darkblue&amp;gt;Создать и Параметр DWORD&amp;lt;/font&amp;gt; и введите имя &amp;lt;font color=darkred&amp;gt;NoDesktop&amp;lt;/font&amp;gt;, затем нажмите &amp;lt;font color=darkblue&amp;gt;Enter&amp;lt;/font&amp;gt;. Ключ теперь должен быть выделен, поэтому нажмите вновь &amp;lt;font color=darkblue&amp;gt;Enter&amp;lt;/font&amp;gt;, чтобы отредактировать его и установить его значение в &amp;lt;font color=darkred&amp;gt;1&amp;lt;/font&amp;gt;. По завершении все&lt;br /&gt;
должно выглядеть как на экранном снимке в конце этой колонки.&lt;br /&gt;
&lt;br /&gt;
Другой вариант – загрузка файла [http://www.osml.eu/files/nodesktop.reg www.osml.eu/files/nodesktop.reg] с сервера Open Source Migrations Limited (используйте его на собственный страх и риск). Сохраните его на своем рабочем столе, затем просто дважды щелкните на нем, подтвердите действие, и реестр соответствующим образом изменится.&lt;br /&gt;
&lt;br /&gt;
Теперь вы, вероятно, захотите отнять права администратора у учетной записи, повторив предыдущую процедуру в обратном порядке. Работа в Windows с правами администратора столь же небезопасна, как работа в Linux или Unix от имени суперпользователя, и если у вас нет для нее серьезных причин, выйдите из системы и войдите как администратор, превратите пользователя в обычного, и тогда мы сможем завершить наши другие задачи.&lt;br /&gt;
&lt;br /&gt;
====Настройка Windows на автоматический вход.====&lt;br /&gt;
&lt;br /&gt;
*Нажмите кнопку &amp;lt;font color=darkblue&amp;gt;Пуск&amp;lt;/font&amp;gt;, выберите &amp;lt;font color=darkblue&amp;gt;Выполнить&amp;lt;/font&amp;gt;, введите в окне&lt;br /&gt;
 control userpasswords2&lt;br /&gt;
и нажмите &amp;lt;font color=darkblue&amp;gt;OK&amp;lt;/font&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
*Снимите галочку около &amp;lt;font color=darkblue&amp;gt;Требовать ввод имени и пароля пользователя&amp;lt;/font&amp;gt; и нажмите &amp;lt;font color=darkblue&amp;gt;Применить&amp;lt;/font&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
*Появится окно с запросом: под каким пользователем и паролем вы хотите осуществить автоматический вход. Просто введите ранее определенные имя и пароль пользователя.&lt;br /&gt;
&lt;br /&gt;
====Установка Гостевых Дополнений VirtualBox.====&lt;br /&gt;
&lt;br /&gt;
*Выберите в главном меню окна вашей ВМ пункт Devices [Устройства], затем щелкните на &amp;lt;font color=darkblue&amp;gt;Install Guest Additions&amp;lt;/font&amp;gt;.&lt;br /&gt;
*Отвечайте на вопросы установщика для завершения установки.&lt;br /&gt;
&lt;br /&gt;
====Настройка фиксированного IP-адреса, используемого Windows.====&lt;br /&gt;
&lt;br /&gt;
*Перейдите к &amp;lt;font color=darkblue&amp;gt;Пуск &amp;gt; Настройка &amp;gt; Панель управления &amp;gt; Сетевые подключения&amp;lt;/font&amp;gt;.&lt;br /&gt;
*Выполните правый щелчок на &amp;lt;font color=darkblue&amp;gt;Подключение к локальной сети&amp;lt;/font&amp;gt; и выберите &amp;lt;font color=darkblue&amp;gt;Свойства&amp;lt;/font&amp;gt;.&lt;br /&gt;
*Введите IP-адрес, соответствующую маску подсети, адрес шлюза по умолчанию и по крайней мере один DNS-сервер. Вы можете найти&lt;br /&gt;
ваш(и) DNS сервер(а), набрав в терминале хост-машины:&lt;br /&gt;
 cat /etc/resolv.conf&lt;br /&gt;
После слов &amp;lt;font color=darkred&amp;gt;nameserver&amp;lt;/font&amp;gt; указаны IP-адреса DNS-серверов. Шлюз по умолчанию должен соответствовать определенному для вашего TAP-интерфейса в '''/etc/tap.conf'''. Учтите: IP-адрес должен отличаться от IP ''Virtual Box'', прописанного в файле '''/etc/tap.conf'''. Я предлагаю устанавливать IP-адреса, отсчитывая от конца диапазона назад в '''tap.conf''' – т. е. от 254 и меньше для каждого TAP-устройства – и от начала диапазона для ваших гостевых машин, например, 172.16.254.1 и больше. Настройте ваш маршрутизатор на выдачу Windows другого IP. У большинства из вас, вероятно, только одно TAP-устройство, так что это не должно быть проблемой.&lt;br /&gt;
&lt;br /&gt;
====Включение RDP-соединений в Windows и установка пароля.====&lt;br /&gt;
&lt;br /&gt;
*Нажмите &amp;lt;font color=darkblue&amp;gt;Пуск &amp;gt; Настройка &amp;gt; Панель управления &amp;gt; Система&amp;lt;/font&amp;gt; и перейдите на вкладку &amp;lt;font color=darkblue&amp;gt;Удаленные сеансы&amp;lt;/font&amp;gt;.&lt;br /&gt;
*Поставьте галочку напротив пункта &amp;lt;font color=darkblue&amp;gt;Разрешить удаленные подключения к этому компьютеру&amp;lt;/font&amp;gt; и нажмите OK.&lt;br /&gt;
*В &amp;lt;font color=darkblue&amp;gt;Панели управления&amp;lt;/font&amp;gt; щелкните на &amp;lt;font color=darkblue&amp;gt;Пользователи&amp;lt;/font&amp;gt;. Выберите пользователя, под которым хотите входить, и нажмите &amp;lt;font color=darkblue&amp;gt;Создать пароль&amp;lt;/font&amp;gt;.&lt;br /&gt;
*Введите ваш пароль в появившейся строке и нажмите кнопку Создать пароль. Учтите: этот пароль надо установить обязательно, иначе нормальной работы не будет.&lt;br /&gt;
*Далее, загрузите файл: [http://www.cendio.se/files/thinlinc/seamlessrdp/seamlessrdp.zip www.cendio.se/files/thinlinc/seamlessrdp/seamlessrdp.zip] и распакуйте его в '''C:\seamlessrdp'''.&lt;br /&gt;
*Теперь подготовим Windows XP Pro для разрешения удаленного доступа с глубиной цвета 256 бит.&lt;br /&gt;
*Нажмите &amp;lt;font color=darkblue&amp;gt;Пуск&amp;lt;/font&amp;gt;, &amp;lt;font color=darkblue&amp;gt;Выполнить&amp;lt;/font&amp;gt;, введите в поле &amp;lt;font color=darkred&amp;gt;''regedit''&amp;lt;/font&amp;gt; и нажмите &amp;lt;font color=darkblue&amp;gt;OK&amp;lt;/font&amp;gt;.&lt;br /&gt;
*В редакторе реестра перейдите к ключу: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp&lt;br /&gt;
*В панели справа выделите ключ ColorDepth и щелкните на нем правой кнопкой мыши. Выберите Изменить и измените поле Значение на 4.&lt;br /&gt;
*Или, для удобства, просто загрузите файл: [http://www.osml.eu/files/rdpcolourdepth.reg www.osml.eu/files/rdpcolourdepth.reg] с сервера Open Source Migrations Limited (используйте на свой страх и риск). Сохраните его на рабочем столе, затем дважды щелкните на нем, подтвердите действие – и реестр будет изменен. На этом завершается настройка на стороне Windows.&lt;br /&gt;
&lt;br /&gt;
===Настройка: VirtualBox===&lt;br /&gt;
&lt;br /&gt;
Теперь можно настроить ''VirtualBox'' на автозапуск при загрузке. Вопервых, мы собираемся запустить вашу машину из командной строки,&lt;br /&gt;
поэтому в терминале введите:&lt;br /&gt;
&lt;br /&gt;
 VBoxManage startvm &amp;quot;WinXPPro&amp;quot; -type vrdp&lt;br /&gt;
&lt;br /&gt;
Замените здесь &amp;lt;font color=darkred&amp;gt;WinXPPro&amp;lt;/font&amp;gt; на имя вашей ВМ. Чтобы Windows всякий раз запускалась без проблем, выполните &amp;lt;font color=darkblue&amp;gt;Система &amp;gt; Параметры &amp;gt; Сеансы&amp;lt;/font&amp;gt; и выберите вкладку &amp;lt;font color=darkblue&amp;gt;Запускаемые при старте программы&amp;lt;/font&amp;gt;. Щелкните на кнопке &amp;lt;font color=darkblue&amp;gt;Создать&amp;lt;/font&amp;gt;, затем скопируйте и вставьте указанную выше команду в текстовое поле и нажмите &amp;lt;font color=darkblue&amp;gt;OK&amp;lt;/font&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Перед запуском новой ВМ необходимо убедиться, что наша нижняя панель сворачивается, иначе в Windows будут не видны кнопка &amp;lt;font color=darkblue&amp;gt;Пуск&amp;lt;/font&amp;gt; и системный лоток, и нам это необходимо по крайней мере один раз (а может, и больше): если мы далее в Windows наткнемся на проблемы или для установки новых приложений. Просто щелкните правой кнопкой мыши в пустом месте нижней панели и выберите &amp;lt;font color=darkblue&amp;gt;Свойства&amp;lt;/font&amp;gt;, установите флажок &amp;lt;font color=darkblue&amp;gt;Показывать/скрывать кнопки&amp;lt;/font&amp;gt; и нажмите &amp;lt;font color=darkblue&amp;gt;OK&amp;lt;/font&amp;gt;. Теперь слева и справа на вашей панели есть кнопки с изображением стрелки, позволяющие при нажатии ее спрятать.&lt;br /&gt;
&lt;br /&gt;
Теперь впервые запустим нашу ВМ Windows. В терминале наберите:&lt;br /&gt;
&lt;br /&gt;
 rdesktop -rsound -A -s &amp;quot;c:\seamlessrdp\seamlessrdpshell.exe C:\Windows\explorer.exe&amp;quot; &amp;lt;IP-адрес Windows XP&amp;gt;:3389 -u &amp;quot;&amp;lt;Имя пользователя Windows&amp;gt;&amp;quot; -p &amp;lt;Ваш пароль Windows&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Вам нужно будет соответственно изменить переменные. Практически все, но будет виден полный рабочий стол, поскольку Windows необходимо перезагрузить, чтобы все новые возможности заработали. Это немного путано, но сделать так придется, потому что XP не будет воспринимать удаленные подключения, пока вы хоть раз не войдете. Короче, нажмите комбинацию клавиш &amp;lt;font color=darkblue&amp;gt;Ctrl+Esc&amp;lt;/font&amp;gt; и выберите &amp;lt;font color=darkblue&amp;gt;Завершить сеанс&amp;lt;/font&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Выполните предыдущую команду снова, и у вас, после небольшой задержки на вход пользователя, должно появиться отдельное окно ''Проводника''.&lt;br /&gt;
&lt;br /&gt;
Вы должны видеть просто запущенное окно ''Проводника'', а при нажатии одной из вышеупомянутых стрелок на нижней панели Gnome появится кнопка &amp;lt;font color=darkblue&amp;gt;Пуск&amp;lt;/font&amp;gt; и т.д.&lt;br /&gt;
&lt;br /&gt;
Теперь мы можем войти в верхнее меню Ubuntu, &amp;lt;font color=darkblue&amp;gt;Система &amp;gt; Параметры &amp;gt; Главное меню&amp;lt;/font&amp;gt; и определить важные приложения, без которых вам не жить. Например, для установки ''Outlook'' (подразумевается, из ''Office 2003'') вам следует поместить в строку следующую команду:&lt;br /&gt;
&lt;br /&gt;
 /usr/bin/rdesktop -rsound -A -s &amp;quot;c:\seamlessrdp\seamlessrdpshell.exe C:\&lt;br /&gt;
 Program Files\Microsoft Office\OFFICE11\OUTLOOK.EXE&amp;quot; &amp;lt;IP-адрес&lt;br /&gt;
 Windows XP&amp;gt;:3389 -u &amp;quot;&amp;lt;Имя пользователя Windows &amp;gt;&amp;quot; -p &amp;lt;Ваш пароль&lt;br /&gt;
 Windows &amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Наконец, выключить ВМ можно так:&lt;br /&gt;
&lt;br /&gt;
 VBoxManage controlvm &amp;quot;Windows-XP-Pro&amp;quot; savestate&lt;br /&gt;
&lt;br /&gt;
или так:&lt;br /&gt;
&lt;br /&gt;
 VBoxManage controlvm &amp;quot;Windows-XP-Pro&amp;quot; acpipowerbutton&lt;br /&gt;
&lt;br /&gt;
для сохранения текущего состояния машины; или имитировать отключение питания. Пора звать к своему монитору друзей – пусть подивятся на ваши подвиги!&lt;br /&gt;
&lt;br /&gt;
[[Категория:Hardcore Linux]]&lt;br /&gt;
[[Категория:Ubuntu]]&lt;br /&gt;
[[Категория:VirtualBox]]&lt;br /&gt;
[[Категория:Джек Найт]]&lt;/div&gt;</summary>
		<author><name>Kipruss</name></author>	</entry>

	<entry>
		<id>http://wiki.linuxformat.ru/wiki/LXF98:Hardcore_Linux</id>
		<title>LXF98:Hardcore Linux</title>
		<link rel="alternate" type="text/html" href="http://wiki.linuxformat.ru/wiki/LXF98:Hardcore_Linux"/>
				<updated>2009-03-07T20:22:23Z</updated>
		
		<summary type="html">&lt;p&gt;Kipruss: /* Настраиваем TAP-устройство */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==&amp;lt;font color=darkred&amp;gt;VirtualBox:&amp;lt;/font&amp;gt; Windows в Ubuntu==&lt;br /&gt;
&lt;br /&gt;
''Запускайте приложения Microsoft под Linux в Ubuntu Feisty при помощи VirtualBox от Innotek и Windows XP – '''Джек Найт''' здесь на коне….''&lt;br /&gt;
&lt;br /&gt;
Требовалось ли вам когда-нибудь на вашей машине одно или несколько Windows-приложений для решения некоторой задачи? А может, у вас есть клиент, использующий Windows, и вам надо работать с документами ''MS Project'' или запускать непосредственно ''Outlook'' для совместного использования их календарей ''MS Exchange''? Один из выходов – двойная загрузка, другой – запуск Windows XP в качестве гостевой ОС на виртуальной машине (ВМ); но&lt;br /&gt;
есть действительно классное решение – угадайте, какое? Бесплатное, по крайней мере для большинства из нас! ''VirtualBox'' от ''Innotek'' – удивительный продукт, и хотя я на самом деле не проверял его производительность, навскидку кажется, что он значительно превосходит и ''VMWare Workstation'', и ''Server''. Он располагает набором приятных функций и возможностью организовать сетевой мост через беспроводной адаптер ноутбука (нечто прежде немыслимое в ''VMWare'') – чем не продукт-конфетка?&lt;br /&gt;
&lt;br /&gt;
Innotek применяет дуальную схему лицензирования – существуют открытая и закрытая двоичная версии ''VirtualBox'' (последняя бесплатна для ознакомления или персонального использования). Более того, у Innonek весьма разумная политика лицензирования для малого бизнеса – по запросу о покупке коммерческих лицензий на две машины я был любезно извещен, что это относится к категории «бесплатно»! Уже в восторге? Ну, это только начало – а вот и убойный довод: при помощи этой штуки можно запускать отдельные приложения Windows на рабочем столе Linux, и они появятся как обычные окна Gnome, KDE (или другие) на вашем X-столе. Прибавьте сюда ''Beryl/Compiz'', и получите весьма впечатляющий инструмент. Качайте с [http://www.virtualbox.org www.virtualbox.org].&lt;br /&gt;
&lt;br /&gt;
Но как заставить все это работать? Что ж, понадобится кое-какая подгонка и на стороне Linux, и на стороне Windows – но результат стоящий, по крайней мере, по моему скромному мнению. В этой статье я проведу вас через настройку моста через беспроводной адаптер на ноутбуке, а продолжу настройкой двух типичных приложений, зависящих от Windows – ''MS Project'' и ''Outlook'', чтобы под Ubuntu Feisty они выглядели как родные.&lt;br /&gt;
&lt;br /&gt;
===План действий===&lt;br /&gt;
&lt;br /&gt;
Вот что мы проделаем на следующих страницах:&lt;br /&gt;
&lt;br /&gt;
*Кое-что подправим для устранения неприятностей с USB и DVD.&lt;br /&gt;
*Создадим TAP-устройство на сетевом интерфейсе базовой машины (идеально для WLAN-интерфейса ноутбука).&lt;br /&gt;
*Установим персональную/пробную версию ''VirtualBox'' от Innotek.&lt;br /&gt;
*Создадим ВМ для Windows XP и настроим ее на использование сетевого TAP-устройства.&lt;br /&gt;
*Установим Windows XP (самые общие моменты).&lt;br /&gt;
*Настроим Windows XP со всеми тонкостями, для безупречной работы.&lt;br /&gt;
*Настроим ''VirtualBox'' на работу без ручного вмешательства и автоматический старт.&lt;br /&gt;
*Введем пункты меню для наших приложений-примеров.&lt;br /&gt;
&lt;br /&gt;
В детали установки гостевой ОС я вдаваться не буду: если кто не знает, как это сделать, описание найти легко. Зато приведу простой метод установки самого ''VirtualBox''.&lt;br /&gt;
&lt;br /&gt;
Лично я использую на этом уроке Ubuntu 7.04 (Feisty), но эти инструкции должны отлично работать для dapper или edgy, при мелких изменениях (например, замене всех вхождений слова «feisty» по смыслу). Они должны работать и в Kubuntu; правда, я еще не проделывал мои операции в KDE, чтобы разобраться с отличиями. Машину, где запущен VirtualBox, я буду называть HOST [хост], а запущенные в нем системы – GUEST [гость]. Предполагается, что вы можете запускать командную оболочку и использовать редактор для изменения текстовых файлов. Прежде чем продолжить, познакомьтесь со врезкой&lt;br /&gt;
Избавляемся от неприятностей.&lt;br /&gt;
&lt;br /&gt;
===Настраиваем TAP-устройство===&lt;br /&gt;
&lt;br /&gt;
Нам нужно установить пакеты, а именно ''User Mode Linux Utilities'' и ''Proxy Arp Routing Daemon''. Для начала убедитесь, что подключен репозиторий '''universe''': в строке-меню Gnome выберите &amp;lt;font color=darkblue&amp;gt;Система &amp;gt; Администрирование &amp;gt; Источники приложений&amp;lt;/font&amp;gt;, затем установите галочку &amp;lt;font color=darkblue&amp;gt;Свободное ПО, поддерживаемое сообществом&amp;lt;/font&amp;gt; (&amp;lt;font color=darkblue&amp;gt;universe&amp;lt;/font&amp;gt;). Теперь откройте терминал и введите:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
 sudo apt-get install uml-utilities parprouted&lt;br /&gt;
 sudo chgrp vboxusers /dev/net/tun&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Теперь надо встроить TAP в сетевой адаптер хост-системы. Это особенно полезно для ноутбуков с беспроводными интерфейсами, поскольку WLAN-адаптер обычно получает IP-адрес через DHCP, но гостевая машина не может делать этого – как правило, несколько IP-адресов нельзя получить для того, что в сущности является клонированным интерфейсом. К тому же если беспроводной интерфейс использует защиту WPA, то появление интерфейса-клона, вероятно, заставит WAP&lt;br /&gt;
(Wireless Access Point – точка беспроводного доступа) заподозрить, что компьютер под атакой. Итак, сделаем вот что: выявим неиспользованные подсети, выберем пару уникальных IP-адресов и присвоим один TAP-устройству, а другой гостевой машине. Неважно, что они фиксированы: адрес хост-машины будет динамическим, и они будут проходить через маскардинг. В итоге гостевая машина будет «просто работать», где бы вы ни получили WLAN-соединение для хоста.&lt;br /&gt;
&lt;br /&gt;
Проще всего создать скрипт для инициализации TAP-устройства и поддержки конфигурации сети. Вот мой вариант:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
 #!/bin/bash&lt;br /&gt;
 # Имя: tapctrl&lt;br /&gt;
 # Использование: tapctrl start|stop&lt;br /&gt;
 # Обеспечивает: tap для virtualbox во внешней сети, включая беспроводные&lt;br /&gt;
 # Аннотация:&lt;br /&gt;
 # устанавливает tap-устройство для совместного использования  интерфейса wifi с vbox&lt;br /&gt;
 # Описание: создает виртуальный tap-интерфейс, присваивает IP- адрес, настраивает iptables&lt;br /&gt;
 # для маскарадинга через устройство по умолчанию&lt;br /&gt;
 # и настраивает прокси arp с демоном parprouted для корректной маршрутизации&lt;br /&gt;
 # Автор: Jack Knight&lt;br /&gt;
 # - Open Source Migrations Ltd, UK (http://www.osml.co.uk)&lt;br /&gt;
 # Настраиваем переменные здесь:&lt;br /&gt;
 DESC=&amp;quot;Virtualbox IP tap&amp;quot;&lt;br /&gt;
 PATH=/sbin:/bin:/usr/sbin:/usr/bin&lt;br /&gt;
 TUNDEVICE=tap1 # Произвольно, но должно соответствовать устройству, указанному в сетевых настройках VirtualBox.&lt;br /&gt;
 LANDEVICE=eth1 # Исправьте, чтобы соответствовало вашему сетевому устройству – может быть eth0, eth1 ath0, wlan1 и т. д.&lt;br /&gt;
 IPADDR=172.16.254.254 # Произвольно, но убедитесь, что вы взяли нечто из неиспользуемой подсети&lt;br /&gt;
 case &amp;quot;$1&amp;quot; in start|restart|force-reload)&lt;br /&gt;
           echo -n &amp;quot;Starting $DESC: &amp;quot;&lt;br /&gt;
           tunctl -t $TUNDEVICE -u $USER&lt;br /&gt;
           ip link set $TUNDEVICE up&lt;br /&gt;
           ip addr add $IPADDR dev $TUNDEVICE&lt;br /&gt;
              arp -Ds $IPADDR $TUNDEVICE pub&lt;br /&gt;
           iptables -t nat -A POSTROUTING -o $LANDEVICE -j MASQUERADE&lt;br /&gt;
           iptables -t nat -P POSTROUTING ACCEPT # Разрешаем работу других интерфейсов&lt;br /&gt;
              echo 1 &amp;gt; /proc/sys/net/ipv4/ip_forward&lt;br /&gt;
              echo 1 &amp;gt; /proc/sys/net/ipv4/conf/$TUNDEVICE/proxy_arp&lt;br /&gt;
              parprouted $LANDEVICE $TUNDEVICE&lt;br /&gt;
           ;;&lt;br /&gt;
 stop)&lt;br /&gt;
              echo -n &amp;quot;Stopping $DESC: &amp;quot;&lt;br /&gt;
              iptables --table nat -F&lt;br /&gt;
              killall parprouted&lt;br /&gt;
              ip link set $TUNDEVICE down &lt;br /&gt;
           ;;&lt;br /&gt;
 *)&lt;br /&gt;
           N=/etc/init.d/$NAME&lt;br /&gt;
              echo &amp;quot;Usage: $N start|stop&amp;quot; &amp;gt;&amp;amp;2&lt;br /&gt;
              exit 1&lt;br /&gt;
           ;;&lt;br /&gt;
 esac&lt;br /&gt;
 exit 0&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Этот код есть на DVD; если кому-то нужно, у меня также есть более проработанный скрипт, работающий со многими пользователями, виртуальными машинами и устройствами и не опубликованный здесь ради простоты. Не стесняйтесь обращаться за ним ко мне по электронной почте через мой web-сайт.&lt;br /&gt;
&lt;br /&gt;
===Установка VirtualBox===&lt;br /&gt;
&lt;br /&gt;
К сожалению, поскольку на момент написания ''VirtualBox'' еще не попал в основные репозитории Ubuntu, перед установкой пакета придется добавить новый сторонний репозиторий от ''VirtualBox'':&lt;br /&gt;
&lt;br /&gt;
 sudo sh -c 'echo &amp;quot;# VirtualBox репозиторий для Ubuntu Feisty Fawn&lt;br /&gt;
 deb http://www.virtualbox.org/debian feisty non-free&amp;quot; \&lt;br /&gt;
   &amp;gt; /etc/apt/sources.list.d/feisty-virtualbox.list'&lt;br /&gt;
 wget http://www.virtualbox.org/debian/innotek.asc -O- | sudo apt-key add -&lt;br /&gt;
 sudo apt-get update&lt;br /&gt;
 sudo apt-get -y install virtualbox&lt;br /&gt;
&lt;br /&gt;
===Настройка виртуальной машины===&lt;br /&gt;
&lt;br /&gt;
На хост-ситеме Ubuntu нам понадобится механизм совместного использования файлов мирами Linux и Windows. К счастью, ''VirtualBox'' имеет для этого встроенный механизм , так что Samba на хост-машине или NFS на обеих сторонах можно не устанавливать. Учтите: совместного использования вашего жесткого диска НЕ получится, пока вы не установите ''Vbox GuestAdditions'' в гостевой системе! При создании общих папок гостевая система должна быть выключена.&lt;br /&gt;
&lt;br /&gt;
Общие папки работают только в версии 1.3.8; в версию 1.4.0 вкралась ошибка! Если у вас та самая версия, и вы не хотите возиться с Samba ради совместного доступа, скачайте iso с [http://www.virtualbox.de/download/1.3.8/VBoxGuestAdditions_1.3.8.iso www.virtualbox.de/download/1.3.8/VBoxGuestAdditions_1.3.8.iso].&lt;br /&gt;
&lt;br /&gt;
Выключите ВМ, смените виртуальный '''cdrom''' на этот '''iso''' и перезапустите гостевую систему. Установите ''VirtualBoxGuest Additions'', и все должно заработать. Пока что я не слыхал о неприятностях, связанных с «не той» версией гостевых дополнений. Это должно вас временно выручить, до следующей версии, где Innotek, скорее всего, исправит эту ошибку.&lt;br /&gt;
&lt;br /&gt;
Для настройки на стороне хоста, с выключенной гостевой ОС, просто выберите вашу ВМ в окне ''VirtualBox Manager'' и нажмите &amp;lt;font color=darkblue&amp;gt;Свойства&amp;lt;/font&amp;gt;, а затем &amp;lt;font color=darkblue&amp;gt;Общие папки&amp;lt;/font&amp;gt; у нижнего края, как показано на экранном снимке справа, заполните два поля подходящими значениями и нажмите &amp;lt;font color=darkblue&amp;gt;OK&amp;lt;/font&amp;gt;. Теперь запустите гостевую ОС и, открыв окно DOS, введите:&lt;br /&gt;
&lt;br /&gt;
 net use E: \\vboxsvr\Shared_Folder&lt;br /&gt;
&lt;br /&gt;
и добавьте &amp;lt;font color=darkred&amp;gt;/Persistent:Yes&amp;lt;/font&amp;gt; к этой команде, если хотите сохранить это при перезапуске. Внимание: не ошибитесь в написании &amp;lt;font color=darkred&amp;gt;vboxsvr&amp;lt;/font&amp;gt; – это важно!&lt;br /&gt;
&lt;br /&gt;
Альтернативный метод – открыть окно ''Проводника'' Windows и выбрать &amp;lt;font color=darkblue&amp;gt;Сервис &amp;gt; Подключить сетевой диск&amp;lt;/font&amp;gt;; вы увидите диалоговое окно, похожее на то, что справа. Тем же манером вставьте подходящие значения и нажмите &amp;lt;font color=darkblue&amp;gt;Готово&amp;lt;/font&amp;gt;. Если все в порядке, то появится новое окно ''Проводника'' с содержимым каталога хост-машины.&lt;br /&gt;
&lt;br /&gt;
Далее включим RDP-протокол, чтобы разрешить удаленные сессии. Просто щелкните на флажке &amp;lt;font color=darkblue&amp;gt;Enable VRDP Server&amp;lt;/font&amp;gt;, как показано в этой колонке ниже.&lt;br /&gt;
&lt;br /&gt;
===Настройка Windows XP===&lt;br /&gt;
&lt;br /&gt;
Следующие настройки в принципе могут работать и для других версий Windows, не XP, но я не берусь этого утверждать, поскольку не успел протестировать. Нам нужны такие настройки, чтобы наша установленная Windows выводила на экран только панель задач, но не рабочий стол. Для этого поковыряемся в реестре; но учтите, что в Windows XP SP2 доступ к рассматриваемым настройкам ограничен, и обычный пользователь не вправе изменять эту часть – поэтому сперва мы временно присвоим права администратора пользователю, который будет использовать сессию Windows.&lt;br /&gt;
&lt;br /&gt;
Войдите как «Администратор» (или любой другой пользователь с достаточными правами), затем перейдите в нужное место посредством &amp;lt;font color=darkblue&amp;gt;Пуск &amp;gt; Настройки &amp;gt; Панель управления &amp;gt; Пользователи&amp;lt;/font&amp;gt; и щелкните на записи, которую хотите использовать для запуска Windows-программ. Щелкните на &amp;lt;font color=darkblue&amp;gt;Изменить тип учетной записи&amp;lt;/font&amp;gt; и установите переключатель в &amp;lt;font color=darkblue&amp;gt;Администратор компьютера&amp;lt;/font&amp;gt;, затем обратитесь к кнопке &amp;lt;font color=darkblue&amp;gt;Изменить тип учетной записи&amp;lt;/font&amp;gt;. Теперь выйдите из-под администратора и войдите как ваш пользователь, запустите ''regedit32'' и найдите следующий ключ:&lt;br /&gt;
&lt;br /&gt;
 HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer&lt;br /&gt;
&lt;br /&gt;
Нам необходимо создать новое значение &amp;lt;font color=darkred&amp;gt;DWORD&amp;lt;/font&amp;gt; с именем &amp;lt;font color=darkred&amp;gt;NoDesktop&amp;lt;/font&amp;gt; и присвоить ему значение &amp;lt;font color=darkblue&amp;gt;1&amp;lt;/font&amp;gt;, чтобы Windows отображала только приложение, которое мы хотим запустить, а не весь рабочий стол. Для этого выберите &amp;lt;font color=darkblue&amp;gt;Правка&amp;lt;/font&amp;gt; в главном меню, далее &amp;lt;font color=darkblue&amp;gt;Создать и Параметр DWORD&amp;lt;/font&amp;gt; и введите имя &amp;lt;font color=darkred&amp;gt;NoDesktop&amp;lt;/font&amp;gt;, затем нажмите &amp;lt;font color=darkblue&amp;gt;Enter&amp;lt;/font&amp;gt;. Ключ теперь должен быть выделен, поэтому нажмите вновь &amp;lt;font color=darkblue&amp;gt;Enter&amp;lt;/font&amp;gt;, чтобы отредактировать его и установить его значение в &amp;lt;font color=darkred&amp;gt;1&amp;lt;/font&amp;gt;. По завершении все&lt;br /&gt;
должно выглядеть как на экранном снимке в конце этой колонки.&lt;br /&gt;
&lt;br /&gt;
Другой вариант – загрузка файла [http://www.osml.eu/files/nodesktop.reg www.osml.eu/files/nodesktop.reg] с сервера Open Source Migrations Limited (используйте его на собственный страх и риск). Сохраните его на своем рабочем столе, затем просто дважды щелкните на нем, подтвердите действие, и реестр соответствующим образом изменится.&lt;br /&gt;
&lt;br /&gt;
Теперь вы, вероятно, захотите отнять права администратора у учетной записи, повторив предыдущую процедуру в обратном порядке. Работа в Windows с правами администратора столь же небезопасна, как работа в Linux или Unix от имени суперпользователя, и если у вас нет для нее серьезных причин, выйдите из системы и войдите как администратор, превратите пользователя в обычного, и тогда мы сможем завершить наши другие задачи.&lt;br /&gt;
&lt;br /&gt;
====Настройка Windows на автоматический вход.====&lt;br /&gt;
&lt;br /&gt;
*Нажмите кнопку &amp;lt;font color=darkblue&amp;gt;Пуск&amp;lt;/font&amp;gt;, выберите &amp;lt;font color=darkblue&amp;gt;Выполнить&amp;lt;/font&amp;gt;, введите в окне&lt;br /&gt;
 control userpasswords2&lt;br /&gt;
и нажмите &amp;lt;font color=darkblue&amp;gt;OK&amp;lt;/font&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
*Снимите галочку около &amp;lt;font color=darkblue&amp;gt;Требовать ввод имени и пароля пользователя&amp;lt;/font&amp;gt; и нажмите &amp;lt;font color=darkblue&amp;gt;Применить&amp;lt;/font&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
*Появится окно с запросом: под каким пользователем и паролем вы хотите осуществить автоматический вход. Просто введите ранее определенные имя и пароль пользователя.&lt;br /&gt;
&lt;br /&gt;
====Установка Гостевых Дополнений VirtualBox.====&lt;br /&gt;
&lt;br /&gt;
*Выберите в главном меню окна вашей ВМ пункт Devices [Устройства], затем щелкните на &amp;lt;font color=darkblue&amp;gt;Install Guest Additions&amp;lt;/font&amp;gt;.&lt;br /&gt;
*Отвечайте на вопросы установщика для завершения установки.&lt;br /&gt;
&lt;br /&gt;
====Настройка фиксированного IP-адреса, используемого Windows.====&lt;br /&gt;
&lt;br /&gt;
*Перейдите к &amp;lt;font color=darkblue&amp;gt;Пуск &amp;gt; Настройка &amp;gt; Панель управления &amp;gt; Сетевые подключения&amp;lt;/font&amp;gt;.&lt;br /&gt;
*Выполните правый щелчок на &amp;lt;font color=darkblue&amp;gt;Подключение к локальной сети&amp;lt;/font&amp;gt; и выберите &amp;lt;font color=darkblue&amp;gt;Свойства&amp;lt;/font&amp;gt;.&lt;br /&gt;
*Введите IP-адрес, соответствующую маску подсети, адрес шлюза по умолчанию и по крайней мере один DNS-сервер. Вы можете найти&lt;br /&gt;
ваш(и) DNS сервер(а), набрав в терминале хост-машины:&lt;br /&gt;
 cat /etc/resolv.conf&lt;br /&gt;
После слов &amp;lt;font color=darkred&amp;gt;nameserver&amp;lt;/font&amp;gt; указаны IP-адреса DNS-серверов. Шлюз по умолчанию должен соответствовать определенному для вашего TAP-интерфейса в '''/etc/tap.conf'''. Учтите: IP-адрес должен отличаться от IP ''Virtual Box'', прописанного в файле '''/etc/tap.conf'''. Я предлагаю устанавливать IP-адреса, отсчитывая от конца диапазона назад в '''tap.conf''' – т. е. от 254 и меньше для каждого TAP-устройства – и от начала диапазона для ваших гостевых машин, например, 172.16.254.1 и больше. Настройте ваш маршрутизатор на выдачу Windows другого IP. У большинства из вас, вероятно, только одно TAP-устройство, так что это не должно быть проблемой.&lt;br /&gt;
&lt;br /&gt;
====Включение RDP-соединений в Windows и установка пароля.====&lt;br /&gt;
&lt;br /&gt;
*Нажмите &amp;lt;font color=darkblue&amp;gt;Пуск &amp;gt; Настройка &amp;gt; Панель управления &amp;gt; Система&amp;lt;/font&amp;gt; и перейдите на вкладку &amp;lt;font color=darkblue&amp;gt;Удаленные сеансы&amp;lt;/font&amp;gt;.&lt;br /&gt;
*Поставьте галочку напротив пункта &amp;lt;font color=darkblue&amp;gt;Разрешить удаленные подключения к этому компьютеру&amp;lt;/font&amp;gt; и нажмите OK.&lt;br /&gt;
*В &amp;lt;font color=darkblue&amp;gt;Панели управления&amp;lt;/font&amp;gt; щелкните на &amp;lt;font color=darkblue&amp;gt;Пользователи&amp;lt;/font&amp;gt;. Выберите пользователя, под которым хотите входить, и нажмите &amp;lt;font color=darkblue&amp;gt;Создать пароль&amp;lt;/font&amp;gt;.&lt;br /&gt;
*Введите ваш пароль в появившейся строке и нажмите кнопку Создать пароль. Учтите: этот пароль надо установить обязательно, иначе нормальной работы не будет.&lt;br /&gt;
*Далее, загрузите файл: [http://www.cendio.se/files/thinlinc/seamlessrdp/seamlessrdp.zip www.cendio.se/files/thinlinc/seamlessrdp/seamlessrdp.zip] и распакуйте его в '''C:\seamlessrdp'''.&lt;br /&gt;
*Теперь подготовим Windows XP Pro для разрешения удаленного доступа с глубиной цвета 256 бит.&lt;br /&gt;
*Нажмите &amp;lt;font color=darkblue&amp;gt;Пуск&amp;lt;/font&amp;gt;, &amp;lt;font color=darkblue&amp;gt;Выполнить&amp;lt;/font&amp;gt;, введите в поле &amp;lt;font color=darkred&amp;gt;''regedit''&amp;lt;/font&amp;gt; и нажмите &amp;lt;font color=darkblue&amp;gt;OK&amp;lt;/font&amp;gt;.&lt;br /&gt;
*В редакторе реестра перейдите к ключу: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp&lt;br /&gt;
*В панели справа выделите ключ ColorDepth и щелкните на нем правой кнопкой мыши. Выберите Изменить и измените поле Значение на 4.&lt;br /&gt;
*Или, для удобства, просто загрузите файл: [http://www.osml.eu/files/rdpcolourdepth.reg www.osml.eu/files/rdpcolourdepth.reg] с сервера Open Source Migrations Limited (используйте на свой страх и риск). Сохраните его на рабочем столе, затем дважды щелкните на нем, подтвердите действие – и реестр будет изменен. На этом завершается настройка на стороне Windows.&lt;br /&gt;
&lt;br /&gt;
===Настройка: VirtualBox===&lt;br /&gt;
&lt;br /&gt;
Теперь можно настроить ''VirtualBox'' на автозапуск при загрузке. Вопервых, мы собираемся запустить вашу машину из командной строки,&lt;br /&gt;
поэтому в терминале введите:&lt;br /&gt;
&lt;br /&gt;
 VBoxManage startvm &amp;quot;WinXPPro&amp;quot; -type vrdp&lt;br /&gt;
&lt;br /&gt;
Замените здесь &amp;lt;font color=darkred&amp;gt;WinXPPro&amp;lt;/font&amp;gt; на имя вашей ВМ. Чтобы Windows всякий раз запускалась без проблем, выполните &amp;lt;font color=darkblue&amp;gt;Система &amp;gt; Параметры &amp;gt; Сеансы&amp;lt;/font&amp;gt; и выберите вкладку &amp;lt;font color=darkblue&amp;gt;Запускаемые при старте программы&amp;lt;/font&amp;gt;. Щелкните на кнопке &amp;lt;font color=darkblue&amp;gt;Создать&amp;lt;/font&amp;gt;, затем скопируйте и вставьте указанную выше команду в текстовое поле и нажмите &amp;lt;font color=darkblue&amp;gt;OK&amp;lt;/font&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Перед запуском новой ВМ необходимо убедиться, что наша нижняя панель сворачивается, иначе в Windows будут не видны кнопка &amp;lt;font color=darkblue&amp;gt;Пуск&amp;lt;/font&amp;gt; и системный лоток, и нам это необходимо по крайней мере один раз (а может, и больше): если мы далее в Windows наткнемся на проблемы или для установки новых приложений. Просто щелкните правой кнопкой мыши в пустом месте нижней панели и выберите &amp;lt;font color=darkblue&amp;gt;Свойства&amp;lt;/font&amp;gt;, установите флажок &amp;lt;font color=darkblue&amp;gt;Показывать/скрывать кнопки&amp;lt;/font&amp;gt; и нажмите &amp;lt;font color=darkblue&amp;gt;OK&amp;lt;/font&amp;gt;. Теперь слева и справа на вашей панели есть кнопки с изображением стрелки, позволяющие при нажатии ее спрятать.&lt;br /&gt;
&lt;br /&gt;
Теперь впервые запустим нашу ВМ Windows. В терминале наберите:&lt;br /&gt;
&lt;br /&gt;
 rdesktop -rsound -A -s &amp;quot;c:\seamlessrdp\seamlessrdpshell.exe C:\Windows\explorer.exe&amp;quot; &amp;lt;IP-адрес Windows XP&amp;gt;:3389 -u &amp;quot;&amp;lt;Имя пользователя Windows&amp;gt;&amp;quot; -p &amp;lt;Ваш пароль Windows&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Вам нужно будет соответственно изменить переменные. Практически все, но будет виден полный рабочий стол, поскольку Windows необходимо перезагрузить, чтобы все новые возможности заработали. Это немного путано, но сделать так придется, потому что XP не будет воспринимать удаленные подключения, пока вы хоть раз не войдете. Короче, нажмите комбинацию клавиш &amp;lt;font color=darkblue&amp;gt;Ctrl+Esc&amp;lt;/font&amp;gt; и выберите &amp;lt;font color=darkblue&amp;gt;Завершить сеанс&amp;lt;/font&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Выполните предыдущую команду снова, и у вас, после небольшой задержки на вход пользователя, должно появиться отдельное окно ''Проводника''.&lt;br /&gt;
&lt;br /&gt;
Вы должны видеть просто запущенное окно ''Проводника'', а при нажатии одной из вышеупомянутых стрелок на нижней панели Gnome появится кнопка &amp;lt;font color=darkblue&amp;gt;Пуск&amp;lt;/font&amp;gt; и т.д.&lt;br /&gt;
&lt;br /&gt;
Теперь мы можем войти в верхнее меню Ubuntu, &amp;lt;font color=darkblue&amp;gt;Система &amp;gt; Параметры &amp;gt; Главное меню&amp;lt;/font&amp;gt; и определить важные приложения, без которых вам не жить. Например, для установки ''Outlook'' (подразумевается, из ''Office 2003'') вам следует поместить в строку следующую команду:&lt;br /&gt;
&lt;br /&gt;
 /usr/bin/rdesktop -rsound -A -s &amp;quot;c:\seamlessrdp\seamlessrdpshell.exe C:\&lt;br /&gt;
 Program Files\Microsoft Office\OFFICE11\OUTLOOK.EXE&amp;quot; &amp;lt;IP-адрес&lt;br /&gt;
 Windows XP&amp;gt;:3389 -u &amp;quot;&amp;lt;Имя пользователя Windows &amp;gt;&amp;quot; -p &amp;lt;Ваш пароль&lt;br /&gt;
 Windows &amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Наконец, выключить ВМ можно так:&lt;br /&gt;
&lt;br /&gt;
 VBoxManage controlvm &amp;quot;Windows-XP-Pro&amp;quot; savestate&lt;br /&gt;
&lt;br /&gt;
или так:&lt;br /&gt;
&lt;br /&gt;
 VBoxManage controlvm &amp;quot;Windows-XP-Pro&amp;quot; acpipowerbutton&lt;br /&gt;
&lt;br /&gt;
для сохранения текущего состояния машины; или имитировать отключение питания. Пора звать к своему монитору друзей – пусть подивятся на ваши подвиги!&lt;br /&gt;
&lt;br /&gt;
[[Категория:Hardcore Linux]]&lt;br /&gt;
[[Категория:Ubuntu]]&lt;br /&gt;
[[Категория:VirtualBox]]&lt;br /&gt;
[[Категория:Джек Найт]]&lt;/div&gt;</summary>
		<author><name>Kipruss</name></author>	</entry>

	<entry>
		<id>http://wiki.linuxformat.ru/wiki/%D0%9E%D0%B1%D1%81%D1%83%D0%B6%D0%B4%D0%B5%D0%BD%D0%B8%D0%B5_%D1%83%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA%D0%B0:Yaleks</id>
		<title>Обсуждение участника:Yaleks</title>
		<link rel="alternate" type="text/html" href="http://wiki.linuxformat.ru/wiki/%D0%9E%D0%B1%D1%81%D1%83%D0%B6%D0%B4%D0%B5%D0%BD%D0%B8%D0%B5_%D1%83%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA%D0%B0:Yaleks"/>
				<updated>2009-03-07T20:14:57Z</updated>
		
		<summary type="html">&lt;p&gt;Kipruss: /* LXF100 ... */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Установил расширения Cite, ParserFunctions и SyntaxHighlight - проверяйте --17:21, 11 марта 2008 (MSK)&lt;br /&gt;
&lt;br /&gt;
Вы вчера перенесли статью LXF97:TEX в LXF97:Препринт, но при этом некорректно изменили оглавление номера, оставив в нем ссылку на LXF97:TEX, но удалив при этом ссылку на следующую статью Андрея Боровского. Я ее найти в списке статей не могу. Верните ее пожалуйста на место. --[[Участник:Crazy Rebel|Crazy Rebel]] 08:07, 3 октября 2008 (MSD) &lt;br /&gt;
: Я просто очистил содержимое, сама статья была создана давно. Оглавление сейчас пофиксил. --[[Участник:Yaleks|Yaleks]] 15:07, 4 октября 2008 (MSD)&lt;br /&gt;
&lt;br /&gt;
== Викификация LXF70-77 ==&lt;br /&gt;
До сих пор я занимался викификацией LXF c конца, а Вы с начала. Но теперь, когда остались не завершенными только самые начальные номера, причем в каждом из них уже сделана какая то часть работы, Валентин Синицин посоетовал обратиться непосредственно к Вам, чтобы разделить оставшиеся для викификации статьи. В принципе я могу пойти и другим путем - начиная викификацию 2008 года. Так что давайте решим как будет удобнее. --[[Участник:Crazy Rebel|Crazy Rebel]]&lt;br /&gt;
&lt;br /&gt;
* Вот что осталось (если существующие оглавления полные):&lt;br /&gt;
&amp;lt;nowiki&amp;gt;# &amp;lt;s&amp;gt;[[LXF74-75:Inkscape]] (13 ссылок)&amp;lt;/s&amp;gt;&lt;br /&gt;
# &amp;lt;s&amp;gt;[[LXF71:GIMP]]&amp;lt;/s&amp;gt; (7 ссылок)&lt;br /&gt;
# &amp;lt;s&amp;gt;[[LXF72:GIMP]]&amp;lt;/s&amp;gt; (7 ссылок)&lt;br /&gt;
# &amp;lt;s&amp;gt;[[LXF73:GIMP]]&amp;lt;/s&amp;gt; (7 ссылок)&lt;br /&gt;
# &amp;lt;s&amp;gt;[[LXF73:Сравнение: Электронные фотоальбомы]] (2 ссылки)&amp;lt;/s&amp;gt;&lt;br /&gt;
# &amp;lt;s&amp;gt;[[LXF74-75:Технологии Linux-2006]] (2 ссылки)&amp;lt;/s&amp;gt;&lt;br /&gt;
# &amp;lt;s&amp;gt;[[LXF71:VariCAD 2005]]&amp;lt;/s&amp;gt;&lt;br /&gt;
# &amp;lt;s&amp;gt;[[LXF71:KOffice 1.4]]&amp;lt;/s&amp;gt;&lt;br /&gt;
# &amp;lt;s&amp;gt;[[LXF71:SmoothWall Firewall 4]]&amp;lt;/s&amp;gt;&lt;br /&gt;
# &amp;lt;s&amp;gt;[[LXF71:Amarok 1.3]]&amp;lt;/s&amp;gt;&lt;br /&gt;
# &amp;lt;s&amp;gt;[[LXF71:Спецрепортаж]]&amp;lt;/s&amp;gt;&lt;br /&gt;
# &amp;lt;s&amp;gt;[[LXF71:Настольный Linux]]&amp;lt;/s&amp;gt;&lt;br /&gt;
# &amp;lt;s&amp;gt;[[LXF71:Гонка за лидером]]&amp;lt;/s&amp;gt;&lt;br /&gt;
# &amp;lt;s&amp;gt;[[LXF71:Дневники Linux]]&amp;lt;/s&amp;gt;&lt;br /&gt;
# &amp;lt;s&amp;gt;[[LXF71:Subversion]]&amp;lt;/s&amp;gt;&lt;br /&gt;
# &amp;lt;s&amp;gt;[[LXF77:Realsoft 3D]]&amp;lt;/s&amp;gt;&lt;br /&gt;
# &amp;lt;s&amp;gt;[[LXF72:Советы по ускорению]]&amp;lt;/s&amp;gt;&lt;br /&gt;
# &amp;lt;s&amp;gt;[[LXF76:Азбука записи]]&amp;lt;/s&amp;gt;&lt;br /&gt;
# &amp;lt;s&amp;gt;[[LXF73:Автомонтирование USB]]&amp;lt;/s&amp;gt;&lt;br /&gt;
# &amp;lt;s&amp;gt;[[LXF73:Русификация Debian 3.1]]&amp;lt;/s&amp;gt;&lt;br /&gt;
# &amp;lt;s&amp;gt;[[LXF72:Frequently Asked Questions]]&amp;lt;/s&amp;gt;&lt;br /&gt;
# &amp;lt;s&amp;gt;[[LXF72:Краткая справка]]&amp;lt;/s&amp;gt;&lt;br /&gt;
# &amp;lt;s&amp;gt;[[LXF71:Ответы]]&amp;lt;/s&amp;gt;&lt;br /&gt;
# &amp;lt;s&amp;gt;[[LXF72:Ответы]]&amp;lt;/s&amp;gt;&lt;br /&gt;
# &amp;lt;s&amp;gt;[[LXF73:Ответы]]&amp;lt;/s&amp;gt;&lt;br /&gt;
# &amp;lt;s&amp;gt;[[LXF74-75:Ответы]]&amp;lt;/s&amp;gt;&lt;br /&gt;
# &amp;lt;s&amp;gt;[[LXF77:Ответы]]&amp;lt;/s&amp;gt;&lt;br /&gt;
# &amp;lt;s&amp;gt;[[LXF71:Первые шаги]]&amp;lt;/s&amp;gt;&lt;br /&gt;
# &amp;lt;s&amp;gt;[[LXF72:Первые шаги Печать]]&amp;lt;/s&amp;gt;&lt;br /&gt;
# &amp;lt;s&amp;gt;[[LXF74-75:Первые шаги]]&amp;lt;/s&amp;gt;&lt;br /&gt;
# &amp;lt;s&amp;gt;[[LXF77:Сравнение]]&amp;lt;/s&amp;gt;&lt;br /&gt;
# &amp;lt;s&amp;gt;[[LXF71:Сравнение]]&amp;lt;/s&amp;gt;&lt;br /&gt;
# &amp;lt;s&amp;gt;[[LXF76:Сравнение]]&amp;lt;/s&amp;gt;&lt;br /&gt;
# &amp;lt;s&amp;gt;[[LXF76:Что такое]] GPL V3&amp;lt;/s&amp;gt;&lt;br /&gt;
# &amp;lt;s&amp;gt;[[LXF76:Интервью]] Джереми Элиссон&amp;lt;/s&amp;gt;&lt;br /&gt;
# &amp;lt;s&amp;gt;[[LXF76:Трюки с железом]]&amp;lt;/s&amp;gt;&lt;br /&gt;
# &amp;lt;s&amp;gt;[[LXF76:Интервью2]] Йон фон Течнер&amp;lt;/s&amp;gt;&lt;br /&gt;
# &amp;lt;s&amp;gt;[[LXF76:Dynebolic]]&amp;lt;/s&amp;gt;&lt;br /&gt;
# &amp;lt;s&amp;gt;[[LXF76:MythTV]]&amp;lt;/s&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Большое число из этого уже устарело и представляет лишь исторический интерес. Можно тут &amp;lt;s&amp;gt;отмечать&amp;lt;/s&amp;gt; (&amp;lt;nowiki&amp;gt;&amp;lt;s&amp;gt;...&amp;lt;/s&amp;gt;&amp;lt;/nowiki&amp;gt;) перед викификаций, чтобы не было коллизий. --[[Участник:Yaleks|Yaleks]] 22:45, 3 февраля 2009 (MSK)&lt;br /&gt;
&lt;br /&gt;
* Поздравляю! Позиции в списке закончились.&lt;br /&gt;
** Это да, но мне ещё спецрепортаж доделывать. --[[Участник:Yaleks|Yaleks]] 20:24, 5 марта 2009 (MSK)&lt;br /&gt;
*** Я так сильно подозреваю, что это не единственная проблема, хотя я старался и выверял все номера, но могли гдето и недоделки остаться и статьи спрятаться. Но в общем следует считать, что эта часть завершена. Тем более что спецрепортаж это большая но всего одна статья.--[[Участник:Crazy Rebel|Crazy Rebel]] 10:08, 6 марта 2009 (MSK)&lt;br /&gt;
&lt;br /&gt;
== LXF72 Советы по ускорению ==&lt;br /&gt;
&lt;br /&gt;
А зачем там было делать &amp;quot;LXF72...&amp;quot; загловком? Я тоже так вначале сделал, но мне крайне не понравилось, что советы нумеруются 1.1 ... 1.32 тогда как в моем варианта было 1, 2 .... Ну и еще почему заголовок статьи Вы выделяетя двумя знаками &amp;lt;nowiki&amp;gt;==&amp;lt;/nowiki&amp;gt; ведь можно и одним, тогда каждый вопрос отделяется друг от друго горизонтальной линией.&lt;br /&gt;
:* &amp;lt;nowiki&amp;gt;==&amp;lt;/nowiki&amp;gt; это заголовок 1-ого уровня вики-синтаксиса (= использовать некорректно). И где вы редактируете статьи, что там вставляется какой-то 2-х байтовый пробел? Через OCR что-ли пропускаете? --[[Участник:Yaleks|Yaleks]] 22:15, 26 февраля 2009 (MSK)&lt;br /&gt;
:::* Статьи я копирую из kpdf собственно сразу в окно Firefox, откуда там стали браться неразрывные пробелы я понятия не имею. Возможно такие pdf-ки потому что LXF99 я делал таким же способом но никаких неразрывных пробелов там нет. Или это так работает новый kpdf.&lt;br /&gt;
:::* Проблему решил так - сначала копирую текст в kate там удаляю всю гадость (заменой по тексту) и уже потом вставляю в окно Firefox.&lt;br /&gt;
&lt;br /&gt;
== LXF100 ... ==&lt;br /&gt;
&lt;br /&gt;
В общем то викификация LXF70-99 подходит к концу и Синицын уже спрашивал меня о продолжении работы. Я согласен и как я понимаю Вы тоже. Но у Вас несколько другой подход - викифицировать не номерами, а темами. В приципе я вижу и преимущества и недостатки такого подхода. Ну из перимуществ это то, что пользователь получает информацию которая должна быть для него наиболее интересна, а из недостатков- отдельный номер может быть так до конца и не закончен. Будет осутствовать общий стиль оформлния. В общем я готов на любой подход к викификации. Если мы будем пользоваться Вашим методом то предлагаю делать так чтобы не пересекаться - Заранее оглавления не делаем, кто создает статью, тот ее и викифицирует.&lt;br /&gt;
: Если вы посмотрите на статистику хотя-бы нескольких ресурсов, то поймёте, что удержать и заставить посмотреть хотя-бы 3 страницы очень сложно. Потому иметь законченные и связанные кластеры статей лучше, чем несвязанную подборку из одного номера. Очень мало людей приходят введя адрес первой страницы и читают по-порядку, в основном по ссылкам с других сайтов или поисковых систем. --[[Участник:Yaleks|Yaleks]] 15:24, 1 марта 2009 (MSK)&lt;br /&gt;
:: И всеже я предлагаю сначала закончить LXF71 и только после этого приступать к 100 и далее, а то Синицын мне как то писал что руководство недовольно, что викификация этих номеров не закончена. А в остальном полностью согласен. Предлагаю значит сделать как раз так - кто начал викификацию тот ее и заканчивает. Чтобы нам тут оглавление не составлять.&lt;br /&gt;
&lt;br /&gt;
Надо не забывать делать редиректы на статьи в номере 100-101 с несуществующих номеров 100 и 101. --[[Участник:Kipruss|Kipruss]]&lt;br /&gt;
* Зачем эти редиректы? И наверно не надо делать вики-ссылок на изображения, просто размещайте в зоне видимости, где на них ссылаются. Я ещё пару мелочей поправил. --[[Участник:Yaleks|Yaleks]] 09:33, 7 марта 2009 (MSK)&lt;br /&gt;
:: Редиректы - мне показалось, что лишними не будут. Я и сам сперва создал страницу с LXF100 в составе, вот и задумался о редиректах. И - да, насчет source вместо code - это полезная штука. Буду пользоваться.--[[Участник:Kipruss|Kipruss]] 23:14, 7 марта 2009 (MSK)&lt;br /&gt;
&lt;br /&gt;
== Присоединение к проекту ==&lt;br /&gt;
&lt;br /&gt;
Обращаюсь к Yaleks'у, как к координатору: я готов в меру сил помочь в викификации того, что наиболее нужно в настоящее время. Номера 100-106 имеются, скачал по ссылке, которую дал Валентин. Мой почтовый адрес: kipruss_A_mail.ru. После прочтения, думаю, этот раздел можно удалить. :)&lt;br /&gt;
&lt;br /&gt;
* Ну так выбирайте статью, вроде как решили с учебников начать, а то и цикл, вписывайте на соответствующей странице(цах) его название и вперед. Валентин сказал что за оформлением оглавления журанлов он сам проследит, но всетаки постарайтесь как в журнале делать название статьи и аннотацию.--[[Участник:Crazy Rebel|Crazy Rebel]] 10:10, 6 марта 2009 (MSK)&lt;br /&gt;
** Раз с учебников, то беру цикл &amp;quot;Hardcore Linux&amp;quot;. Потом - Django, но этот цикл начинается с мая, по-моему - наверное лучше сделать те, которые продолжаются с прошлого года.--[[Участник:Kipruss|Kipruss]] 23:36, 6 марта 2009 (MSK)&lt;br /&gt;
* Смотрите на оформление существующих статей и делайте по аналогии (также см. [[Информация для авторов]]). Crazy Rebel, осталось расхождение с наименование картинок, я всё-таки предлагаю, чтобы в названии был номер журнала и страницы (возможно выбранный в начале Img не очень логично и лучше перейти к LXF10X_YY_Z.{jpg/png}). --[[Участник:Yaleks|Yaleks]] 11:57, 6 марта 2009 (MSK)&lt;br /&gt;
** Поздно я обратил внимание на это замечание. Ну, ничего страшного, надеюсь. Проба пера: [[LXF100:Hardcore_Linux]]&lt;br /&gt;
** Хорошо. Со следующей статьи начну именовать так. Не думаю что надо что либо переделывать в уже викифицицированных журналах если только качество старых картинок не нравится.--[[Участник:Crazy Rebel|Crazy Rebel]] 16:35, 6 марта 2009 (MSK)&lt;/div&gt;</summary>
		<author><name>Kipruss</name></author>	</entry>

	<entry>
		<id>http://wiki.linuxformat.ru/wiki/LXF100-101:Hardcore_Linux</id>
		<title>LXF100-101:Hardcore Linux</title>
		<link rel="alternate" type="text/html" href="http://wiki.linuxformat.ru/wiki/LXF100-101:Hardcore_Linux"/>
				<updated>2009-03-07T20:12:05Z</updated>
		
		<summary type="html">&lt;p&gt;Kipruss: оформление&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Кластеры: Повышаем отказоустойчивость.==&lt;br /&gt;
&lt;br /&gt;
Отказоустойчивость – то свойство, которое помогает кластеру пережить сбой электропитания и другие бедствия. '''Д-р Крис Браун''' покажет, как удержаться на плаву.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Журналы доступа к моей web-странице – не самое захватывающее чтиво. Если исключить случайные вторжения роботов поисковых систем, посетители заходят на сайт не чаще раза в неделю. Честно говоря, если сайт упадет, это заметят разве что через несколько месяцев. Даже грустно. Другая крайность – коммерческие web-сайты, приносящие владельцам ежедневный доход: несколько минут простоя такого сайта выливаются в ощутимые убытки для компании. На данном уроке я расскажу, как создать в Linux отказоустойчивый кластер. В случае краха основного сервера система автоматически переключается на запасной, а снаружи кластер выглядит как один очень надежный сервер. Нам поможет открытая программа ''Heartbeat'', найти которую можно на сайте http://www.linuxha.org. Кластер мы построим из двух компьютеров (основной и запасной сервер). ''Heartbeat'' будет отвечать за обнаружение отказа основного сервера и управлять запуском нужного нам сервиса на запасном. Мы воспользуемся сервисом ''Apache (httpd)'', но эта технология подойдет и для любого другого сервиса: FTP, DNS или почтового. В общем, все будет работать примерно так:&lt;br /&gt;
&lt;br /&gt;
# В обычном режиме необходимые сервисы (типа ''httpd'') предоставляются основным сервером.&lt;br /&gt;
# Основной и запасной серверы постоянно обмениваются друг с другом сообщениями ''Heartbeat'' [англ. пульс], которые говорят запасному серверу, что с основным все в порядке.&lt;br /&gt;
# Если запасной сервер не получает сообщения, он перенимает ресурсы основного сервера (например, запускает собственную копию сервера ''httpd'').&lt;br /&gt;
# Запасной сервер перенимает IP-адрес, по которому предоставлялся сервис на основном сервере.&lt;br /&gt;
&lt;br /&gt;
===Начинаем: компоненты системы===&lt;br /&gt;
[[Изображение:Img_100_87_1.png|thumb|400px|Рис. 1: Общая схема проекта; обратите внимание на IP-адреса.]]&lt;br /&gt;
Если вы намерены двинуться дальше и попробовать все на практике, то вам понадобятся три компьютера – основной сервер, запасной сервер и клиент, с помощью которого мы сможем проверить, как все работает.&lt;br /&gt;
&lt;br /&gt;
На основном и запасном серверах должен быть установлен Linux, на клиенте – необязательно (хотя под Linux в вашем распоряжении окажутся лучшие средства диагностики). Компьютеры должны быть подключены к сети Ethernet. Для обмена сигналами ''Heartbeat'' на основном и запасном серверах должна быть вторая сетевая карта. Эти карты нужно соединить друг с другом либо перекрестным (crossover) кабелем, либо через мини-хаб. Если на обоих компьютерах есть последовательный порт, то вместо второго Ethernet-подключения можно соединить их последовательные порты перекрестным кабелем, по которому будет производиться обмен сигналами. Общая схема показана на Рис. 1.&lt;br /&gt;
&lt;br /&gt;
===Установка heartbeat-соединения===&lt;br /&gt;
&lt;br /&gt;
Если обмен сигналами ''Heartbeat'' будет осуществляться через Ethernet, соединить сетевые карты друг с другом можно двумя способами: либо через перекрестный кабель RJ45, либо парой обычных кабелей через мини-хаб. Первый вариант лучше, потому что здесь нечему выходить из строя. Каждой из карт нужно назначить статический IP-адрес, причем выбранный из частного диапазона, ни один адрес из которого не используется во внутренней сети. Например, первой карте можно назначить адрес 10.0.0.1, второй – 10.0.0.2. Убедитесь, что компьютеры могут достучаться друг до друга [ping].&lt;br /&gt;
&lt;br /&gt;
Также можно использовать и соединение через последовательный порт. Тогда нам потребуется последовательный перекрестный кабель. На обоих концах этого кабеля, который еще называют нуль-модемным, имеется 9-контактный разъем типа «мама». Кабелем нужно соединить последовательные порты компьютеров. (Последовательные порты и кабели сейчас используются редко, и если на ваших компьютерах их нет, проще пойти и купить вторую сетевую карту для соединения по Ethernet.)&lt;br /&gt;
&lt;br /&gt;
Чтобы проверить соединение через последовательные порты, выполните на основном сервере команду:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
 cat /dev/ttyS0&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
а на запасном – команду:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
 cat /etc/fstab &amp;gt; /dev/ttyS0&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
На основном сервере должно отображаться содержимое файла. Повторите эксперимент в обратном направлении.&lt;br /&gt;
&lt;br /&gt;
''Heartbeat'' будет прекрасно работать с соединением любого типа. Преимущество Ethernet-соединения – трафик ''Heartbeat'' в этом случае можно отслеживать с помощью одной из утилит для отслеживания пакетов (например, wireshark). Можно даже использовать одновременно оба соединения, что позволит обойтись без ненужных откатов, если только одно из них выйдет из строя.&lt;br /&gt;
&lt;br /&gt;
===Настройка сетевых интерфейсов===&lt;br /&gt;
&lt;br /&gt;
Оба сетевых интерфейса, которые участвуют в ''Heartbeat''-соединении, должны быть настроены на статические IP-адреса, так как DHCP-сервера в этой «сети» точно нет. Статические адреса должны быть и на основных интерфейсах, которые используются для подключения к основному и запасному серверам. Обратите внимание, что это НЕ те адреса, на которых предоставляется сервис. ''Heartbeat'' назначит сетевой карте исправного компьютера второй IP-адрес, и именно он будет использоваться клиентами для доступа к ресурсу.&lt;br /&gt;
&lt;br /&gt;
===Три файла конфигурации===&lt;br /&gt;
&lt;br /&gt;
Сразу после установки Heartbeat нужно создать в каталоге '''/etc/ha.d''' три (да, три!) файла конфигурации, а именно:&lt;br /&gt;
&lt;br /&gt;
* '''ha.cf''' Файл содержит настройки самого ''Heartbeat''; в нем определяются используемые программой пути и устанавливаются некоторые временные параметры.&lt;br /&gt;
* '''haresources''' Этот файл определяет ресурсы (сервисы), которыми будет управлять Heartbeat, и основной сервер для каждого из этих ресурсов.&lt;br /&gt;
* '''authkey''' В этом файле задается пароль и метод шифрования, используемый для аутентификации Heartbeat-сообщений.&lt;br /&gt;
&lt;br /&gt;
Начнем с '''ha.cf'''. Пример этого файла можно найти в документации на ''Heartbeat'' ('''/usr/share/doc/heartbeat/ha.cf'''). Это один из файлов типа «визгу много, проку мало», которые целиком состоят из документации и закомментированных примеров. Можно скопировать его в '''/etc/ha.d''' и использовать как отправную точку, или создать свой файл с нуля.&lt;br /&gt;
&lt;br /&gt;
{{Врезка&lt;br /&gt;
    |Заголовок=Ошибка!&lt;br /&gt;
    |Содержание=В этой статье мы не говорим о том, как предотвратить неисправности других типов, например, те, что возникают в инфраструктуре самого интернета. В частности, мы не говорим о создании дополнительных информационных каналов для связи с сайтом. Впрочем, это не так уж и важно, потому что врожденная гибкость архитектуры интернета позволяет поглощать частные сбои. Часто даже говорят, что сеть ARPANET (предшественник интернета) разрабатывалась с таким расчетом, чтобы выдержать взрыв атомной бомбы. ARPANET и правда должна была справляться с утратой части сети, но главная причина была в том, что коммутация узлов сети и связей внутри нее была не особенно надежной, даже и без атомной бомбы.&lt;br /&gt;
    |Ширина=200px}}&lt;br /&gt;
&lt;br /&gt;
Вот минимальный вариант этого файла. Номера строк даны только для удобства ссылок, в самом файле их нет:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;ini&amp;quot; line=&amp;quot;GESHI_NORMAL_LINE_NUMBERS&amp;quot;&amp;gt;&lt;br /&gt;
udpport 694&lt;br /&gt;
bcast eth1&lt;br /&gt;
serial /dev/ttyS0&lt;br /&gt;
baud 9600&lt;br /&gt;
keepalive 2&lt;br /&gt;
deadtime 20&lt;br /&gt;
initdead 60&lt;br /&gt;
node primary.example.com&lt;br /&gt;
node backup.example.com&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Строки &amp;lt;font color=darkred&amp;gt;1&amp;lt;/font&amp;gt; и &amp;lt;font color=darkred&amp;gt;2&amp;lt;/font&amp;gt; задают номер порта и сетевой интерфейс, используемые для Heartbeat-соединения. Для соединения через последовательные порты в строках &amp;lt;font color=darkred&amp;gt;3&amp;lt;/font&amp;gt; и &amp;lt;font color=darkred&amp;gt;3&amp;lt;/font&amp;gt; задается порт и скорость соединения. Можно (и рекомендуется) использовать оба типа, но у меня было только соединение через последовательные порты, и я закомментировал строки &amp;lt;font color=darkred&amp;gt;1&amp;lt;/font&amp;gt; и &amp;lt;font color=darkred&amp;gt;2&amp;lt;/font&amp;gt;. В строке &amp;lt;font color=darkred&amp;gt;5&amp;lt;/font&amp;gt; задается тайм-аут между сообщениями, а строка &amp;lt;font color=darkred&amp;gt;6&amp;lt;/font&amp;gt; определяет время, по истечении которого, не дождавшись очередного сообщения от основного сервера, запасной сочтет его покойником. В строке &amp;lt;font color=darkred&amp;gt;7&amp;lt;/font&amp;gt; указывается время, необходимое для активации сетевого интерфейса после включения компьютера, после чего ''Heartbeat'' начинает функционировать. В строках &amp;lt;font color=darkred&amp;gt;8&amp;lt;/font&amp;gt; и &amp;lt;font color=darkred&amp;gt;9&amp;lt;/font&amp;gt; задаются имена хостов для основного и запасного серверов (те, что возвращает команда &amp;lt;font color=darkred&amp;gt;uname -n&amp;lt;/font&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
Для начала попробуем управлять полностью фиктивным сервисом '''tester'''. Мы напишем скрипт, '''/etc/ha.d/resources.d/tester''', вызываемый ''Heartbeat''. Он будет всего лишь вызывать команду &amp;lt;font color=darkred&amp;gt;logger&amp;lt;/font&amp;gt;, которая сообщит нам (через ''syslogd''), что скрипт был запущен. Вот как он выглядит:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
logger $0 called with argument $1&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Скрипт нужно сделать исполняемым, например, так:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
chmod 755 tester&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
В следующем файле, ''haresources'', содержится список ресурсов, которыми управляет ''Heartbeat''. Когда компьютер выходит из строя, эти ресурсы перемещаются с одного узла сети на другой. (попробуйте произносить это как “ha-resources”, а не “hare-sauces” &amp;lt;font color=blue&amp;gt;[англ. hare – заяц, source – источник, sauce – соус, – прим. ред.]&amp;lt;/font&amp;gt;. По правде говоря, я сроду не ел зайчатины, но первым делом подумал о кролике и решил, что подойдет клюквенный соус.) Опять же, пример этого файла можно найти в документации ('''/usr/share/doc/Heartbeat''') – можете просто скопировать его в '''/etc/ha.d''' или создать свой собственный файл с нуля. Для нашего первого теста в этом файле должна быть всего одна строка:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  primary.example.com tester&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Также нужно создать файл '''/etc/ha.d/authkeys''', содержащий ключи, используемые для аутентификации ''Heartbeat''-сообщений, например:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  auth1&lt;br /&gt;
  1 sha1 foobar&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Нужно позаботиться, чтобы читать этот файл мог только администратор:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
  chmod 600 authkeys&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Если права доступа к этому файлу есть у кого-то еще, ''Heartbeat'' не запустится.&lt;br /&gt;
&lt;br /&gt;
Скопируйте эти четыре файла с основного сервера на запасной в соответствующие каталоги. Файл '''ha.cf''', возможно, придется подправить в зависимости от аппаратного обеспечения компьютера, а остальные файлы должны быть одинаковыми на обоих компьютерах.&lt;br /&gt;
&lt;br /&gt;
Теперь можно запустить ''Heartbeat''. Для отслеживания сообщений ''Heartbeat'' на обоих компьютерах запустите &amp;lt;font color=darkred&amp;gt;tail -f&amp;lt;/font&amp;gt; для файла журнала ('''/var/log/messages'''). Запустите программу с помощью команды:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
  /etc/init.d/heartbeat start&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Врезка&lt;br /&gt;
    |Заголовок=Украденная личность&lt;br /&gt;
    |Содержание=Перенос IP-адреса на другой компьютер – компьютерный эквивалент «воровства личности»: вы притворяетесь кем-то другим, а потом убеждаете весь мир, что вы настоящий. В процессе переноса системы на запасной сервер обязано произойти следующее. Во-первых, основной сервер должен отдать IP-адрес. Если он загорелся или нашел другую кончину, это произойдет по умолчанию, но если heartbeat останавливается на другом (исправном) сервере, адрес, очевидно, нужно забрать назад. Другая проблема – обновление записей в ARP-кэше. Доставка сетевого пакета на конкретный компьютер в конечном счете основана на его MAC-адресе – уникальном 48-битном номере, зашитом в каждую сетевую карту. Чтобы определить MAC-адрес компьютера по его IP-адресу, используется протокол ARP (Address Resolution Protocol – протокол разрешения адресов). Записи о соответствии IP-адресов и MAC-адресов обычно хранятся в кэше ARP 10–15 минут. Чтобы принудительно обновить ARP-кэш на других компьютерах, heartbeat рассылает в сеть так называемые «незаконные» [gratuitous] ARP-пакеты с компьютера, перенявшего IP-адрес.&lt;br /&gt;
    |Ширина=200px}}&lt;br /&gt;
&lt;br /&gt;
На обоих компьютерах действия ''Heartbeat'' будут писаться в журнал. На основном сервере среди прочего должно появиться сообщение типа:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  logger: /etc/ha.d/resource.d/tester called with argument start&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Оно означает, что основной сервер, как и ожидалось, запустил сервис '''tester'''.&lt;br /&gt;
&lt;br /&gt;
{{Врезка&lt;br /&gt;
    |Заголовок=Загружаем heartbeat&lt;br /&gt;
    |Содержание=''Heartbeat'' нужно установить и на основном, и на запасном сервере. У меня на обоих компьютерах была установлена CentOS 5 (фактически, RHEL5). Я просто установил ''heartbeat'' вместе с зависимостями (которые включали ''heartbeat-pils'' и ''heartbeat-stonith'') из репозиториев CentOS с помощью ''yum''. Похожие пакеты есть и в репозиториях других дистрибутивов, таких как Ubuntu; в виде пакета RPMs для SUSE/Novell Linux их можно найти на сайте http://www.linux-ha.org/ или загрузить архив с исходными кодами с этого же сайта и скомпилировать программу из них.&lt;br /&gt;
    |Ширина=200px}}&lt;br /&gt;
&lt;br /&gt;
''Heartbeat'' запущен, и мы можем проверить поведение системы в случае отказа. Я просто выдернул шнур электропитания из основного сервера и наблюдал за сообщениями в файле журнала запасного. По истечении заданного времени запасной сервер сообщил об отказе основного и запустил сервис '''tester'''. Вот соответствующие строки журнала:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  heartbeat: [9615]: WARN: node primary.example.com: is dead&lt;br /&gt;
  heartbeat: [9615]: WARN: No STONITH device configured.&lt;br /&gt;
  heartbeat: [9615]: WARN: Shared disks are not protected.&lt;br /&gt;
  heartbeat: [9615]: info: Resources being acquired from primary.example.com.&lt;br /&gt;
  heartbeat: [9615]: info: Link primary.example.com:/dev/ttyS0 dead.&lt;br /&gt;
  heartbeat: [10305]: info: No local resources [/usr/share/heartbeat/ResourceManager listkeys backup.example.com] to acquire.&lt;br /&gt;
  harc[10304]: [10323]: info: Running /etc/ha.d/rc.d/status status&lt;br /&gt;
  mach_down[10329]: [10350]: info: Taking over resource group tester&lt;br /&gt;
 ResourceManager[10351]: [10362]: info: Acquiring resource group:primary.example.com tester&lt;br /&gt;
 logger: /etc/ha.d/resource.d/tester called with argument status&lt;br /&gt;
  ResourceManager[10351]: [10379]: info: Running /etc/ha.d/resource.d/tester start&lt;br /&gt;
  logger: /etc/ha.d/resource.d/tester called with argument start&lt;br /&gt;
  mach_down[10329]: [10384]: info: mach_down takeover complete for  node primary.example.com.&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Первая проверка завершилась успешно, и пора поручить ''Heartbeat'' управление полноценным сервисом. Для этого проекта я выбрал httpd. Таким образом, сейчас нам нужно убедиться, что ''Apache'' установлен на обоих компьютерах, и положить в корневой каталог web-сервера какие-нибудь легко распознаваемые файлы. Я просто создал два файла '''/var/www/html/index.html''', по одному для основного и запасного серверов; в файле для основного сервера была строка “This is the website from the primary server”, для запасного – “This is the website from the backup server” («Это сайт с основного/запасного сервера»). На обоих компьютерах запустите ''httpd'':&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
  /etc/init.d/httpd start&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
и проверьте, что, открыв в браузере адрес &amp;lt;font color=blue&amp;gt;&amp;lt;nowiki&amp;gt;http://localhost&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;, вы видите эти файлы. Теперь остановите ''Apache'' и убедитесь, что он не запустится автоматически при загрузке системы. Воспользуйтесь командами:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
  /etc/init.d/httpd stop&lt;br /&gt;
  chkconfig httpd --del&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Это важно, потому что ''Apache'' должен запуститься не во время загрузки, а только если ''Heartbeat'' запустил его.&lt;br /&gt;
&lt;br /&gt;
Теперь нужно изменить файл ''haresources'' так:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  primary.example.com httpd&lt;br /&gt;
  primary.example.com 192.168.0.50&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
В первой строке указывается сервис, которым будет управлять ''Heartbeat'', а во второй – IP-адрес, используемый клиентом для доступа к сервису. При запуске ''Heartbeat'' этот адрес назначается на основной сервер как второй IP-адрес. Если основной сервер откажет, копия ''Heartbeat'', запущенная на запасном сервере, перенесет этот IP-адрес на свой сетевой интерфейс.&lt;br /&gt;
&lt;br /&gt;
Предполагается, что ''Heartbeat'' будет управлять сервисами путем запуска скрипта, указанного в '''haresources''', с аргументами &amp;lt;font color=darkred&amp;gt;start&amp;lt;/font&amp;gt;, &amp;lt;font color=darkred&amp;gt;stop&amp;lt;/font&amp;gt; или &amp;lt;font color=darkred&amp;gt;status&amp;lt;/font&amp;gt;. Конечно, это те самые аргументы скриптов каталога '''/etc/init.d''', что используются для запуска сервисов во время загрузки системы, и, по правде говоря, ''Heartbeat'' будет автоматически искать скрипт '''httpd''' в каталоге '''/etc/init.d'''.&lt;br /&gt;
&lt;br /&gt;
После внесения этих изменений в конфигурацию основного и запасного серверов можно снова запустить ''Heartbeat'' на каждом из них:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
 /etc/init.d/heartbeat start&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Когда ''Heartbeat'' войдет в нормальный режим работы, нужно кое-что проверить. На основном сервере запустите:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 ip addr show&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
и проверьте, что ''Heartbeat'' назначил второй IP-адрес (в нашем примере &amp;lt;font color=darkred&amp;gt;192.168.0.50&amp;lt;/font&amp;gt;) на наш сетевой интерфейс. Также запустите команду&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
 ps -ef | grep httpd&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
которая проверит, что сервис ''httpd'' запущен. На запасной сервер второй IP-адрес не назначается, а сервис ''httpd'' на нем не выполняется.&lt;br /&gt;
&lt;br /&gt;
Теперь пора загрузить третий компьютер, чтобы использовать в качестве клиента. Убедитесь, что он может разрешить имя компьютера, на котором запущен сервис, по его IP-адресу. Для этого я просто добавил строку&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 192.168.0.50 www.example.com&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
в файл '''/etc/hosts'''. Проверьте, пингуется ли адрес &amp;lt;font color=blue&amp;gt;&amp;lt;nowiki&amp;gt;www.example.com&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt; с компьютера клиента. Откройте в браузере на клиентском компьютере страницу &amp;lt;font color=blue&amp;gt;&amp;lt;nowiki&amp;gt;http://www.example.com&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;. Вы должны увидеть файл '''index.html''' основного сервера. На клиенте также можно проверить кэш '''arp''', запустив команду&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
 arp -a&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
и обратить внимание на MAC-адрес, связанный с IP-адресом 192.168.0.50. В моем случае результат работы команды был таким:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 www.example.com (192.168.0.50) at 00:0C:F1:96:A3:F7 [ether] on eth0&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Ладно, и как это работает?===&lt;br /&gt;
&lt;br /&gt;
Мы подошли к драматической развязке: демонстрации переноса сервиса на запасной сервер в случае отказа основного. Можно было просто отключить питание основного сервера, как и в предыдущем эксперименте, но на сей раз я избрал более кроткий способ – просто остановил ''Heartbeat'' на основном сервере командой:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
 /etc/init.d/heartbeat stop&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Остановившись, ''Heartbeat'' остановит ''httpd'' на основном сервере и проинформирует запасной сервер об отключении основного (через ''Heartbeat''-соединение). Запасной сервер сразу возьмет управление на себя, и в файле его журнала ('''/var/log/messages''') появятся новые сообщения. Два из них наиболее важны (время и другую информацию в начале строки я удалил):&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  Running /etc/init.d/httpd start&lt;br /&gt;
  Registering new address record for 192.168.0.50 on eth0&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
В этом случае все заняло пару секунд. Если бы я просто выдернул из сети шнур питания основного сервера, то на восстановление системы потребовалось бы больше времени: в этом случае перед тем, как сделать вывод об отказе основного сервера и взять управление на себя, запасной сервер ожидал бы ответа 20 секунд (параметр &amp;lt;font color=darkred&amp;gt;deadtime&amp;lt;/font&amp;gt; в файле '''ha.cf''').&lt;br /&gt;
&lt;br /&gt;
На клиентском компьютере следует провести пару важных тестов. Во-первых, попробуйте обновить страницу &amp;lt;font color=blue&amp;gt;&amp;lt;nowiki&amp;gt;www.example.com&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt; в браузере. Должна появиться страница запасного сервера. Во-вторых, еще раз просмотрите содержимое ARP-кэша. На моем компьютере команда &amp;lt;font color=darkred&amp;gt;arp –a&amp;lt;/font&amp;gt; вернула следующий результат:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  www.example.com (192.168.0.50) at 00:10:60:60:3E:8E [ether] on eth0&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Это означает, что пакеты, предназначенные для адреса &amp;lt;font color=darkred&amp;gt;192.168.0.50&amp;lt;/font&amp;gt;, теперь будут направляться на запасной сервер.&lt;br /&gt;
&lt;br /&gt;
{{Врезка&lt;br /&gt;
    |Заголовок=Дополнительная информация&lt;br /&gt;
    |Содержание=Побольше узнать о ''heartbeat'' можно в документации '''/usr/share/doc/heartbeat''' (каталог зависит от конкретного дистрибутива), в частности, в  файле '''GettingStarted'''. На сайте Linux HA также есть руководства и документация. Рекомендую вам прекрасную книжку “Linux Enterprise Cluster: Build a Highly Available    Cluster   with Commodity Hardware and Free Software” (No Starch Press, ISBN 1-59327-036-4).&lt;br /&gt;
    |Ширина=200px}}&lt;br /&gt;
&lt;br /&gt;
А что же дальше? Ну, наверное, со временем кто-то доберется до основного сервера, починит его и перезапустит. Когда ''Heartbeat'' перезапускается, он сообщает об этом запасному серверу через ''Heartbeat''-соединение. В журнале запасного сервера появятся такие строки:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  Heartbeat restart on node primary.example.com&lt;br /&gt;
  Releasing resource group: primary.example.com httpd&lt;br /&gt;
  Running /etc/init.d/httpd stop&lt;br /&gt;
  Withdrawing address record for 192.168.0.50 on eth0&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Они означают, что запасной сервер освободил ресурсы и разрешил основному забрать их.&lt;br /&gt;
&lt;br /&gt;
Если у вас хватило духу дочитать до конца, поздравляю! Вы создали отказоустойчивый кластер в Linux и можете начать делать на этом деньги в реальном мире! Однако прежде чем пойти на собеседование в Google, NASA или даже Krazy Ken’s 24x7 Liquorice Emporium, быть может, вы захотите узнать о некоторых вопросах подробнее.&lt;br /&gt;
&lt;br /&gt;
Один из них – это концепция «ограждения» (fencing). Когда запасной сервер перенимает ресурсы основного, нужно как-то гарантировать, чтобы основной сервер не попытался снова предоставить эти сервисы. ''Heartbeat'' может использовать для этого механизм STONITH (“shoot the other node in the head” – «контрольный выстрел в голову»), если вы купите устройство, программно отключающее питание компьютера. Второй вопрос – как синхронизировать содержимое двух web-серверов. В нашем примере мы умышленно сделали его разным, но на практике может потребоваться какое-то средство синхронизации их содержимого (''rsync'' или ''unison''). '''LXF'''&lt;br /&gt;
&lt;br /&gt;
[[Категория:Учебники]]&lt;br /&gt;
[[Категория:Hardcore Linux]]&lt;br /&gt;
[[Категория:Крис Браун]]&lt;/div&gt;</summary>
		<author><name>Kipruss</name></author>	</entry>

	<entry>
		<id>http://wiki.linuxformat.ru/wiki/LXF100-101:Hardcore_Linux</id>
		<title>LXF100-101:Hardcore Linux</title>
		<link rel="alternate" type="text/html" href="http://wiki.linuxformat.ru/wiki/LXF100-101:Hardcore_Linux"/>
				<updated>2009-03-06T23:36:58Z</updated>
		
		<summary type="html">&lt;p&gt;Kipruss: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Кластеры: Повышаем отказоустойчивость.==&lt;br /&gt;
&lt;br /&gt;
Отказоустойчивость – то свойство, которое помогает кластеру пережить сбой электропитания и другие бедствия. '''Д-р Крис Браун''' покажет, как удержаться на плаву.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Журналы доступа к моей web-странице – не самое захватывающее чтиво. Если исключить случайные вторжения роботов поисковых систем, посетители заходят на сайт не чаще раза в неделю. Честно говоря, если сайт упадет, это заметят разве что через несколько месяцев. Даже грустно. Другая крайность – коммерческие web-сайты, приносящие владельцам ежедневный доход: несколько минут простоя такого сайта выливаются в ощутимые убытки для компании. На данном уроке я расскажу, как создать в Linux отказоустойчивый кластер. В случае краха основного сервера система автоматически переключается на запасной, а снаружи кластер выглядит как один очень надежный сервер. Нам поможет открытая программа ''Heartbeat'', найти которую можно на сайте www.linuxha.org. Кластер мы построим из двух компьютеров (основной и запасной сервер). ''Heartbeat'' будет отвечать за обнаружение отказа основного сервера и управлять запуском нужного нам сервиса на запасном. Мы воспользуемся сервисом ''Apache (httpd)'', но эта технология подойдет и для любого другого сервиса: FTP, DNS или почтового. В общем, все будет работать примерно так:&lt;br /&gt;
&lt;br /&gt;
# В обычном режиме необходимые сервисы (типа ''httpd'') предоставляются основным сервером.&lt;br /&gt;
# Основной и запасной серверы постоянно обмениваются друг с другом сообщениями ''Heartbeat'' [англ. пульс], которые говорят запасному серверу, что с основным все в порядке.&lt;br /&gt;
# Если запасной сервер не получает сообщения, он перенимает ресурсы основного сервера (например, запускает собственную копию сервера ''httpd'').&lt;br /&gt;
# Запасной сервер перенимает IP-адрес, по которому предоставлялся сервис на основном сервере.&lt;br /&gt;
&lt;br /&gt;
===Начинаем: компоненты системы===&lt;br /&gt;
&lt;br /&gt;
Если вы намерены двинуться дальше и попробовать все на практике, то вам понадобятся три компьютера – основной сервер, запасной сервер и клиент, с помощью которого мы сможем проверить, как все работает.&lt;br /&gt;
&lt;br /&gt;
На основном и запасном серверах должен быть установлен Linux, на клиенте – необязательно (хотя под Linux в вашем распоряжении окажутся лучшие средства диагностики). Компьютеры должны быть подключены к сети Ethernet. Для обмена сигналами ''Heartbeat'' на основном и запасном серверах должна быть вторая сетевая карта. Эти карты нужно соединить друг с другом либо перекрестным (crossover) кабелем, либо через мини-хаб. Если на обоих компьютерах есть последовательный порт, то вместо второго Ethernet-подключения можно соединить их последовательные порты перекрестным кабелем, по которому будет производиться обмен сигналами. Общая схема показана на [[:Изображение:Img_100_87_1.png|Рис. 1]].&lt;br /&gt;
&lt;br /&gt;
===Установка heartbeat-соединения===&lt;br /&gt;
&lt;br /&gt;
Если обмен сигналами ''Heartbeat'' будет осуществляться через Ethernet, соединить сетевые карты друг с другом можно двумя способами: либо через перекрестный кабель RJ45, либо парой обычных кабелей через мини-хаб. Первый вариант лучше, потому что здесь нечему выходить из строя. Каждой из карт нужно назначить статический IP-адрес, причем выбранный из частного диапазона, ни один адрес из которого не используется во внутренней сети. Например, первой карте можно назначить адрес 10.0.0.1, второй – 10.0.0.2. Убедитесь, что компьютеры могут достучаться друг до друга [ping].&lt;br /&gt;
&lt;br /&gt;
Также можно использовать и соединение через последовательный порт. Тогда нам потребуется последовательный перекрестный кабель. На обоих концах этого кабеля, который еще называют нуль-модемным, имеется 9-контактный разъем типа «мама». Кабелем нужно соединить последовательные порты компьютеров. (Последовательные порты и кабели сейчас используются редко, и если на ваших компьютерах их нет, проще пойти и купить вторую сетевую карту для соединения по Ethernet.)&lt;br /&gt;
&lt;br /&gt;
Чтобы проверить соединение через последовательные порты, выполните на основном сервере команду:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 cat /dev/ttyS0&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
а на запасном – команду:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 cat /etc/fstab &amp;gt; /dev/ttyS0&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
На основном сервере должно отображаться содержимое файла. Повторите эксперимент в обратном направлении.&lt;br /&gt;
&lt;br /&gt;
''Heartbeat'' будет прекрасно работать с соединением любого типа. Преимущество Ethernet-соединения – трафик ''Heartbeat'' в этом случае можно отслеживать с помощью одной из утилит для отслеживания пакетов (например, wireshark). Можно даже использовать одновременно оба соединения, что позволит обойтись без ненужных откатов, если только одно из них выйдет из строя.&lt;br /&gt;
&lt;br /&gt;
[[Изображение:Img_100_87_1.png|thumb|Рис. 1: Общая схема проекта; обратите внимание на IP-адреса.]]&lt;br /&gt;
&lt;br /&gt;
===Настройка сетевых интерфейсов===&lt;br /&gt;
&lt;br /&gt;
Оба сетевых интерфейса, которые участвуют в ''Heartbeat''-соединении, должны быть настроены на статические IP-адреса, так как DHCP-сервера в этой «сети» точно нет. Статические адреса должны быть и на основных интерфейсах, которые используются для подключения к основному и запасному серверам. Обратите внимание, что это НЕ те адреса, на которых предоставляется сервис. ''Heartbeat'' назначит сетевой карте исправного компьютера второй IP-адрес, и именно он будет использоваться клиентами для доступа к ресурсу.&lt;br /&gt;
&lt;br /&gt;
===Три файла конфигурации===&lt;br /&gt;
&lt;br /&gt;
Сразу после установки Heartbeat нужно создать в каталоге '''/etc/ha.d''' три (да, три!) файла конфигурации, а именно:&lt;br /&gt;
&lt;br /&gt;
* '''ha.cf''' Файл содержит настройки самого ''Heartbeat''; в нем определяются используемые программой пути и устанавливаются некоторые временные параметры.&lt;br /&gt;
* '''haresources''' Этот файл определяет ресурсы (сервисы), которыми будет управлять Heartbeat, и основной сервер для каждого из этих ресурсов.&lt;br /&gt;
* '''authkey''' В этом файле задается пароль и метод шифрования, используемый для аутентификации Heartbeat-сообщений.&lt;br /&gt;
&lt;br /&gt;
Начнем с '''ha.cf'''. Пример этого файла можно найти в документации на ''Heartbeat'' ('''/usr/share/doc/heartbeat/ha.cf'''). Это один из файлов типа «визгу много, проку мало», которые целиком состоят из документации и закомментированных примеров. Можно скопировать его в '''/etc/ha.d''' и использовать как отправную точку, или создать свой файл с нуля.&lt;br /&gt;
&lt;br /&gt;
{{Врезка&lt;br /&gt;
    |Заголовок=Ошибка!&lt;br /&gt;
    |Содержание=В этой статье мы не говорим о том, как предотвратить неисправности других типов, например, те, что возникают в инфраструктуре самого интернета. В частности, мы не говорим о создании дополнительных информационных каналов для связи с сайтом. Впрочем, это не так уж и важно, потому что врожденная гибкость архитектуры интернета позволяет поглощать частные сбои. Часто даже говорят, что сеть ARPANET (предшественник интернета) разрабатывалась с таким расчетом, чтобы выдержать взрыв атомной бомбы. ARPANET и правда должна была справляться с утратой части сети, но главная причина была в том, что коммутация узлов сети и связей внутри нее была не особенно надежной, даже и без атомной бомбы.&lt;br /&gt;
    |Ширина=200px}}&lt;br /&gt;
&lt;br /&gt;
Вот минимальный вариант этого файла. Номера строк даны только для удобства ссылок, в самом файле их нет:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 1. udpport 694&lt;br /&gt;
 2. bcast eth1&lt;br /&gt;
 3. serial /dev/ttyS0&lt;br /&gt;
 4. baud 9600&lt;br /&gt;
 5. keepalive 2&lt;br /&gt;
 6. deadtime 20&lt;br /&gt;
 7. initdead 60&lt;br /&gt;
 8. node primary.example.com&lt;br /&gt;
 9. node backup.example.com&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Строки &amp;lt;font color=darkred&amp;gt;1&amp;lt;/font&amp;gt; и &amp;lt;font color=darkred&amp;gt;2&amp;lt;/font&amp;gt; задают номер порта и сетевой интерфейс, используемые для Heartbeat-соединения. Для соединения через последовательные порты в строках &amp;lt;font color=darkred&amp;gt;3&amp;lt;/font&amp;gt; и &amp;lt;font color=darkred&amp;gt;3&amp;lt;/font&amp;gt; задается порт и скорость соединения. Можно (и рекомендуется) использовать оба типа, но у меня было только соединение через последовательные порты, и я закомментировал строки &amp;lt;font color=darkred&amp;gt;1&amp;lt;/font&amp;gt; и &amp;lt;font color=darkred&amp;gt;2&amp;lt;/font&amp;gt;. В строке &amp;lt;font color=darkred&amp;gt;5&amp;lt;/font&amp;gt; задается тайм-аут между сообщениями, а строка &amp;lt;font color=darkred&amp;gt;6&amp;lt;/font&amp;gt; определяет время, по истечении которого, не дождавшись очередного сообщения от основного сервера, запасной сочтет его покойником. В строке &amp;lt;font color=darkred&amp;gt;7&amp;lt;/font&amp;gt; указывается время, необходимое для активации сетевого интерфейса после включения компьютера, после чего ''Heartbeat'' начинает функционировать. В строках &amp;lt;font color=darkred&amp;gt;8&amp;lt;/font&amp;gt; и &amp;lt;font color=darkred&amp;gt;9&amp;lt;/font&amp;gt; задаются имена хостов для основного и запасного серверов (те, что возвращает команда &amp;lt;font color=darkred&amp;gt;uname -n&amp;lt;/font&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
Для начала попробуем управлять полностью фиктивным сервисом '''tester'''. Мы напишем скрипт, '''/etc/ha.d/resources.d/tester''', вызываемый ''Heartbeat''. Он будет всего лишь вызывать команду &amp;lt;font color=darkred&amp;gt;logger&amp;lt;/font&amp;gt;, которая сообщит нам (через ''syslogd''), что скрипт был запущен. Вот как он выглядит:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  #!/bin/bash&lt;br /&gt;
  logger $0 called with argument $1&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Скрипт нужно сделать исполняемым, например, так:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  chmod 755 tester&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
В следующем файле, ''haresources'', содержится список ресурсов, которыми управляет ''Heartbeat''. Когда компьютер выходит из строя, эти ресурсы перемещаются с одного узла сети на другой. (попробуйте произносить это как “ha-resources”, а не “hare-sauces” &amp;lt;font color=blue&amp;gt;[англ. hare – заяц, source – источник, sauce – соус, – прим. ред.]&amp;lt;/font&amp;gt;. По правде говоря, я сроду не ел зайчатины, но первым делом подумал о кролике и решил, что подойдет клюквенный соус.) Опять же, пример этого файла можно найти в документации ('''/usr/share/doc/Heartbeat''') – можете просто скопировать его в '''/etc/ha.d''' или создать свой собственный файл с нуля. Для нашего первого теста в этом файле должна быть всего одна строка:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  primary.example.com tester&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Также нужно создать файл '''/etc/ha.d/authkeys''', содержащий ключи, используемые для аутентификации ''Heartbeat''-сообщений, например:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  auth1&lt;br /&gt;
  1 sha1 foobar&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Нужно позаботиться, чтобы читать этот файл мог только администратор:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  chmod 600 authkeys&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Если права доступа к этому файлу есть у кого-то еще, ''Heartbeat'' не запустится.&lt;br /&gt;
&lt;br /&gt;
Скопируйте эти четыре файла с основного сервера на запасной в соответствующие каталоги. Файл '''ha.cf''', возможно, придется подправить в зависимости от аппаратного обеспечения компьютера, а остальные файлы должны быть одинаковыми на обоих компьютерах.&lt;br /&gt;
&lt;br /&gt;
Теперь можно запустить ''Heartbeat''. Для отслеживания сообщений ''Heartbeat'' на обоих компьютерах запустите &amp;lt;font color=darkred&amp;gt;tail -f&amp;lt;/font&amp;gt; для файла журнала ('''/var/log/messages'''). Запустите программу с помощью команды:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  /etc/init.d/heartbeat start&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Врезка&lt;br /&gt;
    |Заголовок=Украденная личность&lt;br /&gt;
    |Содержание=Перенос IP-адреса на другой компьютер – компьютерный эквивалент «воровства личности»: вы притворяетесь кем-то другим, а потом убеждаете весь мир, что вы настоящий. В процессе переноса системы на запасной сервер обязано произойти следующее. Во-первых, основной сервер должен отдать IP-адрес. Если он загорелся или нашел другую кончину, это произойдет по умолчанию, но если heartbeat останавливается на другом (исправном) сервере, адрес, очевидно, нужно забрать назад. Другая проблема – обновление записей в ARP-кэше. Доставка сетевого пакета на конкретный компьютер в конечном счете основана на его MAC-адресе – уникальном 48-битном номере, зашитом в каждую сетевую карту. Чтобы определить MAC-адрес компьютера по его IP-адресу, используется протокол ARP (Address Resolution Protocol – протокол разрешения адресов). Записи о соответствии IP-адресов и MAC-адресов обычно хранятся в кэше ARP 10–15 минут. Чтобы принудительно обновить ARP-кэш на других компьютерах, heartbeat рассылает в сеть так называемые «незаконные» [gratuitous] ARP-пакеты с компьютера, перенявшего IP-адрес.&lt;br /&gt;
    |Ширина=200px}}&lt;br /&gt;
&lt;br /&gt;
На обоих компьютерах действия ''Heartbeat'' будут писаться в журнал. На основном сервере среди прочего должно появиться сообщение типа:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  logger: /etc/ha.d/resource.d/tester called with argument start&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Оно означает, что основной сервер, как и ожидалось, запустил сервис '''tester'''.&lt;br /&gt;
&lt;br /&gt;
{{Врезка&lt;br /&gt;
    |Заголовок=Загружаем heartbeat&lt;br /&gt;
    |Содержание=''Heartbeat'' нужно установить и на основном, и на запасном сервере. У меня на обоих компьютерах была установлена CentOS 5 (фактически, RHEL5). Я просто установил ''heartbeat'' вместе с зависимостями (которые включали ''heartbeat-pils'' и ''heartbeat-stonith'') из репозиториев CentOS с помощью ''yum''. Похожие пакеты есть и в репозиториях других дистрибутивов, таких как Ubuntu; в виде пакета RPMs для SUSE/Novell Linux их можно найти на сайте http://www.linux-ha.org/ или загрузить архив с исходными кодами с этого же сайта и скомпилировать программу из них.&lt;br /&gt;
    |Ширина=200px}}&lt;br /&gt;
&lt;br /&gt;
''Heartbeat'' запущен, и мы можем проверить поведение системы в случае отказа. Я просто выдернул шнур электропитания из основного сервера и наблюдал за сообщениями в файле журнала запасного. По истечении заданного времени запасной сервер сообщил об отказе основного и запустил сервис '''tester'''. Вот соответствующие строки журнала:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  heartbeat: [9615]: WARN: node primary.example.com: is dead&lt;br /&gt;
  heartbeat: [9615]: WARN: No STONITH device configured.&lt;br /&gt;
  heartbeat: [9615]: WARN: Shared disks are not protected.&lt;br /&gt;
  heartbeat: [9615]: info: Resources being acquired from primary.example.&lt;br /&gt;
 com.&lt;br /&gt;
  heartbeat: [9615]: info: Link primary.example.com:/dev/ttyS0 dead.&lt;br /&gt;
  heartbeat: [10305]: info: No local resources [/usr/share/heartbeat/&lt;br /&gt;
 ResourceManager listkeys backup.example.com] to acquire.&lt;br /&gt;
  harc[10304]: [10323]: info: Running /etc/ha.d/rc.d/status status&lt;br /&gt;
  mach_down[10329]: [10350]: info: Taking over resource group tester&lt;br /&gt;
 ResourceManager[10351]: [10362]: info: Acquiring resource group:&lt;br /&gt;
 primary.example.com tester&lt;br /&gt;
 logger: /etc/ha.d/resource.d/tester called with argument status&lt;br /&gt;
  ResourceManager[10351]: [10379]: info: Running /etc/ha.d/resource.d/&lt;br /&gt;
 tester start&lt;br /&gt;
  logger: /etc/ha.d/resource.d/tester called with argument start&lt;br /&gt;
  mach_down[10329]: [10384]: info: mach_down takeover complete for&lt;br /&gt;
 node primary.example.com.&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Первая проверка завершилась успешно, и пора поручить ''Heartbeat'' управление полноценным сервисом. Для этого проекта я выбрал httpd. Таким образом, сейчас нам нужно убедиться, что ''Apache'' установлен на обоих компьютерах, и положить в корневой каталог web-сервера какие-нибудь легко распознаваемые файлы. Я просто создал два файла '''/var/www/html/index.html''', по одному для основного и запасного серверов; в файле для основного сервера была строка “This is the website from the primary server”, для запасного – “This is the website from the backup server” («Это сайт с основного/запасного сервера»). На обоих компьютерах запустите ''httpd'':&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  /etc/init.d/httpd start&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
и проверьте, что, открыв в браузере адрес &amp;lt;font color=blue&amp;gt;&amp;lt;nowiki&amp;gt;http://localhost&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;, вы видите эти файлы. Теперь остановите ''Apache'' и убедитесь, что он не запустится автоматически при загрузке системы. Воспользуйтесь командами:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  /etc/init.d/httpd stop&lt;br /&gt;
  chkconfig httpd --del&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Это важно, потому что ''Apache'' должен запуститься не во время загрузки, а только если ''Heartbeat'' запустил его.&lt;br /&gt;
&lt;br /&gt;
Теперь нужно изменить файл ''haresources'' так:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  primary.example.com httpd&lt;br /&gt;
  primary.example.com 192.168.0.50&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
В первой строке указывается сервис, которым будет управлять ''Heartbeat'', а во второй – IP-адрес, используемый клиентом для доступа к сервису. При запуске ''Heartbeat'' этот адрес назначается на основной сервер как второй IP-адрес. Если основной сервер откажет, копия ''Heartbeat'', запущенная на запасном сервере, перенесет этот IP-адрес на свой сетевой интерфейс.&lt;br /&gt;
&lt;br /&gt;
Предполагается, что ''Heartbeat'' будет управлять сервисами путем запуска скрипта, указанного в '''haresources''', с аргументами &amp;lt;font color=darkred&amp;gt;start&amp;lt;/font&amp;gt;, &amp;lt;font color=darkred&amp;gt;stop&amp;lt;/font&amp;gt; или &amp;lt;font color=darkred&amp;gt;status&amp;lt;/font&amp;gt;. Конечно, это те самые аргументы скриптов каталога '''/etc/init.d''', что используются для запуска сервисов во время загрузки системы, и, по правде говоря, ''Heartbeat'' будет автоматически искать скрипт '''httpd''' в каталоге '''/etc/init.d'''.&lt;br /&gt;
&lt;br /&gt;
После внесения этих изменений в конфигурацию основного и запасного серверов можно снова запустить ''Heartbeat'' на каждом из них:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 /etc/init.d/heartbeat start&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Когда ''Heartbeat'' войдет в нормальный режим работы, нужно кое-что проверить. На основном сервере запустите:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 ip addr show&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
и проверьте, что ''Heartbeat'' назначил второй IP-адрес (в нашем примере &amp;lt;font color=darkred&amp;gt;192.168.0.50&amp;lt;/font&amp;gt;) на наш сетевой интерфейс. Также запустите команду&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 ps -ef | grep httpd&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
которая проверит, что сервис ''httpd'' запущен. На запасной сервер второй IP-адрес не назначается, а сервис ''httpd'' на нем не выполняется.&lt;br /&gt;
&lt;br /&gt;
Теперь пора загрузить третий компьютер, чтобы использовать в качестве клиента. Убедитесь, что он может разрешить имя компьютера, на котором запущен сервис, по его IP-адресу. Для этого я просто добавил строку&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 192.168.0.50 www.example.com&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
в файл '''/etc/hosts'''. Проверьте, пингуется ли адрес &amp;lt;font color=blue&amp;gt;&amp;lt;nowiki&amp;gt;www.example.com&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt; с компьютера клиента. Откройте в браузере на клиентском компьютере страницу &amp;lt;font color=blue&amp;gt;&amp;lt;nowiki&amp;gt;http://www.example.com&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;. Вы должны увидеть файл '''index.html''' основного сервера. На клиенте также можно проверить кэш '''arp''', запустив команду&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 arp -a&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
и обратить внимание на MAC-адрес, связанный с IP-адресом 192.168.0.50. В моем случае результат работы команды был таким:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 www.example.com (192.168.0.50) at 00:0C:F1:96:A3:F7 [ether] on eth0&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Ладно, и как это работает?===&lt;br /&gt;
&lt;br /&gt;
Мы подошли к драматической развязке: демонстрации переноса сервиса на запасной сервер в случае отказа основного. Можно было просто отключить питание основного сервера, как и в предыдущем эксперименте, но на сей раз я избрал более кроткий способ – просто остановил ''Heartbeat'' на основном сервере командой:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 /etc/init.d/heartbeat stop&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Остановившись, ''Heartbeat'' остановит ''httpd'' на основном сервере и проинформирует запасной сервер об отключении основного (через ''Heartbeat''-соединение). Запасной сервер сразу возьмет управление на себя, и в файле его журнала ('''/var/log/messages''') появятся новые сообщения. Два из них наиболее важны (время и другую информацию в начале строки я удалил):&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  Running /etc/init.d/httpd start&lt;br /&gt;
  Registering new address record for 192.168.0.50 on eth0&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
В этом случае все заняло пару секунд. Если бы я просто выдернул из сети шнур питания основного сервера, то на восстановление системы потребовалось бы больше времени: в этом случае перед тем, как сделать вывод об отказе основного сервера и взять управление на себя, запасной сервер ожидал бы ответа 20 секунд (параметр &amp;lt;font color=darkred&amp;gt;deadtime&amp;lt;/font&amp;gt; в файле '''ha.cf''').&lt;br /&gt;
&lt;br /&gt;
На клиентском компьютере следует провести пару важных тестов. Во-первых, попробуйте обновить страницу &amp;lt;font color=blue&amp;gt;&amp;lt;nowiki&amp;gt;www.example.com&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt; в браузере. Должна появиться страница запасного сервера. Во-вторых, еще раз просмотрите содержимое ARP-кэша. На моем компьютере команда &amp;lt;font color=darkred&amp;gt;arp –a&amp;lt;/font&amp;gt; вернула следующий результат:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  www.example.com (192.168.0.50) at 00:10:60:60:3E:8E [ether] on eth0&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Это означает, что пакеты, предназначенные для адреса &amp;lt;font color=darkred&amp;gt;192.168.0.50&amp;lt;/font&amp;gt;, теперь будут направляться на запасной сервер.&lt;br /&gt;
&lt;br /&gt;
{{Врезка&lt;br /&gt;
    |Заголовок=Дополнительная информация&lt;br /&gt;
    |Содержание=Побольше узнать о ''heartbeat'' можно в документации '''/usr/share/doc/heartbeat''' (каталог зависит от конкретного дистрибутива), в частности, в  файле '''GettingStarted'''. На сайте Linux HA также есть руководства и документация. Рекомендую вам прекрасную книжку “Linux Enterprise Cluster: Build a Highly Available    Cluster   with Commodity Hardware and Free Software” (No Starch Press, ISBN 1-59327-036-4).&lt;br /&gt;
    |Ширина=200px}}&lt;br /&gt;
&lt;br /&gt;
А что же дальше? Ну, наверное, со временем кто-то доберется до основного сервера, починит его и перезапустит. Когда ''Heartbeat'' перезапускается, он сообщает об этом запасному серверу через ''Heartbeat''-соединение. В журнале запасного сервера появятся такие строки:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  Heartbeat restart on node primary.example.com&lt;br /&gt;
  Releasing resource group: primary.example.com httpd&lt;br /&gt;
  Running /etc/init.d/httpd stop&lt;br /&gt;
  Withdrawing address record for 192.168.0.50 on eth0&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Они означают, что запасной сервер освободил ресурсы и разрешил основному забрать их.&lt;br /&gt;
&lt;br /&gt;
Если у вас хватило духу дочитать до конца, поздравляю! Вы создали отказоустойчивый кластер в Linux и можете начать делать на этом деньги в реальном мире! Однако прежде чем пойти на собеседование в Google, NASA или даже Krazy Ken’s 24x7 Liquorice Emporium, быть может, вы захотите узнать о некоторых вопросах подробнее.&lt;br /&gt;
&lt;br /&gt;
Один из них – это концепция «ограждения» (fencing). Когда запасной сервер перенимает ресурсы основного, нужно как-то гарантировать, чтобы основной сервер не попытался снова предоставить эти сервисы. ''Heartbeat'' может использовать для этого механизм STONITH (“shoot the other node in the head” – «контрольный выстрел в голову»), если вы купите устройство, программно отключающее питание компьютера. Второй вопрос – как синхронизировать содержимое двух web-серверов. В нашем примере мы умышленно сделали его разным, но на практике может потребоваться какое-то средство синхронизации их содержимого (''rsync'' или ''unison''). '''LXF'''&lt;br /&gt;
&lt;br /&gt;
[[Категория:Учебники]]&lt;br /&gt;
[[Категория:Hardcore Linux]]&lt;br /&gt;
[[Категория:Крис Браун]]&lt;/div&gt;</summary>
		<author><name>Kipruss</name></author>	</entry>

	<entry>
		<id>http://wiki.linuxformat.ru/wiki/%D0%9E%D0%B1%D1%81%D1%83%D0%B6%D0%B4%D0%B5%D0%BD%D0%B8%D0%B5_%D1%83%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA%D0%B0:Yaleks</id>
		<title>Обсуждение участника:Yaleks</title>
		<link rel="alternate" type="text/html" href="http://wiki.linuxformat.ru/wiki/%D0%9E%D0%B1%D1%81%D1%83%D0%B6%D0%B4%D0%B5%D0%BD%D0%B8%D0%B5_%D1%83%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA%D0%B0:Yaleks"/>
				<updated>2009-03-06T23:30:40Z</updated>
		
		<summary type="html">&lt;p&gt;Kipruss: /* LXF100 ... */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Установил расширения Cite, ParserFunctions и SyntaxHighlight - проверяйте --17:21, 11 марта 2008 (MSK)&lt;br /&gt;
&lt;br /&gt;
Вы вчера перенесли статью LXF97:TEX в LXF97:Препринт, но при этом некорректно изменили оглавление номера, оставив в нем ссылку на LXF97:TEX, но удалив при этом ссылку на следующую статью Андрея Боровского. Я ее найти в списке статей не могу. Верните ее пожалуйста на место. --[[Участник:Crazy Rebel|Crazy Rebel]] 08:07, 3 октября 2008 (MSD) &lt;br /&gt;
: Я просто очистил содержимое, сама статья была создана давно. Оглавление сейчас пофиксил. --[[Участник:Yaleks|Yaleks]] 15:07, 4 октября 2008 (MSD)&lt;br /&gt;
&lt;br /&gt;
== Викификация LXF70-77 ==&lt;br /&gt;
До сих пор я занимался викификацией LXF c конца, а Вы с начала. Но теперь, когда остались не завершенными только самые начальные номера, причем в каждом из них уже сделана какая то часть работы, Валентин Синицин посоетовал обратиться непосредственно к Вам, чтобы разделить оставшиеся для викификации статьи. В принципе я могу пойти и другим путем - начиная викификацию 2008 года. Так что давайте решим как будет удобнее. --[[Участник:Crazy Rebel|Crazy Rebel]]&lt;br /&gt;
&lt;br /&gt;
* Вот что осталось (если существующие оглавления полные):&lt;br /&gt;
&amp;lt;nowiki&amp;gt;# &amp;lt;s&amp;gt;[[LXF74-75:Inkscape]] (13 ссылок)&amp;lt;/s&amp;gt;&lt;br /&gt;
# &amp;lt;s&amp;gt;[[LXF71:GIMP]]&amp;lt;/s&amp;gt; (7 ссылок)&lt;br /&gt;
# &amp;lt;s&amp;gt;[[LXF72:GIMP]]&amp;lt;/s&amp;gt; (7 ссылок)&lt;br /&gt;
# &amp;lt;s&amp;gt;[[LXF73:GIMP]]&amp;lt;/s&amp;gt; (7 ссылок)&lt;br /&gt;
# &amp;lt;s&amp;gt;[[LXF73:Сравнение: Электронные фотоальбомы]] (2 ссылки)&amp;lt;/s&amp;gt;&lt;br /&gt;
# &amp;lt;s&amp;gt;[[LXF74-75:Технологии Linux-2006]] (2 ссылки)&amp;lt;/s&amp;gt;&lt;br /&gt;
# &amp;lt;s&amp;gt;[[LXF71:VariCAD 2005]]&amp;lt;/s&amp;gt;&lt;br /&gt;
# &amp;lt;s&amp;gt;[[LXF71:KOffice 1.4]]&amp;lt;/s&amp;gt;&lt;br /&gt;
# &amp;lt;s&amp;gt;[[LXF71:SmoothWall Firewall 4]]&amp;lt;/s&amp;gt;&lt;br /&gt;
# &amp;lt;s&amp;gt;[[LXF71:Amarok 1.3]]&amp;lt;/s&amp;gt;&lt;br /&gt;
# &amp;lt;s&amp;gt;[[LXF71:Спецрепортаж]]&amp;lt;/s&amp;gt;&lt;br /&gt;
# &amp;lt;s&amp;gt;[[LXF71:Настольный Linux]]&amp;lt;/s&amp;gt;&lt;br /&gt;
# &amp;lt;s&amp;gt;[[LXF71:Гонка за лидером]]&amp;lt;/s&amp;gt;&lt;br /&gt;
# &amp;lt;s&amp;gt;[[LXF71:Дневники Linux]]&amp;lt;/s&amp;gt;&lt;br /&gt;
# &amp;lt;s&amp;gt;[[LXF71:Subversion]]&amp;lt;/s&amp;gt;&lt;br /&gt;
# &amp;lt;s&amp;gt;[[LXF77:Realsoft 3D]]&amp;lt;/s&amp;gt;&lt;br /&gt;
# &amp;lt;s&amp;gt;[[LXF72:Советы по ускорению]]&amp;lt;/s&amp;gt;&lt;br /&gt;
# &amp;lt;s&amp;gt;[[LXF76:Азбука записи]]&amp;lt;/s&amp;gt;&lt;br /&gt;
# &amp;lt;s&amp;gt;[[LXF73:Автомонтирование USB]]&amp;lt;/s&amp;gt;&lt;br /&gt;
# &amp;lt;s&amp;gt;[[LXF73:Русификация Debian 3.1]]&amp;lt;/s&amp;gt;&lt;br /&gt;
# &amp;lt;s&amp;gt;[[LXF72:Frequently Asked Questions]]&amp;lt;/s&amp;gt;&lt;br /&gt;
# &amp;lt;s&amp;gt;[[LXF72:Краткая справка]]&amp;lt;/s&amp;gt;&lt;br /&gt;
# &amp;lt;s&amp;gt;[[LXF71:Ответы]]&amp;lt;/s&amp;gt;&lt;br /&gt;
# &amp;lt;s&amp;gt;[[LXF72:Ответы]]&amp;lt;/s&amp;gt;&lt;br /&gt;
# &amp;lt;s&amp;gt;[[LXF73:Ответы]]&amp;lt;/s&amp;gt;&lt;br /&gt;
# &amp;lt;s&amp;gt;[[LXF74-75:Ответы]]&amp;lt;/s&amp;gt;&lt;br /&gt;
# &amp;lt;s&amp;gt;[[LXF77:Ответы]]&amp;lt;/s&amp;gt;&lt;br /&gt;
# &amp;lt;s&amp;gt;[[LXF71:Первые шаги]]&amp;lt;/s&amp;gt;&lt;br /&gt;
# &amp;lt;s&amp;gt;[[LXF72:Первые шаги Печать]]&amp;lt;/s&amp;gt;&lt;br /&gt;
# &amp;lt;s&amp;gt;[[LXF74-75:Первые шаги]]&amp;lt;/s&amp;gt;&lt;br /&gt;
# &amp;lt;s&amp;gt;[[LXF77:Сравнение]]&amp;lt;/s&amp;gt;&lt;br /&gt;
# &amp;lt;s&amp;gt;[[LXF71:Сравнение]]&amp;lt;/s&amp;gt;&lt;br /&gt;
# &amp;lt;s&amp;gt;[[LXF76:Сравнение]]&amp;lt;/s&amp;gt;&lt;br /&gt;
# &amp;lt;s&amp;gt;[[LXF76:Что такое]] GPL V3&amp;lt;/s&amp;gt;&lt;br /&gt;
# &amp;lt;s&amp;gt;[[LXF76:Интервью]] Джереми Элиссон&amp;lt;/s&amp;gt;&lt;br /&gt;
# &amp;lt;s&amp;gt;[[LXF76:Трюки с железом]]&amp;lt;/s&amp;gt;&lt;br /&gt;
# &amp;lt;s&amp;gt;[[LXF76:Интервью2]] Йон фон Течнер&amp;lt;/s&amp;gt;&lt;br /&gt;
# &amp;lt;s&amp;gt;[[LXF76:Dynebolic]]&amp;lt;/s&amp;gt;&lt;br /&gt;
# &amp;lt;s&amp;gt;[[LXF76:MythTV]]&amp;lt;/s&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Большое число из этого уже устарело и представляет лишь исторический интерес. Можно тут &amp;lt;s&amp;gt;отмечать&amp;lt;/s&amp;gt; (&amp;lt;nowiki&amp;gt;&amp;lt;s&amp;gt;...&amp;lt;/s&amp;gt;&amp;lt;/nowiki&amp;gt;) перед викификаций, чтобы не было коллизий. --[[Участник:Yaleks|Yaleks]] 22:45, 3 февраля 2009 (MSK)&lt;br /&gt;
&lt;br /&gt;
* Поздравляю! Позиции в списке закончились.&lt;br /&gt;
** Это да, но мне ещё спецрепортаж доделывать. --[[Участник:Yaleks|Yaleks]] 20:24, 5 марта 2009 (MSK)&lt;br /&gt;
*** Я так сильно подозреваю, что это не единственная проблема, хотя я старался и выверял все номера, но могли гдето и недоделки остаться и статьи спрятаться. Но в общем следует считать, что эта часть завершена. Тем более что спецрепортаж это большая но всего одна статья.--[[Участник:Crazy Rebel|Crazy Rebel]] 10:08, 6 марта 2009 (MSK)&lt;br /&gt;
&lt;br /&gt;
== LXF72 Советы по ускорению ==&lt;br /&gt;
&lt;br /&gt;
А зачем там было делать &amp;quot;LXF72...&amp;quot; загловком? Я тоже так вначале сделал, но мне крайне не понравилось, что советы нумеруются 1.1 ... 1.32 тогда как в моем варианта было 1, 2 .... Ну и еще почему заголовок статьи Вы выделяетя двумя знаками &amp;lt;nowiki&amp;gt;==&amp;lt;/nowiki&amp;gt; ведь можно и одним, тогда каждый вопрос отделяется друг от друго горизонтальной линией.&lt;br /&gt;
:* &amp;lt;nowiki&amp;gt;==&amp;lt;/nowiki&amp;gt; это заголовок 1-ого уровня вики-синтаксиса (= использовать некорректно). И где вы редактируете статьи, что там вставляется какой-то 2-х байтовый пробел? Через OCR что-ли пропускаете? --[[Участник:Yaleks|Yaleks]] 22:15, 26 февраля 2009 (MSK)&lt;br /&gt;
:::* Статьи я копирую из kpdf собственно сразу в окно Firefox, откуда там стали браться неразрывные пробелы я понятия не имею. Возможно такие pdf-ки потому что LXF99 я делал таким же способом но никаких неразрывных пробелов там нет. Или это так работает новый kpdf.&lt;br /&gt;
:::* Проблему решил так - сначала копирую текст в kate там удаляю всю гадость (заменой по тексту) и уже потом вставляю в окно Firefox.&lt;br /&gt;
&lt;br /&gt;
== LXF100 ... ==&lt;br /&gt;
&lt;br /&gt;
В общем то викификация LXF70-99 подходит к концу и Синицын уже спрашивал меня о продолжении работы. Я согласен и как я понимаю Вы тоже. Но у Вас несколько другой подход - викифицировать не номерами, а темами. В приципе я вижу и преимущества и недостатки такого подхода. Ну из перимуществ это то, что пользователь получает информацию которая должна быть для него наиболее интересна, а из недостатков- отдельный номер может быть так до конца и не закончен. Будет осутствовать общий стиль оформлния. В общем я готов на любой подход к викификации. Если мы будем пользоваться Вашим методом то предлагаю делать так чтобы не пересекаться - Заранее оглавления не делаем, кто создает статью, тот ее и викифицирует.&lt;br /&gt;
: Если вы посмотрите на статистику хотя-бы нескольких ресурсов, то поймёте, что удержать и заставить посмотреть хотя-бы 3 страницы очень сложно. Потому иметь законченные и связанные кластеры статей лучше, чем несвязанную подборку из одного номера. Очень мало людей приходят введя адрес первой страницы и читают по-порядку, в основном по ссылкам с других сайтов или поисковых систем. --[[Участник:Yaleks|Yaleks]] 15:24, 1 марта 2009 (MSK)&lt;br /&gt;
:: И всеже я предлагаю сначала закончить LXF71 и только после этого приступать к 100 и далее, а то Синицын мне как то писал что руководство недовольно, что викификация этих номеров не закончена. А в остальном полностью согласен. Предлагаю значит сделать как раз так - кто начал викификацию тот ее и заканчивает. Чтобы нам тут оглавление не составлять.&lt;br /&gt;
Надо не забывать делать редиректы на статьи в номере 100-101 с несуществующих номеров 100 и 101.&lt;br /&gt;
&lt;br /&gt;
== Присоединение к проекту ==&lt;br /&gt;
&lt;br /&gt;
Обращаюсь к Yaleks'у, как к координатору: я готов в меру сил помочь в викификации того, что наиболее нужно в настоящее время. Номера 100-106 имеются, скачал по ссылке, которую дал Валентин. Мой почтовый адрес: kipruss_A_mail.ru. После прочтения, думаю, этот раздел можно удалить. :)&lt;br /&gt;
&lt;br /&gt;
* Ну так выбирайте статью, вроде как решили с учебников начать, а то и цикл, вписывайте на соответствующей странице(цах) его название и вперед. Валентин сказал что за оформлением оглавления журанлов он сам проследит, но всетаки постарайтесь как в журнале делать название статьи и аннотацию.--[[Участник:Crazy Rebel|Crazy Rebel]] 10:10, 6 марта 2009 (MSK)&lt;br /&gt;
** Раз с учебников, то беру цикл &amp;quot;Hardcore Linux&amp;quot;. Потом - Django, но этот цикл начинается с мая, по-моему - наверное лучше сделать те, которые продолжаются с прошлого года.--[[Участник:Kipruss|Kipruss]] 23:36, 6 марта 2009 (MSK)&lt;br /&gt;
* Смотрите на оформление существующих статей и делайте по аналогии (также см. [[Информация для авторов]]). Crazy Rebel, осталось расхождение с наименование картинок, я всё-таки предлагаю, чтобы в названии был номер журнала и страницы (возможно выбранный в начале Img не очень логично и лучше перейти к LXF10X_YY_Z.{jpg/png}). --[[Участник:Yaleks|Yaleks]] 11:57, 6 марта 2009 (MSK)&lt;br /&gt;
** Поздно я обратил внимание на это замечание. Ну, ничего страшного, надеюсь. Проба пера: [[LXF100:Hardcore_Linux]]&lt;br /&gt;
** Хорошо. Со следующей статьи начну именовать так. Не думаю что надо что либо переделывать в уже викифицицированных журналах если только качество старых картинок не нравится.--[[Участник:Crazy Rebel|Crazy Rebel]] 16:35, 6 марта 2009 (MSK)&lt;/div&gt;</summary>
		<author><name>Kipruss</name></author>	</entry>

	<entry>
		<id>http://wiki.linuxformat.ru/wiki/LXF101:Hardcore_Linux</id>
		<title>LXF101:Hardcore Linux</title>
		<link rel="alternate" type="text/html" href="http://wiki.linuxformat.ru/wiki/LXF101:Hardcore_Linux"/>
				<updated>2009-03-06T23:27:55Z</updated>
		
		<summary type="html">&lt;p&gt;Kipruss: Перенаправление на LXF100-101:Hardcore Linux&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#REDIRECT [[LXF100-101:Hardcore Linux]]&lt;/div&gt;</summary>
		<author><name>Kipruss</name></author>	</entry>

	<entry>
		<id>http://wiki.linuxformat.ru/wiki/LXF100:Hardcore_Linux</id>
		<title>LXF100:Hardcore Linux</title>
		<link rel="alternate" type="text/html" href="http://wiki.linuxformat.ru/wiki/LXF100:Hardcore_Linux"/>
				<updated>2009-03-06T23:27:06Z</updated>
		
		<summary type="html">&lt;p&gt;Kipruss: «LXF100:Hardcore Linux» переименована в «LXF100-101:Hardcore Linux» поверх перенаправления&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#REDIRECT [[LXF100-101:Hardcore Linux]]&lt;/div&gt;</summary>
		<author><name>Kipruss</name></author>	</entry>

	<entry>
		<id>http://wiki.linuxformat.ru/wiki/LXF100-101:Hardcore_Linux</id>
		<title>LXF100-101:Hardcore Linux</title>
		<link rel="alternate" type="text/html" href="http://wiki.linuxformat.ru/wiki/LXF100-101:Hardcore_Linux"/>
				<updated>2009-03-06T23:27:06Z</updated>
		
		<summary type="html">&lt;p&gt;Kipruss: «LXF100:Hardcore Linux» переименована в «LXF100-101:Hardcore Linux» поверх перенаправления&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Кластеры: Повышаем отказоустойчивость.==&lt;br /&gt;
&lt;br /&gt;
Отказоустойчивость – то свойство, которое помогает кластеру пережить сбой электропитания и другие бедствия. '''Д-р Крис Браун''' покажет, как удержаться на плаву.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Журналы доступа к моей web-странице – не самое захватывающее чтиво. Если исключить случайные вторжения роботов поисковых систем, посетители заходят на сайт не чаще раза в неделю. Честно говоря, если сайт упадет, это заметят разве что через несколько месяцев. Даже грустно. Другая крайность – коммерческие web-сайты, приносящие владельцам ежедневный доход: несколько минут простоя такого сайта выливаются в ощутимые убытки для компании. На данном уроке я расскажу, как создать в Linux отказоустойчивый кластер. В случае краха основного сервера система автоматически переключается на запасной, а снаружи кластер выглядит как один очень надежный сервер. Нам поможет открытая программа ''Heartbeat'', найти которую можно на сайте www.linuxha.org. Кластер мы построим из двух компьютеров (основной и запасной сервер). ''Heartbeat'' будет отвечать за обнаружение отказа основного сервера и управлять запуском нужного нам сервиса на запасном. Мы воспользуемся сервисом ''Apache (httpd)'', но эта технология подойдет и для любого другого сервиса: FTP, DNS или почтового. В общем, все будет работать примерно так:&lt;br /&gt;
&lt;br /&gt;
# В обычном режиме необходимые сервисы (типа ''httpd'') предоставляются основным сервером.&lt;br /&gt;
# Основной и запасной серверы постоянно обмениваются друг с другом сообщениями ''Heartbeat'' [англ. пульс], которые говорят запасному серверу, что с основным все в порядке.&lt;br /&gt;
# Если запасной сервер не получает сообщения, он перенимает ресурсы основного сервера (например, запускает собственную копию сервера ''httpd'').&lt;br /&gt;
# Запасной сервер перенимает IP-адрес, по которому предоставлялся сервис на основном сервере.&lt;br /&gt;
&lt;br /&gt;
===Начинаем: компоненты системы===&lt;br /&gt;
&lt;br /&gt;
Если вы намерены двинуться дальше и попробовать все на практике, то вам понадобятся три компьютера – основной сервер, запасной сервер и клиент, с помощью которого мы сможем проверить, как все работает.&lt;br /&gt;
&lt;br /&gt;
На основном и запасном серверах должен быть установлен Linux, на клиенте – необязательно (хотя под Linux в вашем распоряжении окажутся лучшие средства диагностики). Компьютеры должны быть подключены к сети Ethernet. Для обмена сигналами ''Heartbeat'' на основном и запасном серверах должна быть вторая сетевая карта. Эти карты нужно соединить друг с другом либо перекрестным (crossover) кабелем, либо через мини-хаб. Если на обоих компьютерах есть последовательный порт, то вместо второго Ethernet-подключения можно соединить их последовательные порты перекрестным кабелем, по которому будет производиться обмен сигналами. Общая схема показана на [[:Изображение:Img_100_87_1.png|Рис. 1]].&lt;br /&gt;
&lt;br /&gt;
===Установка heartbeat-соединения===&lt;br /&gt;
&lt;br /&gt;
Если обмен сигналами ''Heartbeat'' будет осуществляться через Ethernet, соединить сетевые карты друг с другом можно двумя способами: либо через перекрестный кабель RJ45, либо парой обычных кабелей через мини-хаб. Первый вариант лучше, потому что здесь нечему выходить из строя. Каждой из карт нужно назначить статический IP-адрес, причем выбранный из частного диапазона, ни один адрес из которого не используется во внутренней сети. Например, первой карте можно назначить адрес 10.0.0.1, второй – 10.0.0.2. Убедитесь, что компьютеры могут достучаться друг до друга [ping].&lt;br /&gt;
&lt;br /&gt;
Также можно использовать и соединение через последовательный порт. Тогда нам потребуется последовательный перекрестный кабель. На обоих концах этого кабеля, который еще называют нуль-модемным, имеется 9-контактный разъем типа «мама». Кабелем нужно соединить последовательные порты компьютеров. (Последовательные порты и кабели сейчас используются редко, и если на ваших компьютерах их нет, проще пойти и купить вторую сетевую карту для соединения по Ethernet.)&lt;br /&gt;
&lt;br /&gt;
Чтобы проверить соединение через последовательные порты, выполните на основном сервере команду:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 cat /dev/ttyS0&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
а на запасном – команду:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 cat /etc/fstab &amp;gt; /dev/ttyS0&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
На основном сервере должно отображаться содержимое файла. Повторите эксперимент в обратном направлении.&lt;br /&gt;
&lt;br /&gt;
''Heartbeat'' будет прекрасно работать с соединением любого типа. Преимущество Ethernet-соединения – трафик ''Heartbeat'' в этом случае можно отслеживать с помощью одной из утилит для отслеживания пакетов (например, wireshark). Можно даже использовать одновременно оба соединения, что позволит обойтись без ненужных откатов, если только одно из них выйдет из строя.&lt;br /&gt;
&lt;br /&gt;
[[Изображение:Img_100_87_1.png|thumb|Рис. 1: Общая схема проекта; обратите внимание на IP-адреса.]]&lt;br /&gt;
&lt;br /&gt;
===Настройка сетевых интерфейсов===&lt;br /&gt;
&lt;br /&gt;
Оба сетевых интерфейса, которые участвуют в ''Heartbeat''-соединении, должны быть настроены на статические IP-адреса, так как DHCP-сервера в этой «сети» точно нет. Статические адреса должны быть и на основных интерфейсах, которые используются для подключения к основному и запасному серверам. Обратите внимание, что это НЕ те адреса, на которых предоставляется сервис. ''Heartbeat'' назначит сетевой карте исправного компьютера второй IP-адрес, и именно он будет использоваться клиентами для доступа к ресурсу.&lt;br /&gt;
&lt;br /&gt;
===Три файла конфигурации===&lt;br /&gt;
&lt;br /&gt;
Сразу после установки Heartbeat нужно создать в каталоге '''/etc/ha.d''' три (да, три!) файла конфигурации, а именно:&lt;br /&gt;
&lt;br /&gt;
* '''ha.cf''' Файл содержит настройки самого ''Heartbeat''; в нем определяются используемые программой пути и устанавливаются некоторые временные параметры.&lt;br /&gt;
* '''haresources''' Этот файл определяет ресурсы (сервисы), которыми будет управлять Heartbeat, и основной сервер для каждого из этих ресурсов.&lt;br /&gt;
* '''authkey''' В этом файле задается пароль и метод шифрования, используемый для аутентификации Heartbeat-сообщений.&lt;br /&gt;
&lt;br /&gt;
Начнем с '''ha.cf'''. Пример этого файла можно найти в документации на ''Heartbeat'' ('''/usr/share/doc/heartbeat/ha.cf'''). Это один из файлов типа «визгу много, проку мало», которые целиком состоят из документации и закомментированных примеров. Можно скопировать его в '''/etc/ha.d''' и использовать как отправную точку, или создать свой файл с нуля.&lt;br /&gt;
&lt;br /&gt;
{{Врезка&lt;br /&gt;
    |Заголовок=Ошибка!&lt;br /&gt;
    |Содержание=В этой статье мы не говорим о том, как предотвратить неисправности других типов, например, те, что возникают в инфраструктуре самого интернета. В частности, мы не говорим о создании дополнительных информационных каналов для связи с сайтом. Впрочем, это не так уж и важно, потому что врожденная гибкость архитектуры интернета позволяет поглощать частные сбои. Часто даже говорят, что сеть ARPANET (предшественник интернета) разрабатывалась с таким расчетом, чтобы выдержать взрыв атомной бомбы. ARPANET и правда должна была справляться с утратой части сети, но главная причина была в том, что коммутация узлов сети и связей внутри нее была не особенно надежной, даже и без атомной бомбы.&lt;br /&gt;
    |Ширина=200px}}&lt;br /&gt;
&lt;br /&gt;
Вот минимальный вариант этого файла. Номера строк даны только для удобства ссылок, в самом файле их нет:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 1. udpport 694&lt;br /&gt;
 2. bcast eth1&lt;br /&gt;
 3. serial /dev/ttyS0&lt;br /&gt;
 4. baud 9600&lt;br /&gt;
 5. keepalive 2&lt;br /&gt;
 6. deadtime 20&lt;br /&gt;
 7. initdead 60&lt;br /&gt;
 8. node primary.example.com&lt;br /&gt;
 9. node backup.example.com&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Строки &amp;lt;font color=darkred&amp;gt;1&amp;lt;/font&amp;gt; и &amp;lt;font color=darkred&amp;gt;2&amp;lt;/font&amp;gt; задают номер порта и сетевой интерфейс, используемые для Heartbeat-соединения. Для соединения через последовательные порты в строках &amp;lt;font color=darkred&amp;gt;3&amp;lt;/font&amp;gt; и &amp;lt;font color=darkred&amp;gt;3&amp;lt;/font&amp;gt; задается порт и скорость соединения. Можно (и рекомендуется) использовать оба типа, но у меня было только соединение через последовательные порты, и я закомментировал строки &amp;lt;font color=darkred&amp;gt;1&amp;lt;/font&amp;gt; и &amp;lt;font color=darkred&amp;gt;2&amp;lt;/font&amp;gt;. В строке &amp;lt;font color=darkred&amp;gt;5&amp;lt;/font&amp;gt; задается тайм-аут между сообщениями, а строка &amp;lt;font color=darkred&amp;gt;6&amp;lt;/font&amp;gt; определяет время, по истечении которого, не дождавшись очередного сообщения от основного сервера, запасной сочтет его покойником. В строке &amp;lt;font color=darkred&amp;gt;7&amp;lt;/font&amp;gt; указывается время, необходимое для активации сетевого интерфейса после включения компьютера, после чего ''Heartbeat'' начинает функционировать. В строках &amp;lt;font color=darkred&amp;gt;8&amp;lt;/font&amp;gt; и &amp;lt;font color=darkred&amp;gt;9&amp;lt;/font&amp;gt; задаются имена хостов для основного и запасного серверов (те, что возвращает команда &amp;lt;font color=darkred&amp;gt;uname -n&amp;lt;/font&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
Для начала попробуем управлять полностью фиктивным сервисом '''tester'''. Мы напишем скрипт, '''/etc/ha.d/resources.d/tester''', вызываемый ''Heartbeat''. Он будет всего лишь вызывать команду &amp;lt;font color=darkred&amp;gt;logger&amp;lt;/font&amp;gt;, которая сообщит нам (через ''syslogd''), что скрипт был запущен. Вот как он выглядит:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  #!/bin/bash&lt;br /&gt;
  logger $0 called with argument $1&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Скрипт нужно сделать исполняемым, например, так:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  chmod 755 tester&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
В следующем файле, ''haresources'', содержится список ресурсов, которыми управляет ''Heartbeat''. Когда компьютер выходит из строя, эти ресурсы перемещаются с одного узла сети на другой. (попробуйте произносить это как “ha-resources”, а не “hare-sauces” &amp;lt;font color=blue&amp;gt;[англ. hare – заяц, source – источник, sauce – соус, – прим. ред.]&amp;lt;/font&amp;gt;. По правде говоря, я сроду не ел зайчатины, но первым делом подумал о кролике и решил, что подойдет клюквенный соус.) Опять же, пример этого файла можно найти в документации ('''/usr/share/doc/Heartbeat''') – можете просто скопировать его в '''/etc/ha.d''' или создать свой собственный файл с нуля. Для нашего первого теста в этом файле должна быть всего одна строка:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  primary.example.com tester&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Также нужно создать файл '''/etc/ha.d/authkeys''', содержащий ключи, используемые для аутентификации ''Heartbeat''-сообщений, например:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  auth1&lt;br /&gt;
  1 sha1 foobar&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Нужно позаботиться, чтобы читать этот файл мог только администратор:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  chmod 600 authkeys&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Если права доступа к этому файлу есть у кого-то еще, ''Heartbeat'' не запустится.&lt;br /&gt;
&lt;br /&gt;
Скопируйте эти четыре файла с основного сервера на запасной в соответствующие каталоги. Файл '''ha.cf''', возможно, придется подправить в зависимости от аппаратного обеспечения компьютера, а остальные файлы должны быть одинаковыми на обоих компьютерах.&lt;br /&gt;
&lt;br /&gt;
Теперь можно запустить ''Heartbeat''. Для отслеживания сообщений ''Heartbeat'' на обоих компьютерах запустите &amp;lt;font color=darkred&amp;gt;tail -f&amp;lt;/font&amp;gt; для файла журнала ('''/var/log/messages'''). Запустите программу с помощью команды:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  /etc/init.d/heartbeat start&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Врезка&lt;br /&gt;
    |Заголовок=Украденная личность&lt;br /&gt;
    |Содержание=Перенос IP-адреса на другой компьютер – компьютерный эквивалент «воровства личности»: вы притворяетесь кем-то другим, а потом убеждаете весь мир, что вы настоящий. В процессе переноса системы на запасной сервер обязано произойти следующее. Во-первых, основной сервер должен отдать IP-адрес. Если он загорелся или нашел другую кончину, это произойдет по умолчанию, но если heartbeat останавливается на другом (исправном) сервере, адрес, очевидно, нужно забрать назад. Другая проблема – обновление записей в ARP-кэше. Доставка сетевого пакета на конкретный компьютер в конечном счете основана на его MAC-адресе – уникальном 48-битном номере, зашитом в каждую сетевую карту. Чтобы определить MAC-адрес компьютера по его IP-адресу, используется протокол ARP (Address Resolution Protocol – протокол разрешения адресов). Записи о соответствии IP-адресов и MAC-адресов обычно хранятся в кэше ARP 10–15 минут. Чтобы принудительно обновить ARP-кэш на других компьютерах, heartbeat рассылает в сеть так называемые «незаконные» [gratuitous] ARP-пакеты с компьютера, перенявшего IP-адрес.&lt;br /&gt;
    |Ширина=200px}}&lt;br /&gt;
&lt;br /&gt;
На обоих компьютерах действия ''Heartbeat'' будут писаться в журнал. На основном сервере среди прочего должно появиться сообщение типа:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  logger: /etc/ha.d/resource.d/tester called with argument start&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Оно означает, что основной сервер, как и ожидалось, запустил сервис '''tester'''.&lt;br /&gt;
&lt;br /&gt;
{{Врезка&lt;br /&gt;
    |Заголовок=Загружаем heartbeat&lt;br /&gt;
    |Содержание=''Heartbeat'' нужно установить и на основном, и на запасном сервере. У меня на обоих компьютерах была установлена CentOS 5 (фактически, RHEL5). Я просто установил ''heartbeat'' вместе с зависимостями (которые включали ''heartbeat-pils'' и ''heartbeat-stonith'') из репозиториев CentOS с помощью ''yum''. Похожие пакеты есть и в репозиториях других дистрибутивов, таких как Ubuntu; в виде пакета RPMs для SUSE/Novell Linux их можно найти на сайте http://www.linux-ha.org/ или загрузить архив с исходными кодами с этого же сайта и скомпилировать программу из них.&lt;br /&gt;
    |Ширина=200px}}&lt;br /&gt;
&lt;br /&gt;
''Heartbeat'' запущен, и мы можем проверить поведение системы в случае отказа. Я просто выдернул шнур электропитания из основного сервера и наблюдал за сообщениями в файле журнала запасного. По истечении заданного времени запасной сервер сообщил об отказе основного и запустил сервис '''tester'''. Вот соответствующие строки журнала:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  heartbeat: [9615]: WARN: node primary.example.com: is dead&lt;br /&gt;
  heartbeat: [9615]: WARN: No STONITH device configured.&lt;br /&gt;
  heartbeat: [9615]: WARN: Shared disks are not protected.&lt;br /&gt;
  heartbeat: [9615]: info: Resources being acquired from primary.example.&lt;br /&gt;
 com.&lt;br /&gt;
  heartbeat: [9615]: info: Link primary.example.com:/dev/ttyS0 dead.&lt;br /&gt;
  heartbeat: [10305]: info: No local resources [/usr/share/heartbeat/&lt;br /&gt;
 ResourceManager listkeys backup.example.com] to acquire.&lt;br /&gt;
  harc[10304]: [10323]: info: Running /etc/ha.d/rc.d/status status&lt;br /&gt;
  mach_down[10329]: [10350]: info: Taking over resource group tester&lt;br /&gt;
 ResourceManager[10351]: [10362]: info: Acquiring resource group:&lt;br /&gt;
 primary.example.com tester&lt;br /&gt;
 logger: /etc/ha.d/resource.d/tester called with argument status&lt;br /&gt;
  ResourceManager[10351]: [10379]: info: Running /etc/ha.d/resource.d/&lt;br /&gt;
 tester start&lt;br /&gt;
  logger: /etc/ha.d/resource.d/tester called with argument start&lt;br /&gt;
  mach_down[10329]: [10384]: info: mach_down takeover complete for&lt;br /&gt;
 node primary.example.com.&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Первая проверка завершилась успешно, и пора поручить ''Heartbeat'' управление полноценным сервисом. Для этого проекта я выбрал httpd. Таким образом, сейчас нам нужно убедиться, что ''Apache'' установлен на обоих компьютерах, и положить в корневой каталог web-сервера какие-нибудь легко распознаваемые файлы. Я просто создал два файла '''/var/www/html/index.html''', по одному для основного и запасного серверов; в файле для основного сервера была строка “This is the website from the primary server”, для запасного – “This is the website from the backup server” («Это сайт с основного/запасного сервера»). На обоих компьютерах запустите ''httpd'':&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  /etc/init.d/httpd start&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
и проверьте, что, открыв в браузере адрес &amp;lt;nowiki&amp;gt;&amp;lt;font color=blue&amp;gt;http://localhost&amp;lt;/font&amp;gt;&amp;lt;/nowiki&amp;gt;, вы видите эти файлы. Теперь остановите ''Apache'' и убедитесь, что он не запустится автоматически при загрузке системы. Воспользуйтесь командами:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  /etc/init.d/httpd stop&lt;br /&gt;
  chkconfig httpd --del&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Это важно, потому что ''Apache'' должен запуститься не во время загрузки, а только если ''Heartbeat'' запустил его.&lt;br /&gt;
&lt;br /&gt;
Теперь нужно изменить файл ''haresources'' так:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  primary.example.com httpd&lt;br /&gt;
  primary.example.com 192.168.0.50&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
В первой строке указывается сервис, которым будет управлять ''Heartbeat'', а во второй – IP-адрес, используемый клиентом для доступа к сервису. При запуске ''Heartbeat'' этот адрес назначается на основной сервер как второй IP-адрес. Если основной сервер откажет, копия ''Heartbeat'', запущенная на запасном сервере, перенесет этот IP-адрес на свой сетевой интерфейс.&lt;br /&gt;
&lt;br /&gt;
Предполагается, что ''Heartbeat'' будет управлять сервисами путем запуска скрипта, указанного в '''haresources''', с аргументами &amp;lt;font color=darkred&amp;gt;start&amp;lt;/font&amp;gt;, &amp;lt;font color=darkred&amp;gt;stop&amp;lt;/font&amp;gt; или &amp;lt;font color=darkred&amp;gt;status&amp;lt;/font&amp;gt;. Конечно, это те самые аргументы скриптов каталога '''/etc/init.d''', что используются для запуска сервисов во время загрузки системы, и, по правде говоря, ''Heartbeat'' будет автоматически искать скрипт '''httpd''' в каталоге '''/etc/init.d'''.&lt;br /&gt;
&lt;br /&gt;
После внесения этих изменений в конфигурацию основного и запасного серверов можно снова запустить ''Heartbeat'' на каждом из них:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 /etc/init.d/heartbeat start&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Когда ''Heartbeat'' войдет в нормальный режим работы, нужно кое-что проверить. На основном сервере запустите:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 ip addr show&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
и проверьте, что ''Heartbeat'' назначил второй IP-адрес (в нашем примере &amp;lt;font color=darkred&amp;gt;192.168.0.50&amp;lt;/font&amp;gt;) на наш сетевой интерфейс. Также запустите команду&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 ps -ef | grep httpd&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
которая проверит, что сервис ''httpd'' запущен. На запасной сервер второй IP-адрес не назначается, а сервис ''httpd'' на нем не выполняется.&lt;br /&gt;
&lt;br /&gt;
Теперь пора загрузить третий компьютер, чтобы использовать в качестве клиента. Убедитесь, что он может разрешить имя компьютера, на котором запущен сервис, по его IP-адресу. Для этого я просто добавил строку&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 192.168.0.50 www.example.com&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
в файл '''/etc/hosts'''. Проверьте, пингуется ли адрес &amp;lt;nowiki&amp;gt;&amp;lt;font color=blue&amp;gt;www.example.com&amp;lt;/font&amp;gt;&amp;lt;/nowiki&amp;gt; с компьютера клиента. Откройте в браузере на клиентском компьютере страницу &amp;lt;nowiki&amp;gt;&amp;lt;font color=blue&amp;gt;http://www.example.com&amp;lt;/font&amp;gt;&amp;lt;/nowiki&amp;gt;. Вы должны увидеть файл '''index.html''' основного сервера. На клиенте также можно проверить кэш '''arp''', запустив команду&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 arp -a&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
и обратить внимание на MAC-адрес, связанный с IP-адресом 192.168.0.50. В моем случае результат работы команды был таким:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 www.example.com (192.168.0.50) at 00:0C:F1:96:A3:F7 [ether] on eth0&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Ладно, и как это работает?===&lt;br /&gt;
&lt;br /&gt;
Мы подошли к драматической развязке: демонстрации переноса сервиса на запасной сервер в случае отказа основного. Можно было просто отключить питание основного сервера, как и в предыдущем эксперименте, но на сей раз я избрал более кроткий способ – просто остановил ''Heartbeat'' на основном сервере командой:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 /etc/init.d/heartbeat stop&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Остановившись, ''Heartbeat'' остановит ''httpd'' на основном сервере и проинформирует запасной сервер об отключении основного (через ''Heartbeat''-соединение). Запасной сервер сразу возьмет управление на себя, и в файле его журнала ('''/var/log/messages''') появятся новые сообщения. Два из них наиболее важны (время и другую информацию в начале строки я удалил):&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  Running /etc/init.d/httpd start&lt;br /&gt;
  Registering new address record for 192.168.0.50 on eth0&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
В этом случае все заняло пару секунд. Если бы я просто выдернул из сети шнур питания основного сервера, то на восстановление системы потребовалось бы больше времени: в этом случае перед тем, как сделать вывод об отказе основного сервера и взять управление на себя, запасной сервер ожидал бы ответа 20 секунд (параметр &amp;lt;font color=darkred&amp;gt;deadtime&amp;lt;/font&amp;gt; в файле '''ha.cf''').&lt;br /&gt;
&lt;br /&gt;
На клиентском компьютере следует провести пару важных тестов. Во-первых, попробуйте обновить страницу &amp;lt;nowiki&amp;gt;&amp;lt;font color=blue&amp;gt;www.example.com&amp;lt;/font&amp;gt;&amp;lt;/nowiki&amp;gt; в браузере. Должна появиться страница запасного сервера. Во-вторых, еще раз просмотрите содержимое ARP-кэша. На моем компьютере команда &amp;lt;font color=darkred&amp;gt;arp –a&amp;lt;/font&amp;gt; вернула следующий результат:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  www.example.com (192.168.0.50) at 00:10:60:60:3E:8E [ether] on eth0&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Это означает, что пакеты, предназначенные для адреса &amp;lt;font color=darkred&amp;gt;192.168.0.50&amp;lt;/font&amp;gt;, теперь будут направляться на запасной сервер.&lt;br /&gt;
&lt;br /&gt;
{{Врезка&lt;br /&gt;
    |Заголовок=Дополнительная информация&lt;br /&gt;
    |Содержание=Побольше узнать о ''heartbeat'' можно в документации '''/usr/share/doc/heartbeat''' (каталог зависит от конкретного дистрибутива), в частности, в  файле '''GettingStarted'''. На сайте Linux HA также есть руководства и документация. Рекомендую вам прекрасную книжку “Linux Enterprise Cluster: Build a Highly Available    Cluster   with Commodity Hardware and Free Software” (No Starch Press, ISBN 1-59327-036-4).&lt;br /&gt;
    |Ширина=200px}}&lt;br /&gt;
&lt;br /&gt;
А что же дальше? Ну, наверное, со временем кто-то доберется до основного сервера, починит его и перезапустит. Когда ''Heartbeat'' перезапускается, он сообщает об этом запасному серверу через ''Heartbeat''-соединение. В журнале запасного сервера появятся такие строки:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  Heartbeat restart on node primary.example.com&lt;br /&gt;
  Releasing resource group: primary.example.com httpd&lt;br /&gt;
  Running /etc/init.d/httpd stop&lt;br /&gt;
  Withdrawing address record for 192.168.0.50 on eth0&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Они означают, что запасной сервер освободил ресурсы и разрешил основному забрать их.&lt;br /&gt;
&lt;br /&gt;
Если у вас хватило духу дочитать до конца, поздравляю! Вы создали отказоустойчивый кластер в Linux и можете начать делать на этом деньги в реальном мире! Однако прежде чем пойти на собеседование в Google, NASA или даже Krazy Ken’s 24x7 Liquorice Emporium, быть может, вы захотите узнать о некоторых вопросах подробнее.&lt;br /&gt;
&lt;br /&gt;
Один из них – это концепция «ограждения» (fencing). Когда запасной сервер перенимает ресурсы основного, нужно как-то гарантировать, чтобы основной сервер не попытался снова предоставить эти сервисы. ''Heartbeat'' может использовать для этого механизм STONITH (“shoot the other node in the head” – «контрольный выстрел в голову»), если вы купите устройство, программно отключающее питание компьютера. Второй вопрос – как синхронизировать содержимое двух web-серверов. В нашем примере мы умышленно сделали его разным, но на практике может потребоваться какое-то средство синхронизации их содержимого (''rsync'' или ''unison''). '''LXF'''&lt;br /&gt;
&lt;br /&gt;
[[Категория:Учебники]]&lt;br /&gt;
[[Категория:Hardcore Linux]]&lt;br /&gt;
[[Категория:Крис Браун]]&lt;/div&gt;</summary>
		<author><name>Kipruss</name></author>	</entry>

	<entry>
		<id>http://wiki.linuxformat.ru/wiki/LXF100-101:Hardcore_Linux</id>
		<title>LXF100-101:Hardcore Linux</title>
		<link rel="alternate" type="text/html" href="http://wiki.linuxformat.ru/wiki/LXF100-101:Hardcore_Linux"/>
				<updated>2009-03-06T23:26:03Z</updated>
		
		<summary type="html">&lt;p&gt;Kipruss: /* Три файла конфигурации */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Кластеры: Повышаем отказоустойчивость.==&lt;br /&gt;
&lt;br /&gt;
Отказоустойчивость – то свойство, которое помогает кластеру пережить сбой электропитания и другие бедствия. '''Д-р Крис Браун''' покажет, как удержаться на плаву.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Журналы доступа к моей web-странице – не самое захватывающее чтиво. Если исключить случайные вторжения роботов поисковых систем, посетители заходят на сайт не чаще раза в неделю. Честно говоря, если сайт упадет, это заметят разве что через несколько месяцев. Даже грустно. Другая крайность – коммерческие web-сайты, приносящие владельцам ежедневный доход: несколько минут простоя такого сайта выливаются в ощутимые убытки для компании. На данном уроке я расскажу, как создать в Linux отказоустойчивый кластер. В случае краха основного сервера система автоматически переключается на запасной, а снаружи кластер выглядит как один очень надежный сервер. Нам поможет открытая программа ''Heartbeat'', найти которую можно на сайте www.linuxha.org. Кластер мы построим из двух компьютеров (основной и запасной сервер). ''Heartbeat'' будет отвечать за обнаружение отказа основного сервера и управлять запуском нужного нам сервиса на запасном. Мы воспользуемся сервисом ''Apache (httpd)'', но эта технология подойдет и для любого другого сервиса: FTP, DNS или почтового. В общем, все будет работать примерно так:&lt;br /&gt;
&lt;br /&gt;
# В обычном режиме необходимые сервисы (типа ''httpd'') предоставляются основным сервером.&lt;br /&gt;
# Основной и запасной серверы постоянно обмениваются друг с другом сообщениями ''Heartbeat'' [англ. пульс], которые говорят запасному серверу, что с основным все в порядке.&lt;br /&gt;
# Если запасной сервер не получает сообщения, он перенимает ресурсы основного сервера (например, запускает собственную копию сервера ''httpd'').&lt;br /&gt;
# Запасной сервер перенимает IP-адрес, по которому предоставлялся сервис на основном сервере.&lt;br /&gt;
&lt;br /&gt;
===Начинаем: компоненты системы===&lt;br /&gt;
&lt;br /&gt;
Если вы намерены двинуться дальше и попробовать все на практике, то вам понадобятся три компьютера – основной сервер, запасной сервер и клиент, с помощью которого мы сможем проверить, как все работает.&lt;br /&gt;
&lt;br /&gt;
На основном и запасном серверах должен быть установлен Linux, на клиенте – необязательно (хотя под Linux в вашем распоряжении окажутся лучшие средства диагностики). Компьютеры должны быть подключены к сети Ethernet. Для обмена сигналами ''Heartbeat'' на основном и запасном серверах должна быть вторая сетевая карта. Эти карты нужно соединить друг с другом либо перекрестным (crossover) кабелем, либо через мини-хаб. Если на обоих компьютерах есть последовательный порт, то вместо второго Ethernet-подключения можно соединить их последовательные порты перекрестным кабелем, по которому будет производиться обмен сигналами. Общая схема показана на [[:Изображение:Img_100_87_1.png|Рис. 1]].&lt;br /&gt;
&lt;br /&gt;
===Установка heartbeat-соединения===&lt;br /&gt;
&lt;br /&gt;
Если обмен сигналами ''Heartbeat'' будет осуществляться через Ethernet, соединить сетевые карты друг с другом можно двумя способами: либо через перекрестный кабель RJ45, либо парой обычных кабелей через мини-хаб. Первый вариант лучше, потому что здесь нечему выходить из строя. Каждой из карт нужно назначить статический IP-адрес, причем выбранный из частного диапазона, ни один адрес из которого не используется во внутренней сети. Например, первой карте можно назначить адрес 10.0.0.1, второй – 10.0.0.2. Убедитесь, что компьютеры могут достучаться друг до друга [ping].&lt;br /&gt;
&lt;br /&gt;
Также можно использовать и соединение через последовательный порт. Тогда нам потребуется последовательный перекрестный кабель. На обоих концах этого кабеля, который еще называют нуль-модемным, имеется 9-контактный разъем типа «мама». Кабелем нужно соединить последовательные порты компьютеров. (Последовательные порты и кабели сейчас используются редко, и если на ваших компьютерах их нет, проще пойти и купить вторую сетевую карту для соединения по Ethernet.)&lt;br /&gt;
&lt;br /&gt;
Чтобы проверить соединение через последовательные порты, выполните на основном сервере команду:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 cat /dev/ttyS0&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
а на запасном – команду:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 cat /etc/fstab &amp;gt; /dev/ttyS0&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
На основном сервере должно отображаться содержимое файла. Повторите эксперимент в обратном направлении.&lt;br /&gt;
&lt;br /&gt;
''Heartbeat'' будет прекрасно работать с соединением любого типа. Преимущество Ethernet-соединения – трафик ''Heartbeat'' в этом случае можно отслеживать с помощью одной из утилит для отслеживания пакетов (например, wireshark). Можно даже использовать одновременно оба соединения, что позволит обойтись без ненужных откатов, если только одно из них выйдет из строя.&lt;br /&gt;
&lt;br /&gt;
[[Изображение:Img_100_87_1.png|thumb|Рис. 1: Общая схема проекта; обратите внимание на IP-адреса.]]&lt;br /&gt;
&lt;br /&gt;
===Настройка сетевых интерфейсов===&lt;br /&gt;
&lt;br /&gt;
Оба сетевых интерфейса, которые участвуют в ''Heartbeat''-соединении, должны быть настроены на статические IP-адреса, так как DHCP-сервера в этой «сети» точно нет. Статические адреса должны быть и на основных интерфейсах, которые используются для подключения к основному и запасному серверам. Обратите внимание, что это НЕ те адреса, на которых предоставляется сервис. ''Heartbeat'' назначит сетевой карте исправного компьютера второй IP-адрес, и именно он будет использоваться клиентами для доступа к ресурсу.&lt;br /&gt;
&lt;br /&gt;
===Три файла конфигурации===&lt;br /&gt;
&lt;br /&gt;
Сразу после установки Heartbeat нужно создать в каталоге '''/etc/ha.d''' три (да, три!) файла конфигурации, а именно:&lt;br /&gt;
&lt;br /&gt;
* '''ha.cf''' Файл содержит настройки самого ''Heartbeat''; в нем определяются используемые программой пути и устанавливаются некоторые временные параметры.&lt;br /&gt;
* '''haresources''' Этот файл определяет ресурсы (сервисы), которыми будет управлять Heartbeat, и основной сервер для каждого из этих ресурсов.&lt;br /&gt;
* '''authkey''' В этом файле задается пароль и метод шифрования, используемый для аутентификации Heartbeat-сообщений.&lt;br /&gt;
&lt;br /&gt;
Начнем с '''ha.cf'''. Пример этого файла можно найти в документации на ''Heartbeat'' ('''/usr/share/doc/heartbeat/ha.cf'''). Это один из файлов типа «визгу много, проку мало», которые целиком состоят из документации и закомментированных примеров. Можно скопировать его в '''/etc/ha.d''' и использовать как отправную точку, или создать свой файл с нуля.&lt;br /&gt;
&lt;br /&gt;
{{Врезка&lt;br /&gt;
    |Заголовок=Ошибка!&lt;br /&gt;
    |Содержание=В этой статье мы не говорим о том, как предотвратить неисправности других типов, например, те, что возникают в инфраструктуре самого интернета. В частности, мы не говорим о создании дополнительных информационных каналов для связи с сайтом. Впрочем, это не так уж и важно, потому что врожденная гибкость архитектуры интернета позволяет поглощать частные сбои. Часто даже говорят, что сеть ARPANET (предшественник интернета) разрабатывалась с таким расчетом, чтобы выдержать взрыв атомной бомбы. ARPANET и правда должна была справляться с утратой части сети, но главная причина была в том, что коммутация узлов сети и связей внутри нее была не особенно надежной, даже и без атомной бомбы.&lt;br /&gt;
    |Ширина=200px}}&lt;br /&gt;
&lt;br /&gt;
Вот минимальный вариант этого файла. Номера строк даны только для удобства ссылок, в самом файле их нет:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 1. udpport 694&lt;br /&gt;
 2. bcast eth1&lt;br /&gt;
 3. serial /dev/ttyS0&lt;br /&gt;
 4. baud 9600&lt;br /&gt;
 5. keepalive 2&lt;br /&gt;
 6. deadtime 20&lt;br /&gt;
 7. initdead 60&lt;br /&gt;
 8. node primary.example.com&lt;br /&gt;
 9. node backup.example.com&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Строки &amp;lt;font color=darkred&amp;gt;1&amp;lt;/font&amp;gt; и &amp;lt;font color=darkred&amp;gt;2&amp;lt;/font&amp;gt; задают номер порта и сетевой интерфейс, используемые для Heartbeat-соединения. Для соединения через последовательные порты в строках &amp;lt;font color=darkred&amp;gt;3&amp;lt;/font&amp;gt; и &amp;lt;font color=darkred&amp;gt;3&amp;lt;/font&amp;gt; задается порт и скорость соединения. Можно (и рекомендуется) использовать оба типа, но у меня было только соединение через последовательные порты, и я закомментировал строки &amp;lt;font color=darkred&amp;gt;1&amp;lt;/font&amp;gt; и &amp;lt;font color=darkred&amp;gt;2&amp;lt;/font&amp;gt;. В строке &amp;lt;font color=darkred&amp;gt;5&amp;lt;/font&amp;gt; задается тайм-аут между сообщениями, а строка &amp;lt;font color=darkred&amp;gt;6&amp;lt;/font&amp;gt; определяет время, по истечении которого, не дождавшись очередного сообщения от основного сервера, запасной сочтет его покойником. В строке &amp;lt;font color=darkred&amp;gt;7&amp;lt;/font&amp;gt; указывается время, необходимое для активации сетевого интерфейса после включения компьютера, после чего ''Heartbeat'' начинает функционировать. В строках &amp;lt;font color=darkred&amp;gt;8&amp;lt;/font&amp;gt; и &amp;lt;font color=darkred&amp;gt;9&amp;lt;/font&amp;gt; задаются имена хостов для основного и запасного серверов (те, что возвращает команда &amp;lt;font color=darkred&amp;gt;uname -n&amp;lt;/font&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
Для начала попробуем управлять полностью фиктивным сервисом '''tester'''. Мы напишем скрипт, '''/etc/ha.d/resources.d/tester''', вызываемый ''Heartbeat''. Он будет всего лишь вызывать команду &amp;lt;font color=darkred&amp;gt;logger&amp;lt;/font&amp;gt;, которая сообщит нам (через ''syslogd''), что скрипт был запущен. Вот как он выглядит:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  #!/bin/bash&lt;br /&gt;
  logger $0 called with argument $1&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Скрипт нужно сделать исполняемым, например, так:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  chmod 755 tester&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
В следующем файле, ''haresources'', содержится список ресурсов, которыми управляет ''Heartbeat''. Когда компьютер выходит из строя, эти ресурсы перемещаются с одного узла сети на другой. (попробуйте произносить это как “ha-resources”, а не “hare-sauces” &amp;lt;font color=blue&amp;gt;[англ. hare – заяц, source – источник, sauce – соус, – прим. ред.]&amp;lt;/font&amp;gt;. По правде говоря, я сроду не ел зайчатины, но первым делом подумал о кролике и решил, что подойдет клюквенный соус.) Опять же, пример этого файла можно найти в документации ('''/usr/share/doc/Heartbeat''') – можете просто скопировать его в '''/etc/ha.d''' или создать свой собственный файл с нуля. Для нашего первого теста в этом файле должна быть всего одна строка:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  primary.example.com tester&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Также нужно создать файл '''/etc/ha.d/authkeys''', содержащий ключи, используемые для аутентификации ''Heartbeat''-сообщений, например:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  auth1&lt;br /&gt;
  1 sha1 foobar&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Нужно позаботиться, чтобы читать этот файл мог только администратор:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  chmod 600 authkeys&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Если права доступа к этому файлу есть у кого-то еще, ''Heartbeat'' не запустится.&lt;br /&gt;
&lt;br /&gt;
Скопируйте эти четыре файла с основного сервера на запасной в соответствующие каталоги. Файл '''ha.cf''', возможно, придется подправить в зависимости от аппаратного обеспечения компьютера, а остальные файлы должны быть одинаковыми на обоих компьютерах.&lt;br /&gt;
&lt;br /&gt;
Теперь можно запустить ''Heartbeat''. Для отслеживания сообщений ''Heartbeat'' на обоих компьютерах запустите &amp;lt;font color=darkred&amp;gt;tail -f&amp;lt;/font&amp;gt; для файла журнала ('''/var/log/messages'''). Запустите программу с помощью команды:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  /etc/init.d/heartbeat start&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Врезка&lt;br /&gt;
    |Заголовок=Украденная личность&lt;br /&gt;
    |Содержание=Перенос IP-адреса на другой компьютер – компьютерный эквивалент «воровства личности»: вы притворяетесь кем-то другим, а потом убеждаете весь мир, что вы настоящий. В процессе переноса системы на запасной сервер обязано произойти следующее. Во-первых, основной сервер должен отдать IP-адрес. Если он загорелся или нашел другую кончину, это произойдет по умолчанию, но если heartbeat останавливается на другом (исправном) сервере, адрес, очевидно, нужно забрать назад. Другая проблема – обновление записей в ARP-кэше. Доставка сетевого пакета на конкретный компьютер в конечном счете основана на его MAC-адресе – уникальном 48-битном номере, зашитом в каждую сетевую карту. Чтобы определить MAC-адрес компьютера по его IP-адресу, используется протокол ARP (Address Resolution Protocol – протокол разрешения адресов). Записи о соответствии IP-адресов и MAC-адресов обычно хранятся в кэше ARP 10–15 минут. Чтобы принудительно обновить ARP-кэш на других компьютерах, heartbeat рассылает в сеть так называемые «незаконные» [gratuitous] ARP-пакеты с компьютера, перенявшего IP-адрес.&lt;br /&gt;
    |Ширина=200px}}&lt;br /&gt;
&lt;br /&gt;
На обоих компьютерах действия ''Heartbeat'' будут писаться в журнал. На основном сервере среди прочего должно появиться сообщение типа:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  logger: /etc/ha.d/resource.d/tester called with argument start&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Оно означает, что основной сервер, как и ожидалось, запустил сервис '''tester'''.&lt;br /&gt;
&lt;br /&gt;
{{Врезка&lt;br /&gt;
    |Заголовок=Загружаем heartbeat&lt;br /&gt;
    |Содержание=''Heartbeat'' нужно установить и на основном, и на запасном сервере. У меня на обоих компьютерах была установлена CentOS 5 (фактически, RHEL5). Я просто установил ''heartbeat'' вместе с зависимостями (которые включали ''heartbeat-pils'' и ''heartbeat-stonith'') из репозиториев CentOS с помощью ''yum''. Похожие пакеты есть и в репозиториях других дистрибутивов, таких как Ubuntu; в виде пакета RPMs для SUSE/Novell Linux их можно найти на сайте http://www.linux-ha.org/ или загрузить архив с исходными кодами с этого же сайта и скомпилировать программу из них.&lt;br /&gt;
    |Ширина=200px}}&lt;br /&gt;
&lt;br /&gt;
''Heartbeat'' запущен, и мы можем проверить поведение системы в случае отказа. Я просто выдернул шнур электропитания из основного сервера и наблюдал за сообщениями в файле журнала запасного. По истечении заданного времени запасной сервер сообщил об отказе основного и запустил сервис '''tester'''. Вот соответствующие строки журнала:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  heartbeat: [9615]: WARN: node primary.example.com: is dead&lt;br /&gt;
  heartbeat: [9615]: WARN: No STONITH device configured.&lt;br /&gt;
  heartbeat: [9615]: WARN: Shared disks are not protected.&lt;br /&gt;
  heartbeat: [9615]: info: Resources being acquired from primary.example.&lt;br /&gt;
 com.&lt;br /&gt;
  heartbeat: [9615]: info: Link primary.example.com:/dev/ttyS0 dead.&lt;br /&gt;
  heartbeat: [10305]: info: No local resources [/usr/share/heartbeat/&lt;br /&gt;
 ResourceManager listkeys backup.example.com] to acquire.&lt;br /&gt;
  harc[10304]: [10323]: info: Running /etc/ha.d/rc.d/status status&lt;br /&gt;
  mach_down[10329]: [10350]: info: Taking over resource group tester&lt;br /&gt;
 ResourceManager[10351]: [10362]: info: Acquiring resource group:&lt;br /&gt;
 primary.example.com tester&lt;br /&gt;
 logger: /etc/ha.d/resource.d/tester called with argument status&lt;br /&gt;
  ResourceManager[10351]: [10379]: info: Running /etc/ha.d/resource.d/&lt;br /&gt;
 tester start&lt;br /&gt;
  logger: /etc/ha.d/resource.d/tester called with argument start&lt;br /&gt;
  mach_down[10329]: [10384]: info: mach_down takeover complete for&lt;br /&gt;
 node primary.example.com.&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Первая проверка завершилась успешно, и пора поручить ''Heartbeat'' управление полноценным сервисом. Для этого проекта я выбрал httpd. Таким образом, сейчас нам нужно убедиться, что ''Apache'' установлен на обоих компьютерах, и положить в корневой каталог web-сервера какие-нибудь легко распознаваемые файлы. Я просто создал два файла '''/var/www/html/index.html''', по одному для основного и запасного серверов; в файле для основного сервера была строка “This is the website from the primary server”, для запасного – “This is the website from the backup server” («Это сайт с основного/запасного сервера»). На обоих компьютерах запустите ''httpd'':&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  /etc/init.d/httpd start&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
и проверьте, что, открыв в браузере адрес &amp;lt;nowiki&amp;gt;&amp;lt;font color=blue&amp;gt;http://localhost&amp;lt;/font&amp;gt;&amp;lt;/nowiki&amp;gt;, вы видите эти файлы. Теперь остановите ''Apache'' и убедитесь, что он не запустится автоматически при загрузке системы. Воспользуйтесь командами:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  /etc/init.d/httpd stop&lt;br /&gt;
  chkconfig httpd --del&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Это важно, потому что ''Apache'' должен запуститься не во время загрузки, а только если ''Heartbeat'' запустил его.&lt;br /&gt;
&lt;br /&gt;
Теперь нужно изменить файл ''haresources'' так:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  primary.example.com httpd&lt;br /&gt;
  primary.example.com 192.168.0.50&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
В первой строке указывается сервис, которым будет управлять ''Heartbeat'', а во второй – IP-адрес, используемый клиентом для доступа к сервису. При запуске ''Heartbeat'' этот адрес назначается на основной сервер как второй IP-адрес. Если основной сервер откажет, копия ''Heartbeat'', запущенная на запасном сервере, перенесет этот IP-адрес на свой сетевой интерфейс.&lt;br /&gt;
&lt;br /&gt;
Предполагается, что ''Heartbeat'' будет управлять сервисами путем запуска скрипта, указанного в '''haresources''', с аргументами &amp;lt;font color=darkred&amp;gt;start&amp;lt;/font&amp;gt;, &amp;lt;font color=darkred&amp;gt;stop&amp;lt;/font&amp;gt; или &amp;lt;font color=darkred&amp;gt;status&amp;lt;/font&amp;gt;. Конечно, это те самые аргументы скриптов каталога '''/etc/init.d''', что используются для запуска сервисов во время загрузки системы, и, по правде говоря, ''Heartbeat'' будет автоматически искать скрипт '''httpd''' в каталоге '''/etc/init.d'''.&lt;br /&gt;
&lt;br /&gt;
После внесения этих изменений в конфигурацию основного и запасного серверов можно снова запустить ''Heartbeat'' на каждом из них:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 /etc/init.d/heartbeat start&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Когда ''Heartbeat'' войдет в нормальный режим работы, нужно кое-что проверить. На основном сервере запустите:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 ip addr show&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
и проверьте, что ''Heartbeat'' назначил второй IP-адрес (в нашем примере &amp;lt;font color=darkred&amp;gt;192.168.0.50&amp;lt;/font&amp;gt;) на наш сетевой интерфейс. Также запустите команду&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 ps -ef | grep httpd&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
которая проверит, что сервис ''httpd'' запущен. На запасной сервер второй IP-адрес не назначается, а сервис ''httpd'' на нем не выполняется.&lt;br /&gt;
&lt;br /&gt;
Теперь пора загрузить третий компьютер, чтобы использовать в качестве клиента. Убедитесь, что он может разрешить имя компьютера, на котором запущен сервис, по его IP-адресу. Для этого я просто добавил строку&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 192.168.0.50 www.example.com&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
в файл '''/etc/hosts'''. Проверьте, пингуется ли адрес &amp;lt;nowiki&amp;gt;&amp;lt;font color=blue&amp;gt;www.example.com&amp;lt;/font&amp;gt;&amp;lt;/nowiki&amp;gt; с компьютера клиента. Откройте в браузере на клиентском компьютере страницу &amp;lt;nowiki&amp;gt;&amp;lt;font color=blue&amp;gt;http://www.example.com&amp;lt;/font&amp;gt;&amp;lt;/nowiki&amp;gt;. Вы должны увидеть файл '''index.html''' основного сервера. На клиенте также можно проверить кэш '''arp''', запустив команду&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 arp -a&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
и обратить внимание на MAC-адрес, связанный с IP-адресом 192.168.0.50. В моем случае результат работы команды был таким:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 www.example.com (192.168.0.50) at 00:0C:F1:96:A3:F7 [ether] on eth0&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Ладно, и как это работает?===&lt;br /&gt;
&lt;br /&gt;
Мы подошли к драматической развязке: демонстрации переноса сервиса на запасной сервер в случае отказа основного. Можно было просто отключить питание основного сервера, как и в предыдущем эксперименте, но на сей раз я избрал более кроткий способ – просто остановил ''Heartbeat'' на основном сервере командой:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 /etc/init.d/heartbeat stop&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Остановившись, ''Heartbeat'' остановит ''httpd'' на основном сервере и проинформирует запасной сервер об отключении основного (через ''Heartbeat''-соединение). Запасной сервер сразу возьмет управление на себя, и в файле его журнала ('''/var/log/messages''') появятся новые сообщения. Два из них наиболее важны (время и другую информацию в начале строки я удалил):&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  Running /etc/init.d/httpd start&lt;br /&gt;
  Registering new address record for 192.168.0.50 on eth0&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
В этом случае все заняло пару секунд. Если бы я просто выдернул из сети шнур питания основного сервера, то на восстановление системы потребовалось бы больше времени: в этом случае перед тем, как сделать вывод об отказе основного сервера и взять управление на себя, запасной сервер ожидал бы ответа 20 секунд (параметр &amp;lt;font color=darkred&amp;gt;deadtime&amp;lt;/font&amp;gt; в файле '''ha.cf''').&lt;br /&gt;
&lt;br /&gt;
На клиентском компьютере следует провести пару важных тестов. Во-первых, попробуйте обновить страницу &amp;lt;nowiki&amp;gt;&amp;lt;font color=blue&amp;gt;www.example.com&amp;lt;/font&amp;gt;&amp;lt;/nowiki&amp;gt; в браузере. Должна появиться страница запасного сервера. Во-вторых, еще раз просмотрите содержимое ARP-кэша. На моем компьютере команда &amp;lt;font color=darkred&amp;gt;arp –a&amp;lt;/font&amp;gt; вернула следующий результат:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  www.example.com (192.168.0.50) at 00:10:60:60:3E:8E [ether] on eth0&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Это означает, что пакеты, предназначенные для адреса &amp;lt;font color=darkred&amp;gt;192.168.0.50&amp;lt;/font&amp;gt;, теперь будут направляться на запасной сервер.&lt;br /&gt;
&lt;br /&gt;
{{Врезка&lt;br /&gt;
    |Заголовок=Дополнительная информация&lt;br /&gt;
    |Содержание=Побольше узнать о ''heartbeat'' можно в документации '''/usr/share/doc/heartbeat''' (каталог зависит от конкретного дистрибутива), в частности, в  файле '''GettingStarted'''. На сайте Linux HA также есть руководства и документация. Рекомендую вам прекрасную книжку “Linux Enterprise Cluster: Build a Highly Available    Cluster   with Commodity Hardware and Free Software” (No Starch Press, ISBN 1-59327-036-4).&lt;br /&gt;
    |Ширина=200px}}&lt;br /&gt;
&lt;br /&gt;
А что же дальше? Ну, наверное, со временем кто-то доберется до основного сервера, починит его и перезапустит. Когда ''Heartbeat'' перезапускается, он сообщает об этом запасному серверу через ''Heartbeat''-соединение. В журнале запасного сервера появятся такие строки:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  Heartbeat restart on node primary.example.com&lt;br /&gt;
  Releasing resource group: primary.example.com httpd&lt;br /&gt;
  Running /etc/init.d/httpd stop&lt;br /&gt;
  Withdrawing address record for 192.168.0.50 on eth0&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Они означают, что запасной сервер освободил ресурсы и разрешил основному забрать их.&lt;br /&gt;
&lt;br /&gt;
Если у вас хватило духу дочитать до конца, поздравляю! Вы создали отказоустойчивый кластер в Linux и можете начать делать на этом деньги в реальном мире! Однако прежде чем пойти на собеседование в Google, NASA или даже Krazy Ken’s 24x7 Liquorice Emporium, быть может, вы захотите узнать о некоторых вопросах подробнее.&lt;br /&gt;
&lt;br /&gt;
Один из них – это концепция «ограждения» (fencing). Когда запасной сервер перенимает ресурсы основного, нужно как-то гарантировать, чтобы основной сервер не попытался снова предоставить эти сервисы. ''Heartbeat'' может использовать для этого механизм STONITH (“shoot the other node in the head” – «контрольный выстрел в голову»), если вы купите устройство, программно отключающее питание компьютера. Второй вопрос – как синхронизировать содержимое двух web-серверов. В нашем примере мы умышленно сделали его разным, но на практике может потребоваться какое-то средство синхронизации их содержимого (''rsync'' или ''unison''). '''LXF'''&lt;br /&gt;
&lt;br /&gt;
[[Категория:Учебники]]&lt;br /&gt;
[[Категория:Hardcore Linux]]&lt;br /&gt;
[[Категория:Крис Браун]]&lt;/div&gt;</summary>
		<author><name>Kipruss</name></author>	</entry>

	<entry>
		<id>http://wiki.linuxformat.ru/wiki/LXF100-101</id>
		<title>LXF100-101</title>
		<link rel="alternate" type="text/html" href="http://wiki.linuxformat.ru/wiki/LXF100-101"/>
				<updated>2009-03-06T23:23:45Z</updated>
		
		<summary type="html">&lt;p&gt;Kipruss: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=== Учебники ===&lt;br /&gt;
&lt;br /&gt;
* [[LXF100-101:Hardcore Linux|'''Hardcore Linux.''' Кластеры: Повышаем отказоустойчивость.]]&lt;br /&gt;
Отказоустойчивость – то свойство, которое помогает кластеру пережить сбой электропитания и другие бедствия. Д-р Крис Браун покажет, как удержаться на плаву. &lt;br /&gt;
* [[LXF100-101:Ананас|Ананас]]&lt;br /&gt;
Документы и печатные формы&lt;br /&gt;
* Обработка данных&lt;br /&gt;
Введение в R&lt;br /&gt;
&lt;br /&gt;
=== Игросторой ===&lt;br /&gt;
* [[LXF100-101:Стрелялка|Стрелялка за выходные]]&lt;/div&gt;</summary>
		<author><name>Kipruss</name></author>	</entry>

	<entry>
		<id>http://wiki.linuxformat.ru/wiki/LXF101</id>
		<title>LXF101</title>
		<link rel="alternate" type="text/html" href="http://wiki.linuxformat.ru/wiki/LXF101"/>
				<updated>2009-03-06T23:20:46Z</updated>
		
		<summary type="html">&lt;p&gt;Kipruss: Перенаправление на LXF100-101&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#REDIRECT [[LXF100-101]]&lt;/div&gt;</summary>
		<author><name>Kipruss</name></author>	</entry>

	<entry>
		<id>http://wiki.linuxformat.ru/wiki/LXF100</id>
		<title>LXF100</title>
		<link rel="alternate" type="text/html" href="http://wiki.linuxformat.ru/wiki/LXF100"/>
				<updated>2009-03-06T23:20:28Z</updated>
		
		<summary type="html">&lt;p&gt;Kipruss: Перенаправление на LXF100-101&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#REDIRECT [[LXF100-101]]&lt;/div&gt;</summary>
		<author><name>Kipruss</name></author>	</entry>

	<entry>
		<id>http://wiki.linuxformat.ru/wiki/LXF101:Hardcore_Linux</id>
		<title>LXF101:Hardcore Linux</title>
		<link rel="alternate" type="text/html" href="http://wiki.linuxformat.ru/wiki/LXF101:Hardcore_Linux"/>
				<updated>2009-03-06T23:19:08Z</updated>
		
		<summary type="html">&lt;p&gt;Kipruss: Перенаправление на LXF100:Hardcore Linux&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#REDIRECT [[LXF100:Hardcore Linux]]&lt;/div&gt;</summary>
		<author><name>Kipruss</name></author>	</entry>

	<entry>
		<id>http://wiki.linuxformat.ru/wiki/%D0%9E%D0%B1%D1%81%D1%83%D0%B6%D0%B4%D0%B5%D0%BD%D0%B8%D0%B5_%D1%83%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA%D0%B0:Yaleks</id>
		<title>Обсуждение участника:Yaleks</title>
		<link rel="alternate" type="text/html" href="http://wiki.linuxformat.ru/wiki/%D0%9E%D0%B1%D1%81%D1%83%D0%B6%D0%B4%D0%B5%D0%BD%D0%B8%D0%B5_%D1%83%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA%D0%B0:Yaleks"/>
				<updated>2009-03-06T23:12:40Z</updated>
		
		<summary type="html">&lt;p&gt;Kipruss: /* Присоединение к проекту */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Установил расширения Cite, ParserFunctions и SyntaxHighlight - проверяйте --17:21, 11 марта 2008 (MSK)&lt;br /&gt;
&lt;br /&gt;
Вы вчера перенесли статью LXF97:TEX в LXF97:Препринт, но при этом некорректно изменили оглавление номера, оставив в нем ссылку на LXF97:TEX, но удалив при этом ссылку на следующую статью Андрея Боровского. Я ее найти в списке статей не могу. Верните ее пожалуйста на место. --[[Участник:Crazy Rebel|Crazy Rebel]] 08:07, 3 октября 2008 (MSD) &lt;br /&gt;
: Я просто очистил содержимое, сама статья была создана давно. Оглавление сейчас пофиксил. --[[Участник:Yaleks|Yaleks]] 15:07, 4 октября 2008 (MSD)&lt;br /&gt;
&lt;br /&gt;
== Викификация LXF70-77 ==&lt;br /&gt;
До сих пор я занимался викификацией LXF c конца, а Вы с начала. Но теперь, когда остались не завершенными только самые начальные номера, причем в каждом из них уже сделана какая то часть работы, Валентин Синицин посоетовал обратиться непосредственно к Вам, чтобы разделить оставшиеся для викификации статьи. В принципе я могу пойти и другим путем - начиная викификацию 2008 года. Так что давайте решим как будет удобнее. --[[Участник:Crazy Rebel|Crazy Rebel]]&lt;br /&gt;
&lt;br /&gt;
* Вот что осталось (если существующие оглавления полные):&lt;br /&gt;
&amp;lt;nowiki&amp;gt;# &amp;lt;s&amp;gt;[[LXF74-75:Inkscape]] (13 ссылок)&amp;lt;/s&amp;gt;&lt;br /&gt;
# &amp;lt;s&amp;gt;[[LXF71:GIMP]]&amp;lt;/s&amp;gt; (7 ссылок)&lt;br /&gt;
# &amp;lt;s&amp;gt;[[LXF72:GIMP]]&amp;lt;/s&amp;gt; (7 ссылок)&lt;br /&gt;
# &amp;lt;s&amp;gt;[[LXF73:GIMP]]&amp;lt;/s&amp;gt; (7 ссылок)&lt;br /&gt;
# &amp;lt;s&amp;gt;[[LXF73:Сравнение: Электронные фотоальбомы]] (2 ссылки)&amp;lt;/s&amp;gt;&lt;br /&gt;
# &amp;lt;s&amp;gt;[[LXF74-75:Технологии Linux-2006]] (2 ссылки)&amp;lt;/s&amp;gt;&lt;br /&gt;
# &amp;lt;s&amp;gt;[[LXF71:VariCAD 2005]]&amp;lt;/s&amp;gt;&lt;br /&gt;
# &amp;lt;s&amp;gt;[[LXF71:KOffice 1.4]]&amp;lt;/s&amp;gt;&lt;br /&gt;
# &amp;lt;s&amp;gt;[[LXF71:SmoothWall Firewall 4]]&amp;lt;/s&amp;gt;&lt;br /&gt;
# &amp;lt;s&amp;gt;[[LXF71:Amarok 1.3]]&amp;lt;/s&amp;gt;&lt;br /&gt;
# &amp;lt;s&amp;gt;[[LXF71:Спецрепортаж]]&amp;lt;/s&amp;gt;&lt;br /&gt;
# &amp;lt;s&amp;gt;[[LXF71:Настольный Linux]]&amp;lt;/s&amp;gt;&lt;br /&gt;
# &amp;lt;s&amp;gt;[[LXF71:Гонка за лидером]]&amp;lt;/s&amp;gt;&lt;br /&gt;
# &amp;lt;s&amp;gt;[[LXF71:Дневники Linux]]&amp;lt;/s&amp;gt;&lt;br /&gt;
# &amp;lt;s&amp;gt;[[LXF71:Subversion]]&amp;lt;/s&amp;gt;&lt;br /&gt;
# &amp;lt;s&amp;gt;[[LXF77:Realsoft 3D]]&amp;lt;/s&amp;gt;&lt;br /&gt;
# &amp;lt;s&amp;gt;[[LXF72:Советы по ускорению]]&amp;lt;/s&amp;gt;&lt;br /&gt;
# &amp;lt;s&amp;gt;[[LXF76:Азбука записи]]&amp;lt;/s&amp;gt;&lt;br /&gt;
# &amp;lt;s&amp;gt;[[LXF73:Автомонтирование USB]]&amp;lt;/s&amp;gt;&lt;br /&gt;
# &amp;lt;s&amp;gt;[[LXF73:Русификация Debian 3.1]]&amp;lt;/s&amp;gt;&lt;br /&gt;
# &amp;lt;s&amp;gt;[[LXF72:Frequently Asked Questions]]&amp;lt;/s&amp;gt;&lt;br /&gt;
# &amp;lt;s&amp;gt;[[LXF72:Краткая справка]]&amp;lt;/s&amp;gt;&lt;br /&gt;
# &amp;lt;s&amp;gt;[[LXF71:Ответы]]&amp;lt;/s&amp;gt;&lt;br /&gt;
# &amp;lt;s&amp;gt;[[LXF72:Ответы]]&amp;lt;/s&amp;gt;&lt;br /&gt;
# &amp;lt;s&amp;gt;[[LXF73:Ответы]]&amp;lt;/s&amp;gt;&lt;br /&gt;
# &amp;lt;s&amp;gt;[[LXF74-75:Ответы]]&amp;lt;/s&amp;gt;&lt;br /&gt;
# &amp;lt;s&amp;gt;[[LXF77:Ответы]]&amp;lt;/s&amp;gt;&lt;br /&gt;
# &amp;lt;s&amp;gt;[[LXF71:Первые шаги]]&amp;lt;/s&amp;gt;&lt;br /&gt;
# &amp;lt;s&amp;gt;[[LXF72:Первые шаги Печать]]&amp;lt;/s&amp;gt;&lt;br /&gt;
# &amp;lt;s&amp;gt;[[LXF74-75:Первые шаги]]&amp;lt;/s&amp;gt;&lt;br /&gt;
# &amp;lt;s&amp;gt;[[LXF77:Сравнение]]&amp;lt;/s&amp;gt;&lt;br /&gt;
# &amp;lt;s&amp;gt;[[LXF71:Сравнение]]&amp;lt;/s&amp;gt;&lt;br /&gt;
# &amp;lt;s&amp;gt;[[LXF76:Сравнение]]&amp;lt;/s&amp;gt;&lt;br /&gt;
# &amp;lt;s&amp;gt;[[LXF76:Что такое]] GPL V3&amp;lt;/s&amp;gt;&lt;br /&gt;
# &amp;lt;s&amp;gt;[[LXF76:Интервью]] Джереми Элиссон&amp;lt;/s&amp;gt;&lt;br /&gt;
# &amp;lt;s&amp;gt;[[LXF76:Трюки с железом]]&amp;lt;/s&amp;gt;&lt;br /&gt;
# &amp;lt;s&amp;gt;[[LXF76:Интервью2]] Йон фон Течнер&amp;lt;/s&amp;gt;&lt;br /&gt;
# &amp;lt;s&amp;gt;[[LXF76:Dynebolic]]&amp;lt;/s&amp;gt;&lt;br /&gt;
# &amp;lt;s&amp;gt;[[LXF76:MythTV]]&amp;lt;/s&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Большое число из этого уже устарело и представляет лишь исторический интерес. Можно тут &amp;lt;s&amp;gt;отмечать&amp;lt;/s&amp;gt; (&amp;lt;nowiki&amp;gt;&amp;lt;s&amp;gt;...&amp;lt;/s&amp;gt;&amp;lt;/nowiki&amp;gt;) перед викификаций, чтобы не было коллизий. --[[Участник:Yaleks|Yaleks]] 22:45, 3 февраля 2009 (MSK)&lt;br /&gt;
&lt;br /&gt;
* Поздравляю! Позиции в списке закончились.&lt;br /&gt;
** Это да, но мне ещё спецрепортаж доделывать. --[[Участник:Yaleks|Yaleks]] 20:24, 5 марта 2009 (MSK)&lt;br /&gt;
*** Я так сильно подозреваю, что это не единственная проблема, хотя я старался и выверял все номера, но могли гдето и недоделки остаться и статьи спрятаться. Но в общем следует считать, что эта часть завершена. Тем более что спецрепортаж это большая но всего одна статья.--[[Участник:Crazy Rebel|Crazy Rebel]] 10:08, 6 марта 2009 (MSK)&lt;br /&gt;
&lt;br /&gt;
== LXF72 Советы по ускорению ==&lt;br /&gt;
&lt;br /&gt;
А зачем там было делать &amp;quot;LXF72...&amp;quot; загловком? Я тоже так вначале сделал, но мне крайне не понравилось, что советы нумеруются 1.1 ... 1.32 тогда как в моем варианта было 1, 2 .... Ну и еще почему заголовок статьи Вы выделяетя двумя знаками &amp;lt;nowiki&amp;gt;==&amp;lt;/nowiki&amp;gt; ведь можно и одним, тогда каждый вопрос отделяется друг от друго горизонтальной линией.&lt;br /&gt;
:* &amp;lt;nowiki&amp;gt;==&amp;lt;/nowiki&amp;gt; это заголовок 1-ого уровня вики-синтаксиса (= использовать некорректно). И где вы редактируете статьи, что там вставляется какой-то 2-х байтовый пробел? Через OCR что-ли пропускаете? --[[Участник:Yaleks|Yaleks]] 22:15, 26 февраля 2009 (MSK)&lt;br /&gt;
:::* Статьи я копирую из kpdf собственно сразу в окно Firefox, откуда там стали браться неразрывные пробелы я понятия не имею. Возможно такие pdf-ки потому что LXF99 я делал таким же способом но никаких неразрывных пробелов там нет. Или это так работает новый kpdf.&lt;br /&gt;
:::* Проблему решил так - сначала копирую текст в kate там удаляю всю гадость (заменой по тексту) и уже потом вставляю в окно Firefox.&lt;br /&gt;
&lt;br /&gt;
== LXF100 ... ==&lt;br /&gt;
&lt;br /&gt;
В общем то викификация LXF70-99 подходит к концу и Синицын уже спрашивал меня о продолжении работы. Я согласен и как я понимаю Вы тоже. Но у Вас несколько другой подход - викифицировать не номерами, а темами. В приципе я вижу и преимущества и недостатки такого подхода. Ну из перимуществ это то, что пользователь получает информацию которая должна быть для него наиболее интересна, а из недостатков- отдельный номер может быть так до конца и не закончен. Будет осутствовать общий стиль оформлния. В общем я готов на любой подход к викификации. Если мы будем пользоваться Вашим методом то предлагаю делать так чтобы не пересекаться - Заранее оглавления не делаем, кто создает статью, тот ее и викифицирует.&lt;br /&gt;
: Если вы посмотрите на статистику хотя-бы нескольких ресурсов, то поймёте, что удержать и заставить посмотреть хотя-бы 3 страницы очень сложно. Потому иметь законченные и связанные кластеры статей лучше, чем несвязанную подборку из одного номера. Очень мало людей приходят введя адрес первой страницы и читают по-порядку, в основном по ссылкам с других сайтов или поисковых систем. --[[Участник:Yaleks|Yaleks]] 15:24, 1 марта 2009 (MSK)&lt;br /&gt;
:: И всеже я предлагаю сначала закончить LXF71 и только после этого приступать к 100 и далее, а то Синицын мне как то писал что руководство недовольно, что викификация этих номеров не закончена. А в остальном полностью согласен. Предлагаю значит сделать как раз так - кто начал викификацию тот ее и заканчивает. Чтобы нам тут оглавление не составлять.&lt;br /&gt;
&lt;br /&gt;
== Присоединение к проекту ==&lt;br /&gt;
&lt;br /&gt;
Обращаюсь к Yaleks'у, как к координатору: я готов в меру сил помочь в викификации того, что наиболее нужно в настоящее время. Номера 100-106 имеются, скачал по ссылке, которую дал Валентин. Мой почтовый адрес: kipruss_A_mail.ru. После прочтения, думаю, этот раздел можно удалить. :)&lt;br /&gt;
&lt;br /&gt;
* Ну так выбирайте статью, вроде как решили с учебников начать, а то и цикл, вписывайте на соответствующей странице(цах) его название и вперед. Валентин сказал что за оформлением оглавления журанлов он сам проследит, но всетаки постарайтесь как в журнале делать название статьи и аннотацию.--[[Участник:Crazy Rebel|Crazy Rebel]] 10:10, 6 марта 2009 (MSK)&lt;br /&gt;
** Раз с учебников, то беру цикл &amp;quot;Hardcore Linux&amp;quot;. Потом - Django, но этот цикл начинается с мая, по-моему - наверное лучше сделать те, которые продолжаются с прошлого года.--[[Участник:Kipruss|Kipruss]] 23:36, 6 марта 2009 (MSK)&lt;br /&gt;
* Смотрите на оформление существующих статей и делайте по аналогии (также см. [[Информация для авторов]]). Crazy Rebel, осталось расхождение с наименование картинок, я всё-таки предлагаю, чтобы в названии был номер журнала и страницы (возможно выбранный в начале Img не очень логично и лучше перейти к LXF10X_YY_Z.{jpg/png}). --[[Участник:Yaleks|Yaleks]] 11:57, 6 марта 2009 (MSK)&lt;br /&gt;
** Поздно я обратил внимание на это замечание. Ну, ничего страшного, надеюсь. Проба пера: [[LXF100:Hardcore_Linux]]&lt;br /&gt;
** Хорошо. Со следующей статьи начну именовать так. Не думаю что надо что либо переделывать в уже викифицицированных журналах если только качество старых картинок не нравится.--[[Участник:Crazy Rebel|Crazy Rebel]] 16:35, 6 марта 2009 (MSK)&lt;/div&gt;</summary>
		<author><name>Kipruss</name></author>	</entry>

	<entry>
		<id>http://wiki.linuxformat.ru/wiki/LXF100-101:Hardcore_Linux</id>
		<title>LXF100-101:Hardcore Linux</title>
		<link rel="alternate" type="text/html" href="http://wiki.linuxformat.ru/wiki/LXF100-101:Hardcore_Linux"/>
				<updated>2009-03-06T23:08:56Z</updated>
		
		<summary type="html">&lt;p&gt;Kipruss: оформление&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Кластеры: Повышаем отказоустойчивость.==&lt;br /&gt;
&lt;br /&gt;
Отказоустойчивость – то свойство, которое помогает кластеру пережить сбой электропитания и другие бедствия. '''Д-р Крис Браун''' покажет, как удержаться на плаву.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Журналы доступа к моей web-странице – не самое захватывающее чтиво. Если исключить случайные вторжения роботов поисковых систем, посетители заходят на сайт не чаще раза в неделю. Честно говоря, если сайт упадет, это заметят разве что через несколько месяцев. Даже грустно. Другая крайность – коммерческие web-сайты, приносящие владельцам ежедневный доход: несколько минут простоя такого сайта выливаются в ощутимые убытки для компании. На данном уроке я расскажу, как создать в Linux отказоустойчивый кластер. В случае краха основного сервера система автоматически переключается на запасной, а снаружи кластер выглядит как один очень надежный сервер. Нам поможет открытая программа ''Heartbeat'', найти которую можно на сайте www.linuxha.org. Кластер мы построим из двух компьютеров (основной и запасной сервер). ''Heartbeat'' будет отвечать за обнаружение отказа основного сервера и управлять запуском нужного нам сервиса на запасном. Мы воспользуемся сервисом ''Apache (httpd)'', но эта технология подойдет и для любого другого сервиса: FTP, DNS или почтового. В общем, все будет работать примерно так:&lt;br /&gt;
&lt;br /&gt;
# В обычном режиме необходимые сервисы (типа ''httpd'') предоставляются основным сервером.&lt;br /&gt;
# Основной и запасной серверы постоянно обмениваются друг с другом сообщениями ''Heartbeat'' [англ. пульс], которые говорят запасному серверу, что с основным все в порядке.&lt;br /&gt;
# Если запасной сервер не получает сообщения, он перенимает ресурсы основного сервера (например, запускает собственную копию сервера ''httpd'').&lt;br /&gt;
# Запасной сервер перенимает IP-адрес, по которому предоставлялся сервис на основном сервере.&lt;br /&gt;
&lt;br /&gt;
===Начинаем: компоненты системы===&lt;br /&gt;
&lt;br /&gt;
Если вы намерены двинуться дальше и попробовать все на практике, то вам понадобятся три компьютера – основной сервер, запасной сервер и клиент, с помощью которого мы сможем проверить, как все работает.&lt;br /&gt;
&lt;br /&gt;
На основном и запасном серверах должен быть установлен Linux, на клиенте – необязательно (хотя под Linux в вашем распоряжении окажутся лучшие средства диагностики). Компьютеры должны быть подключены к сети Ethernet. Для обмена сигналами ''Heartbeat'' на основном и запасном серверах должна быть вторая сетевая карта. Эти карты нужно соединить друг с другом либо перекрестным (crossover) кабелем, либо через мини-хаб. Если на обоих компьютерах есть последовательный порт, то вместо второго Ethernet-подключения можно соединить их последовательные порты перекрестным кабелем, по которому будет производиться обмен сигналами. Общая схема показана на [[:Изображение:Img_100_87_1.png|Рис. 1]].&lt;br /&gt;
&lt;br /&gt;
===Установка heartbeat-соединения===&lt;br /&gt;
&lt;br /&gt;
Если обмен сигналами ''Heartbeat'' будет осуществляться через Ethernet, соединить сетевые карты друг с другом можно двумя способами: либо через перекрестный кабель RJ45, либо парой обычных кабелей через мини-хаб. Первый вариант лучше, потому что здесь нечему выходить из строя. Каждой из карт нужно назначить статический IP-адрес, причем выбранный из частного диапазона, ни один адрес из которого не используется во внутренней сети. Например, первой карте можно назначить адрес 10.0.0.1, второй – 10.0.0.2. Убедитесь, что компьютеры могут достучаться друг до друга [ping].&lt;br /&gt;
&lt;br /&gt;
Также можно использовать и соединение через последовательный порт. Тогда нам потребуется последовательный перекрестный кабель. На обоих концах этого кабеля, который еще называют нуль-модемным, имеется 9-контактный разъем типа «мама». Кабелем нужно соединить последовательные порты компьютеров. (Последовательные порты и кабели сейчас используются редко, и если на ваших компьютерах их нет, проще пойти и купить вторую сетевую карту для соединения по Ethernet.)&lt;br /&gt;
&lt;br /&gt;
Чтобы проверить соединение через последовательные порты, выполните на основном сервере команду:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 cat /dev/ttyS0&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
а на запасном – команду:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 cat /etc/fstab &amp;gt; /dev/ttyS0&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
На основном сервере должно отображаться содержимое файла. Повторите эксперимент в обратном направлении.&lt;br /&gt;
&lt;br /&gt;
''Heartbeat'' будет прекрасно работать с соединением любого типа. Преимущество Ethernet-соединения – трафик ''Heartbeat'' в этом случае можно отслеживать с помощью одной из утилит для отслеживания пакетов (например, wireshark). Можно даже использовать одновременно оба соединения, что позволит обойтись без ненужных откатов, если только одно из них выйдет из строя.&lt;br /&gt;
&lt;br /&gt;
[[Изображение:Img_100_87_1.png|thumb|Рис. 1: Общая схема проекта; обратите внимание на IP-адреса.]]&lt;br /&gt;
&lt;br /&gt;
===Настройка сетевых интерфейсов===&lt;br /&gt;
&lt;br /&gt;
Оба сетевых интерфейса, которые участвуют в ''Heartbeat''-соединении, должны быть настроены на статические IP-адреса, так как DHCP-сервера в этой «сети» точно нет. Статические адреса должны быть и на основных интерфейсах, которые используются для подключения к основному и запасному серверам. Обратите внимание, что это НЕ те адреса, на которых предоставляется сервис. ''Heartbeat'' назначит сетевой карте исправного компьютера второй IP-адрес, и именно он будет использоваться клиентами для доступа к ресурсу.&lt;br /&gt;
&lt;br /&gt;
===Три файла конфигурации===&lt;br /&gt;
&lt;br /&gt;
Сразу после установки Heartbeat нужно создать в каталоге '''/etc/ha.d''' три (да, три!) файла конфигурации, а именно:&lt;br /&gt;
&lt;br /&gt;
* '''ha.cf''' Файл содержит настройки самого ''Heartbeat''; в нем определяются используемые программой пути и устанавливаются некоторые временные параметры.&lt;br /&gt;
* '''haresources''' Этот файл определяет ресурсы (сервисы), которыми будет управлять Heartbeat, и основной сервер для каждого из этих ресурсов.&lt;br /&gt;
* '''authkey''' В этом файле задается пароль и метод шифрования, используемый для аутентификации Heartbeat-сообщений.&lt;br /&gt;
&lt;br /&gt;
Начнем с '''ha.cf'''. Пример этого файла можно найти в документации на ''Heartbeat'' ('''/usr/share/doc/heartbeat/ha.cf'''). Это один из файлов типа «визгу много, проку мало», которые целиком состоят из документации и закомментированных примеров. Можно скопировать его в '''/etc/ha.d''' и использовать как отправную точку, или создать свой файл с нуля.&lt;br /&gt;
&lt;br /&gt;
{{Врезка&lt;br /&gt;
    |Заголовок=Ошибка!&lt;br /&gt;
    |Содержание=В этой статье мы не говорим о том, как предотвратить неисправности других типов, например, те, что возникают в инфраструктуре самого интернета. В частности, мы не говорим о создании дополнительных информационных каналов для связи с сайтом. Впрочем, это не так уж и важно, потому что врожденная гибкость архитектуры интернета позволяет поглощать частные сбои. Часто даже говорят, что сеть ARPANET (предшественник интернета) разрабатывалась с таким расчетом, чтобы выдержать взрыв атомной бомбы. ARPANET и правда должна была справляться с утратой части сети, но главная причина была в том, что коммутация узлов сети и связей внутри нее была не особенно надежной, даже и без атомной бомбы.&lt;br /&gt;
    |Ширина=200px}}&lt;br /&gt;
&lt;br /&gt;
Вот минимальный вариант этого файла. Номера строк даны только для удобства ссылок, в самом файле их нет:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 1. udpport 694&lt;br /&gt;
 2. bcast eth1&lt;br /&gt;
 3. serial /dev/ttyS0&lt;br /&gt;
 4. baud 9600&lt;br /&gt;
 5. keepalive 2&lt;br /&gt;
 6. deadtime 20&lt;br /&gt;
 7. initdead 60&lt;br /&gt;
 8. node primary.example.com&lt;br /&gt;
 9. node backup.example.com&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Строки &amp;lt;font color=darkred&amp;gt;1&amp;lt;/font&amp;gt; и &amp;lt;font color=darkred&amp;gt;2&amp;lt;/font&amp;gt; задают номер порта и сетевой интерфейс, используемые для Heartbeat-соединения. Для соединения через последовательные порты в строках &amp;lt;font color=darkred&amp;gt;3&amp;lt;/font&amp;gt; и &amp;lt;font color=darkred&amp;gt;3&amp;lt;/font&amp;gt; задается порт и скорость соединения. Можно (и рекомендуется) использовать оба типа, но у меня было только соединение через последовательные порты, и я закомментировал строки &amp;lt;font color=darkred&amp;gt;1&amp;lt;/font&amp;gt; и &amp;lt;font color=darkred&amp;gt;2&amp;lt;/font&amp;gt;. В строке &amp;lt;font color=darkred&amp;gt;5&amp;lt;/font&amp;gt; задается тайм-аут между сообщениями, а строка &amp;lt;font color=darkred&amp;gt;6&amp;lt;/font&amp;gt; определяет время, по истечении которого, не дождавшись очередного сообщения от основного сервера, запасной сочтет его покойником. В строке &amp;lt;font color=darkred&amp;gt;7&amp;lt;/font&amp;gt; указывается время, необходимое для активации сетевого интерфейса после включения компьютера, после чего ''Heartbeat'' начинает функционировать. В строках &amp;lt;font color=darkred&amp;gt;9&amp;lt;/font&amp;gt; и &amp;lt;font color=darkred&amp;gt;9&amp;lt;/font&amp;gt; задаются имена хостов для основного и запасного серверов (те, что возвращает команда &amp;lt;font color=darkred&amp;gt;uname -n&amp;lt;/font&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
Для начала попробуем управлять полностью фиктивным сервисом '''tester'''. Мы напишем скрипт, '''/etc/ha.d/resources.d/tester''', вызываемый ''Heartbeat''. Он будет всего лишь вызывать команду &amp;lt;font color=darkred&amp;gt;logger&amp;lt;/font&amp;gt;, которая сообщит нам (через ''syslogd''), что скрипт был запущен. Вот как он выглядит:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  #!/bin/bash&lt;br /&gt;
  logger $0 called with argument $1&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Скрипт нужно сделать исполняемым, например, так:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  chmod 755 tester&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
В следующем файле, ''haresources'', содержится список ресурсов, которыми управляет ''Heartbeat''. Когда компьютер выходит из строя, эти ресурсы перемещаются с одного узла сети на другой. (попробуйте произносить это как “ha-resources”, а не “hare-sauces” &amp;lt;font color=blue&amp;gt;[англ. hare – заяц, source – источник, sauce – соус, – прим. ред.]&amp;lt;/font&amp;gt;. По правде говоря, я сроду не ел зайчатины, но первым делом подумал о кролике и решил, что подойдет клюквенный соус.) Опять же, пример этого файла можно найти в документации ('''/usr/share/doc/Heartbeat''') – можете просто скопировать его в '''/etc/ha.d''' или создать свой собственный файл с нуля. Для нашего первого теста в этом файле должна быть всего одна строка:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  primary.example.com tester&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Также нужно создать файл '''/etc/ha.d/authkeys''', содержащий ключи, используемые для аутентификации ''Heartbeat''-сообщений, например:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  auth1&lt;br /&gt;
  1 sha1 foobar&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Нужно позаботиться, чтобы читать этот файл мог только администратор:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  chmod 600 authkeys&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Если права доступа к этому файлу есть у кого-то еще, ''Heartbeat'' не запустится.&lt;br /&gt;
&lt;br /&gt;
Скопируйте эти четыре файла с основного сервера на запасной в соответствующие каталоги. Файл '''ha.cf''', возможно, придется подправить в зависимости от аппаратного обеспечения компьютера, а остальные файлы должны быть одинаковыми на обоих компьютерах.&lt;br /&gt;
&lt;br /&gt;
Теперь можно запустить ''Heartbeat''. Для отслеживания сообщений ''Heartbeat'' на обоих компьютерах запустите &amp;lt;font color=darkred&amp;gt;tail -f&amp;lt;/font&amp;gt; для файла журнала ('''/var/log/messages'''). Запустите программу с помощью команды:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  /etc/init.d/heartbeat start&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Врезка&lt;br /&gt;
    |Заголовок=Украденная личность&lt;br /&gt;
    |Содержание=Перенос IP-адреса на другой компьютер – компьютерный эквивалент «воровства личности»: вы притворяетесь кем-то другим, а потом убеждаете весь мир, что вы настоящий. В процессе переноса системы на запасной сервер обязано произойти следующее. Во-первых, основной сервер должен отдать IP-адрес. Если он загорелся или нашел другую кончину, это произойдет по умолчанию, но если heartbeat останавливается на другом (исправном) сервере, адрес, очевидно, нужно забрать назад. Другая проблема – обновление записей в ARP-кэше. Доставка сетевого пакета на конкретный компьютер в конечном счете основана на его MAC-адресе – уникальном 48-битном номере, зашитом в каждую сетевую карту. Чтобы определить MAC-адрес компьютера по его IP-адресу, используется протокол ARP (Address Resolution Protocol – протокол разрешения адресов). Записи о соответствии IP-адресов и MAC-адресов обычно хранятся в кэше ARP 10–15 минут. Чтобы принудительно обновить ARP-кэш на других компьютерах, heartbeat рассылает в сеть так называемые «незаконные» [gratuitous] ARP-пакеты с компьютера, перенявшего IP-адрес.&lt;br /&gt;
    |Ширина=200px}}&lt;br /&gt;
&lt;br /&gt;
На обоих компьютерах действия ''Heartbeat'' будут писаться в журнал. На основном сервере среди прочего должно появиться сообщение типа:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  logger: /etc/ha.d/resource.d/tester called with argument start&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Оно означает, что основной сервер, как и ожидалось, запустил сервис '''tester'''.&lt;br /&gt;
&lt;br /&gt;
{{Врезка&lt;br /&gt;
    |Заголовок=Загружаем heartbeat&lt;br /&gt;
    |Содержание=''Heartbeat'' нужно установить и на основном, и на запасном сервере. У меня на обоих компьютерах была установлена CentOS 5 (фактически, RHEL5). Я просто установил ''heartbeat'' вместе с зависимостями (которые включали ''heartbeat-pils'' и ''heartbeat-stonith'') из репозиториев CentOS с помощью ''yum''. Похожие пакеты есть и в репозиториях других дистрибутивов, таких как Ubuntu; в виде пакета RPMs для SUSE/Novell Linux их можно найти на сайте http://www.linux-ha.org/ или загрузить архив с исходными кодами с этого же сайта и скомпилировать программу из них.&lt;br /&gt;
    |Ширина=200px}}&lt;br /&gt;
&lt;br /&gt;
''Heartbeat'' запущен, и мы можем проверить поведение системы в случае отказа. Я просто выдернул шнур электропитания из основного сервера и наблюдал за сообщениями в файле журнала запасного. По истечении заданного времени запасной сервер сообщил об отказе основного и запустил сервис '''tester'''. Вот соответствующие строки журнала:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  heartbeat: [9615]: WARN: node primary.example.com: is dead&lt;br /&gt;
  heartbeat: [9615]: WARN: No STONITH device configured.&lt;br /&gt;
  heartbeat: [9615]: WARN: Shared disks are not protected.&lt;br /&gt;
  heartbeat: [9615]: info: Resources being acquired from primary.example.&lt;br /&gt;
 com.&lt;br /&gt;
  heartbeat: [9615]: info: Link primary.example.com:/dev/ttyS0 dead.&lt;br /&gt;
  heartbeat: [10305]: info: No local resources [/usr/share/heartbeat/&lt;br /&gt;
 ResourceManager listkeys backup.example.com] to acquire.&lt;br /&gt;
  harc[10304]: [10323]: info: Running /etc/ha.d/rc.d/status status&lt;br /&gt;
  mach_down[10329]: [10350]: info: Taking over resource group tester&lt;br /&gt;
 ResourceManager[10351]: [10362]: info: Acquiring resource group:&lt;br /&gt;
 primary.example.com tester&lt;br /&gt;
 logger: /etc/ha.d/resource.d/tester called with argument status&lt;br /&gt;
  ResourceManager[10351]: [10379]: info: Running /etc/ha.d/resource.d/&lt;br /&gt;
 tester start&lt;br /&gt;
  logger: /etc/ha.d/resource.d/tester called with argument start&lt;br /&gt;
  mach_down[10329]: [10384]: info: mach_down takeover complete for&lt;br /&gt;
 node primary.example.com.&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Первая проверка завершилась успешно, и пора поручить ''Heartbeat'' управление полноценным сервисом. Для этого проекта я выбрал httpd. Таким образом, сейчас нам нужно убедиться, что ''Apache'' установлен на обоих компьютерах, и положить в корневой каталог web-сервера какие-нибудь легко распознаваемые файлы. Я просто создал два файла '''/var/www/html/index.html''', по одному для основного и запасного серверов; в файле для основного сервера была строка “This is the website from the primary server”, для запасного – “This is the website from the backup server” («Это сайт с основного/запасного сервера»). На обоих компьютерах запустите ''httpd'':&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  /etc/init.d/httpd start&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
и проверьте, что, открыв в браузере адрес &amp;lt;nowiki&amp;gt;&amp;lt;font color=blue&amp;gt;http://localhost&amp;lt;/font&amp;gt;&amp;lt;/nowiki&amp;gt;, вы видите эти файлы. Теперь остановите ''Apache'' и убедитесь, что он не запустится автоматически при загрузке системы. Воспользуйтесь командами:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  /etc/init.d/httpd stop&lt;br /&gt;
  chkconfig httpd --del&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Это важно, потому что ''Apache'' должен запуститься не во время загрузки, а только если ''Heartbeat'' запустил его.&lt;br /&gt;
&lt;br /&gt;
Теперь нужно изменить файл ''haresources'' так:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  primary.example.com httpd&lt;br /&gt;
  primary.example.com 192.168.0.50&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
В первой строке указывается сервис, которым будет управлять ''Heartbeat'', а во второй – IP-адрес, используемый клиентом для доступа к сервису. При запуске ''Heartbeat'' этот адрес назначается на основной сервер как второй IP-адрес. Если основной сервер откажет, копия ''Heartbeat'', запущенная на запасном сервере, перенесет этот IP-адрес на свой сетевой интерфейс.&lt;br /&gt;
&lt;br /&gt;
Предполагается, что ''Heartbeat'' будет управлять сервисами путем запуска скрипта, указанного в '''haresources''', с аргументами &amp;lt;font color=darkred&amp;gt;start&amp;lt;/font&amp;gt;, &amp;lt;font color=darkred&amp;gt;stop&amp;lt;/font&amp;gt; или &amp;lt;font color=darkred&amp;gt;status&amp;lt;/font&amp;gt;. Конечно, это те самые аргументы скриптов каталога '''/etc/init.d''', что используются для запуска сервисов во время загрузки системы, и, по правде говоря, ''Heartbeat'' будет автоматически искать скрипт '''httpd''' в каталоге '''/etc/init.d'''.&lt;br /&gt;
&lt;br /&gt;
После внесения этих изменений в конфигурацию основного и запасного серверов можно снова запустить ''Heartbeat'' на каждом из них:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 /etc/init.d/heartbeat start&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Когда ''Heartbeat'' войдет в нормальный режим работы, нужно кое-что проверить. На основном сервере запустите:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 ip addr show&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
и проверьте, что ''Heartbeat'' назначил второй IP-адрес (в нашем примере &amp;lt;font color=darkred&amp;gt;192.168.0.50&amp;lt;/font&amp;gt;) на наш сетевой интерфейс. Также запустите команду&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 ps -ef | grep httpd&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
которая проверит, что сервис ''httpd'' запущен. На запасной сервер второй IP-адрес не назначается, а сервис ''httpd'' на нем не выполняется.&lt;br /&gt;
&lt;br /&gt;
Теперь пора загрузить третий компьютер, чтобы использовать в качестве клиента. Убедитесь, что он может разрешить имя компьютера, на котором запущен сервис, по его IP-адресу. Для этого я просто добавил строку&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 192.168.0.50 www.example.com&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
в файл '''/etc/hosts'''. Проверьте, пингуется ли адрес &amp;lt;nowiki&amp;gt;&amp;lt;font color=blue&amp;gt;www.example.com&amp;lt;/font&amp;gt;&amp;lt;/nowiki&amp;gt; с компьютера клиента. Откройте в браузере на клиентском компьютере страницу &amp;lt;nowiki&amp;gt;&amp;lt;font color=blue&amp;gt;http://www.example.com&amp;lt;/font&amp;gt;&amp;lt;/nowiki&amp;gt;. Вы должны увидеть файл '''index.html''' основного сервера. На клиенте также можно проверить кэш '''arp''', запустив команду&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 arp -a&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
и обратить внимание на MAC-адрес, связанный с IP-адресом 192.168.0.50. В моем случае результат работы команды был таким:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 www.example.com (192.168.0.50) at 00:0C:F1:96:A3:F7 [ether] on eth0&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Ладно, и как это работает?===&lt;br /&gt;
&lt;br /&gt;
Мы подошли к драматической развязке: демонстрации переноса сервиса на запасной сервер в случае отказа основного. Можно было просто отключить питание основного сервера, как и в предыдущем эксперименте, но на сей раз я избрал более кроткий способ – просто остановил ''Heartbeat'' на основном сервере командой:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 /etc/init.d/heartbeat stop&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Остановившись, ''Heartbeat'' остановит ''httpd'' на основном сервере и проинформирует запасной сервер об отключении основного (через ''Heartbeat''-соединение). Запасной сервер сразу возьмет управление на себя, и в файле его журнала ('''/var/log/messages''') появятся новые сообщения. Два из них наиболее важны (время и другую информацию в начале строки я удалил):&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  Running /etc/init.d/httpd start&lt;br /&gt;
  Registering new address record for 192.168.0.50 on eth0&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
В этом случае все заняло пару секунд. Если бы я просто выдернул из сети шнур питания основного сервера, то на восстановление системы потребовалось бы больше времени: в этом случае перед тем, как сделать вывод об отказе основного сервера и взять управление на себя, запасной сервер ожидал бы ответа 20 секунд (параметр &amp;lt;font color=darkred&amp;gt;deadtime&amp;lt;/font&amp;gt; в файле '''ha.cf''').&lt;br /&gt;
&lt;br /&gt;
На клиентском компьютере следует провести пару важных тестов. Во-первых, попробуйте обновить страницу &amp;lt;nowiki&amp;gt;&amp;lt;font color=blue&amp;gt;www.example.com&amp;lt;/font&amp;gt;&amp;lt;/nowiki&amp;gt; в браузере. Должна появиться страница запасного сервера. Во-вторых, еще раз просмотрите содержимое ARP-кэша. На моем компьютере команда &amp;lt;font color=darkred&amp;gt;arp –a&amp;lt;/font&amp;gt; вернула следующий результат:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  www.example.com (192.168.0.50) at 00:10:60:60:3E:8E [ether] on eth0&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Это означает, что пакеты, предназначенные для адреса &amp;lt;font color=darkred&amp;gt;192.168.0.50&amp;lt;/font&amp;gt;, теперь будут направляться на запасной сервер.&lt;br /&gt;
&lt;br /&gt;
{{Врезка&lt;br /&gt;
    |Заголовок=Дополнительная информация&lt;br /&gt;
    |Содержание=Побольше узнать о ''heartbeat'' можно в документации '''/usr/share/doc/heartbeat''' (каталог зависит от конкретного дистрибутива), в частности, в  файле '''GettingStarted'''. На сайте Linux HA также есть руководства и документация. Рекомендую вам прекрасную книжку “Linux Enterprise Cluster: Build a Highly Available    Cluster   with Commodity Hardware and Free Software” (No Starch Press, ISBN 1-59327-036-4).&lt;br /&gt;
    |Ширина=200px}}&lt;br /&gt;
&lt;br /&gt;
А что же дальше? Ну, наверное, со временем кто-то доберется до основного сервера, починит его и перезапустит. Когда ''Heartbeat'' перезапускается, он сообщает об этом запасному серверу через ''Heartbeat''-соединение. В журнале запасного сервера появятся такие строки:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  Heartbeat restart on node primary.example.com&lt;br /&gt;
  Releasing resource group: primary.example.com httpd&lt;br /&gt;
  Running /etc/init.d/httpd stop&lt;br /&gt;
  Withdrawing address record for 192.168.0.50 on eth0&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Они означают, что запасной сервер освободил ресурсы и разрешил основному забрать их.&lt;br /&gt;
&lt;br /&gt;
Если у вас хватило духу дочитать до конца, поздравляю! Вы создали отказоустойчивый кластер в Linux и можете начать делать на этом деньги в реальном мире! Однако прежде чем пойти на собеседование в Google, NASA или даже Krazy Ken’s 24x7 Liquorice Emporium, быть может, вы захотите узнать о некоторых вопросах подробнее.&lt;br /&gt;
&lt;br /&gt;
Один из них – это концепция «ограждения» (fencing). Когда запасной сервер перенимает ресурсы основного, нужно как-то гарантировать, чтобы основной сервер не попытался снова предоставить эти сервисы. ''Heartbeat'' может использовать для этого механизм STONITH (“shoot the other node in the head” – «контрольный выстрел в голову»), если вы купите устройство, программно отключающее питание компьютера. Второй вопрос – как синхронизировать содержимое двух web-серверов. В нашем примере мы умышленно сделали его разным, но на практике может потребоваться какое-то средство синхронизации их содержимого (''rsync'' или ''unison''). '''LXF'''&lt;br /&gt;
&lt;br /&gt;
[[Категория:Учебники]]&lt;br /&gt;
[[Категория:Hardcore Linux]]&lt;br /&gt;
[[Категория:Крис Браун]]&lt;/div&gt;</summary>
		<author><name>Kipruss</name></author>	</entry>

	<entry>
		<id>http://wiki.linuxformat.ru/wiki/LXF100-101:Hardcore_Linux</id>
		<title>LXF100-101:Hardcore Linux</title>
		<link rel="alternate" type="text/html" href="http://wiki.linuxformat.ru/wiki/LXF100-101:Hardcore_Linux"/>
				<updated>2009-03-06T23:06:29Z</updated>
		
		<summary type="html">&lt;p&gt;Kipruss: новая статья&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Кластеры: Повышаем отказоустойчивость.==&lt;br /&gt;
&lt;br /&gt;
Отказоустойчивость – то свойство, которое помогает кластеру пережить сбой электропитания и другие бедствия. '''Д-р Крис Браун''' покажет, как удержаться на плаву.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Журналы доступа к моей web-странице – не самое захватывающее чтиво. Если исключить случайные вторжения роботов поисковых систем, посетители заходят на сайт не чаще раза в неделю. Честно говоря, если сайт упадет, это заметят разве что через несколько месяцев. Даже грустно. Другая крайность – коммерческие web-сайты, приносящие владельцам ежедневный доход: несколько минут простоя такого сайта выливаются в ощутимые убытки для компании. На данном уроке я расскажу, как создать в Linux отказоустойчивый кластер. В случае краха основного сервера система автоматически переключается на запасной, а снаружи кластер выглядит как один очень надежный сервер. Нам поможет открытая программа ''Heartbeat'', найти которую можно на сайте www.linuxha.org. Кластер мы построим из двух компьютеров (основной и запасной сервер). ''Heartbeat'' будет отвечать за обнаружение отказа основного сервера и управлять запуском нужного нам сервиса на запасном. Мы воспользуемся сервисом ''Apache (httpd)'', но эта технология подойдет и для любого другого сервиса: FTP, DNS или почтового. В общем, все будет работать примерно так:&lt;br /&gt;
&lt;br /&gt;
# В обычном режиме необходимые сервисы (типа ''httpd'') предоставляются основным сервером.&lt;br /&gt;
# Основной и запасной серверы постоянно обмениваются друг с другом сообщениями ''Heartbeat'' [англ. пульс], которые говорят запасному серверу, что с основным все в порядке.&lt;br /&gt;
# Если запасной сервер не получает сообщения, он перенимает ресурсы основного сервера (например, запускает собственную копию сервера ''httpd'').&lt;br /&gt;
# Запасной сервер перенимает IP-адрес, по которому предоставлялся сервис на основном сервере.&lt;br /&gt;
&lt;br /&gt;
===Начинаем: компоненты системы===&lt;br /&gt;
&lt;br /&gt;
Если вы намерены двинуться дальше и попробовать все на практике, то вам понадобятся три компьютера – основной сервер, запасной сервер и клиент, с помощью которого мы сможем проверить, как все работает.&lt;br /&gt;
&lt;br /&gt;
На основном и запасном серверах должен быть установлен Linux, на клиенте – необязательно (хотя под Linux в вашем распоряжении окажутся лучшие средства диагностики). Компьютеры должны быть подключены к сети Ethernet. Для обмена сигналами ''Heartbeat'' на основном и запасном серверах должна быть вторая сетевая карта. Эти карты нужно соединить друг с другом либо перекрестным (crossover) кабелем, либо через мини-хаб. Если на обоих компьютерах есть последовательный порт, то вместо второго Ethernet-подключения можно соединить их последовательные порты перекрестным кабелем, по которому будет производиться обмен сигналами. Общая схема показана на [[:Изображение:Img_100_87_1.png|Рис. 1]].&lt;br /&gt;
&lt;br /&gt;
===Установка heartbeat-соединения===&lt;br /&gt;
&lt;br /&gt;
Если обмен сигналами ''Heartbeat'' будет осуществляться через Ethernet, соединить сетевые карты друг с другом можно двумя способами: либо через перекрестный кабель RJ45, либо парой обычных кабелей через мини-хаб. Первый вариант лучше, потому что здесь нечему выходить из строя. Каждой из карт нужно назначить статический IP-адрес, причем выбранный из частного диапазона, ни один адрес из которого не используется во внутренней сети. Например, первой карте можно назначить адрес 10.0.0.1, второй – 10.0.0.2. Убедитесь, что компьютеры могут достучаться друг до друга [ping].&lt;br /&gt;
&lt;br /&gt;
Также можно использовать и соединение через последовательный порт. Тогда нам потребуется последовательный перекрестный кабель. На обоих концах этого кабеля, который еще называют нуль-модемным, имеется 9-контактный разъем типа «мама». Кабелем нужно соединить последовательные порты компьютеров. (Последовательные порты и кабели сейчас используются редко, и если на ваших компьютерах их нет, проще пойти и купить вторую сетевую карту для соединения по Ethernet.)&lt;br /&gt;
&lt;br /&gt;
Чтобы проверить соединение через последовательные порты, выполните на основном сервере команду:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 cat /dev/ttyS0&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
а на запасном – команду:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 cat /etc/fstab &amp;gt; /dev/ttyS0&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
На основном сервере должно отображаться содержимое файла. Повторите эксперимент в обратном направлении.&lt;br /&gt;
&lt;br /&gt;
''Heartbeat'' будет прекрасно работать с соединением любого типа. Преимущество Ethernet-соединения – трафик ''Heartbeat'' в этом случае можно отслеживать с помощью одной из утилит для отслеживания пакетов (например, wireshark). Можно даже использовать одновременно оба соединения, что позволит обойтись без ненужных откатов, если только одно из них выйдет из строя.&lt;br /&gt;
&lt;br /&gt;
[[Изображение:Img_100_87_1.png|thumb|Рис. 1: Общая схема проекта; обратите внимание на IP-адреса.]]&lt;br /&gt;
&lt;br /&gt;
===Настройка сетевых интерфейсов===&lt;br /&gt;
&lt;br /&gt;
Оба сетевых интерфейса, которые участвуют в ''Heartbeat''-соединении, должны быть настроены на статические IP-адреса, так как DHCP-сервера в этой «сети» точно нет. Статические адреса должны быть и на основных интерфейсах, которые используются для подключения к основному и запасному серверам. Обратите внимание, что это НЕ те адреса, на которых предоставляется сервис. ''Heartbeat'' назначит сетевой карте исправного компьютера второй IP-адрес, и именно он будет использоваться клиентами для доступа к ресурсу.&lt;br /&gt;
&lt;br /&gt;
===Три файла конфигурации===&lt;br /&gt;
&lt;br /&gt;
Сразу после установки Heartbeat нужно создать в каталоге '''/etc/ha.d''' три (да, три!) файла конфигурации, а именно:&lt;br /&gt;
&lt;br /&gt;
* '''ha.cf''' Файл содержит настройки самого ''Heartbeat''; в нем определяются используемые программой пути и устанавливаются некоторые временные параметры.&lt;br /&gt;
* '''haresources''' Этот файл определяет ресурсы (сервисы), которыми будет управлять Heartbeat, и основной сервер для каждого из этих ресурсов.&lt;br /&gt;
* '''authkey''' В этом файле задается пароль и метод шифрования, используемый для аутентификации Heartbeat-сообщений.&lt;br /&gt;
&lt;br /&gt;
Начнем с '''ha.cf'''. Пример этого файла можно найти в документации на ''Heartbeat'' ('''/usr/share/doc/heartbeat/ha.cf'''). Это один из файлов типа «визгу много, проку мало», которые целиком состоят из документации и закомментированных примеров. Можно скопировать его в '''/etc/ha.d''' и использовать как отправную точку, или создать свой файл с нуля.&lt;br /&gt;
&lt;br /&gt;
{{Врезка&lt;br /&gt;
    |Заголовок=Ошибка!&lt;br /&gt;
    |Содержание=В этой статье мы не говорим о том, как предотвратить неисправности других типов, например, те, что возникают в инфраструктуре самого интернета. В частности, мы не говорим о создании дополнительных информационных каналов для связи с сайтом. Впрочем, это не так уж и важно, потому что врожденная гибкость архитектуры интернета позволяет поглощать частные сбои. Часто даже говорят, что сеть ARPANET (предшественник интернета) разрабатывалась с таким расчетом, чтобы выдержать взрыв атомной бомбы. ARPANET и правда должна была справляться с утратой части сети, но главная причина была в том, что коммутация узлов сети и связей внутри нее была не особенно надежной, даже и без атомной бомбы.&lt;br /&gt;
    |Ширина=200px}}&lt;br /&gt;
&lt;br /&gt;
Вот минимальный вариант этого файла. Номера строк даны только для удобства ссылок, в самом файле их нет:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 1. udpport 694&lt;br /&gt;
 2. bcast eth1&lt;br /&gt;
 3. serial /dev/ttyS0&lt;br /&gt;
 4. baud 9600&lt;br /&gt;
 5. keepalive 2&lt;br /&gt;
 6. deadtime 20&lt;br /&gt;
 7. initdead 60&lt;br /&gt;
 8. node primary.example.com&lt;br /&gt;
 9. node backup.example.com&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Строки &amp;lt;font color=darkred&amp;gt;1&amp;lt;/font&amp;gt; и &amp;lt;font color=darkred&amp;gt;2&amp;lt;/font&amp;gt; задают номер порта и сетевой интерфейс, используемые для Heartbeat-соединения. Для соединения через последовательные порты в строках &amp;lt;font color=darkred&amp;gt;3&amp;lt;/font&amp;gt; и &amp;lt;font color=darkred&amp;gt;3&amp;lt;/font&amp;gt; задается порт и скорость соединения. Можно (и рекомендуется) использовать оба типа, но у меня было только соединение через последовательные порты, и я закомментировал строки &amp;lt;font color=darkred&amp;gt;1&amp;lt;/font&amp;gt; и &amp;lt;font color=darkred&amp;gt;2&amp;lt;/font&amp;gt;. В строке &amp;lt;font color=darkred&amp;gt;5&amp;lt;/font&amp;gt; задается тайм-аут между сообщениями, а строка &amp;lt;font color=darkred&amp;gt;6&amp;lt;/font&amp;gt; определяет время, по истечении которого, не дождавшись очередного сообщения от основного сервера, запасной сочтет его покойником. В строке &amp;lt;font color=darkred&amp;gt;7&amp;lt;/font&amp;gt; указывается время, необходимое для активации сетевого интерфейса после включения компьютера, после чего ''Heartbeat'' начинает функционировать. В строках &amp;lt;font color=darkred&amp;gt;9&amp;lt;/font&amp;gt; и &amp;lt;font color=darkred&amp;gt;9&amp;lt;/font&amp;gt; задаются имена хостов для основного и запасного серверов (те, что возвращает команда &amp;lt;font color=darkred&amp;gt;uname -n&amp;lt;/font&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
Для начала попробуем управлять полностью фиктивным сервисом '''tester'''. Мы напишем скрипт, '''/etc/ha.d/resources.d/tester''', вызываемый ''Heartbeat''. Он будет всего лишь вызывать команду &amp;lt;font color=darkred&amp;gt;logger&amp;lt;/font&amp;gt;, которая сообщит нам (через ''syslogd''), что скрипт был запущен. Вот как он выглядит:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  #!/bin/bash&lt;br /&gt;
  logger $0 called with argument $1&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Скрипт нужно сделать исполняемым, например, так:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  chmod 755 tester&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
В следующем файле, ''haresources'', содержится список ресурсов, которыми управляет ''Heartbeat''. Когда компьютер выходит из строя, эти ресурсы перемещаются с одного узла сети на другой. (попробуйте произносить это как “ha-resources”, а не “hare-sauces” &amp;lt;font color=blue&amp;gt;[англ. hare – заяц, source – источник, sauce – соус, – прим. ред.]&amp;lt;/font&amp;gt;. По правде говоря, я сроду не ел зайчатины, но первым делом подумал о кролике и решил, что подойдет клюквенный соус.) Опять же, пример этого файла можно найти в документации ('''/usr/share/doc/Heartbeat''') – можете просто скопировать его в '''/etc/ha.d''' или создать свой собственный файл с нуля. Для нашего первого теста в этом файле должна быть всего одна строка:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  primary.example.com tester&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Также нужно создать файл '''/etc/ha.d/authkeys''', содержащий ключи, используемые для аутентификации ''Heartbeat''-сообщений, например:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  auth1&lt;br /&gt;
  1 sha1 foobar&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Нужно позаботиться, чтобы читать этот файл мог только администратор:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  chmod 600 authkeys&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Если права доступа к этому файлу есть у кого-то еще, ''Heartbeat'' не запустится.&lt;br /&gt;
&lt;br /&gt;
Скопируйте эти четыре файла с основного сервера на запасной в соответствующие каталоги. Файл '''ha.cf''', возможно, придется подправить в зависимости от аппаратного обеспечения компьютера, а остальные файлы должны быть одинаковыми на обоих компьютерах.&lt;br /&gt;
&lt;br /&gt;
Теперь можно запустить ''Heartbeat''. Для отслеживания сообщений ''Heartbeat'' на обоих компьютерах запустите &amp;lt;font color=darkred&amp;gt;tail -f&amp;lt;/font&amp;gt; для файла журнала ('''/var/log/messages'''). Запустите программу с помощью команды:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  /etc/init.d/heartbeat start&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Врезка&lt;br /&gt;
    |Заголовок=Украденная личность&lt;br /&gt;
    |Содержание=Перенос IP-адреса на другой компьютер – компьютерный эквивалент «воровства личности»: вы притворяетесь кем-то другим, а потом убеждаете весь мир, что вы настоящий. В процессе переноса системы на запасной сервер обязано произойти следующее. Во-первых, основной сервер должен отдать IP-адрес. Если он загорелся или нашел другую кончину, это произойдет по умолчанию, но если heartbeat останавливается на другом (исправном) сервере, адрес, очевидно, нужно забрать назад. Другая проблема – обновление записей в ARP-кэше. Доставка сетевого пакета на конкретный компьютер в конечном счете основана на его MAC-адресе – уникальном 48-битном номере, зашитом в каждую сетевую карту. Чтобы определить MAC-адрес компьютера по его IP-адресу, используется протокол ARP (Address Resolution Protocol – протокол разрешения адресов). Записи о соответствии IP-адресов и MAC-адресов обычно хранятся в кэше ARP 10–15 минут. Чтобы принудительно обновить ARP-кэш на других компьютерах, heartbeat рассылает в сеть так называемые «незаконные» [gratuitous] ARP-пакеты с компьютера, перенявшего IP-адрес.&lt;br /&gt;
    |Ширина=200px}}&lt;br /&gt;
&lt;br /&gt;
На обоих компьютерах действия ''Heartbeat'' будут писаться в журнал. На основном сервере среди прочего должно появиться сообщение типа:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  logger: /etc/ha.d/resource.d/tester called with argument start&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Оно означает, что основной сервер, как и ожидалось, запустил сервис '''tester'''.&lt;br /&gt;
&lt;br /&gt;
{{Врезка&lt;br /&gt;
    |Заголовок=Загружаем heartbeat&lt;br /&gt;
    |Содержание=''Heartbeat'' нужно установить и на основном, и на запасном сервере. У меня на обоих компьютерах была установлена CentOS 5 (фактически, RHEL5). Я просто установил ''heartbeat'' вместе с зависимостями (которые включали ''heartbeat-pils'' и ''heartbeat-stonith'') из репозиториев CentOS с помощью ''yum''. Похожие пакеты есть и в репозиториях других дистрибутивов, таких как Ubuntu; в виде пакета RPMs для SUSE/Novell Linux их можно найти на сайте http://www.linux-ha.org/ или загрузить архив с исходными кодами с этого же сайта и скомпилировать программу из них.&lt;br /&gt;
    |Ширина=200px}}&lt;br /&gt;
&lt;br /&gt;
''Heartbeat'' запущен, и мы можем проверить поведение системы в случае отказа. Я просто выдернул шнур электропитания из основного сервера и наблюдал за сообщениями в файле журнала запасного. По истечении заданного времени запасной сервер сообщил об отказе основного и запустил сервис '''tester'''. Вот соответствующие строки журнала:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  heartbeat: [9615]: WARN: node primary.example.com: is dead&lt;br /&gt;
  heartbeat: [9615]: WARN: No STONITH device configured.&lt;br /&gt;
  heartbeat: [9615]: WARN: Shared disks are not protected.&lt;br /&gt;
  heartbeat: [9615]: info: Resources being acquired from primary.example.&lt;br /&gt;
 com.&lt;br /&gt;
  heartbeat: [9615]: info: Link primary.example.com:/dev/ttyS0 dead.&lt;br /&gt;
  heartbeat: [10305]: info: No local resources [/usr/share/heartbeat/&lt;br /&gt;
 ResourceManager listkeys backup.example.com] to acquire.&lt;br /&gt;
  harc[10304]: [10323]: info: Running /etc/ha.d/rc.d/status status&lt;br /&gt;
  mach_down[10329]: [10350]: info: Taking over resource group tester&lt;br /&gt;
 ResourceManager[10351]: [10362]: info: Acquiring resource group:&lt;br /&gt;
 primary.example.com tester&lt;br /&gt;
 logger: /etc/ha.d/resource.d/tester called with argument status&lt;br /&gt;
  ResourceManager[10351]: [10379]: info: Running /etc/ha.d/resource.d/&lt;br /&gt;
 tester start&lt;br /&gt;
  logger: /etc/ha.d/resource.d/tester called with argument start&lt;br /&gt;
  mach_down[10329]: [10384]: info: mach_down takeover complete for&lt;br /&gt;
 node primary.example.com.&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Первая проверка завершилась успешно, и пора поручить ''Heartbeat'' управление полноценным сервисом. Для этого проекта я выбрал httpd. Таким образом, сейчас нам нужно убедиться, что ''Apache'' установлен на обоих компьютерах, и положить в корневой каталог web-сервера какие-нибудь легко распознаваемые файлы. Я просто создал два файла '''/var/www/html/index.html''', по одному для основного и запасного серверов; в файле для основного сервера была строка “This is the website from the primary server”, для запасного – “This is the website from the backup server” («Это сайт с основного/запасного сервера»). На обоих компьютерах запустите ''httpd'':&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  /etc/init.d/httpd start&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
и проверьте, что, открыв в браузере адрес &amp;lt;nowiki&amp;gt;&amp;lt;font color=blue&amp;gt;http://localhost&amp;lt;/font&amp;gt;&amp;lt;/nowiki&amp;gt;, вы видите эти файлы. Теперь остановите ''Apache'' и убедитесь, что он не запустится автоматически при загрузке системы. Воспользуйтесь командами:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  /etc/init.d/httpd stop&lt;br /&gt;
  chkconfig httpd --del&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Это важно, потому что ''Apache'' должен запуститься не во время загрузки, а только если ''Heartbeat'' запустил его.&lt;br /&gt;
&lt;br /&gt;
Теперь нужно изменить файл ''haresources'' так:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  primary.example.com httpd&lt;br /&gt;
  primary.example.com 192.168.0.50&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
В первой строке указывается сервис, которым будет управлять ''Heartbeat'', а во второй – IP-адрес, используемый клиентом для доступа к сервису. При запуске ''Heartbeat'' этот адрес назначается на основной сервер как второй IP-адрес. Если основной сервер откажет, копия ''Heartbeat'', запущенная на запасном сервере, перенесет этот IP-адрес на свой сетевой интерфейс.&lt;br /&gt;
&lt;br /&gt;
Предполагается, что ''Heartbeat'' будет управлять сервисами путем запуска скрипта, указанного в '''haresources''', с аргументами &amp;lt;font color=darkred&amp;gt;start&amp;lt;/font&amp;gt;, &amp;lt;font color=darkred&amp;gt;stop&amp;lt;/font&amp;gt; или &amp;lt;font color=darkred&amp;gt;status&amp;lt;/font&amp;gt;. Конечно, это те самые аргументы скриптов каталога '''/etc/init.d''', что используются для запуска сервисов во время загрузки системы, и, по правде говоря, ''Heartbeat'' будет автоматически искать скрипт '''httpd''' в каталоге '''/etc/init.d'''.&lt;br /&gt;
&lt;br /&gt;
После внесения этих изменений в конфигурацию основного и запасного серверов можно снова запустить ''Heartbeat'' на каждом из них:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 /etc/init.d/heartbeat start&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Когда ''Heartbeat'' войдет в нормальный режим работы, нужно кое-что проверить. На основном сервере запустите:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 ip addr show&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
и проверьте, что ''Heartbeat'' назначил второй IP-адрес (в нашем примере &amp;lt;font color=darkred&amp;gt;192.168.0.50&amp;lt;/font&amp;gt;) на наш сетевой интерфейс. Также запустите команду&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 ps -ef | grep httpd&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
которая проверит, что сервис ''httpd'' запущен. На запасной сервер второй IP-адрес не назначается, а сервис ''httpd'' на нем не выполняется.&lt;br /&gt;
&lt;br /&gt;
Теперь пора загрузить третий компьютер, чтобы использовать в качестве клиента. Убедитесь, что он может разрешить имя компьютера, на котором запущен сервис, по его IP-адресу. Для этого я просто добавил строку&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 192.168.0.50 www.example.com&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
в файл '''/etc/hosts'''. Проверьте, пингуется ли адрес &amp;lt;nowiki&amp;gt;&amp;lt;font color=blue&amp;gt;www.example.com&amp;lt;/font&amp;gt;&amp;lt;/nowiki&amp;gt; с компьютера клиента. Откройте в браузере на клиентском компьютере страницу &amp;lt;nowiki&amp;gt;&amp;lt;font color=blue&amp;gt;http://www.example.com&amp;lt;/font&amp;gt;&amp;lt;/nowiki&amp;gt;. Вы должны увидеть файл '''index.html''' основного сервера. На клиенте также можно проверить кэш '''arp''', запустив команду&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 arp -a&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
и обратить внимание на MAC-адрес, связанный с IP-адресом 192.168.0.50. В моем случае результат работы команды был таким:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 www.example.com (192.168.0.50) at 00:0C:F1:96:A3:F7 [ether] on eth0&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Ладно, и как это работает?===&lt;br /&gt;
&lt;br /&gt;
Мы подошли к драматической развязке: демонстрации переноса сервиса на запасной сервер в случае отказа основного. Можно было просто отключить питание основного сервера, как и в предыдущем эксперименте, но на сей раз я избрал более кроткий способ – просто остановил ''Heartbeat'' на основном сервере командой:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 /etc/init.d/heartbeat stop&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Остановившись, ''Heartbeat'' остановит ''httpd'' на основном сервере и проинформирует запасной сервер об отключении основного (через ''Heartbeat''-соединение). Запасной сервер сразу возьмет управление на себя, и в файле его журнала ('''/var/log/messages''') появятся новые сообщения. Два из них наиболее важны (время и другую информацию в начале строки я удалил):&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  Running /etc/init.d/httpd start&lt;br /&gt;
  Registering new address record for 192.168.0.50 on eth0&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
В этом случае все заняло пару секунд. Если бы я просто выдернул из сети шнур питания основного сервера, то на восстановление системы потребовалось бы больше времени: в этом случае перед тем, как сделать вывод об отказе основного сервера и взять управление на себя, запасной сервер ожидал бы ответа 20 секунд (параметр &amp;lt;font color=darkred&amp;gt;deadtime&amp;lt;/font&amp;gt; в файле '''ha.cf''').&lt;br /&gt;
&lt;br /&gt;
На клиентском компьютере следует провести пару важных тестов. Во-первых, попробуйте обновить страницу &amp;lt;nowiki&amp;gt;&amp;lt;font color=blue&amp;gt;www.example.com&amp;lt;/font&amp;gt;&amp;lt;/nowiki&amp;gt; в браузере. Должна появиться страница запасного сервера. Во-вторых, еще раз просмотрите содержимое ARP-кэша. На моем компьютере команда &amp;lt;font color=darkred&amp;gt;arp –a&amp;lt;/font&amp;gt; вернула следующий результат:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  www.example.com (192.168.0.50) at 00:10:60:60:3E:8E [ether] on eth0&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Это означает, что пакеты, предназначенные для адреса &amp;lt;font color=darkred&amp;gt;192.168.0.50&amp;lt;/font&amp;gt;, теперь будут направляться на запасной сервер.&lt;br /&gt;
&lt;br /&gt;
А что же дальше? Ну, наверное, со временем кто-то доберется до основного сервера, починит его и перезапустит. Когда ''Heartbeat'' перезапускается, он сообщает об этом запасному серверу через ''Heartbeat''-соединение. В журнале запасного сервера появятся такие строки:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  Heartbeat restart on node primary.example.com&lt;br /&gt;
  Releasing resource group: primary.example.com httpd&lt;br /&gt;
  Running /etc/init.d/httpd stop&lt;br /&gt;
  Withdrawing address record for 192.168.0.50 on eth0&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Они означают, что запасной сервер освободил ресурсы и разрешил основному забрать их.&lt;br /&gt;
&lt;br /&gt;
Если у вас хватило духу дочитать до конца, поздравляю! Вы создали отказоустойчивый кластер в Linux и можете начать делать на этом деньги в реальном мире! Однако прежде чем пойти на собеседование в Google, NASA или даже Krazy Ken’s 24x7 Liquorice Emporium, быть может, вы захотите узнать о некоторых вопросах подробнее.&lt;br /&gt;
&lt;br /&gt;
Один из них – это концепция «ограждения» (fencing). Когда запасной сервер перенимает ресурсы основного, нужно как-то гарантировать, чтобы основной сервер не попытался снова предоставить эти сервисы. ''Heartbeat'' может использовать для этого механизм STONITH (“shoot the other node in the head” – «контрольный выстрел в голову»), если вы купите устройство, программно отключающее питание компьютера. Второй вопрос – как синхронизировать содержимое двух web-серверов. В нашем примере мы умышленно сделали его разным, но на практике может потребоваться какое-то средство синхронизации их содержимого (''rsync'' или ''unison''). '''LXF'''&lt;br /&gt;
&lt;br /&gt;
{{Врезка&lt;br /&gt;
    |Заголовок=Дополнительная информация&lt;br /&gt;
    |Содержание=Побольше узнать о ''heartbeat'' можно в документации '''/usr/share/doc/heartbeat''' (каталог зависит от конкретного дистрибутива), в частности, в  файле '''GettingStarted'''. На сайте Linux HA также есть руководства и документация. Рекомендую вам прекрасную книжку “Linux Enterprise Cluster: Build a Highly Available    Cluster   with Commodity Hardware and Free Software” (No Starch Press, ISBN 1-59327-036-4).&lt;br /&gt;
    |Ширина=200px}}&lt;br /&gt;
&lt;br /&gt;
[[Категория:Учебники]]&lt;br /&gt;
[[Категория:Hardcore Linux]]&lt;br /&gt;
[[Категория:Крис Браун]]&lt;/div&gt;</summary>
		<author><name>Kipruss</name></author>	</entry>

	<entry>
		<id>http://wiki.linuxformat.ru/wiki/%D0%A4%D0%B0%D0%B9%D0%BB:Img_100_87_1.png</id>
		<title>Файл:Img 100 87 1.png</title>
		<link rel="alternate" type="text/html" href="http://wiki.linuxformat.ru/wiki/%D0%A4%D0%B0%D0%B9%D0%BB:Img_100_87_1.png"/>
				<updated>2009-03-06T22:10:18Z</updated>
		
		<summary type="html">&lt;p&gt;Kipruss: Рис. 1: Общая схема проекта; обратите внимание на IP-адреса.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Рис. 1: Общая схема проекта; обратите внимание на IP-адреса.&lt;/div&gt;</summary>
		<author><name>Kipruss</name></author>	</entry>

	<entry>
		<id>http://wiki.linuxformat.ru/wiki/%D0%9E%D0%B1%D1%81%D1%83%D0%B6%D0%B4%D0%B5%D0%BD%D0%B8%D0%B5_%D1%83%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA%D0%B0:Yaleks</id>
		<title>Обсуждение участника:Yaleks</title>
		<link rel="alternate" type="text/html" href="http://wiki.linuxformat.ru/wiki/%D0%9E%D0%B1%D1%81%D1%83%D0%B6%D0%B4%D0%B5%D0%BD%D0%B8%D0%B5_%D1%83%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA%D0%B0:Yaleks"/>
				<updated>2009-03-06T20:36:34Z</updated>
		
		<summary type="html">&lt;p&gt;Kipruss: /* Присоединение к проекту */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Установил расширения Cite, ParserFunctions и SyntaxHighlight - проверяйте --17:21, 11 марта 2008 (MSK)&lt;br /&gt;
&lt;br /&gt;
Вы вчера перенесли статью LXF97:TEX в LXF97:Препринт, но при этом некорректно изменили оглавление номера, оставив в нем ссылку на LXF97:TEX, но удалив при этом ссылку на следующую статью Андрея Боровского. Я ее найти в списке статей не могу. Верните ее пожалуйста на место. --[[Участник:Crazy Rebel|Crazy Rebel]] 08:07, 3 октября 2008 (MSD) &lt;br /&gt;
: Я просто очистил содержимое, сама статья была создана давно. Оглавление сейчас пофиксил. --[[Участник:Yaleks|Yaleks]] 15:07, 4 октября 2008 (MSD)&lt;br /&gt;
&lt;br /&gt;
== Викификация LXF70-77 ==&lt;br /&gt;
До сих пор я занимался викификацией LXF c конца, а Вы с начала. Но теперь, когда остались не завершенными только самые начальные номера, причем в каждом из них уже сделана какая то часть работы, Валентин Синицин посоетовал обратиться непосредственно к Вам, чтобы разделить оставшиеся для викификации статьи. В принципе я могу пойти и другим путем - начиная викификацию 2008 года. Так что давайте решим как будет удобнее. --[[Участник:Crazy Rebel|Crazy Rebel]]&lt;br /&gt;
&lt;br /&gt;
* Вот что осталось (если существующие оглавления полные):&lt;br /&gt;
&amp;lt;nowiki&amp;gt;# &amp;lt;s&amp;gt;[[LXF74-75:Inkscape]] (13 ссылок)&amp;lt;/s&amp;gt;&lt;br /&gt;
# &amp;lt;s&amp;gt;[[LXF71:GIMP]]&amp;lt;/s&amp;gt; (7 ссылок)&lt;br /&gt;
# &amp;lt;s&amp;gt;[[LXF72:GIMP]]&amp;lt;/s&amp;gt; (7 ссылок)&lt;br /&gt;
# &amp;lt;s&amp;gt;[[LXF73:GIMP]]&amp;lt;/s&amp;gt; (7 ссылок)&lt;br /&gt;
# &amp;lt;s&amp;gt;[[LXF73:Сравнение: Электронные фотоальбомы]] (2 ссылки)&amp;lt;/s&amp;gt;&lt;br /&gt;
# &amp;lt;s&amp;gt;[[LXF74-75:Технологии Linux-2006]] (2 ссылки)&amp;lt;/s&amp;gt;&lt;br /&gt;
# &amp;lt;s&amp;gt;[[LXF71:VariCAD 2005]]&amp;lt;/s&amp;gt;&lt;br /&gt;
# &amp;lt;s&amp;gt;[[LXF71:KOffice 1.4]]&amp;lt;/s&amp;gt;&lt;br /&gt;
# &amp;lt;s&amp;gt;[[LXF71:SmoothWall Firewall 4]]&amp;lt;/s&amp;gt;&lt;br /&gt;
# &amp;lt;s&amp;gt;[[LXF71:Amarok 1.3]]&amp;lt;/s&amp;gt;&lt;br /&gt;
# &amp;lt;s&amp;gt;[[LXF71:Спецрепортаж]]&amp;lt;/s&amp;gt;&lt;br /&gt;
# &amp;lt;s&amp;gt;[[LXF71:Настольный Linux]]&amp;lt;/s&amp;gt;&lt;br /&gt;
# &amp;lt;s&amp;gt;[[LXF71:Гонка за лидером]]&amp;lt;/s&amp;gt;&lt;br /&gt;
# &amp;lt;s&amp;gt;[[LXF71:Дневники Linux]]&amp;lt;/s&amp;gt;&lt;br /&gt;
# &amp;lt;s&amp;gt;[[LXF71:Subversion]]&amp;lt;/s&amp;gt;&lt;br /&gt;
# &amp;lt;s&amp;gt;[[LXF77:Realsoft 3D]]&amp;lt;/s&amp;gt;&lt;br /&gt;
# &amp;lt;s&amp;gt;[[LXF72:Советы по ускорению]]&amp;lt;/s&amp;gt;&lt;br /&gt;
# &amp;lt;s&amp;gt;[[LXF76:Азбука записи]]&amp;lt;/s&amp;gt;&lt;br /&gt;
# &amp;lt;s&amp;gt;[[LXF73:Автомонтирование USB]]&amp;lt;/s&amp;gt;&lt;br /&gt;
# &amp;lt;s&amp;gt;[[LXF73:Русификация Debian 3.1]]&amp;lt;/s&amp;gt;&lt;br /&gt;
# &amp;lt;s&amp;gt;[[LXF72:Frequently Asked Questions]]&amp;lt;/s&amp;gt;&lt;br /&gt;
# &amp;lt;s&amp;gt;[[LXF72:Краткая справка]]&amp;lt;/s&amp;gt;&lt;br /&gt;
# &amp;lt;s&amp;gt;[[LXF71:Ответы]]&amp;lt;/s&amp;gt;&lt;br /&gt;
# &amp;lt;s&amp;gt;[[LXF72:Ответы]]&amp;lt;/s&amp;gt;&lt;br /&gt;
# &amp;lt;s&amp;gt;[[LXF73:Ответы]]&amp;lt;/s&amp;gt;&lt;br /&gt;
# &amp;lt;s&amp;gt;[[LXF74-75:Ответы]]&amp;lt;/s&amp;gt;&lt;br /&gt;
# &amp;lt;s&amp;gt;[[LXF77:Ответы]]&amp;lt;/s&amp;gt;&lt;br /&gt;
# &amp;lt;s&amp;gt;[[LXF71:Первые шаги]]&amp;lt;/s&amp;gt;&lt;br /&gt;
# &amp;lt;s&amp;gt;[[LXF72:Первые шаги Печать]]&amp;lt;/s&amp;gt;&lt;br /&gt;
# &amp;lt;s&amp;gt;[[LXF74-75:Первые шаги]]&amp;lt;/s&amp;gt;&lt;br /&gt;
# &amp;lt;s&amp;gt;[[LXF77:Сравнение]]&amp;lt;/s&amp;gt;&lt;br /&gt;
# &amp;lt;s&amp;gt;[[LXF71:Сравнение]]&amp;lt;/s&amp;gt;&lt;br /&gt;
# &amp;lt;s&amp;gt;[[LXF76:Сравнение]]&amp;lt;/s&amp;gt;&lt;br /&gt;
# &amp;lt;s&amp;gt;[[LXF76:Что такое]] GPL V3&amp;lt;/s&amp;gt;&lt;br /&gt;
# &amp;lt;s&amp;gt;[[LXF76:Интервью]] Джереми Элиссон&amp;lt;/s&amp;gt;&lt;br /&gt;
# &amp;lt;s&amp;gt;[[LXF76:Трюки с железом]]&amp;lt;/s&amp;gt;&lt;br /&gt;
# &amp;lt;s&amp;gt;[[LXF76:Интервью2]] Йон фон Течнер&amp;lt;/s&amp;gt;&lt;br /&gt;
# &amp;lt;s&amp;gt;[[LXF76:Dynebolic]]&amp;lt;/s&amp;gt;&lt;br /&gt;
# &amp;lt;s&amp;gt;[[LXF76:MythTV]]&amp;lt;/s&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Большое число из этого уже устарело и представляет лишь исторический интерес. Можно тут &amp;lt;s&amp;gt;отмечать&amp;lt;/s&amp;gt; (&amp;lt;nowiki&amp;gt;&amp;lt;s&amp;gt;...&amp;lt;/s&amp;gt;&amp;lt;/nowiki&amp;gt;) перед викификаций, чтобы не было коллизий. --[[Участник:Yaleks|Yaleks]] 22:45, 3 февраля 2009 (MSK)&lt;br /&gt;
&lt;br /&gt;
* Поздравляю! Позиции в списке закончились.&lt;br /&gt;
** Это да, но мне ещё спецрепортаж доделывать. --[[Участник:Yaleks|Yaleks]] 20:24, 5 марта 2009 (MSK)&lt;br /&gt;
*** Я так сильно подозреваю, что это не единственная проблема, хотя я старался и выверял все номера, но могли гдето и недоделки остаться и статьи спрятаться. Но в общем следует считать, что эта часть завершена. Тем более что спецрепортаж это большая но всего одна статья.--[[Участник:Crazy Rebel|Crazy Rebel]] 10:08, 6 марта 2009 (MSK)&lt;br /&gt;
&lt;br /&gt;
== LXF72 Советы по ускорению ==&lt;br /&gt;
&lt;br /&gt;
А зачем там было делать &amp;quot;LXF72...&amp;quot; загловком? Я тоже так вначале сделал, но мне крайне не понравилось, что советы нумеруются 1.1 ... 1.32 тогда как в моем варианта было 1, 2 .... Ну и еще почему заголовок статьи Вы выделяетя двумя знаками &amp;lt;nowiki&amp;gt;==&amp;lt;/nowiki&amp;gt; ведь можно и одним, тогда каждый вопрос отделяется друг от друго горизонтальной линией.&lt;br /&gt;
:* &amp;lt;nowiki&amp;gt;==&amp;lt;/nowiki&amp;gt; это заголовок 1-ого уровня вики-синтаксиса (= использовать некорректно). И где вы редактируете статьи, что там вставляется какой-то 2-х байтовый пробел? Через OCR что-ли пропускаете? --[[Участник:Yaleks|Yaleks]] 22:15, 26 февраля 2009 (MSK)&lt;br /&gt;
:::* Статьи я копирую из kpdf собственно сразу в окно Firefox, откуда там стали браться неразрывные пробелы я понятия не имею. Возможно такие pdf-ки потому что LXF99 я делал таким же способом но никаких неразрывных пробелов там нет. Или это так работает новый kpdf.&lt;br /&gt;
:::* Проблему решил так - сначала копирую текст в kate там удаляю всю гадость (заменой по тексту) и уже потом вставляю в окно Firefox.&lt;br /&gt;
&lt;br /&gt;
== LXF100 ... ==&lt;br /&gt;
&lt;br /&gt;
В общем то викификация LXF70-99 подходит к концу и Синицын уже спрашивал меня о продолжении работы. Я согласен и как я понимаю Вы тоже. Но у Вас несколько другой подход - викифицировать не номерами, а темами. В приципе я вижу и преимущества и недостатки такого подхода. Ну из перимуществ это то, что пользователь получает информацию которая должна быть для него наиболее интересна, а из недостатков- отдельный номер может быть так до конца и не закончен. Будет осутствовать общий стиль оформлния. В общем я готов на любой подход к викификации. Если мы будем пользоваться Вашим методом то предлагаю делать так чтобы не пересекаться - Заранее оглавления не делаем, кто создает статью, тот ее и викифицирует.&lt;br /&gt;
: Если вы посмотрите на статистику хотя-бы нескольких ресурсов, то поймёте, что удержать и заставить посмотреть хотя-бы 3 страницы очень сложно. Потому иметь законченные и связанные кластеры статей лучше, чем несвязанную подборку из одного номера. Очень мало людей приходят введя адрес первой страницы и читают по-порядку, в основном по ссылкам с других сайтов или поисковых систем. --[[Участник:Yaleks|Yaleks]] 15:24, 1 марта 2009 (MSK)&lt;br /&gt;
:: И всеже я предлагаю сначала закончить LXF71 и только после этого приступать к 100 и далее, а то Синицын мне как то писал что руководство недовольно, что викификация этих номеров не закончена. А в остальном полностью согласен. Предлагаю значит сделать как раз так - кто начал викификацию тот ее и заканчивает. Чтобы нам тут оглавление не составлять.&lt;br /&gt;
&lt;br /&gt;
== Присоединение к проекту ==&lt;br /&gt;
&lt;br /&gt;
Обращаюсь к Yaleks'у, как к координатору: я готов в меру сил помочь в викификации того, что наиболее нужно в настоящее время. Номера 100-106 имеются, скачал по ссылке, которую дал Валентин. Мой почтовый адрес: kipruss_A_mail.ru. После прочтения, думаю, этот раздел можно удалить. :)&lt;br /&gt;
&lt;br /&gt;
* Ну так выбирайте статью, вроде как решили с учебников начать, а то и цикл, вписывайте на соответствующей странице(цах) его название и вперед. Валентин сказал что за оформлением оглавления журанлов он сам проследит, но всетаки постарайтесь как в журнале делать название статьи и аннотацию.--[[Участник:Crazy Rebel|Crazy Rebel]] 10:10, 6 марта 2009 (MSK)&lt;br /&gt;
** Раз с учебников, то беру цикл &amp;quot;Hardcore Linux&amp;quot;. Потом - Django, но этот цикл начинается с мая, по-моему - наверное лучше сделать те, которые продолжаются с прошлого года.--[[Участник:Kipruss|Kipruss]] 23:36, 6 марта 2009 (MSK)&lt;br /&gt;
* Смотрите на оформление существующих статей и делайте по аналогии (также см. [[Информация для авторов]]). Crazy Rebel, осталось расхождение с наименование картинок, я всё-таки предлагаю, чтобы в названии был номер журнала и страницы (возможно выбранный в начале Img не очень логично и лучше перейти к LXF10X_YY_Z.{jpg/png}). --[[Участник:Yaleks|Yaleks]] 11:57, 6 марта 2009 (MSK)&lt;br /&gt;
** Хорошо. Со следующей статьи начну именовать так. Не думаю что надо что либо переделывать в уже викифицицированных журналах если только качество старых картинок не нравится.--[[Участник:Crazy Rebel|Crazy Rebel]] 16:35, 6 марта 2009 (MSK)&lt;/div&gt;</summary>
		<author><name>Kipruss</name></author>	</entry>

	<entry>
		<id>http://wiki.linuxformat.ru/wiki/%D0%9E%D0%B1%D1%81%D1%83%D0%B6%D0%B4%D0%B5%D0%BD%D0%B8%D0%B5_%D1%83%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA%D0%B0:Yaleks</id>
		<title>Обсуждение участника:Yaleks</title>
		<link rel="alternate" type="text/html" href="http://wiki.linuxformat.ru/wiki/%D0%9E%D0%B1%D1%81%D1%83%D0%B6%D0%B4%D0%B5%D0%BD%D0%B8%D0%B5_%D1%83%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA%D0%B0:Yaleks"/>
				<updated>2009-03-05T22:39:01Z</updated>
		
		<summary type="html">&lt;p&gt;Kipruss: /* LXF100 ... */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Установил расширения Cite, ParserFunctions и SyntaxHighlight - проверяйте --17:21, 11 марта 2008 (MSK)&lt;br /&gt;
&lt;br /&gt;
Вы вчера перенесли статью LXF97:TEX в LXF97:Препринт, но при этом некорректно изменили оглавление номера, оставив в нем ссылку на LXF97:TEX, но удалив при этом ссылку на следующую статью Андрея Боровского. Я ее найти в списке статей не могу. Верните ее пожалуйста на место. --[[Участник:Crazy Rebel|Crazy Rebel]] 08:07, 3 октября 2008 (MSD) &lt;br /&gt;
: Я просто очистил содержимое, сама статья была создана давно. Оглавление сейчас пофиксил. --[[Участник:Yaleks|Yaleks]] 15:07, 4 октября 2008 (MSD)&lt;br /&gt;
&lt;br /&gt;
== Викификация LXF70-77 ==&lt;br /&gt;
До сих пор я занимался викификацией LXF c конца, а Вы с начала. Но теперь, когда остались не завершенными только самые начальные номера, причем в каждом из них уже сделана какая то часть работы, Валентин Синицин посоетовал обратиться непосредственно к Вам, чтобы разделить оставшиеся для викификации статьи. В принципе я могу пойти и другим путем - начиная викификацию 2008 года. Так что давайте решим как будет удобнее. --[[Участник:Crazy Rebel|Crazy Rebel]]&lt;br /&gt;
&lt;br /&gt;
* Вот что осталось (если существующие оглавления полные):&lt;br /&gt;
# &amp;lt;s&amp;gt;[[LXF74-75:Inkscape]] (13 ссылок)&amp;lt;/s&amp;gt;&lt;br /&gt;
# &amp;lt;s&amp;gt;[[LXF71:GIMP]]&amp;lt;/s&amp;gt; (7 ссылок)&lt;br /&gt;
# &amp;lt;s&amp;gt;[[LXF72:GIMP]]&amp;lt;/s&amp;gt; (7 ссылок)&lt;br /&gt;
# &amp;lt;s&amp;gt;[[LXF73:GIMP]]&amp;lt;/s&amp;gt; (7 ссылок)&lt;br /&gt;
# &amp;lt;s&amp;gt;[[LXF73:Сравнение: Электронные фотоальбомы]] (2 ссылки)&amp;lt;/s&amp;gt;&lt;br /&gt;
# &amp;lt;s&amp;gt;[[LXF74-75:Технологии Linux-2006]] (2 ссылки)&amp;lt;/s&amp;gt;&lt;br /&gt;
# &amp;lt;s&amp;gt;[[LXF71:VariCAD 2005]]&amp;lt;/s&amp;gt;&lt;br /&gt;
# &amp;lt;s&amp;gt;[[LXF71:KOffice 1.4]]&amp;lt;/s&amp;gt;&lt;br /&gt;
# &amp;lt;s&amp;gt;[[LXF71:SmoothWall Firewall 4]]&amp;lt;/s&amp;gt;&lt;br /&gt;
# &amp;lt;s&amp;gt;[[LXF71:Amarok 1.3]]&amp;lt;/s&amp;gt;&lt;br /&gt;
# &amp;lt;s&amp;gt;[[LXF71:Спецрепортаж]]&amp;lt;/s&amp;gt;&lt;br /&gt;
# &amp;lt;s&amp;gt;[[LXF71:Настольный Linux]]&amp;lt;/s&amp;gt;&lt;br /&gt;
# &amp;lt;s&amp;gt;[[LXF71:Гонка за лидером]]&amp;lt;/s&amp;gt;&lt;br /&gt;
# &amp;lt;s&amp;gt;[[LXF71:Дневники Linux]]&amp;lt;/s&amp;gt;&lt;br /&gt;
# &amp;lt;s&amp;gt;[[LXF71:Subversion]]&amp;lt;/s&amp;gt;&lt;br /&gt;
# &amp;lt;s&amp;gt;[[LXF77:Realsoft 3D]]&amp;lt;/s&amp;gt;&lt;br /&gt;
# &amp;lt;s&amp;gt;[[LXF72:Советы по ускорению]]&amp;lt;/s&amp;gt;&lt;br /&gt;
# &amp;lt;s&amp;gt;[[LXF76:Азбука записи]]&amp;lt;/s&amp;gt;&lt;br /&gt;
# &amp;lt;s&amp;gt;[[LXF73:Автомонтирование USB]]&amp;lt;/s&amp;gt;&lt;br /&gt;
# &amp;lt;s&amp;gt;[[LXF73:Русификация Debian 3.1]]&amp;lt;/s&amp;gt;&lt;br /&gt;
# &amp;lt;s&amp;gt;[[LXF72:Frequently Asked Questions]]&amp;lt;/s&amp;gt;&lt;br /&gt;
# &amp;lt;s&amp;gt;[[LXF72:Краткая справка]]&amp;lt;/s&amp;gt;&lt;br /&gt;
# &amp;lt;s&amp;gt;[[LXF71:Ответы]]&amp;lt;/s&amp;gt;&lt;br /&gt;
# &amp;lt;s&amp;gt;[[LXF72:Ответы]]&amp;lt;/s&amp;gt;&lt;br /&gt;
# &amp;lt;s&amp;gt;[[LXF73:Ответы]]&amp;lt;/s&amp;gt;&lt;br /&gt;
# &amp;lt;s&amp;gt;[[LXF74-75:Ответы]]&amp;lt;/s&amp;gt;&lt;br /&gt;
# &amp;lt;s&amp;gt;[[LXF77:Ответы]]&amp;lt;/s&amp;gt;&lt;br /&gt;
# &amp;lt;s&amp;gt;[[LXF71:Первые шаги]]&amp;lt;/s&amp;gt;&lt;br /&gt;
# &amp;lt;s&amp;gt;[[LXF72:Первые шаги Печать]]&amp;lt;/s&amp;gt;&lt;br /&gt;
# &amp;lt;s&amp;gt;[[LXF74-75:Первые шаги]]&amp;lt;/s&amp;gt;&lt;br /&gt;
# &amp;lt;s&amp;gt;[[LXF77:Сравнение]]&amp;lt;/s&amp;gt;&lt;br /&gt;
# &amp;lt;s&amp;gt;[[LXF71:Сравнение]]&amp;lt;/s&amp;gt;&lt;br /&gt;
# &amp;lt;s&amp;gt;[[LXF76:Сравнение]]&amp;lt;/s&amp;gt;&lt;br /&gt;
# &amp;lt;s&amp;gt;[[LXF76:Что такое]] GPL V3&amp;lt;/s&amp;gt;&lt;br /&gt;
# &amp;lt;s&amp;gt;[[LXF76:Интервью]] Джереми Элиссон&amp;lt;/s&amp;gt;&lt;br /&gt;
# &amp;lt;s&amp;gt;[[LXF76:Трюки с железом]]&amp;lt;/s&amp;gt;&lt;br /&gt;
# &amp;lt;s&amp;gt;[[LXF76:Интервью2]] Йон фон Течнер&amp;lt;/s&amp;gt;&lt;br /&gt;
# &amp;lt;s&amp;gt;[[LXF76:Dynebolic]]&amp;lt;/s&amp;gt;&lt;br /&gt;
# &amp;lt;s&amp;gt;[[LXF76:MythTV]]&amp;lt;/s&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Большое число из этого уже устарело и представляет лишь исторический интерес. Можно тут &amp;lt;s&amp;gt;отмечать&amp;lt;/s&amp;gt; (&amp;lt;nowiki&amp;gt;&amp;lt;s&amp;gt;...&amp;lt;/s&amp;gt;&amp;lt;/nowiki&amp;gt;) перед викификаций, чтобы не было коллизий. --[[Участник:Yaleks|Yaleks]] 22:45, 3 февраля 2009 (MSK)&lt;br /&gt;
&lt;br /&gt;
* Поздравляю! Позиции в списке закончились.&lt;br /&gt;
** Это да, но мне ещё спецрепортаж доделывать. --[[Участник:Yaleks|Yaleks]] 20:24, 5 марта 2009 (MSK)&lt;br /&gt;
&lt;br /&gt;
== LXF72 Советы по ускорению ==&lt;br /&gt;
&lt;br /&gt;
А зачем там было делать &amp;quot;LXF72...&amp;quot; загловком? Я тоже так вначале сделал, но мне крайне не понравилось, что советы нумеруются 1.1 ... 1.32 тогда как в моем варианта было 1, 2 .... Ну и еще почему заголовок статьи Вы выделяетя двумя знаками &amp;lt;nowiki&amp;gt;==&amp;lt;/nowiki&amp;gt; ведь можно и одним, тогда каждый вопрос отделяется друг от друго горизонтальной линией.&lt;br /&gt;
:* &amp;lt;nowiki&amp;gt;==&amp;lt;/nowiki&amp;gt; это заголовок 1-ого уровня вики-синтаксиса (= использовать некорректно). И где вы редактируете статьи, что там вставляется какой-то 2-х байтовый пробел? Через OCR что-ли пропускаете? --[[Участник:Yaleks|Yaleks]] 22:15, 26 февраля 2009 (MSK)&lt;br /&gt;
:::* Статьи я копирую из kpdf собственно сразу в окно Firefox, откуда там стали браться неразрывные пробелы я понятия не имею. Возможно такие pdf-ки потому что LXF99 я делал таким же способом но никаких неразрывных пробелов там нет. Или это так работает новый kpdf.&lt;br /&gt;
:::* Проблему решил так - сначала копирую текст в kate там удаляю всю гадость (заменой по тексту) и уже потом вставляю в окно Firefox.&lt;br /&gt;
&lt;br /&gt;
== LXF100 ... ==&lt;br /&gt;
&lt;br /&gt;
В общем то викификация LXF70-99 подходит к концу и Синицын уже спрашивал меня о продолжении работы. Я согласен и как я понимаю Вы тоже. Но у Вас несколько другой подход - викифицировать не номерами, а темами. В приципе я вижу и преимущества и недостатки такого подхода. Ну из перимуществ это то, что пользователь получает информацию которая должна быть для него наиболее интересна, а из недостатков- отдельный номер может быть так до конца и не закончен. Будет осутствовать общий стиль оформлния. В общем я готов на любой подход к викификации. Если мы будем пользоваться Вашим методом то предлагаю делать так чтобы не пересекаться - Заранее оглавления не делаем, кто создает статью, тот ее и викифицирует.&lt;br /&gt;
: Если вы посмотрите на статистику хотя-бы нескольких ресурсов, то поймёте, что удержать и заставить посмотреть хотя-бы 3 страницы очень сложно. Потому иметь законченные и связанные кластеры статей лучше, чем несвязанную подборку из одного номера. Очень мало людей приходят введя адрес первой страницы и читают по-порядку, в основном по ссылкам с других сайтов или поисковых систем. --[[Участник:Yaleks|Yaleks]] 15:24, 1 марта 2009 (MSK)&lt;br /&gt;
:: И всеже я предлагаю сначала закончить LXF71 и только после этого приступать к 100 и далее, а то Синицын мне как то писал что руководство недовольно, что викификация этих номеров не закончена. А в остальном полностью согласен. Предлагаю значит сделать как раз так - кто начал викификацию тот ее и заканчивает. Чтобы нам тут оглавление не составлять.&lt;br /&gt;
&lt;br /&gt;
== Присоединение к проекту ==&lt;br /&gt;
&lt;br /&gt;
Обращаюсь к Yaleks'у, как к координатору: я готов в меру сил помочь в викификации того, что наиболее нужно в настоящее время. Номера 100-106 имеются, скачал по ссылке, которую дал Валентин. Мой почтовый адрес: kipruss@mail.ru. После прочтения, думаю, этот раздел можно удалить. :)&lt;/div&gt;</summary>
		<author><name>Kipruss</name></author>	</entry>

	<entry>
		<id>http://wiki.linuxformat.ru/wiki/%D0%9E%D0%B1%D1%81%D1%83%D0%B6%D0%B4%D0%B5%D0%BD%D0%B8%D0%B5:LXF94:OpenVPN</id>
		<title>Обсуждение:LXF94:OpenVPN</title>
		<link rel="alternate" type="text/html" href="http://wiki.linuxformat.ru/wiki/%D0%9E%D0%B1%D1%81%D1%83%D0%B6%D0%B4%D0%B5%D0%BD%D0%B8%D0%B5:LXF94:OpenVPN"/>
				<updated>2008-03-17T09:10:24Z</updated>
		
		<summary type="html">&lt;p&gt;Kipruss: Новая: Lodger, а зачем ты убрал примеры конфигурационных файлов? Они вроде места много не занимают, а без них кар...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Lodger, а зачем ты убрал примеры конфигурационных файлов? Они вроде места много не занимают, а без них картина неполная.&lt;/div&gt;</summary>
		<author><name>Kipruss</name></author>	</entry>

	<entry>
		<id>http://wiki.linuxformat.ru/wiki/%D0%9E%D0%B1%D1%81%D1%83%D0%B6%D0%B4%D0%B5%D0%BD%D0%B8%D0%B5_%D1%83%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA%D0%B0:Kipruss</id>
		<title>Обсуждение участника:Kipruss</title>
		<link rel="alternate" type="text/html" href="http://wiki.linuxformat.ru/wiki/%D0%9E%D0%B1%D1%81%D1%83%D0%B6%D0%B4%D0%B5%D0%BD%D0%B8%D0%B5_%D1%83%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA%D0%B0:Kipruss"/>
				<updated>2008-03-16T20:02:50Z</updated>
		
		<summary type="html">&lt;p&gt;Kipruss: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Kipruss, спасибо конечно за помощь.. но я сам переведу свой номер в вики ;)&lt;br /&gt;
&lt;br /&gt;
О.К., если помощь не требуется, то и ладно. Просто из журнала я понял, что приглашаются все редактировать статьи, которые их интересуют. Я как раз сейчас этой темой заинтересовался - дай, думаю, в Wiki забью, чтобы отовсюду смотреть...&lt;/div&gt;</summary>
		<author><name>Kipruss</name></author>	</entry>

	<entry>
		<id>http://wiki.linuxformat.ru/wiki/LXF94:OpenVPN</id>
		<title>LXF94:OpenVPN</title>
		<link rel="alternate" type="text/html" href="http://wiki.linuxformat.ru/wiki/LXF94:OpenVPN"/>
				<updated>2008-03-15T22:04:29Z</updated>
		
		<summary type="html">&lt;p&gt;Kipruss: /* Шаг 2: Создаем ключи */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== OpenVPN за 10 минут ==&lt;br /&gt;
&lt;br /&gt;
''Технология VPN во многом напоминает перевозку денег в бронированной инкассаторской машине &lt;br /&gt;
по улицам многолюдного города. Но какую модель следует выбрать, чтобы ваши ценности не &lt;br /&gt;
достались злоумышленникам? Спросите у '''Валентина Яценко'''.''&lt;br /&gt;
&lt;br /&gt;
VPN –  Virtual Private Network, Виртуальная Частная Сеть – технология, позволяющая соединять между собой локальные сети и отдельные компьютеры, находящиеся на расстоянии тысяч километров друг от друга; подключаться к локальной сети через Интернет, используя шифрованный канал связи, организовывать безопасный туннель для передачи важных данных... Возможности применения VPN безграничны! Вам необходимо соединить офисы в разных концах страны единой сетью, не прокладывая километры кабелей? Вы хотите подключаться к домашней локальной сети из Интернет-кафе? Требуется передать важные данные на большое расстояние без риска утечки информации? Может быть, большинство данных, которые вы передаете через Интернет, составляют тайну, и их необходимо обезопасить? Если вы хотя бы на один вопрос ответили утвердительно, VPN – это именно то, что вам нужно!&lt;br /&gt;
&lt;br /&gt;
=== Шаг 1: Устанавливаем ===&lt;br /&gt;
&lt;br /&gt;
Пакеты с  ''OpenVPN'' доступны для большинства распространенных дистрибутивов, в том числе для RedHat/Fedora, Mandriva, OpenSUSE, Slackware, Debian и Ubuntu. Если ''OpenVPN'' не включен в ваш любимый дистрибутив, попробуйте поискать пакет на [http://rpmfind.net rpmfind.net] (для систем, использующих RPM) или [http://linuxpackages.net linuxpackages.net] (Slackware и производные) Наконец, программу можно загрузить в исходных текстах с официального сайта ([http://openvpn.net openvpn.net]).&lt;br /&gt;
&lt;br /&gt;
Для установки  ''OpenVPN'' также необходимо установить  ''OpenSSL'' (openssl.org) и  ''liblzo'' (http://www.oberhumer.com/opensource/lzo), которые есть во многих дистрибутивах. Для работы  ''OpenVPN'' нужен модуль ядра  ''tun''. Он присутствует в большинстве систем, но если команда &amp;lt;font color=darkred&amp;gt;modrpobe  tun&amp;lt;/font&amp;gt; завершается с ошибкой «Can’t locale module tun», вам придется пересобрать ядро – о том, как это сделать, подробно рассказано в  [[LXF89]]. Необходимо включить опцию CONFIG_TUN (Device Drivers –&amp;gt; Network device support –&amp;gt; Universal TUN/TAP device driver support). &lt;br /&gt;
&lt;br /&gt;
Если вы собираетесь использовать ''OpenVPN'' постоянно, пропишите модуль ''tun'' в '''/etc/modules''' для автоматической инициализации при загрузке либо включите его непосредственно в ядро. В противном случае перед запуском ''OpenVPN'' вам нужно будет загружать модуль ''tun'' самостоятельно (командой  &amp;lt;font color=darkred&amp;gt;modrpobe  tun&amp;lt;/font&amp;gt;). Если вы планируете предоставлять клиентам доступ в Интернет через  ''VPN'', необходимо настроить NAT (Network Address Translation). Скорее всего, это уже сделано за вас разработчиками дистрибутива, но на случай возникновения проблем имейте в виду, что нам потребуется опция &amp;lt;font color=darkred&amp;gt;CONFIG_IP_NF_TARGET_MASQUERADE&amp;lt;/font&amp;gt; (Networking –&amp;gt; Networking options –&amp;gt; Network packet filtering –&amp;gt; IP tables support –&amp;gt; Full NAT). Для работы с NAT используется утилита  ''iptables'' (см.  [[LXF87/88]]), которая, скорее всего, уже установлена в вашей системе. Проверьте это и, в случае необходимости, добавьте ее через менеджер пакетов вашего дистрибутива.&lt;br /&gt;
&lt;br /&gt;
===Шаг 2: Создаем ключи===&lt;br /&gt;
&lt;br /&gt;
Итак, ''OpenVPN'' установлен. Что дальше? В первую очередь необходимо создать ключи и сертификаты для сервера и клиентов. Скрипты, облегчающие эту задачу, находятся в каталоге '''easy-rsa''' (''см. врезку «Где же easy-rsa?» внизу''). &lt;br /&gt;
&lt;br /&gt;
В первую очередь, отредактируйте расположенный в нем файл vars. Установите значения переменных: &lt;br /&gt;
&lt;br /&gt;
* '''KEY_COUNTRY''' – равным двухсимвольному коду вашей страны (для России это &amp;lt;font color=darkred&amp;gt;RU&amp;lt;/font&amp;gt;).&lt;br /&gt;
* '''KEY_PROVINCE''' – названию вашего региона (например,  &amp;lt;font color=darkred&amp;gt;Moscow region&amp;lt;/font&amp;gt; или &amp;lt;font color=darkred&amp;gt;MSK&amp;lt;/font&amp;gt;).&lt;br /&gt;
* '''KEY_CITY''', соответственно – ваш город (скажем, &amp;lt;font color=darkred&amp;gt;Moscow&amp;lt;/font&amp;gt;).&lt;br /&gt;
* '''KEY_ORG''' – организация (&amp;lt;font color=darkred&amp;gt;OpenVPN Solutions&amp;lt;/font&amp;gt; подойдет).&lt;br /&gt;
* '''KEY_EMAIL''' – ваш e-mail адрес (&amp;lt;font color=darkred&amp;gt;me@my.e-ma.il&amp;lt;/font&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
Все эти данные необходимы для генерации сертификатов и ключей в соответствии со стандартом, поэтому оставлять какие-то переменные пустыми нельзя.&lt;br /&gt;
&lt;br /&gt;
Также можно изменить параметр  &amp;lt;font color=darkred&amp;gt;KEY_SIZE&amp;lt;/font&amp;gt;, отвечающий за размер ключей (максимальный размер ключа, поддерживаемый ''OpenVPN'' – 2048 бит).&lt;br /&gt;
&lt;br /&gt;
Далее необходимо инициализировать переменные, используемые при создании публичного ключа командой&lt;br /&gt;
&lt;br /&gt;
 . ./vars &lt;br /&gt;
&lt;br /&gt;
и, на всякий случай, удалить существующие ключи командой&lt;br /&gt;
&lt;br /&gt;
 ./clean-all&lt;br /&gt;
&lt;br /&gt;
После этого следует сгенерировать корневой сертификат (см. [[LXF93]]):&lt;br /&gt;
&lt;br /&gt;
 ./build-ca&lt;br /&gt;
&lt;br /&gt;
В процессе выполнения последнего скрипта вам будет задано несколько вопросов. Нужно ввести только Common Name для сертификата (например, RootCA), все остальные параметры уже заданы в качестве переменных окружения скриптом vars. &lt;br /&gt;
&lt;br /&gt;
После создания корневого сертификата необходимо сгенерировать для сервера секретный ключ. В этом вам поможет скрипт ''build-key-server''. Как и в предыдущем случае, для большинства вопросов можно оставить ответы по умолчанию. На вопрос о Common Name введите “server”, на два последних вопроса (подписать ли сертификат и – каламбур, но перевод именно такой – сертифицировать ли его) ответьте утвердительно; когда вас спросят о пароле (“A challenge password”) – введите пароль для ключа сервера (запоминать его не нужно). Наберите&lt;br /&gt;
&lt;br /&gt;
 ./build-key-server server&lt;br /&gt;
&lt;br /&gt;
Далее, создайте ключи для необходимого количества клиентов. Эта процедура аналогична созданию ключа для сервера, за исключением того, что для клиентов ключи создаются скриптом &amp;lt;font color=darkred&amp;gt;build-key&amp;lt;/font&amp;gt;, а не &amp;lt;font color=darkred&amp;gt;build-key-server&amp;lt;/font&amp;gt;. У каждого ключа, конечно же, должно быть указано свое значение в поле Common Name:&lt;br /&gt;
&lt;br /&gt;
 ./build-key clientname&lt;br /&gt;
&lt;br /&gt;
Если вы хотите защитить паролем ключи клиентов, воспользуйтесь вместо ''build-key'' скриптом ''build-key-pass''. И наконец, в довершение ко всем сертификатам и ключам необходимо создать файл параметров Диффи (Diffie) и Хеллмэна (Hellman). Алгоритм Диффи и Хеллмэна позволяет обмениваться секретными ключами по небезопасным каналам. Для их генерации запустите скрипт &lt;br /&gt;
''build-dh'' без параметров:&lt;br /&gt;
&lt;br /&gt;
 ./build-dh&lt;br /&gt;
&lt;br /&gt;
Этот процесс занимает определенное время, поэтому владельцам слабых компьютеров стоит попить чаю, вместо того чтобы просто сидеть и ждать окончания работы скрипта. &lt;br /&gt;
&lt;br /&gt;
Если вам уже надоело возиться с ключами, сертификатами и прочим – не падайте духом: осталось только скопировать нужные файлы на клиентские компьютеры. Клиентам необходимы следующие &lt;br /&gt;
файлы:&lt;br /&gt;
&lt;br /&gt;
* '''ca.crt''' (Root CA certificate) необходим серверу и всем клиентам, он не является секретным.&lt;br /&gt;
* '''clientname.crt''' (сертификат клиента  &amp;lt;font color=darkred&amp;gt;clientname&amp;lt;/font&amp;gt;) необходим только клиенту &amp;lt;font color=darkred&amp;gt;clientname&amp;lt;/font&amp;gt;, он не является секретным.&lt;br /&gt;
* '''clientname.key''' (ключ клиента &amp;lt;font color=darkred&amp;gt;clientname&amp;lt;/font&amp;gt;) необходим только клиенту clientname, это секретный ключ.&lt;br /&gt;
&lt;br /&gt;
Эти файлы можно найти в подкаталоге '''keys''' каталога '''easy-rsa'''.&lt;br /&gt;
&lt;br /&gt;
===Шаг 3: Настраиваем===&lt;br /&gt;
&lt;br /&gt;
Итак, у нас есть все необходимые для работы ''OpenVPN'' файлы – все, кроме конфигурационных, созданием которых мы и займемся. Начнем с сервера. Для создания новых конфигурационных файлов удобно использовать примеры из поставки ''OpenVPN'', они находятся в подкаталоге '''sample-config-files''' каталога ''OpenVPN'' ('''../sample-config-files''', если вы находитесь в каталоге '''easy-rsa'''). В принципе, можно использовать стандартный конфигурационный файл для сервера, изменив некоторые параметры. Вот список этих параметров (некоторые из них, например, &amp;lt;font color=darkred&amp;gt;port&amp;lt;/font&amp;gt; и &amp;lt;font color=darkred&amp;gt;protocol&amp;lt;/font&amp;gt;, изменять не обязательно):&lt;br /&gt;
&lt;br /&gt;
* '''ca''' – полный путь до корневого сертификата, который мы создали скриптом ''build-ca''.&lt;br /&gt;
* '''cert''' – полный путь до сертификата сервера, который мы создали его скриптом ''build-key-server''. &lt;br /&gt;
* '''key''' – путь до ключа сервера, созданного все тем же скриптом ''build-key-server''.&lt;br /&gt;
* '''dh''' – путь до файла параметров Диффи и Хеллмэна, созданного скриптом ''build-dh''.&lt;br /&gt;
* '''server''' – режим запуска ''OpenVPN''. В строке с режимом запуска для сервера должна быть указана подсеть и маска подсети (пример – &amp;lt;font color=darkred&amp;gt;server 10.8.0.0 255.255.255.0&amp;lt;/font&amp;gt;). Подсеть, указанная по умолчанию – 10.8.0.0/24. Если в вашей сети она уже используется, задайте другую локальную подсеть.&lt;br /&gt;
* '''port''' – порт, на котором будет запущен сервер. Стандартный порт ''OpenVPN'' – 1194, но вы можете изменить его по своему желанию.&lt;br /&gt;
* '''protocol''' – протокол. По умолчанию ''OpenVPN'' использует экономичный UDP, но вы можете предпочесть надежный TCP.&lt;br /&gt;
&lt;br /&gt;
Если вы не сторонник конфигураций по умолчанию, отредактируйте файл в соответствии со своими предпочтениями. Если же вы не хотите тратить на это время, то можете использовать мой вариант, составленный специально для этой статьи. Вы найдете его на прилагаемом к журналу диске.&lt;br /&gt;
&lt;br /&gt;
Для создания конфигурационного файла клиента также можно использовать пример, идущий в поставке с ''OpenVPN''. В нем надо изменить пути к необходимым файлам на свои, указать адрес и порт сервера в директиве remote и, кроме того, удостоверится, что выбранные настройки совпадают с настройками сервера (протокол, сжатие и т.п.). Пример конфигурационного файла клиента можно также взять с диска LXF. Тех же, кто хочет предоставлять  ''VPN''-клиентам доступ в Интернет, ждет еще один шаг: включение NAT (Network Address Translation, Трансляция сетевых адресов) и настройка маршрутизации. Для начала необходимо написать соответствующее правило ''IPTables'':&lt;br /&gt;
&lt;br /&gt;
 iptables -t nat -A POSTROUTING -s маска_подсети -o внешний_интерфейс -j MASQUERADE &lt;br /&gt;
&lt;br /&gt;
например:&lt;br /&gt;
&lt;br /&gt;
 iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o ppp0 -j MASQUERADE&lt;br /&gt;
&lt;br /&gt;
Его необходимо сохранить, добавив в файл с правилами iptables или в скрипты загрузки. Затем необходимо включить маршрутизацию, записав в  '''/etc/sysctl.conf''' строку  &amp;lt;font color=darkred&amp;gt;“net.ipv4.ip_forward = 1”&amp;lt;/font&amp;gt; и выполнив команду&lt;br /&gt;
&lt;br /&gt;
 sysctl -w net.ipv4.ip_forward=1&lt;br /&gt;
&lt;br /&gt;
===Шаг 4: Проверка связи===&lt;br /&gt;
&lt;br /&gt;
Если вы дошли до этого места, спешу вас обрадовать – остался всего &lt;br /&gt;
один, очень простой шаг. Надо запустить ''OpenVPN'' на сервере, а потом &lt;br /&gt;
и на всех клиентах. Для сервера: перейдите в каталог с ключами (keys) &lt;br /&gt;
и выполните:&lt;br /&gt;
&lt;br /&gt;
 openvpn --config ../sample-config-files/server.conf&lt;br /&gt;
&lt;br /&gt;
После чего вы должны увидеть подобные строки:&lt;br /&gt;
&lt;br /&gt;
 Thu Aug 31 12:04:20 2006 OpenVPN 2.0.7 i486-pc-linux-gnu [SSL] [LZO] [EPOLL] built on Jul 22 2006&lt;br /&gt;
 Thu Aug 31 12:04:20 2006 Diffie-Hellman initialized with 1024 bit key&lt;br /&gt;
 Thu Aug 31 12:04:20 2006 TLS-Auth MTU parms [ L:1542 D:138 EF:38 EB:0 ET:0 EL:0 ]&lt;br /&gt;
 Thu Aug 31 12:04:20 2006 TUN/TAP device tun0 opened  &amp;lt;Skipped&amp;gt;&lt;br /&gt;
 Thu Aug 31 12:04:20 2006 Initialization Sequence Completed&lt;br /&gt;
&lt;br /&gt;
На клиенте (клиентах) выполните команду&lt;br /&gt;
&lt;br /&gt;
 openvpn --config client.conf&lt;br /&gt;
&lt;br /&gt;
после чего проверьте наличие &amp;lt;font color=darkred&amp;gt;tun&amp;lt;/font&amp;gt;-интерфейса командой &amp;lt;font color=darkred&amp;gt;ifconfig&amp;lt;/font&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
 ifconfig tun0&lt;br /&gt;
 tun0 Link encap:UNSPEC HWaddr 00:00:00:00:00:00&lt;br /&gt;
 inet addr:85.140.161.153 P-t-P:10.8.0.2 Mask:255.255.255.0&lt;br /&gt;
 UP POINTOPOINT RUNNING MTU:1500 Metric:1&lt;br /&gt;
 RX packets:0 errors:0 dropped:0 overruns:0 frame:0&lt;br /&gt;
 TX packets:0 errors:0 dropped:0 overruns:0 carrier:0&lt;br /&gt;
 collisions:0 txqueuelen:10&lt;br /&gt;
 RX bytes:0 (0.0 B) TX bytes:0 (0.0 B) &lt;br /&gt;
&lt;br /&gt;
Обратите внимание на статус (UP): он означает, что интерфейс находится в активном состоянии. Если в вашей системе имеется более одного   &amp;lt;font color=darkred&amp;gt;tun&amp;lt;/font&amp;gt;-интерфейса (это можно проверить командой   &amp;lt;font color=darkred&amp;gt;ifconfig&amp;lt;/font&amp;gt; без параметров), замените &amp;lt;font color=darkred&amp;gt;tun0&amp;lt;/font&amp;gt; на &amp;lt;font color=darkred&amp;gt;tun1&amp;lt;/font&amp;gt;, &amp;lt;font color=darkred&amp;gt;tun2&amp;lt;/font&amp;gt; и т.п. &lt;br /&gt;
&lt;br /&gt;
Если интерфейс сконфигурирован правильно, проверьте доступность других хостов. Когда путь к файлу соответствий «клиент-IP» (опция  &amp;lt;font color=darkred&amp;gt;ifconfig-pool-persist&amp;lt;/font&amp;gt; в конфигурационном файле сервера) не указан, их адреса назначаются сервером  ''OpenVPN'' случайным образом. Наберите:&lt;br /&gt;
&lt;br /&gt;
 ping 10.8.0.2&lt;br /&gt;
&lt;br /&gt;
Вместо  &amp;lt;font color=darkred&amp;gt;10.8.0.2&amp;lt;/font&amp;gt; подставьте IP-адрес, выданный командой  &amp;lt;font color=darkred&amp;gt;ifconfig&amp;lt;/font&amp;gt; на другой машине. В случае, если интерфейс сконфигурирован правильно, но ответа не приходит, необходимо выяснить, разрешают ли правила межсетевого экрана ICMP-трафик.&lt;br /&gt;
&lt;br /&gt;
Приходящие ответы свидетельствуют о том, что  ''VPN''-соединение установлено и работает. &lt;br /&gt;
&lt;br /&gt;
===Примечание 1. Врезки===&lt;br /&gt;
&lt;br /&gt;
'''Почему OpenVPN?'''&lt;br /&gt;
&lt;br /&gt;
Существует множество реализаций VPN, самые популярные из них – PPTP, ''FreeS/WAN'' и ''OpenVPN''. Почему же в этой статье мы рассмотрим именно последний вариант? PPTP навевает мысли о Microsoft, ''FreeS/WAN'' давно не обновлялся – на его официальном сайте сказано, что последняя версия датируется 22 апреля 2004 года, более того, дальнейших обновлений ''FreeS/WAN'' не будет, а это, согласитесь, недопустимо для проекта, одной из целей которого является обеспечение безопасности... ''OpenVPN'' же активно развивается и регулярно обновляется, использует стойкие криптографические алгоритмы и предлагает множество способов идентификации, в том числе комбинированных, что немаловажно для безопасности. Кроме того, ''OpenVPN'' работает на большинстве распространенных платформ – Linux, Windows 2000/XP, OpenBSD, FreeBSD, NetBSD, Mac OS X, Solaris, благодаря чему его можно использовать в гетерогенных сетях. Все это, безусловно, делает ''OpenVPN'' лучшим выбором для организации VPN.&lt;br /&gt;
&lt;br /&gt;
'''Где искать easy-rsa?'''&lt;br /&gt;
&lt;br /&gt;
Каталог '''easy-rsa''' может находиться в  '''/usr/share/doc/openvpn-2.0''',  '''/usr/share/doc/openvpn''', '''/usr/share/doc/openvpn/examples''', '''/usr/share/openvpn''' или в '''/usr/share/doc/packages/openvpn''' – в зависимости от дистрибутива. Его также можно найти в архиве с исходными текстами.&lt;br /&gt;
&lt;br /&gt;
===Примечание 2. Примеры конфигурационных файлов (с диска)===&lt;br /&gt;
&lt;br /&gt;
'''server.conf'''&lt;br /&gt;
&lt;br /&gt;
 # Конфигурационный файл сервера OpenVPN (Linux-версия)&lt;br /&gt;
 # Порт&lt;br /&gt;
 port 1194&lt;br /&gt;
 # Протокол&lt;br /&gt;
 proto udp&lt;br /&gt;
 # Использовать tun (tunneling) вместо tap (ethernet bridging)&lt;br /&gt;
 dev tun&lt;br /&gt;
 # Полные пути к необходимым файлам (измените на свои пути)&lt;br /&gt;
 ca /usr/local/etc/openvpn/easy-rsa/keys/ca.crt&lt;br /&gt;
 cert /usr/local/etc/openvpn/easy-rsa/keys/server.crt&lt;br /&gt;
 key /usr/local/etc/openvpn/easy-rsa/keys/server.key&lt;br /&gt;
 # Путь к dh (измените на свой)&lt;br /&gt;
 dh dh1024.pem&lt;br /&gt;
 # Режим сервера,подсеть 10.8.0.0/24&lt;br /&gt;
 server 10.8.0.0 255.255.255.0&lt;br /&gt;
 # Файл соответствий клиент - виртуальный IP (по-умолчанию выдаётся динамический IP)&lt;br /&gt;
 ifconfig-pool-persist ipp.txt&lt;br /&gt;
 # Раскомментируйте  если хотите, чтобы клиенты &amp;quot;видели&amp;quot; друг друга&lt;br /&gt;
 ;client-to-client&lt;br /&gt;
 # Отключать после ... секунд без обмена данными (второй параметр)&lt;br /&gt;
 keepalive 10 120&lt;br /&gt;
 # Включить сжатие&lt;br /&gt;
 comp-lzo&lt;br /&gt;
 # Максимум клиентов одновременно - раскомментируйте если вам нужно ограничение по числу клиентов&lt;br /&gt;
 ;max-clients 100&lt;br /&gt;
 # Снижение привилегий до указанных (в целях безопасности) (раскомментируйте если необходимо, в этом случае OpenVPN надо запускать с правами root)&lt;br /&gt;
 ;user nobody&lt;br /&gt;
 ;group nogroup&lt;br /&gt;
&lt;br /&gt;
'''client.conf'''&lt;br /&gt;
&lt;br /&gt;
 # Конфигурационный файл клиента OpenVPN (Linux-версия)&lt;br /&gt;
 client&lt;br /&gt;
 # Использовать tun (tunneling) вместо tap (ethernet bridging)&lt;br /&gt;
 dev tun&lt;br /&gt;
 # Протокол&lt;br /&gt;
 proto udp&lt;br /&gt;
 # Адрес и порт сервера&lt;br /&gt;
 remote 192.168.0.1 1194&lt;br /&gt;
 # Если не получается установить соответствие между именем и адресом сервера - продолжать попытки&lt;br /&gt;
 resolv-retry infinite&lt;br /&gt;
 # Для клиента не нужно слушать порты&lt;br /&gt;
 nobind&lt;br /&gt;
 # Снижение привилегий до указанных (в целях безопасности) (раскомментируйте если необходимо, в этом случае OpenVPN надо запускать с правами root)&lt;br /&gt;
 ;user nobody&lt;br /&gt;
 ;group nogroup&lt;br /&gt;
 # Сохранять определённые параметры&lt;br /&gt;
 persist-key&lt;br /&gt;
 persist-tun&lt;br /&gt;
 # Полные пути к необходимым файлам (измените на свои пути)&lt;br /&gt;
 ca /home/qweo/tmp/article/keys/ca.crt&lt;br /&gt;
 cert /home/qweo/tmp/article/keys/clientname.crt&lt;br /&gt;
 key /home/qweo/tmp/article/keys/clientname.key&lt;br /&gt;
 # Включить сжатие (не включайте сжатие если на сервере оно отключено)&lt;br /&gt;
 comp-lzo&lt;br /&gt;
 # Уровень журналирования&lt;br /&gt;
 verb 3&lt;br /&gt;
&lt;br /&gt;
--[[Участник:Kipruss|Kipruss]] 00:35, 16 марта 2008 (MSK)&lt;/div&gt;</summary>
		<author><name>Kipruss</name></author>	</entry>

	<entry>
		<id>http://wiki.linuxformat.ru/wiki/LXF87/88</id>
		<title>LXF87/88</title>
		<link rel="alternate" type="text/html" href="http://wiki.linuxformat.ru/wiki/LXF87/88"/>
				<updated>2008-03-15T21:45:25Z</updated>
		
		<summary type="html">&lt;p&gt;Kipruss: Внес из-за отсутствия в содержании. Пока пустой&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==LXF87/88==&lt;/div&gt;</summary>
		<author><name>Kipruss</name></author>	</entry>

	<entry>
		<id>http://wiki.linuxformat.ru/wiki/LXF94:OpenVPN</id>
		<title>LXF94:OpenVPN</title>
		<link rel="alternate" type="text/html" href="http://wiki.linuxformat.ru/wiki/LXF94:OpenVPN"/>
				<updated>2008-03-15T21:44:06Z</updated>
		
		<summary type="html">&lt;p&gt;Kipruss: /* OpenVPN за 10 минут */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== OpenVPN за 10 минут ==&lt;br /&gt;
&lt;br /&gt;
''Технология VPN во многом напоминает перевозку денег в бронированной инкассаторской машине &lt;br /&gt;
по улицам многолюдного города. Но какую модель следует выбрать, чтобы ваши ценности не &lt;br /&gt;
достались злоумышленникам? Спросите у '''Валентина Яценко'''.''&lt;br /&gt;
&lt;br /&gt;
VPN –  Virtual Private Network, Виртуальная Частная Сеть – технология, позволяющая соединять между собой локальные сети и отдельные компьютеры, находящиеся на расстоянии тысяч километров друг от друга; подключаться к локальной сети через Интернет, используя шифрованный канал связи, организовывать безопасный туннель для передачи важных данных... Возможности применения VPN безграничны! Вам необходимо соединить офисы в разных концах страны единой сетью, не прокладывая километры кабелей? Вы хотите подключаться к домашней локальной сети из Интернет-кафе? Требуется передать важные данные на большое расстояние без риска утечки информации? Может быть, большинство данных, которые вы передаете через Интернет, составляют тайну, и их необходимо обезопасить? Если вы хотя бы на один вопрос ответили утвердительно, VPN – это именно то, что вам нужно!&lt;br /&gt;
&lt;br /&gt;
=== Шаг 1: Устанавливаем ===&lt;br /&gt;
&lt;br /&gt;
Пакеты с  ''OpenVPN'' доступны для большинства распространенных дистрибутивов, в том числе для RedHat/Fedora, Mandriva, OpenSUSE, Slackware, Debian и Ubuntu. Если ''OpenVPN'' не включен в ваш любимый дистрибутив, попробуйте поискать пакет на [http://rpmfind.net rpmfind.net] (для систем, использующих RPM) или [http://linuxpackages.net linuxpackages.net] (Slackware и производные) Наконец, программу можно загрузить в исходных текстах с официального сайта ([http://openvpn.net openvpn.net]).&lt;br /&gt;
&lt;br /&gt;
Для установки  ''OpenVPN'' также необходимо установить  ''OpenSSL'' (openssl.org) и  ''liblzo'' (http://www.oberhumer.com/opensource/lzo), которые есть во многих дистрибутивах. Для работы  ''OpenVPN'' нужен модуль ядра  ''tun''. Он присутствует в большинстве систем, но если команда &amp;lt;font color=darkred&amp;gt;modrpobe  tun&amp;lt;/font&amp;gt; завершается с ошибкой «Can’t locale module tun», вам придется пересобрать ядро – о том, как это сделать, подробно рассказано в  [[LXF89]]. Необходимо включить опцию CONFIG_TUN (Device Drivers –&amp;gt; Network device support –&amp;gt; Universal TUN/TAP device driver support). &lt;br /&gt;
&lt;br /&gt;
Если вы собираетесь использовать ''OpenVPN'' постоянно, пропишите модуль ''tun'' в '''/etc/modules''' для автоматической инициализации при загрузке либо включите его непосредственно в ядро. В противном случае перед запуском ''OpenVPN'' вам нужно будет загружать модуль ''tun'' самостоятельно (командой  &amp;lt;font color=darkred&amp;gt;modrpobe  tun&amp;lt;/font&amp;gt;). Если вы планируете предоставлять клиентам доступ в Интернет через  ''VPN'', необходимо настроить NAT (Network Address Translation). Скорее всего, это уже сделано за вас разработчиками дистрибутива, но на случай возникновения проблем имейте в виду, что нам потребуется опция &amp;lt;font color=darkred&amp;gt;CONFIG_IP_NF_TARGET_MASQUERADE&amp;lt;/font&amp;gt; (Networking –&amp;gt; Networking options –&amp;gt; Network packet filtering –&amp;gt; IP tables support –&amp;gt; Full NAT). Для работы с NAT используется утилита  ''iptables'' (см.  [[LXF87/88]]), которая, скорее всего, уже установлена в вашей системе. Проверьте это и, в случае необходимости, добавьте ее через менеджер пакетов вашего дистрибутива.&lt;br /&gt;
&lt;br /&gt;
===Шаг 2: Создаем ключи===&lt;br /&gt;
&lt;br /&gt;
Итак, ''OpenVPN'' установлен. Что дальше? В первую очередь необходимо создать ключи и сертификаты для сервера и клиентов. Скрипты, облегчающие эту задачу, находятся в каталоге '''easy-rsa''' (''см. врезку «Где же easy-rsa?» внизу''). &lt;br /&gt;
&lt;br /&gt;
В первую очередь, отредактируйте расположенный в нем файл vars. Установите значения переменных: &lt;br /&gt;
&lt;br /&gt;
* '''KEY_COUNTRY''' – равным двухсимвольному коду вашей страны (для России это &amp;lt;font color=darkred&amp;gt;RU&amp;lt;/font&amp;gt;).&lt;br /&gt;
* '''KEY_PROVINCE''' – названию вашего региона (например,  &amp;lt;font color=darkred&amp;gt;Moscow region&amp;lt;/font&amp;gt; или &amp;lt;font color=darkred&amp;gt;MSK&amp;lt;/font&amp;gt;).&lt;br /&gt;
* '''KEY_CITY''', соответственно – ваш город (скажем, &amp;lt;font color=darkred&amp;gt;Moscow&amp;lt;/font&amp;gt;).&lt;br /&gt;
* '''KEY_ORG''' – организация (&amp;lt;font color=darkred&amp;gt;OpenVPN Solutions&amp;lt;/font&amp;gt; подойдет).&lt;br /&gt;
* '''KEY_EMAIL''' – ваш e-mail адрес (&amp;lt;font color=darkred&amp;gt;me@my.e-ma.il&amp;lt;/font&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
Все эти данные необходимы для генерации сертификатов и ключей в соответствии со стандартом, поэтому оставлять какие-то переменные пустыми нельзя.&lt;br /&gt;
&lt;br /&gt;
Также можно изменить параметр  &amp;lt;font color=darkred&amp;gt;KEY_SIZE&amp;lt;/font&amp;gt;, отвечающий за размер ключей (максимальный размер ключа, поддерживаемый ''OpenVPN'' – 2048 бит).&lt;br /&gt;
&lt;br /&gt;
Далее необходимо инициализировать переменные, используемые при создании публичного ключа командой&lt;br /&gt;
&lt;br /&gt;
 . ./vars &lt;br /&gt;
&lt;br /&gt;
и, на всякий случай, удалить существующие ключи командой&lt;br /&gt;
&lt;br /&gt;
 ./clean-all&lt;br /&gt;
&lt;br /&gt;
После этого следует сгенерировать корневой сертификат (см. [[LXF93]]):&lt;br /&gt;
&lt;br /&gt;
 ./build-ca&lt;br /&gt;
&lt;br /&gt;
В процессе выполнения последнего скрипта вам будет задано несколько вопросов. Нужно ввести только Common Name для сертификата (например, RootCA), все остальные параметры уже заданы в качестве переменных окружения скриптом vars. &lt;br /&gt;
&lt;br /&gt;
После создания корневого сертификата необходимо сгенерировать для сервера секретный ключ. В этом вам поможет скрипт ''build-key-server''. Как и в предыдущем случае, для большинства вопросов &lt;br /&gt;
можно оставить ответы по умолчанию. На вопрос о Common Name введите “server”, на два последних вопроса (подписать ли сертификат и – каламбур, но перевод именно такой – сертифицировать ли &lt;br /&gt;
его) ответьте утвердительно; когда вас спросят о пароле (“A challenge password”) – введите пароль для ключа сервера (запоминать его не нужно). Наберите&lt;br /&gt;
&lt;br /&gt;
 ./build-key-server server&lt;br /&gt;
&lt;br /&gt;
Далее, создайте ключи для необходимого количества клиентов. Эта процедура аналогична созданию ключа для сервера, за исключением того, что для клиентов ключи создаются скриптом &amp;lt;font color=darkred&amp;gt;build-key&amp;lt;/font&amp;gt;, а не &amp;lt;font color=darkred&amp;gt;build-key-server&amp;lt;/font&amp;gt;. У каждого ключа, конечно же, должно быть указано свое значение в поле Common Name:&lt;br /&gt;
&lt;br /&gt;
 ./build-key clientname&lt;br /&gt;
&lt;br /&gt;
Если вы хотите защитить паролем ключи клиентов, воспользуйтесь вместо ''build-key'' скриптом ''build-key-pass''. И наконец, в довершение ко всем сертификатам и ключам необходимо создать файл параметров Диффи (Diffie) и Хеллмэна (Hellman). Алгоритм Диффи и Хеллмэна позволяет обмениваться секретными ключами по небезопасным каналам. Для их генерации запустите скрипт &lt;br /&gt;
''build-dh'' без параметров:&lt;br /&gt;
&lt;br /&gt;
 ./build-dh&lt;br /&gt;
&lt;br /&gt;
Этот процесс занимает определенное время, поэтому владельцам слабых компьютеров стоит попить чаю, вместо того чтобы просто сидеть и ждать окончания работы скрипта. &lt;br /&gt;
&lt;br /&gt;
Если вам уже надоело возиться с ключами, сертификатами и прочим – не падайте духом: осталось только скопировать нужные файлы на клиентские компьютеры. Клиентам необходимы следующие &lt;br /&gt;
файлы:&lt;br /&gt;
&lt;br /&gt;
* '''ca.crt''' (Root CA certificate) необходим серверу и всем клиентам, он не &lt;br /&gt;
является секретным.&lt;br /&gt;
* '''clientname.crt''' (сертификат клиента  &amp;lt;font color=darkred&amp;gt;clientname&amp;lt;/font&amp;gt;) необходим только клиенту &amp;lt;font color=darkred&amp;gt;clientname&amp;lt;/font&amp;gt;, он не является секретным.&lt;br /&gt;
* '''clientname.key''' (ключ клиента &amp;lt;font color=darkred&amp;gt;clientname&amp;lt;/font&amp;gt;) необходим только клиенту clientname, это секретный ключ.&lt;br /&gt;
&lt;br /&gt;
Эти файлы можно найти в подкаталоге '''keys''' каталога '''easy-rsa'''.&lt;br /&gt;
&lt;br /&gt;
===Шаг 3: Настраиваем===&lt;br /&gt;
&lt;br /&gt;
Итак, у нас есть все необходимые для работы ''OpenVPN'' файлы – все, кроме конфигурационных, созданием которых мы и займемся. Начнем с сервера. Для создания новых конфигурационных файлов удобно использовать примеры из поставки ''OpenVPN'', они находятся в подкаталоге '''sample-config-files''' каталога ''OpenVPN'' ('''../sample-config-files''', если вы находитесь в каталоге '''easy-rsa'''). В принципе, можно использовать стандартный конфигурационный файл для сервера, изменив некоторые параметры. Вот список этих параметров (некоторые из них, например, &amp;lt;font color=darkred&amp;gt;port&amp;lt;/font&amp;gt; и &amp;lt;font color=darkred&amp;gt;protocol&amp;lt;/font&amp;gt;, изменять не обязательно):&lt;br /&gt;
&lt;br /&gt;
* '''ca''' – полный путь до корневого сертификата, который мы создали скриптом ''build-ca''.&lt;br /&gt;
* '''cert''' – полный путь до сертификата сервера, который мы создали его скриптом ''build-key-server''. &lt;br /&gt;
* '''key''' – путь до ключа сервера, созданного все тем же скриптом ''build-key-server''.&lt;br /&gt;
* '''dh''' – путь до файла параметров Диффи и Хеллмэна, созданного скриптом ''build-dh''.&lt;br /&gt;
* '''server''' – режим запуска ''OpenVPN''. В строке с режимом запуска для сервера должна быть указана подсеть и маска подсети (пример – &amp;lt;font color=darkred&amp;gt;server 10.8.0.0 255.255.255.0&amp;lt;/font&amp;gt;). Подсеть, указанная по умолчанию – 10.8.0.0/24. Если в вашей сети она уже используется, задайте другую локальную подсеть.&lt;br /&gt;
* '''port''' – порт, на котором будет запущен сервер. Стандартный порт ''OpenVPN'' – 1194, но вы можете изменить его по своему желанию.&lt;br /&gt;
* '''protocol''' – протокол. По умолчанию ''OpenVPN'' использует экономичный UDP, но вы можете предпочесть надежный TCP.&lt;br /&gt;
&lt;br /&gt;
Если вы не сторонник конфигураций по умолчанию, отредактируйте файл в соответствии со своими предпочтениями. Если же вы не хотите тратить на это время, то можете использовать мой вариант, составленный специально для этой статьи. Вы найдете его на прилагаемом к журналу диске.&lt;br /&gt;
&lt;br /&gt;
Для создания конфигурационного файла клиента также можно использовать пример, идущий в поставке с ''OpenVPN''. В нем надо изменить пути к необходимым файлам на свои, указать адрес и порт сервера в директиве remote и, кроме того, удостоверится, что выбранные настройки совпадают с настройками сервера (протокол, сжатие и т.п.). Пример конфигурационного файла клиента можно также взять с диска LXF. Тех же, кто хочет предоставлять  ''VPN''-клиентам доступ в Интернет, ждет еще один шаг: включение NAT (Network Address Translation, Трансляция сетевых адресов) и настройка маршрутизации. Для начала необходимо написать соответствующее правило ''IPTables'':&lt;br /&gt;
&lt;br /&gt;
 iptables -t nat -A POSTROUTING -s маска_подсети -o внешний_интерфейс -j MASQUERADE &lt;br /&gt;
&lt;br /&gt;
например:&lt;br /&gt;
&lt;br /&gt;
 iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o ppp0 -j MASQUERADE&lt;br /&gt;
&lt;br /&gt;
Его необходимо сохранить, добавив в файл с правилами iptables или в скрипты загрузки. Затем необходимо включить маршрутизацию, записав в  '''/etc/sysctl.conf''' строку  &amp;lt;font color=darkred&amp;gt;“net.ipv4.ip_forward = 1”&amp;lt;/font&amp;gt; и выполнив команду&lt;br /&gt;
&lt;br /&gt;
 sysctl -w net.ipv4.ip_forward=1&lt;br /&gt;
&lt;br /&gt;
===Шаг 4: Проверка связи===&lt;br /&gt;
&lt;br /&gt;
Если вы дошли до этого места, спешу вас обрадовать – остался всего &lt;br /&gt;
один, очень простой шаг. Надо запустить ''OpenVPN'' на сервере, а потом &lt;br /&gt;
и на всех клиентах. Для сервера: перейдите в каталог с ключами (keys) &lt;br /&gt;
и выполните:&lt;br /&gt;
&lt;br /&gt;
 openvpn --config ../sample-config-files/server.conf&lt;br /&gt;
&lt;br /&gt;
После чего вы должны увидеть подобные строки:&lt;br /&gt;
&lt;br /&gt;
 Thu Aug 31 12:04:20 2006 OpenVPN 2.0.7 i486-pc-linux-gnu [SSL] [LZO] [EPOLL] built on Jul 22 2006&lt;br /&gt;
 Thu Aug 31 12:04:20 2006 Diffie-Hellman initialized with 1024 bit key&lt;br /&gt;
 Thu Aug 31 12:04:20 2006 TLS-Auth MTU parms [ L:1542 D:138 EF:38 EB:0 ET:0 EL:0 ]&lt;br /&gt;
 Thu Aug 31 12:04:20 2006 TUN/TAP device tun0 opened  &amp;lt;Skipped&amp;gt;&lt;br /&gt;
 Thu Aug 31 12:04:20 2006 Initialization Sequence Completed&lt;br /&gt;
&lt;br /&gt;
На клиенте (клиентах) выполните команду&lt;br /&gt;
&lt;br /&gt;
 openvpn --config client.conf&lt;br /&gt;
&lt;br /&gt;
после чего проверьте наличие &amp;lt;font color=darkred&amp;gt;tun&amp;lt;/font&amp;gt;-интерфейса командой &amp;lt;font color=darkred&amp;gt;ifconfig&amp;lt;/font&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
 ifconfig tun0&lt;br /&gt;
 tun0 Link encap:UNSPEC HWaddr 00:00:00:00:00:00&lt;br /&gt;
 inet addr:85.140.161.153 P-t-P:10.8.0.2 Mask:255.255.255.0&lt;br /&gt;
 UP POINTOPOINT RUNNING MTU:1500 Metric:1&lt;br /&gt;
 RX packets:0 errors:0 dropped:0 overruns:0 frame:0&lt;br /&gt;
 TX packets:0 errors:0 dropped:0 overruns:0 carrier:0&lt;br /&gt;
 collisions:0 txqueuelen:10&lt;br /&gt;
 RX bytes:0 (0.0 B) TX bytes:0 (0.0 B) &lt;br /&gt;
&lt;br /&gt;
Обратите внимание на статус (UP): он означает, что интерфейс находится в активном состоянии. Если в вашей системе имеется более одного   &amp;lt;font color=darkred&amp;gt;tun&amp;lt;/font&amp;gt;-интерфейса (это можно проверить командой   &amp;lt;font color=darkred&amp;gt;ifconfig&amp;lt;/font&amp;gt; без параметров), замените &amp;lt;font color=darkred&amp;gt;tun0&amp;lt;/font&amp;gt; на &amp;lt;font color=darkred&amp;gt;tun1&amp;lt;/font&amp;gt;, &amp;lt;font color=darkred&amp;gt;tun2&amp;lt;/font&amp;gt; и т.п. &lt;br /&gt;
&lt;br /&gt;
Если интерфейс сконфигурирован правильно, проверьте доступность других хостов. Когда путь к файлу соответствий «клиент-IP» (опция  &amp;lt;font color=darkred&amp;gt;ifconfig-pool-persist&amp;lt;/font&amp;gt; в конфигурационном файле сервера) не указан, их адреса назначаются сервером  ''OpenVPN'' случайным образом. Наберите:&lt;br /&gt;
&lt;br /&gt;
 ping 10.8.0.2&lt;br /&gt;
&lt;br /&gt;
Вместо  &amp;lt;font color=darkred&amp;gt;10.8.0.2&amp;lt;/font&amp;gt; подставьте IP-адрес, выданный командой  &amp;lt;font color=darkred&amp;gt;ifconfig&amp;lt;/font&amp;gt; на другой машине. В случае, если интерфейс сконфигурирован правильно, но ответа не приходит, необходимо выяснить, разрешают ли правила межсетевого экрана ICMP-трафик.&lt;br /&gt;
&lt;br /&gt;
Приходящие ответы свидетельствуют о том, что  ''VPN''-соединение установлено и работает. &lt;br /&gt;
&lt;br /&gt;
===Примечание 1. Врезки===&lt;br /&gt;
&lt;br /&gt;
'''Почему OpenVPN?'''&lt;br /&gt;
&lt;br /&gt;
Существует множество реализаций VPN, самые популярные из них – PPTP, ''FreeS/WAN'' и ''OpenVPN''. Почему же в этой статье мы рассмотрим именно последний вариант? PPTP навевает мысли о Microsoft, ''FreeS/WAN'' давно не обновлялся – на его официальном сайте сказано, что последняя версия датируется 22 апреля 2004 года, более того, дальнейших обновлений ''FreeS/WAN'' не будет, а это, согласитесь, недопустимо для проекта, одной из целей которого является обеспечение безопасности... ''OpenVPN'' же активно развивается и регулярно обновляется, использует стойкие криптографические алгоритмы и предлагает множество способов идентификации, в том числе комбинированных, что немаловажно для безопасности. Кроме того, ''OpenVPN'' работает на большинстве распространенных платформ – Linux, Windows 2000/XP, OpenBSD, FreeBSD, NetBSD, Mac OS X, Solaris, благодаря чему его можно использовать в гетерогенных сетях. Все это, безусловно, делает ''OpenVPN'' лучшим выбором для организации VPN.&lt;br /&gt;
&lt;br /&gt;
'''Где искать easy-rsa?'''&lt;br /&gt;
&lt;br /&gt;
Каталог '''easy-rsa''' может находиться в  '''/usr/share/doc/openvpn-2.0''',  '''/usr/share/doc/openvpn''', '''/usr/share/doc/openvpn/examples''', '''/usr/share/openvpn''' или в '''/usr/share/doc/packages/openvpn''' – в зависимости от дистрибутива. Его также можно найти в архиве с исходными текстами.&lt;br /&gt;
&lt;br /&gt;
===Примечание 2. Примеры конфигурационных файлов (с диска)===&lt;br /&gt;
&lt;br /&gt;
'''server.conf'''&lt;br /&gt;
&lt;br /&gt;
 # Конфигурационный файл сервера OpenVPN (Linux-версия)&lt;br /&gt;
 # Порт&lt;br /&gt;
 port 1194&lt;br /&gt;
 # Протокол&lt;br /&gt;
 proto udp&lt;br /&gt;
 # Использовать tun (tunneling) вместо tap (ethernet bridging)&lt;br /&gt;
 dev tun&lt;br /&gt;
 # Полные пути к необходимым файлам (измените на свои пути)&lt;br /&gt;
 ca /usr/local/etc/openvpn/easy-rsa/keys/ca.crt&lt;br /&gt;
 cert /usr/local/etc/openvpn/easy-rsa/keys/server.crt&lt;br /&gt;
 key /usr/local/etc/openvpn/easy-rsa/keys/server.key&lt;br /&gt;
 # Путь к dh (измените на свой)&lt;br /&gt;
 dh dh1024.pem&lt;br /&gt;
 # Режим сервера,подсеть 10.8.0.0/24&lt;br /&gt;
 server 10.8.0.0 255.255.255.0&lt;br /&gt;
 # Файл соответствий клиент - виртуальный IP (по-умолчанию выдаётся динамический IP)&lt;br /&gt;
 ifconfig-pool-persist ipp.txt&lt;br /&gt;
 # Раскомментируйте  если хотите, чтобы клиенты &amp;quot;видели&amp;quot; друг друга&lt;br /&gt;
 ;client-to-client&lt;br /&gt;
 # Отключать после ... секунд без обмена данными (второй параметр)&lt;br /&gt;
 keepalive 10 120&lt;br /&gt;
 # Включить сжатие&lt;br /&gt;
 comp-lzo&lt;br /&gt;
 # Максимум клиентов одновременно - раскомментируйте если вам нужно ограничение по числу клиентов&lt;br /&gt;
 ;max-clients 100&lt;br /&gt;
 # Снижение привилегий до указанных (в целях безопасности) (раскомментируйте если необходимо, в этом случае OpenVPN надо запускать с правами root)&lt;br /&gt;
 ;user nobody&lt;br /&gt;
 ;group nogroup&lt;br /&gt;
&lt;br /&gt;
'''client.conf'''&lt;br /&gt;
&lt;br /&gt;
 # Конфигурационный файл клиента OpenVPN (Linux-версия)&lt;br /&gt;
 client&lt;br /&gt;
 # Использовать tun (tunneling) вместо tap (ethernet bridging)&lt;br /&gt;
 dev tun&lt;br /&gt;
 # Протокол&lt;br /&gt;
 proto udp&lt;br /&gt;
 # Адрес и порт сервера&lt;br /&gt;
 remote 192.168.0.1 1194&lt;br /&gt;
 # Если не получается установить соответствие между именем и адресом сервера - продолжать попытки&lt;br /&gt;
 resolv-retry infinite&lt;br /&gt;
 # Для клиента не нужно слушать порты&lt;br /&gt;
 nobind&lt;br /&gt;
 # Снижение привилегий до указанных (в целях безопасности) (раскомментируйте если необходимо, в этом случае OpenVPN надо запускать с правами root)&lt;br /&gt;
 ;user nobody&lt;br /&gt;
 ;group nogroup&lt;br /&gt;
 # Сохранять определённые параметры&lt;br /&gt;
 persist-key&lt;br /&gt;
 persist-tun&lt;br /&gt;
 # Полные пути к необходимым файлам (измените на свои пути)&lt;br /&gt;
 ca /home/qweo/tmp/article/keys/ca.crt&lt;br /&gt;
 cert /home/qweo/tmp/article/keys/clientname.crt&lt;br /&gt;
 key /home/qweo/tmp/article/keys/clientname.key&lt;br /&gt;
 # Включить сжатие (не включайте сжатие если на сервере оно отключено)&lt;br /&gt;
 comp-lzo&lt;br /&gt;
 # Уровень журналирования&lt;br /&gt;
 verb 3&lt;br /&gt;
&lt;br /&gt;
--[[Участник:Kipruss|Kipruss]] 00:35, 16 марта 2008 (MSK)&lt;/div&gt;</summary>
		<author><name>Kipruss</name></author>	</entry>

	<entry>
		<id>http://wiki.linuxformat.ru/wiki/LXF94:OpenVPN</id>
		<title>LXF94:OpenVPN</title>
		<link rel="alternate" type="text/html" href="http://wiki.linuxformat.ru/wiki/LXF94:OpenVPN"/>
				<updated>2008-03-15T21:43:33Z</updated>
		
		<summary type="html">&lt;p&gt;Kipruss: /* Шаг 2: Создаем ключи */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== OpenVPN за 10 минут ==&lt;br /&gt;
&lt;br /&gt;
''Технология VPN во многом напоминает перевозку денег в бронированной инкассаторской машине &lt;br /&gt;
по улицам многолюдного города. Но какую модель следует выбрать, чтобы ваши ценности не &lt;br /&gt;
достались злоумышленникам? Спросите у '''Валентина Яценко'''.''&lt;br /&gt;
&lt;br /&gt;
VPN –  Virtual Private Network, Виртуальная Частная Сеть – технология, позволяющая соединять между собой локальные сети и отдельные компьютеры, находящиеся на расстоянии тысяч километров друг от друга; подключаться к локальной сети через Интернет, используя шифрованный канал связи, организовывать безопасный туннель для передачи важных данных... Возможности применения VPN безграничны! Вам необходимо соединить офисы в разных концах страны единой сетью, не прокладывая километры кабелей? Вы хотите подключаться к домашней локальной сети из Интернет-кафе? Требуется передать важные данные на большое расстояние без риска утечки информации? Может быть, большинство данных, которые вы передаете через Интернет, составляют тайну, и их необходимо обезопасить? Если вы хотя бы на один вопрос ответили утвердительно, VPN – это именно то, что вам нужно!&lt;br /&gt;
&lt;br /&gt;
=== Шаг 1: Устанавливаем ===&lt;br /&gt;
&lt;br /&gt;
Пакеты с  ''OpenVPN'' доступны для большинства распространенных дистрибутивов, в том числе для RedHat/Fedora, Mandriva, OpenSUSE, Slackware, Debian и Ubuntu. Если ''OpenVPN'' не включен в ваш любимый дистрибутив, попробуйте поискать пакет на [http://rpmfind.net rpmfind.net] (для систем, использующих RPM) или [http://linuxpackages.net linuxpackages.net] (Slackware и производные) Наконец, программу можно загрузить в исходных текстах с официального сайта ([http://openvpn.net openvpn.net]).&lt;br /&gt;
&lt;br /&gt;
Для установки  ''OpenVPN'' также необходимо установить  ''OpenSSL'' (openssl.org) и  ''liblzo'' (http://www.oberhumer.com/opensource/lzo), которые есть во многих дистрибутивах. Для работы  ''OpenVPN'' нужен модуль ядра  ''tun''. Он присутствует в большинстве систем, но если команда &amp;lt;font color=darkred&amp;gt;modrpobe  tun&amp;lt;/font&amp;gt; завершается с ошибкой «Can’t locale module tun», вам придется пересобрать ядро – о том, как это сделать, подробно рассказано в  [LXF89]. Необходимо включить опцию CONFIG_TUN (Device Drivers –&amp;gt; Network device support –&amp;gt; Universal TUN/TAP device driver support). &lt;br /&gt;
&lt;br /&gt;
Если вы собираетесь использовать ''OpenVPN'' постоянно, пропишите модуль ''tun'' в '''/etc/modules''' для автоматической инициализации при загрузке либо включите его непосредственно в ядро. В противном случае перед запуском ''OpenVPN'' вам нужно будет загружать модуль ''tun'' самостоятельно (командой  &amp;lt;font color=darkred&amp;gt;modrpobe  tun&amp;lt;/font&amp;gt;). Если вы планируете предоставлять клиентам доступ в Интернет через  ''VPN'', необходимо настроить NAT (Network Address Translation). Скорее всего, это уже сделано за вас разработчиками дистрибутива, но на случай возникновения проблем имейте в виду, что нам потребуется опция &amp;lt;font color=darkred&amp;gt;CONFIG_IP_NF_TARGET_MASQUERADE&amp;lt;/font&amp;gt; (Networking –&amp;gt; Networking options –&amp;gt; Network packet filtering –&amp;gt; IP tables support –&amp;gt; Full NAT). Для работы с NAT используется утилита  ''iptables'' (см.  [LXF87/88]), которая, скорее всего, уже установлена в вашей системе. Проверьте это и, в случае необходимости, добавьте ее через менеджер пакетов вашего дистрибутива.&lt;br /&gt;
&lt;br /&gt;
===Шаг 2: Создаем ключи===&lt;br /&gt;
&lt;br /&gt;
Итак, ''OpenVPN'' установлен. Что дальше? В первую очередь необходимо создать ключи и сертификаты для сервера и клиентов. Скрипты, облегчающие эту задачу, находятся в каталоге '''easy-rsa''' (''см. врезку «Где же easy-rsa?» внизу''). &lt;br /&gt;
&lt;br /&gt;
В первую очередь, отредактируйте расположенный в нем файл vars. Установите значения переменных: &lt;br /&gt;
&lt;br /&gt;
* '''KEY_COUNTRY''' – равным двухсимвольному коду вашей страны (для России это &amp;lt;font color=darkred&amp;gt;RU&amp;lt;/font&amp;gt;).&lt;br /&gt;
* '''KEY_PROVINCE''' – названию вашего региона (например,  &amp;lt;font color=darkred&amp;gt;Moscow region&amp;lt;/font&amp;gt; или &amp;lt;font color=darkred&amp;gt;MSK&amp;lt;/font&amp;gt;).&lt;br /&gt;
* '''KEY_CITY''', соответственно – ваш город (скажем, &amp;lt;font color=darkred&amp;gt;Moscow&amp;lt;/font&amp;gt;).&lt;br /&gt;
* '''KEY_ORG''' – организация (&amp;lt;font color=darkred&amp;gt;OpenVPN Solutions&amp;lt;/font&amp;gt; подойдет).&lt;br /&gt;
* '''KEY_EMAIL''' – ваш e-mail адрес (&amp;lt;font color=darkred&amp;gt;me@my.e-ma.il&amp;lt;/font&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
Все эти данные необходимы для генерации сертификатов и ключей в соответствии со стандартом, поэтому оставлять какие-то переменные пустыми нельзя.&lt;br /&gt;
&lt;br /&gt;
Также можно изменить параметр  &amp;lt;font color=darkred&amp;gt;KEY_SIZE&amp;lt;/font&amp;gt;, отвечающий за размер ключей (максимальный размер ключа, поддерживаемый ''OpenVPN'' – 2048 бит).&lt;br /&gt;
&lt;br /&gt;
Далее необходимо инициализировать переменные, используемые при создании публичного ключа командой&lt;br /&gt;
&lt;br /&gt;
 . ./vars &lt;br /&gt;
&lt;br /&gt;
и, на всякий случай, удалить существующие ключи командой&lt;br /&gt;
&lt;br /&gt;
 ./clean-all&lt;br /&gt;
&lt;br /&gt;
После этого следует сгенерировать корневой сертификат (см. [[LXF93]]):&lt;br /&gt;
&lt;br /&gt;
 ./build-ca&lt;br /&gt;
&lt;br /&gt;
В процессе выполнения последнего скрипта вам будет задано несколько вопросов. Нужно ввести только Common Name для сертификата (например, RootCA), все остальные параметры уже заданы в качестве переменных окружения скриптом vars. &lt;br /&gt;
&lt;br /&gt;
После создания корневого сертификата необходимо сгенерировать для сервера секретный ключ. В этом вам поможет скрипт ''build-key-server''. Как и в предыдущем случае, для большинства вопросов &lt;br /&gt;
можно оставить ответы по умолчанию. На вопрос о Common Name введите “server”, на два последних вопроса (подписать ли сертификат и – каламбур, но перевод именно такой – сертифицировать ли &lt;br /&gt;
его) ответьте утвердительно; когда вас спросят о пароле (“A challenge password”) – введите пароль для ключа сервера (запоминать его не нужно). Наберите&lt;br /&gt;
&lt;br /&gt;
 ./build-key-server server&lt;br /&gt;
&lt;br /&gt;
Далее, создайте ключи для необходимого количества клиентов. Эта процедура аналогична созданию ключа для сервера, за исключением того, что для клиентов ключи создаются скриптом &amp;lt;font color=darkred&amp;gt;build-key&amp;lt;/font&amp;gt;, а не &amp;lt;font color=darkred&amp;gt;build-key-server&amp;lt;/font&amp;gt;. У каждого ключа, конечно же, должно быть указано свое значение в поле Common Name:&lt;br /&gt;
&lt;br /&gt;
 ./build-key clientname&lt;br /&gt;
&lt;br /&gt;
Если вы хотите защитить паролем ключи клиентов, воспользуйтесь вместо ''build-key'' скриптом ''build-key-pass''. И наконец, в довершение ко всем сертификатам и ключам необходимо создать файл параметров Диффи (Diffie) и Хеллмэна (Hellman). Алгоритм Диффи и Хеллмэна позволяет обмениваться секретными ключами по небезопасным каналам. Для их генерации запустите скрипт &lt;br /&gt;
''build-dh'' без параметров:&lt;br /&gt;
&lt;br /&gt;
 ./build-dh&lt;br /&gt;
&lt;br /&gt;
Этот процесс занимает определенное время, поэтому владельцам слабых компьютеров стоит попить чаю, вместо того чтобы просто сидеть и ждать окончания работы скрипта. &lt;br /&gt;
&lt;br /&gt;
Если вам уже надоело возиться с ключами, сертификатами и прочим – не падайте духом: осталось только скопировать нужные файлы на клиентские компьютеры. Клиентам необходимы следующие &lt;br /&gt;
файлы:&lt;br /&gt;
&lt;br /&gt;
* '''ca.crt''' (Root CA certificate) необходим серверу и всем клиентам, он не &lt;br /&gt;
является секретным.&lt;br /&gt;
* '''clientname.crt''' (сертификат клиента  &amp;lt;font color=darkred&amp;gt;clientname&amp;lt;/font&amp;gt;) необходим только клиенту &amp;lt;font color=darkred&amp;gt;clientname&amp;lt;/font&amp;gt;, он не является секретным.&lt;br /&gt;
* '''clientname.key''' (ключ клиента &amp;lt;font color=darkred&amp;gt;clientname&amp;lt;/font&amp;gt;) необходим только клиенту clientname, это секретный ключ.&lt;br /&gt;
&lt;br /&gt;
Эти файлы можно найти в подкаталоге '''keys''' каталога '''easy-rsa'''.&lt;br /&gt;
&lt;br /&gt;
===Шаг 3: Настраиваем===&lt;br /&gt;
&lt;br /&gt;
Итак, у нас есть все необходимые для работы ''OpenVPN'' файлы – все, кроме конфигурационных, созданием которых мы и займемся. Начнем с сервера. Для создания новых конфигурационных файлов удобно использовать примеры из поставки ''OpenVPN'', они находятся в подкаталоге '''sample-config-files''' каталога ''OpenVPN'' ('''../sample-config-files''', если вы находитесь в каталоге '''easy-rsa'''). В принципе, можно использовать стандартный конфигурационный файл для сервера, изменив некоторые параметры. Вот список этих параметров (некоторые из них, например, &amp;lt;font color=darkred&amp;gt;port&amp;lt;/font&amp;gt; и &amp;lt;font color=darkred&amp;gt;protocol&amp;lt;/font&amp;gt;, изменять не обязательно):&lt;br /&gt;
&lt;br /&gt;
* '''ca''' – полный путь до корневого сертификата, который мы создали скриптом ''build-ca''.&lt;br /&gt;
* '''cert''' – полный путь до сертификата сервера, который мы создали его скриптом ''build-key-server''. &lt;br /&gt;
* '''key''' – путь до ключа сервера, созданного все тем же скриптом ''build-key-server''.&lt;br /&gt;
* '''dh''' – путь до файла параметров Диффи и Хеллмэна, созданного скриптом ''build-dh''.&lt;br /&gt;
* '''server''' – режим запуска ''OpenVPN''. В строке с режимом запуска для сервера должна быть указана подсеть и маска подсети (пример – &amp;lt;font color=darkred&amp;gt;server 10.8.0.0 255.255.255.0&amp;lt;/font&amp;gt;). Подсеть, указанная по умолчанию – 10.8.0.0/24. Если в вашей сети она уже используется, задайте другую локальную подсеть.&lt;br /&gt;
* '''port''' – порт, на котором будет запущен сервер. Стандартный порт ''OpenVPN'' – 1194, но вы можете изменить его по своему желанию.&lt;br /&gt;
* '''protocol''' – протокол. По умолчанию ''OpenVPN'' использует экономичный UDP, но вы можете предпочесть надежный TCP.&lt;br /&gt;
&lt;br /&gt;
Если вы не сторонник конфигураций по умолчанию, отредактируйте файл в соответствии со своими предпочтениями. Если же вы не хотите тратить на это время, то можете использовать мой вариант, составленный специально для этой статьи. Вы найдете его на прилагаемом к журналу диске.&lt;br /&gt;
&lt;br /&gt;
Для создания конфигурационного файла клиента также можно использовать пример, идущий в поставке с ''OpenVPN''. В нем надо изменить пути к необходимым файлам на свои, указать адрес и порт сервера в директиве remote и, кроме того, удостоверится, что выбранные настройки совпадают с настройками сервера (протокол, сжатие и т.п.). Пример конфигурационного файла клиента можно также взять с диска LXF. Тех же, кто хочет предоставлять  ''VPN''-клиентам доступ в Интернет, ждет еще один шаг: включение NAT (Network Address Translation, Трансляция сетевых адресов) и настройка маршрутизации. Для начала необходимо написать соответствующее правило ''IPTables'':&lt;br /&gt;
&lt;br /&gt;
 iptables -t nat -A POSTROUTING -s маска_подсети -o внешний_интерфейс -j MASQUERADE &lt;br /&gt;
&lt;br /&gt;
например:&lt;br /&gt;
&lt;br /&gt;
 iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o ppp0 -j MASQUERADE&lt;br /&gt;
&lt;br /&gt;
Его необходимо сохранить, добавив в файл с правилами iptables или в скрипты загрузки. Затем необходимо включить маршрутизацию, записав в  '''/etc/sysctl.conf''' строку  &amp;lt;font color=darkred&amp;gt;“net.ipv4.ip_forward = 1”&amp;lt;/font&amp;gt; и выполнив команду&lt;br /&gt;
&lt;br /&gt;
 sysctl -w net.ipv4.ip_forward=1&lt;br /&gt;
&lt;br /&gt;
===Шаг 4: Проверка связи===&lt;br /&gt;
&lt;br /&gt;
Если вы дошли до этого места, спешу вас обрадовать – остался всего &lt;br /&gt;
один, очень простой шаг. Надо запустить ''OpenVPN'' на сервере, а потом &lt;br /&gt;
и на всех клиентах. Для сервера: перейдите в каталог с ключами (keys) &lt;br /&gt;
и выполните:&lt;br /&gt;
&lt;br /&gt;
 openvpn --config ../sample-config-files/server.conf&lt;br /&gt;
&lt;br /&gt;
После чего вы должны увидеть подобные строки:&lt;br /&gt;
&lt;br /&gt;
 Thu Aug 31 12:04:20 2006 OpenVPN 2.0.7 i486-pc-linux-gnu [SSL] [LZO] [EPOLL] built on Jul 22 2006&lt;br /&gt;
 Thu Aug 31 12:04:20 2006 Diffie-Hellman initialized with 1024 bit key&lt;br /&gt;
 Thu Aug 31 12:04:20 2006 TLS-Auth MTU parms [ L:1542 D:138 EF:38 EB:0 ET:0 EL:0 ]&lt;br /&gt;
 Thu Aug 31 12:04:20 2006 TUN/TAP device tun0 opened  &amp;lt;Skipped&amp;gt;&lt;br /&gt;
 Thu Aug 31 12:04:20 2006 Initialization Sequence Completed&lt;br /&gt;
&lt;br /&gt;
На клиенте (клиентах) выполните команду&lt;br /&gt;
&lt;br /&gt;
 openvpn --config client.conf&lt;br /&gt;
&lt;br /&gt;
после чего проверьте наличие &amp;lt;font color=darkred&amp;gt;tun&amp;lt;/font&amp;gt;-интерфейса командой &amp;lt;font color=darkred&amp;gt;ifconfig&amp;lt;/font&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
 ifconfig tun0&lt;br /&gt;
 tun0 Link encap:UNSPEC HWaddr 00:00:00:00:00:00&lt;br /&gt;
 inet addr:85.140.161.153 P-t-P:10.8.0.2 Mask:255.255.255.0&lt;br /&gt;
 UP POINTOPOINT RUNNING MTU:1500 Metric:1&lt;br /&gt;
 RX packets:0 errors:0 dropped:0 overruns:0 frame:0&lt;br /&gt;
 TX packets:0 errors:0 dropped:0 overruns:0 carrier:0&lt;br /&gt;
 collisions:0 txqueuelen:10&lt;br /&gt;
 RX bytes:0 (0.0 B) TX bytes:0 (0.0 B) &lt;br /&gt;
&lt;br /&gt;
Обратите внимание на статус (UP): он означает, что интерфейс находится в активном состоянии. Если в вашей системе имеется более одного   &amp;lt;font color=darkred&amp;gt;tun&amp;lt;/font&amp;gt;-интерфейса (это можно проверить командой   &amp;lt;font color=darkred&amp;gt;ifconfig&amp;lt;/font&amp;gt; без параметров), замените &amp;lt;font color=darkred&amp;gt;tun0&amp;lt;/font&amp;gt; на &amp;lt;font color=darkred&amp;gt;tun1&amp;lt;/font&amp;gt;, &amp;lt;font color=darkred&amp;gt;tun2&amp;lt;/font&amp;gt; и т.п. &lt;br /&gt;
&lt;br /&gt;
Если интерфейс сконфигурирован правильно, проверьте доступность других хостов. Когда путь к файлу соответствий «клиент-IP» (опция  &amp;lt;font color=darkred&amp;gt;ifconfig-pool-persist&amp;lt;/font&amp;gt; в конфигурационном файле сервера) не указан, их адреса назначаются сервером  ''OpenVPN'' случайным образом. Наберите:&lt;br /&gt;
&lt;br /&gt;
 ping 10.8.0.2&lt;br /&gt;
&lt;br /&gt;
Вместо  &amp;lt;font color=darkred&amp;gt;10.8.0.2&amp;lt;/font&amp;gt; подставьте IP-адрес, выданный командой  &amp;lt;font color=darkred&amp;gt;ifconfig&amp;lt;/font&amp;gt; на другой машине. В случае, если интерфейс сконфигурирован правильно, но ответа не приходит, необходимо выяснить, разрешают ли правила межсетевого экрана ICMP-трафик.&lt;br /&gt;
&lt;br /&gt;
Приходящие ответы свидетельствуют о том, что  ''VPN''-соединение установлено и работает. &lt;br /&gt;
&lt;br /&gt;
===Примечание 1. Врезки===&lt;br /&gt;
&lt;br /&gt;
'''Почему OpenVPN?'''&lt;br /&gt;
&lt;br /&gt;
Существует множество реализаций VPN, самые популярные из них – PPTP, ''FreeS/WAN'' и ''OpenVPN''. Почему же в этой статье мы рассмотрим именно последний вариант? PPTP навевает мысли о Microsoft, ''FreeS/WAN'' давно не обновлялся – на его официальном сайте сказано, что последняя версия датируется 22 апреля 2004 года, более того, дальнейших обновлений ''FreeS/WAN'' не будет, а это, согласитесь, недопустимо для проекта, одной из целей которого является обеспечение безопасности... ''OpenVPN'' же активно развивается и регулярно обновляется, использует стойкие криптографические алгоритмы и предлагает множество способов идентификации, в том числе комбинированных, что немаловажно для безопасности. Кроме того, ''OpenVPN'' работает на большинстве распространенных платформ – Linux, Windows 2000/XP, OpenBSD, FreeBSD, NetBSD, Mac OS X, Solaris, благодаря чему его можно использовать в гетерогенных сетях. Все это, безусловно, делает ''OpenVPN'' лучшим выбором для организации VPN.&lt;br /&gt;
&lt;br /&gt;
'''Где искать easy-rsa?'''&lt;br /&gt;
&lt;br /&gt;
Каталог '''easy-rsa''' может находиться в  '''/usr/share/doc/openvpn-2.0''',  '''/usr/share/doc/openvpn''', '''/usr/share/doc/openvpn/examples''', '''/usr/share/openvpn''' или в '''/usr/share/doc/packages/openvpn''' – в зависимости от дистрибутива. Его также можно найти в архиве с исходными текстами.&lt;br /&gt;
&lt;br /&gt;
===Примечание 2. Примеры конфигурационных файлов (с диска)===&lt;br /&gt;
&lt;br /&gt;
'''server.conf'''&lt;br /&gt;
&lt;br /&gt;
 # Конфигурационный файл сервера OpenVPN (Linux-версия)&lt;br /&gt;
 # Порт&lt;br /&gt;
 port 1194&lt;br /&gt;
 # Протокол&lt;br /&gt;
 proto udp&lt;br /&gt;
 # Использовать tun (tunneling) вместо tap (ethernet bridging)&lt;br /&gt;
 dev tun&lt;br /&gt;
 # Полные пути к необходимым файлам (измените на свои пути)&lt;br /&gt;
 ca /usr/local/etc/openvpn/easy-rsa/keys/ca.crt&lt;br /&gt;
 cert /usr/local/etc/openvpn/easy-rsa/keys/server.crt&lt;br /&gt;
 key /usr/local/etc/openvpn/easy-rsa/keys/server.key&lt;br /&gt;
 # Путь к dh (измените на свой)&lt;br /&gt;
 dh dh1024.pem&lt;br /&gt;
 # Режим сервера,подсеть 10.8.0.0/24&lt;br /&gt;
 server 10.8.0.0 255.255.255.0&lt;br /&gt;
 # Файл соответствий клиент - виртуальный IP (по-умолчанию выдаётся динамический IP)&lt;br /&gt;
 ifconfig-pool-persist ipp.txt&lt;br /&gt;
 # Раскомментируйте  если хотите, чтобы клиенты &amp;quot;видели&amp;quot; друг друга&lt;br /&gt;
 ;client-to-client&lt;br /&gt;
 # Отключать после ... секунд без обмена данными (второй параметр)&lt;br /&gt;
 keepalive 10 120&lt;br /&gt;
 # Включить сжатие&lt;br /&gt;
 comp-lzo&lt;br /&gt;
 # Максимум клиентов одновременно - раскомментируйте если вам нужно ограничение по числу клиентов&lt;br /&gt;
 ;max-clients 100&lt;br /&gt;
 # Снижение привилегий до указанных (в целях безопасности) (раскомментируйте если необходимо, в этом случае OpenVPN надо запускать с правами root)&lt;br /&gt;
 ;user nobody&lt;br /&gt;
 ;group nogroup&lt;br /&gt;
&lt;br /&gt;
'''client.conf'''&lt;br /&gt;
&lt;br /&gt;
 # Конфигурационный файл клиента OpenVPN (Linux-версия)&lt;br /&gt;
 client&lt;br /&gt;
 # Использовать tun (tunneling) вместо tap (ethernet bridging)&lt;br /&gt;
 dev tun&lt;br /&gt;
 # Протокол&lt;br /&gt;
 proto udp&lt;br /&gt;
 # Адрес и порт сервера&lt;br /&gt;
 remote 192.168.0.1 1194&lt;br /&gt;
 # Если не получается установить соответствие между именем и адресом сервера - продолжать попытки&lt;br /&gt;
 resolv-retry infinite&lt;br /&gt;
 # Для клиента не нужно слушать порты&lt;br /&gt;
 nobind&lt;br /&gt;
 # Снижение привилегий до указанных (в целях безопасности) (раскомментируйте если необходимо, в этом случае OpenVPN надо запускать с правами root)&lt;br /&gt;
 ;user nobody&lt;br /&gt;
 ;group nogroup&lt;br /&gt;
 # Сохранять определённые параметры&lt;br /&gt;
 persist-key&lt;br /&gt;
 persist-tun&lt;br /&gt;
 # Полные пути к необходимым файлам (измените на свои пути)&lt;br /&gt;
 ca /home/qweo/tmp/article/keys/ca.crt&lt;br /&gt;
 cert /home/qweo/tmp/article/keys/clientname.crt&lt;br /&gt;
 key /home/qweo/tmp/article/keys/clientname.key&lt;br /&gt;
 # Включить сжатие (не включайте сжатие если на сервере оно отключено)&lt;br /&gt;
 comp-lzo&lt;br /&gt;
 # Уровень журналирования&lt;br /&gt;
 verb 3&lt;br /&gt;
&lt;br /&gt;
--[[Участник:Kipruss|Kipruss]] 00:35, 16 марта 2008 (MSK)&lt;/div&gt;</summary>
		<author><name>Kipruss</name></author>	</entry>

	<entry>
		<id>http://wiki.linuxformat.ru/wiki/LXF94:OpenVPN</id>
		<title>LXF94:OpenVPN</title>
		<link rel="alternate" type="text/html" href="http://wiki.linuxformat.ru/wiki/LXF94:OpenVPN"/>
				<updated>2008-03-15T21:41:08Z</updated>
		
		<summary type="html">&lt;p&gt;Kipruss: /* Исправление описок */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== OpenVPN за 10 минут ==&lt;br /&gt;
&lt;br /&gt;
''Технология VPN во многом напоминает перевозку денег в бронированной инкассаторской машине &lt;br /&gt;
по улицам многолюдного города. Но какую модель следует выбрать, чтобы ваши ценности не &lt;br /&gt;
достались злоумышленникам? Спросите у '''Валентина Яценко'''.''&lt;br /&gt;
&lt;br /&gt;
VPN –  Virtual Private Network, Виртуальная Частная Сеть – технология, позволяющая соединять между собой локальные сети и отдельные компьютеры, находящиеся на расстоянии тысяч километров друг от друга; подключаться к локальной сети через Интернет, используя шифрованный канал связи, организовывать безопасный туннель для передачи важных данных... Возможности применения VPN безграничны! Вам необходимо соединить офисы в разных концах страны единой сетью, не прокладывая километры кабелей? Вы хотите подключаться к домашней локальной сети из Интернет-кафе? Требуется передать важные данные на большое расстояние без риска утечки информации? Может быть, большинство данных, которые вы передаете через Интернет, составляют тайну, и их необходимо обезопасить? Если вы хотя бы на один вопрос ответили утвердительно, VPN – это именно то, что вам нужно!&lt;br /&gt;
&lt;br /&gt;
=== Шаг 1: Устанавливаем ===&lt;br /&gt;
&lt;br /&gt;
Пакеты с  ''OpenVPN'' доступны для большинства распространенных дистрибутивов, в том числе для RedHat/Fedora, Mandriva, OpenSUSE, Slackware, Debian и Ubuntu. Если ''OpenVPN'' не включен в ваш любимый дистрибутив, попробуйте поискать пакет на [http://rpmfind.net rpmfind.net] (для систем, использующих RPM) или [http://linuxpackages.net linuxpackages.net] (Slackware и производные) Наконец, программу можно загрузить в исходных текстах с официального сайта ([http://openvpn.net openvpn.net]).&lt;br /&gt;
&lt;br /&gt;
Для установки  ''OpenVPN'' также необходимо установить  ''OpenSSL'' (openssl.org) и  ''liblzo'' (http://www.oberhumer.com/opensource/lzo), которые есть во многих дистрибутивах. Для работы  ''OpenVPN'' нужен модуль ядра  ''tun''. Он присутствует в большинстве систем, но если команда &amp;lt;font color=darkred&amp;gt;modrpobe  tun&amp;lt;/font&amp;gt; завершается с ошибкой «Can’t locale module tun», вам придется пересобрать ядро – о том, как это сделать, подробно рассказано в  [LXF89]. Необходимо включить опцию CONFIG_TUN (Device Drivers –&amp;gt; Network device support –&amp;gt; Universal TUN/TAP device driver support). &lt;br /&gt;
&lt;br /&gt;
Если вы собираетесь использовать ''OpenVPN'' постоянно, пропишите модуль ''tun'' в '''/etc/modules''' для автоматической инициализации при загрузке либо включите его непосредственно в ядро. В противном случае перед запуском ''OpenVPN'' вам нужно будет загружать модуль ''tun'' самостоятельно (командой  &amp;lt;font color=darkred&amp;gt;modrpobe  tun&amp;lt;/font&amp;gt;). Если вы планируете предоставлять клиентам доступ в Интернет через  ''VPN'', необходимо настроить NAT (Network Address Translation). Скорее всего, это уже сделано за вас разработчиками дистрибутива, но на случай возникновения проблем имейте в виду, что нам потребуется опция &amp;lt;font color=darkred&amp;gt;CONFIG_IP_NF_TARGET_MASQUERADE&amp;lt;/font&amp;gt; (Networking –&amp;gt; Networking options –&amp;gt; Network packet filtering –&amp;gt; IP tables support –&amp;gt; Full NAT). Для работы с NAT используется утилита  ''iptables'' (см.  [LXF87/88]), которая, скорее всего, уже установлена в вашей системе. Проверьте это и, в случае необходимости, добавьте ее через менеджер пакетов вашего дистрибутива.&lt;br /&gt;
&lt;br /&gt;
===Шаг 2: Создаем ключи===&lt;br /&gt;
&lt;br /&gt;
Итак, ''OpenVPN'' установлен. Что дальше? В первую очередь необходимо создать ключи и сертификаты для сервера и клиентов. Скрипты, облегчающие эту задачу, находятся в каталоге '''easy-rsa''' (''см. врезку «Где же easy-rsa?» внизу''). &lt;br /&gt;
&lt;br /&gt;
В первую очередь, отредактируйте расположенный в нем файл vars. Установите значения переменных: &lt;br /&gt;
&lt;br /&gt;
* '''KEY_COUNTRY''' – равным двухсимвольному коду вашей страны (для России это &amp;lt;font color=darkred&amp;gt;RU&amp;lt;/font&amp;gt;).&lt;br /&gt;
* '''KEY_PROVINCE''' – названию вашего региона (например,  &amp;lt;font color=darkred&amp;gt;Moscow region&amp;lt;/font&amp;gt; или &amp;lt;font color=darkred&amp;gt;MSK&amp;lt;/font&amp;gt;).&lt;br /&gt;
* '''KEY_CITY''', соответственно – ваш город (скажем, &amp;lt;font color=darkred&amp;gt;Moscow&amp;lt;/font&amp;gt;).&lt;br /&gt;
* '''KEY_ORG''' – организация (&amp;lt;font color=darkred&amp;gt;OpenVPN Solutions&amp;lt;/font&amp;gt; подойдет).&lt;br /&gt;
* '''KEY_EMAIL''' – ваш e-mail адрес (&amp;lt;font color=darkred&amp;gt;me@my.e-ma.il&amp;lt;/font&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
Все эти данные необходимы для генерации сертификатов и ключей в соответствии со стандартом, поэтому оставлять какие-то переменные пустыми нельзя.&lt;br /&gt;
&lt;br /&gt;
Также можно изменить параметр  &amp;lt;font color=darkred&amp;gt;KEY_SIZE&amp;lt;/font&amp;gt;, отвечающий за размер ключей (максимальный размер ключа, поддерживаемый ''OpenVPN'' – 2048 бит).&lt;br /&gt;
&lt;br /&gt;
Далее необходимо инициализировать переменные, используемые при создании публичного ключа командой&lt;br /&gt;
&lt;br /&gt;
 . ./vars &lt;br /&gt;
&lt;br /&gt;
и, на всякий случай, удалить существующие ключи командой&lt;br /&gt;
&lt;br /&gt;
 ./clean-all&lt;br /&gt;
&lt;br /&gt;
После этого следует сгенерировать корневой сертификат (см. [LXF93]):&lt;br /&gt;
&lt;br /&gt;
 ./build-ca&lt;br /&gt;
&lt;br /&gt;
В процессе выполнения последнего скрипта вам будет задано несколько вопросов. Нужно ввести только Common Name для сертификата (например, RootCA), все остальные параметры уже заданы в качестве переменных окружения скриптом vars. &lt;br /&gt;
&lt;br /&gt;
После создания корневого сертификата необходимо сгенерировать для сервера секретный ключ. В этом вам поможет скрипт ''build-key-server''. Как и в предыдущем случае, для большинства вопросов &lt;br /&gt;
можно оставить ответы по умолчанию. На вопрос о Common Name введите “server”, на два последних вопроса (подписать ли сертификат и – каламбур, но перевод именно такой – сертифицировать ли &lt;br /&gt;
его) ответьте утвердительно; когда вас спросят о пароле (“A challenge password”) – введите пароль для ключа сервера (запоминать его не нужно). Наберите&lt;br /&gt;
&lt;br /&gt;
 ./build-key-server server&lt;br /&gt;
&lt;br /&gt;
Далее, создайте ключи для необходимого количества клиентов. Эта процедура аналогична созданию ключа для сервера, за исключением того, что для клиентов ключи создаются скриптом &amp;lt;font color=darkred&amp;gt;build-key&amp;lt;/font&amp;gt;, а не &amp;lt;font color=darkred&amp;gt;build-key-server&amp;lt;/font&amp;gt;. У каждого ключа, конечно же, должно быть указано свое значение в поле Common Name:&lt;br /&gt;
&lt;br /&gt;
 ./build-key clientname&lt;br /&gt;
&lt;br /&gt;
Если вы хотите защитить паролем ключи клиентов, воспользуйтесь вместо ''build-key'' скриптом ''build-key-pass''. И наконец, в довершение ко всем сертификатам и ключам необходимо создать файл параметров Диффи (Diffie) и Хеллмэна (Hellman). Алгоритм Диффи и Хеллмэна позволяет обмениваться секретными ключами по небезопасным каналам. Для их генерации запустите скрипт &lt;br /&gt;
''build-dh'' без параметров:&lt;br /&gt;
&lt;br /&gt;
 ./build-dh&lt;br /&gt;
&lt;br /&gt;
Этот процесс занимает определенное время, поэтому владельцам слабых компьютеров стоит попить чаю, вместо того чтобы просто сидеть и ждать окончания работы скрипта. &lt;br /&gt;
&lt;br /&gt;
Если вам уже надоело возиться с ключами, сертификатами и прочим – не падайте духом: осталось только скопировать нужные файлы на клиентские компьютеры. Клиентам необходимы следующие &lt;br /&gt;
файлы:&lt;br /&gt;
&lt;br /&gt;
* '''ca.crt''' (Root CA certificate) необходим серверу и всем клиентам, он не &lt;br /&gt;
является секретным.&lt;br /&gt;
* '''clientname.crt''' (сертификат клиента  &amp;lt;font color=darkred&amp;gt;clientname&amp;lt;/font&amp;gt;) необходим только клиенту &amp;lt;font color=darkred&amp;gt;clientname&amp;lt;/font&amp;gt;, он не является секретным.&lt;br /&gt;
* '''clientname.key''' (ключ клиента &amp;lt;font color=darkred&amp;gt;clientname&amp;lt;/font&amp;gt;) необходим только клиенту clientname, это секретный ключ.&lt;br /&gt;
&lt;br /&gt;
Эти файлы можно найти в подкаталоге '''keys''' каталога '''easy-rsa'''.&lt;br /&gt;
&lt;br /&gt;
===Шаг 3: Настраиваем===&lt;br /&gt;
&lt;br /&gt;
Итак, у нас есть все необходимые для работы ''OpenVPN'' файлы – все, кроме конфигурационных, созданием которых мы и займемся. Начнем с сервера. Для создания новых конфигурационных файлов удобно использовать примеры из поставки ''OpenVPN'', они находятся в подкаталоге '''sample-config-files''' каталога ''OpenVPN'' ('''../sample-config-files''', если вы находитесь в каталоге '''easy-rsa'''). В принципе, можно использовать стандартный конфигурационный файл для сервера, изменив некоторые параметры. Вот список этих параметров (некоторые из них, например, &amp;lt;font color=darkred&amp;gt;port&amp;lt;/font&amp;gt; и &amp;lt;font color=darkred&amp;gt;protocol&amp;lt;/font&amp;gt;, изменять не обязательно):&lt;br /&gt;
&lt;br /&gt;
* '''ca''' – полный путь до корневого сертификата, который мы создали скриптом ''build-ca''.&lt;br /&gt;
* '''cert''' – полный путь до сертификата сервера, который мы создали его скриптом ''build-key-server''. &lt;br /&gt;
* '''key''' – путь до ключа сервера, созданного все тем же скриптом ''build-key-server''.&lt;br /&gt;
* '''dh''' – путь до файла параметров Диффи и Хеллмэна, созданного скриптом ''build-dh''.&lt;br /&gt;
* '''server''' – режим запуска ''OpenVPN''. В строке с режимом запуска для сервера должна быть указана подсеть и маска подсети (пример – &amp;lt;font color=darkred&amp;gt;server 10.8.0.0 255.255.255.0&amp;lt;/font&amp;gt;). Подсеть, указанная по умолчанию – 10.8.0.0/24. Если в вашей сети она уже используется, задайте другую локальную подсеть.&lt;br /&gt;
* '''port''' – порт, на котором будет запущен сервер. Стандартный порт ''OpenVPN'' – 1194, но вы можете изменить его по своему желанию.&lt;br /&gt;
* '''protocol''' – протокол. По умолчанию ''OpenVPN'' использует экономичный UDP, но вы можете предпочесть надежный TCP.&lt;br /&gt;
&lt;br /&gt;
Если вы не сторонник конфигураций по умолчанию, отредактируйте файл в соответствии со своими предпочтениями. Если же вы не хотите тратить на это время, то можете использовать мой вариант, составленный специально для этой статьи. Вы найдете его на прилагаемом к журналу диске.&lt;br /&gt;
&lt;br /&gt;
Для создания конфигурационного файла клиента также можно использовать пример, идущий в поставке с ''OpenVPN''. В нем надо изменить пути к необходимым файлам на свои, указать адрес и порт сервера в директиве remote и, кроме того, удостоверится, что выбранные настройки совпадают с настройками сервера (протокол, сжатие и т.п.). Пример конфигурационного файла клиента можно также взять с диска LXF. Тех же, кто хочет предоставлять  ''VPN''-клиентам доступ в Интернет, ждет еще один шаг: включение NAT (Network Address Translation, Трансляция сетевых адресов) и настройка маршрутизации. Для начала необходимо написать соответствующее правило ''IPTables'':&lt;br /&gt;
&lt;br /&gt;
 iptables -t nat -A POSTROUTING -s маска_подсети -o внешний_интерфейс -j MASQUERADE &lt;br /&gt;
&lt;br /&gt;
например:&lt;br /&gt;
&lt;br /&gt;
 iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o ppp0 -j MASQUERADE&lt;br /&gt;
&lt;br /&gt;
Его необходимо сохранить, добавив в файл с правилами iptables или в скрипты загрузки. Затем необходимо включить маршрутизацию, записав в  '''/etc/sysctl.conf''' строку  &amp;lt;font color=darkred&amp;gt;“net.ipv4.ip_forward = 1”&amp;lt;/font&amp;gt; и выполнив команду&lt;br /&gt;
&lt;br /&gt;
 sysctl -w net.ipv4.ip_forward=1&lt;br /&gt;
&lt;br /&gt;
===Шаг 4: Проверка связи===&lt;br /&gt;
&lt;br /&gt;
Если вы дошли до этого места, спешу вас обрадовать – остался всего &lt;br /&gt;
один, очень простой шаг. Надо запустить ''OpenVPN'' на сервере, а потом &lt;br /&gt;
и на всех клиентах. Для сервера: перейдите в каталог с ключами (keys) &lt;br /&gt;
и выполните:&lt;br /&gt;
&lt;br /&gt;
 openvpn --config ../sample-config-files/server.conf&lt;br /&gt;
&lt;br /&gt;
После чего вы должны увидеть подобные строки:&lt;br /&gt;
&lt;br /&gt;
 Thu Aug 31 12:04:20 2006 OpenVPN 2.0.7 i486-pc-linux-gnu [SSL] [LZO] [EPOLL] built on Jul 22 2006&lt;br /&gt;
 Thu Aug 31 12:04:20 2006 Diffie-Hellman initialized with 1024 bit key&lt;br /&gt;
 Thu Aug 31 12:04:20 2006 TLS-Auth MTU parms [ L:1542 D:138 EF:38 EB:0 ET:0 EL:0 ]&lt;br /&gt;
 Thu Aug 31 12:04:20 2006 TUN/TAP device tun0 opened  &amp;lt;Skipped&amp;gt;&lt;br /&gt;
 Thu Aug 31 12:04:20 2006 Initialization Sequence Completed&lt;br /&gt;
&lt;br /&gt;
На клиенте (клиентах) выполните команду&lt;br /&gt;
&lt;br /&gt;
 openvpn --config client.conf&lt;br /&gt;
&lt;br /&gt;
после чего проверьте наличие &amp;lt;font color=darkred&amp;gt;tun&amp;lt;/font&amp;gt;-интерфейса командой &amp;lt;font color=darkred&amp;gt;ifconfig&amp;lt;/font&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
 ifconfig tun0&lt;br /&gt;
 tun0 Link encap:UNSPEC HWaddr 00:00:00:00:00:00&lt;br /&gt;
 inet addr:85.140.161.153 P-t-P:10.8.0.2 Mask:255.255.255.0&lt;br /&gt;
 UP POINTOPOINT RUNNING MTU:1500 Metric:1&lt;br /&gt;
 RX packets:0 errors:0 dropped:0 overruns:0 frame:0&lt;br /&gt;
 TX packets:0 errors:0 dropped:0 overruns:0 carrier:0&lt;br /&gt;
 collisions:0 txqueuelen:10&lt;br /&gt;
 RX bytes:0 (0.0 B) TX bytes:0 (0.0 B) &lt;br /&gt;
&lt;br /&gt;
Обратите внимание на статус (UP): он означает, что интерфейс находится в активном состоянии. Если в вашей системе имеется более одного   &amp;lt;font color=darkred&amp;gt;tun&amp;lt;/font&amp;gt;-интерфейса (это можно проверить командой   &amp;lt;font color=darkred&amp;gt;ifconfig&amp;lt;/font&amp;gt; без параметров), замените &amp;lt;font color=darkred&amp;gt;tun0&amp;lt;/font&amp;gt; на &amp;lt;font color=darkred&amp;gt;tun1&amp;lt;/font&amp;gt;, &amp;lt;font color=darkred&amp;gt;tun2&amp;lt;/font&amp;gt; и т.п. &lt;br /&gt;
&lt;br /&gt;
Если интерфейс сконфигурирован правильно, проверьте доступность других хостов. Когда путь к файлу соответствий «клиент-IP» (опция  &amp;lt;font color=darkred&amp;gt;ifconfig-pool-persist&amp;lt;/font&amp;gt; в конфигурационном файле сервера) не указан, их адреса назначаются сервером  ''OpenVPN'' случайным образом. Наберите:&lt;br /&gt;
&lt;br /&gt;
 ping 10.8.0.2&lt;br /&gt;
&lt;br /&gt;
Вместо  &amp;lt;font color=darkred&amp;gt;10.8.0.2&amp;lt;/font&amp;gt; подставьте IP-адрес, выданный командой  &amp;lt;font color=darkred&amp;gt;ifconfig&amp;lt;/font&amp;gt; на другой машине. В случае, если интерфейс сконфигурирован правильно, но ответа не приходит, необходимо выяснить, разрешают ли правила межсетевого экрана ICMP-трафик.&lt;br /&gt;
&lt;br /&gt;
Приходящие ответы свидетельствуют о том, что  ''VPN''-соединение установлено и работает. &lt;br /&gt;
&lt;br /&gt;
===Примечание 1. Врезки===&lt;br /&gt;
&lt;br /&gt;
'''Почему OpenVPN?'''&lt;br /&gt;
&lt;br /&gt;
Существует множество реализаций VPN, самые популярные из них – PPTP, ''FreeS/WAN'' и ''OpenVPN''. Почему же в этой статье мы рассмотрим именно последний вариант? PPTP навевает мысли о Microsoft, ''FreeS/WAN'' давно не обновлялся – на его официальном сайте сказано, что последняя версия датируется 22 апреля 2004 года, более того, дальнейших обновлений ''FreeS/WAN'' не будет, а это, согласитесь, недопустимо для проекта, одной из целей которого является обеспечение безопасности... ''OpenVPN'' же активно развивается и регулярно обновляется, использует стойкие криптографические алгоритмы и предлагает множество способов идентификации, в том числе комбинированных, что немаловажно для безопасности. Кроме того, ''OpenVPN'' работает на большинстве распространенных платформ – Linux, Windows 2000/XP, OpenBSD, FreeBSD, NetBSD, Mac OS X, Solaris, благодаря чему его можно использовать в гетерогенных сетях. Все это, безусловно, делает ''OpenVPN'' лучшим выбором для организации VPN.&lt;br /&gt;
&lt;br /&gt;
'''Где искать easy-rsa?'''&lt;br /&gt;
&lt;br /&gt;
Каталог '''easy-rsa''' может находиться в  '''/usr/share/doc/openvpn-2.0''',  '''/usr/share/doc/openvpn''', '''/usr/share/doc/openvpn/examples''', '''/usr/share/openvpn''' или в '''/usr/share/doc/packages/openvpn''' – в зависимости от дистрибутива. Его также можно найти в архиве с исходными текстами.&lt;br /&gt;
&lt;br /&gt;
===Примечание 2. Примеры конфигурационных файлов (с диска)===&lt;br /&gt;
&lt;br /&gt;
'''server.conf'''&lt;br /&gt;
&lt;br /&gt;
 # Конфигурационный файл сервера OpenVPN (Linux-версия)&lt;br /&gt;
 # Порт&lt;br /&gt;
 port 1194&lt;br /&gt;
 # Протокол&lt;br /&gt;
 proto udp&lt;br /&gt;
 # Использовать tun (tunneling) вместо tap (ethernet bridging)&lt;br /&gt;
 dev tun&lt;br /&gt;
 # Полные пути к необходимым файлам (измените на свои пути)&lt;br /&gt;
 ca /usr/local/etc/openvpn/easy-rsa/keys/ca.crt&lt;br /&gt;
 cert /usr/local/etc/openvpn/easy-rsa/keys/server.crt&lt;br /&gt;
 key /usr/local/etc/openvpn/easy-rsa/keys/server.key&lt;br /&gt;
 # Путь к dh (измените на свой)&lt;br /&gt;
 dh dh1024.pem&lt;br /&gt;
 # Режим сервера,подсеть 10.8.0.0/24&lt;br /&gt;
 server 10.8.0.0 255.255.255.0&lt;br /&gt;
 # Файл соответствий клиент - виртуальный IP (по-умолчанию выдаётся динамический IP)&lt;br /&gt;
 ifconfig-pool-persist ipp.txt&lt;br /&gt;
 # Раскомментируйте  если хотите, чтобы клиенты &amp;quot;видели&amp;quot; друг друга&lt;br /&gt;
 ;client-to-client&lt;br /&gt;
 # Отключать после ... секунд без обмена данными (второй параметр)&lt;br /&gt;
 keepalive 10 120&lt;br /&gt;
 # Включить сжатие&lt;br /&gt;
 comp-lzo&lt;br /&gt;
 # Максимум клиентов одновременно - раскомментируйте если вам нужно ограничение по числу клиентов&lt;br /&gt;
 ;max-clients 100&lt;br /&gt;
 # Снижение привилегий до указанных (в целях безопасности) (раскомментируйте если необходимо, в этом случае OpenVPN надо запускать с правами root)&lt;br /&gt;
 ;user nobody&lt;br /&gt;
 ;group nogroup&lt;br /&gt;
&lt;br /&gt;
'''client.conf'''&lt;br /&gt;
&lt;br /&gt;
 # Конфигурационный файл клиента OpenVPN (Linux-версия)&lt;br /&gt;
 client&lt;br /&gt;
 # Использовать tun (tunneling) вместо tap (ethernet bridging)&lt;br /&gt;
 dev tun&lt;br /&gt;
 # Протокол&lt;br /&gt;
 proto udp&lt;br /&gt;
 # Адрес и порт сервера&lt;br /&gt;
 remote 192.168.0.1 1194&lt;br /&gt;
 # Если не получается установить соответствие между именем и адресом сервера - продолжать попытки&lt;br /&gt;
 resolv-retry infinite&lt;br /&gt;
 # Для клиента не нужно слушать порты&lt;br /&gt;
 nobind&lt;br /&gt;
 # Снижение привилегий до указанных (в целях безопасности) (раскомментируйте если необходимо, в этом случае OpenVPN надо запускать с правами root)&lt;br /&gt;
 ;user nobody&lt;br /&gt;
 ;group nogroup&lt;br /&gt;
 # Сохранять определённые параметры&lt;br /&gt;
 persist-key&lt;br /&gt;
 persist-tun&lt;br /&gt;
 # Полные пути к необходимым файлам (измените на свои пути)&lt;br /&gt;
 ca /home/qweo/tmp/article/keys/ca.crt&lt;br /&gt;
 cert /home/qweo/tmp/article/keys/clientname.crt&lt;br /&gt;
 key /home/qweo/tmp/article/keys/clientname.key&lt;br /&gt;
 # Включить сжатие (не включайте сжатие если на сервере оно отключено)&lt;br /&gt;
 comp-lzo&lt;br /&gt;
 # Уровень журналирования&lt;br /&gt;
 verb 3&lt;br /&gt;
&lt;br /&gt;
--[[Участник:Kipruss|Kipruss]] 00:35, 16 марта 2008 (MSK)&lt;/div&gt;</summary>
		<author><name>Kipruss</name></author>	</entry>

	</feed>