Устанавливаем IRC в локальной сети
Материал из IRC клиент KVIrc.
Данная статья предназначена для администраторов локальных сетей, которым не безразлична судьба чата, и которые хотят сделать его на основе IRC, либо для интересующихся структурой IRC сетей. Это не руководство пользователя IRC!
Почему IRC? Да потому, что
- IRC отлично справляется с нагрузкой от десятков до тысяч пользователей, не нагружая сервер;
- IRC построено на каналах: пользователи могут общаться группами, не мешая друг другу, но в то же время существуют и разговоры друг с другом;
- IRC позволяет передавать файлы по DCC;
- Существуют как платные, так и бесплатные IRC сервера, сервисы, клиенты под любую операционную систему, на любой цвет и вкус. Пользователи могут выбрать любую программу для общения в IRC, и все они будут совместимы;
- IRC позволяет шифровать трафик при помощи SSL;
- IRC позволяет администрировать каналы, причем тому, кто их зарегистрировал, а не только владельцу сети: самый обычный пользователь может быть владельцем супер популярного канала;
- IRC имеет встроенные механизмы борьбы с флудом, контроль и регистрацию ников/каналов, контроль доступа на каналы их владельцами.
Если вы уже знаете, как технически выглядит структура IRC сети, то пропустите теоретический раздел.
Содержание
[править] Стурктура IRC-сети
Представим структурную схему IRC сети. Здесь объектами являются приложения (не компьютеры). Технически все это может располагаться и на одном компьютере. Направление стрелок означает порядок соединения (кто к кому подключается).
Здесь вы видите 2 сервера, одни сервисы, и клиентов, подключенных к серверу. Теперь объясню зачем всего так много, и как все это работает. Первое, о чем оговорюсь, это количество серверов. В вашей сети должен быть как минимум один сервер. В большинстве случаев его одного будет достаточно. Большее количество серверов требуется если вы, например, хотите объединить чат в своей локальной сети с чатом в соседней сети. Далее будет обсуждаться сеть, состоящая из одного сервера (но все сказанное справедливо и для многосерверной сети).
Сервер (IRC демон, IRCD). Для чего нужен сервер, думаю, понятно. К нему подключаются клиенты. Сервер типично работает на 6667 порту, поэтому для его запуска не требуются (а также не рекомендуются) права суперпользователя (root). На момент написания статьи наиболее популярным серверным ПО является Unreal. Существует большое количество его модификаций, а также серверное ПО Bahamut, Hybrid и многие другие. Серверное ПО кроссплатформенно: вы можете его использовать как на *nix-подобных операционных системах, так и на Windows, также оно не привередливо к железу сервера (подойдет и старый домашний компьютер). Настройка серверного ПО будет рассмотрена в разделе настройки.
Ваш сервер должен быть доступен 24 часа в сутки, 7 дней в неделю. В момент его отсутствия люди не смогут общаться через IRC.
Сервисы — опциональная часть IRC сети. То есть вы можете свободно обойтись и без них. Но они заметно облегчат вам жизнь. Сервисы осуществляют регистрацию и контроль IRC каналов и ников. То есть без них, когда Вы выходите из IRC, ваш ник может быть использован кем-либо другим, а оператором канала становится первый вошедший на него. Сервисы предотвратят такую ситуацию. Сервисное ПО предоставляется разработчиками Anope и другими. Оно также кроссплатформенно и не привередливо к ресурсам сервера.
Сервисы подключаются к одному из серверов (главному) по TCP/IP и потому могут располагаться как на том же физическом сервере, что и IRCD, так и на отдельном компьютере. Рекомендуется держать сервер и сервисы на одном компьютере.
Пользователи. Пользователи могут использовать любой IRC клиент, какой им заблагорассудится. С этой ролью прекрасно справится KVIrc, предоставив пользователю красивый современный интерфейс, смайлы, аватары, мощный скриптинговый движок.
[править] Настройка серверного ПО
[править] Настройка KVIrc
Допустим, вы установили сервер и сервисы. Но для пользователей Вашей сети IRC это сложно и непонятно. Они пугаются одного слова «IRC» и просятся назад в бессерверный чат. Если так, то вам нужно определенно создать свой дистрибутив KVIrc, в котором самому прописать настройки соединения. Тогда пользователю останется лишь установить программу, заполнить свою персональную информацию — и он будет в IRC. Создание дистрибутива опишу для Windows-версии KVIrc. Для этого нам понадобится:
- Установщик NSIS;
- Пакет с NSIS скриптами для KVIrc (брать из этой FTP папки);
- KVIrc версии старше 3.2.5 (3.2.5 не подойдет). Последнюю версию можно скачать с FTP.
Теперь поэтапно опишу процесс создания своего дистрибутива
- Установите KVIrc и NSIS на свой компьютер;
- Зайдите в настройки серверов и добавьте там свою сеть и свой сервер. Можете при этом удалить другие сервера, чтобы ваши пользователи не запутались;
- В настройках сервера поставьте автоподключение при старте и автовход на канал(каналы) вашей локальной сети;
- Создайте на вашем жестком диске ПУСТУЮ папку и распакуйте туда архив с NSIS скриптами для KVIrc;
- Создайте в этой папке подпапку «package». Именно с таким именем!
- Скопируйте в «package» установленный KVIrc (kvirc.exe и прочие файлы);
- Удалите из папки package файлы и папки «Downloads», «Settings», «*.reg»,»portable». Таким образом, внутри этой папки у вас получится чистый дистрибутив KVIrc. Теперь в этот дистрибутив требуется «вшить» настройки вашей локальной сети.
- Внутри дистрибутива в папке config (package/config) есть файл serverdb.kvc. Он и задает начальные настройки серверов. Найдите у себя на компьютере такой же файл, но уже настроенный Вами. Он будет находиться в папке, которую вы увидите, выполнив в KVIrc команду » /echo $file.localDir «, а точнее — в её подпапке «config». Скопируйте свой файл на место serverdb.kvc из папки «package/config».
- Теперь вам нужно сказать KVIrc, чтобы он не просил ваших пользователей заново вводить сервер при первом запуске. Для этого ищем в той же папке «package/config» файл «preinstalled.kvc.win32-example». Переименовываем его в «preinstalled.kvc» для того, чтобы KVIrc нашел этот файл при запуске. Внутри этого файла уже описано, как правильно сформировать содержимое. Настоятельно рекомендую прочесть его комментарии. Но на всякий случай привожу правильное его содержимое, которое вы и должны там оставить:
Теперь выходим из папки package, нажимаем правой кнопкой по файлу KVIrc.nsi, выбираем «Compile NSIS Script», ждем — и получаем файл установки в этой же папке. Готово!
Теперь можете распространять полученный файл среди пользователей вашей сети и не беспокоиться, что у них возникнут проблемы с подключением.
Сервер iRC за 5 минут
В незапамятные времена, установив программу eMule, решил забраться на канал поддержки, пообщаться с пользователями. С тех пор началось мое знакомство с iRC. Как ни странно, до сих пор такой способ коммуникации пользуется популярностью. Недавно потребовалось организовать в локальной сети небольшой чат, поэтому мой выбор пал на связку UnrealiRCd и Anope, как более привычную и удобную по функциональности.
Устанавливаем сервер UnrealIRCd 3.2.8.1 Win32 SSL:
После приветственного окошка и прочтения лицензии требуется выбрать папку, в которую нужно установить UnrealIRCd. Почему-то многие советуют ставить в корень диска, но можно и оставить стандартное расположение в программных файлах, только выставить необходимые права на папку с файлами, если потребуется.
В процессе установки если у кого не установлен Microsoft Visual C++ 2008 Redistributable – выдаст запрос на скачивание и установку по сети.
Далее мы увидим окошко, в котором стоят галочки по умолчанию на пунктах «Create a desktop icon» и «Create certificate». Можно установит UnrealIRCd в качестве службы Windows. Следует учесть, что если выберете «Encrypt certificate», то запустить как сервис программу не удастся.
На завершающем этапе установки можно поснимать все галочки. Создать сертификат, и насладиться чтением изменений в новом релизе успеем позднее.
Теперь приступим к установке сервисов. Я остановил свой выбор на Anope. Итак, скачиваем файл (я выбрал Anope 1.8.5 with MySQL Windows Installer), запускаем установку и после нехитрых манипуляций с кнопочкой Next сервисы установлены. Не забудьте скопировать libmysql.dll в папку с программой.
Самое сложное – это выполнить настройку связки UnrealIRCd+Anope. Вернее, это очень просто, но, как ни странно, у многих возникают какие-то проблемы с конфигурированием и линковкой сервисов к серверу.
Итак, открываем папку с установленным сервером, ищем директорию doc и копируем из нее в папку с программой следующие файлы: example.conf (конфигурационный файл сервера), help.ru.conf (этот файл содержит текст команды /helpop). теперь переименовываем скопированный конфигурационный файл в unrealircd.conf. открываем любым текстовым редактором и приступаем к правке.
Найдем две следующие строки и рас комментируем их:
loadmodule «modules/commands.dll»;
loadmodule «modules/cloak.dll»;
Продвигаясь ниже по файлу ищем
В блоке me указываем информацию о сети. В поле name вписываем доменное имя вашего сервера. В поле info — описание сервера (будет выдаваться по команде /whois), а в поле numeric можно оставить цифру 1 (уникальный номер сервера в сети).
me
<
name «my.irc.loc»;
info «Home iRC server»;
numeric 1;
>;
В блоке admin указываются по желанию администратора сети контактные данные, владелец сервера etc. Данные выводятся по команде /admin «сервер».
admin <
«m00n»;
«Ivan Petrov»;
«admin@vseyaru.si»;
«ICQ: 10000»;
>;
Остальные блоки нас пока не интересуют, находим блок oper. Прописываем ваш ник в качестве оператора сервера. Указываем хост, с которого разрешено становиться оператором человеку с данным ником. Символ «*» отменяет привязку к хосту, что запрещено в крупных и в нормально организованных сетях по соображениям безопасности. В поле password прописываем пароль, по которому вы будете идентифицироваться.
В блоке flags проставляем нужные нам флаги. С перечнем их можно ознакомиться на официальном сайте UnrealiRCd.
oper m00n <
class clients;
from <
userhost *;
>;
password «ImSoLazyToEditThisField»;
flags
<
netadmin;
can_zline;
can_restart;
can_die;
can_gzline;
can_gkline;
global;
can_rehash;
>;
swhois «Вышиваю крестиком, пою, танцую, прекрасно готовлю, в совершенстве владею арабским, финским и японским»;
>;
Секция swhois позволяет прописать дополнительную информацию об операторе, выводящуюся по команде /whois ник_оператора.
Чуть ниже располагается блок listen, настраиваем его.
Пользователям в приведенном ниже примере будет разрешено коннектиться на сервер через 6667, 8067 и 6697 порты, причем 6697 в данном случае порт для ssl соединения.
listen *:8067;
listen *:6667;
Можно дописать второй блок listen (а можно и указать все в одном, кому как удобнее) с указанием адреса и порта с которого к серверу будут присоединены сервисы. Если вам требуется ssl, нужно раскомментировать эту строку:
Самый важный блок, с которым почему-то возникают проблемы по настройке, это link. Указываем адрес сервисов, хостнейм, порт и пароли:
link services.irc.loc
<
username *;
hostname 127.0.0.1;
bind-ip *;
port 1234;
hub *;
password-connect » ImSoLazyToEditThisField «;
password-receive » ImSoLazyToEditThisField «;
class servers;
options <
/* Замечание: Вы не должны использовать автоподключение (autoconnect) при подключении сервисов */
/* autoconnect; */
/* ssl; */
/* zip; */
>;
>;
Ниже правим блок ulines. В них указаны сервер статистики и сервисы, они обладают большими полномочиями, чем обычные сервера в сети:
ulines <
services.irc.loc;
stats.irc.loc;
>;
Настраиваем drpass, прописываем пароли для отключения и перезапуска сервера:
drpass <
restart » ImSoLazyToEditThisField «;
die » ImSoLazyToEditThisField «;
>;
Находим секцию tld и немного правим. (В установленной директории с UnrealIRCd должны быть созданы предварительно файлы ircd.motd и ircd.rules (обычные текстовые файлы с измененным на motd и rules, соответственно, расширениями. Согласно правилам хорошего тона пишем в них сообщение дня и правила сервера):
tld <
mask *@*;
motd «ircd.motd»;
rules «ircd.rules»;
>;
Далее идет блок set, непосредственная конфигурация сети. Имя сети, сервер по умолчанию, сервер с сервисами, сервер статистики, канал помощи, префикс для хоста:
set <
network-name «m00nNet»;
default-server «my.irc.loc»;
services-server «services.irc.loc»;
stats-server «stats.irc.loc»;
help-channel «#help»;
hiddenhost-prefix «mn»;
/* prefix-quit «no»; */
Натыкиваем cloack-keys (они нужны для сокрытия вашего реального IP адреса в сети) и прописываем дефолтные хосты, если вы включили host-on-oper-up:
cloak-keys <
«aoAr1HnR6gl3sJ7hVz4Zb7x4YwpW»;
«J2p524pwH1HSwyTSsIz2Q0Cm0B1T»;
«u3XWieDmUeuB3Dk6oBG6lard8BPq»;
>;
/* хост on-oper */
hosts <
local «locop.m00n.net»;
global «ircop.m00n.net»;
coadmin «coadmin.m00n.net»;
admin «admin.m00n.net»;
servicesadmin «csops.m00n.net»;
netadmin «netadmin.m00n.net»;
host-on-oper-up «no»;
>;
>;
Настраиваем далее специфическую конфигурацию сервера. Если сеть русскоязычная, желательно разрешить пользователям использовать русские ники опцией allowed-nickchars < russian-w1251; >;
set <
kline-address «admin@vseyaru.si»;
auto-join «#help»;
modes-on-connect «+ixw»;
modes-on-join «+nt»;
modes-on-oper «+xwgs»;
oper-auto-join «#opers»;
allowed-nickchars < russian-w1251; >;
restrict-usermodes «ixw»;
restrict-channelmodes «nt»;
options <
hide-ulines;
/* Если желаете, вы можете включить проверку ident */
/* identd-check; */
show-connect-info;
>;
Можно теперь считать сервер UnrealIRCd в каком-то смысле готовым к запуску и функционированию, основные настройки выполнены, остальное по желанию и по потребностям. Капитальное конфигурирование с прикручиванием модулей и прочего занимает длительное время.
Приступим к настройке сервисов Anope 1.8.5:
Как и в Unreal, у Anope есть свой конфигурационный файл образец example.conf, находящийся в поддиректории «data»; переименуем его в services.conf (желательно предварительно сделать копию). Открыть файл можно обычным блокнотом. Настоятельно рекомендую перед серьезным использованием сервисов прочитать документацию и настроить конфиг соответствующим образом, мы сделаем лишь первичную настройку.
Удаляем комментарий (символ #) из строки #IRCDModule «unreal32»
Ниже ищем строку
#RemoteServer2 127.0.0.1 6667 «mypass»
Раскомментируем, и заменяем на:
RemoteServer 127.0.0.1 1234 » ImSoLazyToEditThisField»
Находим строку ServerName и прописываем желаемый адрес сервера с сервисами:
Добавляем описание для сервисов:
ServerDesc «Services for m00nNet»
Расскомментируем строки и сгенерируем новые ключи:
UserKey1 8279441
UserKey2 5970804
UserKey3 1135462
Устанавливаем рута сервисов:
Расскоментируем параметр GlobalOnCycle а также две строчки ниже, дабы при рестарте/линковке сервисов выдавалось сообщение для пущей политкорректности по отношению к пользователю:
GlobalOnCycleMessage «Services are restarting, they will be back shortly — please be good while we’re gone»
GlobalOnCycleUP «Services are now back online — have a nice day»
В настройках NickServ (сервис, заведующий никами пользователей) расскомментируем NSDefKillQuick и заблочим #NSDefKill. Имхо, 20 секунд для идентификации пользователя вполне достаточно, 1 минута — это перебор.
Укажем желаемый префикс для пользователя. Если он не проидентифицировался или взял себе чужой ник, то его ник сменится на что-то вроде Guest1287
Полезная опция NSNickTracking. Если вы любитель менять ники и нет желания идентифицироваться каждый раз при смене ника с незарегистрированного на зарегистрированный (=влом написать скрипт в полстрочки для клиента iRC) — то это для вас.
Остальное по желанию и по потребностям, изучаем и правим конфиги, прикручиваем различные требующиеся модули etc etc etc.
Ффух, вроде все настроено, теперь можно запустить UnrealIRCd и Anope.
В случае успеха предприятия мы увидим строчку типа
.:00:39:18:. –my.irc.loc- *** Notice — (link) Link my.irc.loc -> services.irc.loc[@127.0.0.1.50337] established
————————————————————
.:00:39:18:. *Global* Services are now back online — have a nice day
————————————————————
.:00:39:18:. –my.irc.loc- *** Notice — Link services.irc.loc -> my.irc.loc is now synced [secs: 14 recv: 1.1009 sent: 2.460]
————————————————————
Коннектимся к серверу командой /server localhost или /server my.irc.loc. Если желаете использовать ssl, то /server my.irc.loc:+6697.
Не забудьте открыть порты для доступа юзерам к вашему серверу. Если используется роутер, как в моем случае, – необходимо выполнить проброс портов и проверить доступность порта (например, зайти с любого другого адреса в сети на сервер). Со своего компьютера законнектиться на внешний адрес в случае роутера, как мы помним, проблемно, лучше использовать другой адрес для теста соединения.
Если же все пошло наперекосяк и сервисы просто наотрез отказываются линковаться к серверу, запускаем их с командной строки с параметрами -nofork –debug и ищем загвоздку. Аналогично с сервером, если не запускается – изучаем лог (service.log). Удачного линка!
Данная статья не подлежит комментированию, поскольку её автор ещё не является полноправным участником сообщества. Вы сможете связаться с автором только после того, как он получит приглашение от кого-либо из участников сообщества. До этого момента его username будет скрыт псевдонимом.