Сообщество - Лига Сисадминов

Лига Сисадминов

2 419 постов 18 938 подписчиков

Популярные теги в сообществе:

327

Администрирование #05. DNS.

Я опять, как и в статье про DHCP, постараюсь идти от сильного упрощения к менее сильному упрощению. Статья ориентирована на уровень студентов и начинающих админов. Я не буду затрагивать вопросы безопасности или конкретной реализации, но постараюсь затронуть те вопросы, которые «проскакивают», либо вовсе игнорируют популярные статьи типа «что такое DNS».


Часть 1. История.


Наиболее увлекательное художественное описание того, как всё начиналось, доступно в rfc1034.

В давние времена, когда сети были маленькими, а компьютеры большими, кто-то заметил, что, во-первых, IP-адреса запоминать не очень удобно (гораздо удобнее слова, которые имеют смысл), а во-вторых, надо бы как-то обозначать один объект с несколькими сетевыми адресами.


«Давай запишем в текстовый файл соответствия сетевых адресов и понятных человеку имён» - сказал кто-то.

«А давайте!» - ответили остальные.


Сейчас вы можете найти файл «hosts» у себя на компьютере и посмотреть в него – почти так всё и было. Люди запоминали имя, запрашивали по имени ресурс. Система смотрела в файлике соответствие имени и сетевого адреса и возвращала по имени адрес. За файлик назначили ответственного, он вносил туда изменения и раздавал через файлообменник свежую версию всем желающим.


А потом сеть стала расти. Файлик стал очень большой и грозил увеличиваться дальше стремительными темпами, долго скачивался (потому что каналы передачи данных были узкие), поиск по файлу становился затрудненным, изменения вносились не сразу (у ответственного бывает выходной, праздник и болеющий ребенок), а еще корпорациям хотелось иметь свой файлик с шахматами и поэтессами внутренними ресурсами, недоступный никому извне.


«Идите в жопу» - сказал ответственный.

«Вот дерьмо, как же быть?» - подумали остальные.


И придумали DNS – Domain Name System – систему доменных имён. Люди были не дураки. Они подумали: «если мы уж внедряем такую сложную систему, на которую потребуется выделить бабло, давайте запихаем туда всё, связанное с именованием ресурсов!». И запихнули.


Что получилось. Общий смысл остался – по имени возвращается адрес. Теперь доменное имя стало состоять из частей, разделенных точкой (Например, pikabu.ru) и за каждую часть (домен определенного уровня иерархии, уровни нумеруются справа налево) стал отвечать свой сервер имён со своим персональным ответственным (на самом деле, всё немного сложнее, разберем в следующих частях). Система стала распределенной и иерархической. Запрос адреса по имени стало возможным разбить на части, и, пройдясь по цепочке серверов имён, найти нужный с нужным ответом. Каждый ответственный теперь мог менять свой кусочек информации, независимо от остальных. В зависимости от настроек, эта информация становилась доступной для всех через некоторое время. К записи о домене добавили дополнительную информацию: информацию о почтовых серверах, о доступных ресурсах, о псевдонимах, служебную информацию и т.д. Корпорации теперь могли делать так, что изнутри на запрос отвечал один сервер имён, а снаружи компании на тот же самый запрос отвечал другой сервер и возвращал другой адрес.


Сформулируем, зачем нужен DNS:

1) Чтобы при вводе имени сайта, например, pikabu.ru, в браузере, система могла понять, на какой сетевой адрес «стучаться»

2) Чтобы при вводе синонима имени сайта www.pikabu.ru, система могла понять, что это имя всё равно, что pikabu.ru

3) Чтобы когда вы отсылаете письма с яндекса на gmail, сервер яндекса знал, на какой сетевой адрес отправить письмо, то есть, где искать почтовый сервер gmail’a

4) Чтобы в ответ, почтовый сервер gmail мог проверить, что адрес, с которого пришло письмо, принадлежит почтовому серверу яндекса.

5) Чтобы при каких-либо проблемах с данной системой, можно было узнать контакты ответственного лица и связаться с ним


«А давайте будем брать за запись о домене деньги?» - подумал кто-то хваткий. И в чьих-то глазах зажглись зеленые искры в виде долларов. Но это уже совсем другая история.


Часть 2. Домен, зона и другие страшные слова.


Отойдём от абстракций и перейдем к конкретике. Зона – это набор ресурсных записей домена, то есть, фактически – это информация о домене и вся та сопутствующая лабуда, о которой мы говорили в части 1. Причем, заметьте, домен в нашем случае, это не «pikabu», а именно «pikabu.ru», так как, скажем, «pikabu.net» - это уже совсем другой домен. Это как директория «помойка» может лежать у вас как на диске C:\, так и на диске D:\ и это будут две разные директории. Зона может быть текстовым файликом или записью в базе данных сервера имён.

Выглядит, примерно так (мне не жалко):

@ означает подставить имя домена целиком


Ресурсная запись (Resource Record – RR) - собственно, информация о некотором ресурсе- состоит из нескольких полей: Владелец, Тип, Класс, TTL, данные. Владелец – это домен, к которому запись относится. Тип может быть одним из стандартных (например, A, AAAA, MX, NS, SOA, TXT и т.д.). Класс раньше разделял записи для Интернет и для других сетей, сейчас, вроде, используется только IN для Интернет. TTL – время, на которое запись разрешено закэшировать резолверу (рекурсивному кэширующему серверу, см. Часть 3). Ну и данные – собственно нужная информация, формат которой зависит от типа записи.


Запись SOA (Start Of Authority) – это начальная запись зоны и она должна быть обязательно, потому остановимся на ней подробнее. В ней содержится целый ряд полей:


- Первичный (Primary) DNS-сервер для некоторой зоны — DNS-сервер, на котором хранится полная исходная информация об этой зоне.

- e-mail ответственного лица

- serial – серийный номер зоны. Фактически, это номер изменения файла зоны. Если у главного DNS-сервера, отвечающего за зону, есть подчиненные сервера, то они периодически сравнивают номер копии зоны у себя с номером на главном сервере. Если на главном номер больше – подчиненные сервера обновляют у себя зону.

- refresh – это то, как часто подчиненные сервера будут пытаться обновить зону

- retry – это то, как часто подчиненные сервера будут пытаться обновить зону, если в первый раз произошла ошибка (например, главный сервер был недоступен)

- expire – то, сколько времени подчиненный сервер может считать информацию о зоне актуальной, если главный сервер ему так и не ответил

- TTL – мы уже говорили – на сколько можно закэшировать запись.

NS – записи содержат сведения о DNS-серверах, где хранится информация о зоне (их может быть больше одного).

А – запись связывает имя с IPv4 адресом. Кстати, если сделать несколько записей с одним именем, но разными адресами, то в ответах они будут чередоваться (чаще всего по алгоритму round robin) – поэкспериментируйте на pikabu.ru и его трех адресах ;)


MX – записи определяют имена почтовых серверов для данного домена (а чтобы узнать их адреса, на почтовые сервера должны быть А-записи в соответствующем домене). Эти записи примечательны тем, что у них есть приоритет (чем меньше приоритет – тем главнее сервер, равный приоритет – распределение нагрузки).

Чуть позже рассмотрим еще PTR записи. Ну а про остальные, если интересно, можно прочитать в вики.


Часть 3. Как идёт запрос.


Пока у нас есть куча не особо связанных между собой кусков. Сейчас определим еще пару понятий и попробуем посмотреть, как система работает в целом. Вообще, у кого английский хоть на базовом уровне, советую посмотреть зашибенный комикс в шести частях + бонус.


Вы уже поняли, что в системе есть DNS-сервера – сервера имён, на которых хранятся файлы зон. Есть клиенты, которые пытаются узнать адрес по имени (браузер, в котором мы шароебимся по сайтикам, например).


DNS-сервера бывают рекурсивными (которые могут пройтись по всей цепочке и вернуть готовый ответ) и нерекурсивными (которые возвращают информацию о DNS-серверах, ответственных за следующую зону). А еще DNS-сервера бывают кэширующими (которые на время запоминают те ответы, которые через них проходят) и некэширующими (угадайте..).


Вспоминаем, что система DNS иерархическая. У этой иерархии есть вершина (или корень) – корневая зона, за которой зарезервировано нулевое имя, и за которую отвечают корневые сервера. Эта зона невидимо присутствует во всех доменных именах - на самом деле, все они заканчивают на точку-ничего (можно посмотреть на первую картинку с файлом зоны и увидеть эти точки). Корневые сервера содержат информацию о доменах первого уровня (ru, com, net и т.д.). Этих серверов всего 13 штук (но физически их гораздо больше – резервирование, распределение нагрузки, всё такое). Почему 13? Так исторически сложилось: тогда максимальное количество данных в пакете было 512 байт и туда влезало только 13 записей. Корневые сервера нерекурсивные и некэширующие, кстати.


И сейчас я кратенько перескажу тот самый комикс. Итак, вы вводите в своем любимом браузере адрес любимого сайта pikabu.ru – что же происходит с точки зрения DNS?


1) Браузер роется у себя в кэше – может, вы недавно уже заходили на пикабу и он это еще помнит. Если нет, идем дальше.


2) Потом браузер обращается с животрепещущим вопросом «где же pikabu.ru?» к операционной системе. Она проверяет в своём кэше (может, вы недавно пинговали пикабу?) и в файлике hosts. Если не нашла, передает вопрос тому серверу, который у вас указан на компьютере в качестве DNS.


3) Этот сервер, обычно, сервер провайдера, кэширующий и рекурсивный. То есть, он вернет вам адрес сайта или ошибку. Сначала он проверяет свой кэш (может, ваш сосед по общаге только что запрашивал пикабу?). А еще смотрит в своих зонах (может, он за пикабу и отвечает?). Если ничего не находит, этот сервер начинает собирать ответ, используя нерекурсивные запросы.


4) Первым делом, запрос отправляется на ближайший корневой сервер (вру, там еще есть манипуляции с кэшем, но мы их опустим - пусть ничего нигде не найдено). Адреса корневых серверов известны и меняются очень редко, так что они просто забиты руками во все DNS-сервера. Корневой сервер отвечает, что он в душе не знает адреса «pikabu.ru», но вот тебе список серверов, отвечающих за «ru». Кстати, возвращает он имена и «приклеенные» ip-адреса, а то вы могли бы зациклится в своих запросах.

Кстати, слышали, что rpin вроде как передает права на управление зоной ru Ростелекому?


5) Ок, наш сервер сохранил инфу в кэше (и теперь за всеми сайтами, заканчивающимися на .ru будет обращаться уже к этим серверам). Берет верхний сервер из списка и спрашивает его, где же «pikabu.ru»? Ему отвечают списком из трех адресов, он возвращает верхний операционной системе. Все счастливы, все прописали себе в кэш, что могли, подключаемся к этому IP-адресу и читаем пикабу.


Часть 4. Обратная зона.


Случается так, что нам нужна обратная процедура: не по имени узнать адрес, а по адресу имя. Такие запросы, в частности, используют почтовые сервера, чтобы бороться со спамом. То есть, приходит нам письмо от vasya@gaza.net, например, с адреса 1.23.45.6. И мы хотим узнать, а правда ли адрес 1.23.45.6 является адресом почтового сервера этого домена. Для этого нам надо получить имя по адресу 1.23.45.6 и сравнить его с MX-записью домена (кто заморачивается почтовиками, почитайте еще про spf обязательно).


Для преобразования ip-адресов в имена существует специальный домен in-addr.arpa и специальная запись типа PTR. Как это выглядит, видно на скриншоте. У пикабу, кстати, какая-то лажа с его гуглопочтой, так что пример на другом домене (надеюсь, они не обидятся). Обратите внимание, что IP-адрес переворачивается (задача для самостоятельного раздумья – вспомнить про адресацию и понять, почему).

Часть 5. Внутренняя зона – что за зверь?


Это немножко вбоквел. Например, вы зарегистрировали домен не для себя, а для компании. В компании решили организовать доменную структуру (AD поднять, например). И для этой доменной структуры у вас появляется внутренняя зона DNS. Зона, причем, может быть та же самая, что и в инете, но к той интернетовской зоне она не будет иметь никакого отношения. У вас появляются контроллеры домена (или иные DNS-сервера – держатели внутренней зоны) в вашей локальной сети. На всех компьютерах вашей организации в качестве DNS-серверов вы указываете контроллеры домена (на которых поднята роль DNS). Во внутренней зоне находятся записи внутренних ресурсов: все компьютере в домене, внутренние web-порталы, и т.д. На DNS-серверах корпорации указаны «Forwarders» - сервера, на которые пойдет запрос, если ответа не найдется во внутренней зоне (это уже сервера провайдера, обычно).


Ну, предположим, что pikabu.ru – большая корпорация, в которой есть доменная структура и вы в этой корпорации работаете. Если вы изнутри этой зоны (сидя на работе) выполните команду «nslookup pikabu.ru», вы получите список внутренних DNS-серверов компании, а на сайт пикабушечки не попадёте. Всё потому, что вам ответит внутренний сервер компании, в котором прописано, что «pikabu.ru – это ж я сам и есть, а еще все мои дублирующие сервера!». А вот если вы выполните эту команду из дома, получите внешние адреса пикабу – потому что вам ответит DNS-сервер хостинг-провайдера.


Теперь, предположим, вы с работы набрали www.pikabu.ru. Допустим, у вас в корпорации нет компа с именем www и внутреннего ресурса такого тоже нет. Корпоративный DNS не найдет у себя в зоне записи www и перенаправит запрос на адрес форварда. Мы помним, что это адрес сервера провайдера. И вот тут ответ будет идентичный, что изнутри, что снаружи корпорации, потому что мы искали во внешней зоне.


И третий вариант, у вас в домене есть компьютер W01-vasya-PC.pikabu.ru. Изнутри компании вам внутренний DNS вернет его внутренний адрес. А вот запрос извне "Где W01-vasya-PC.pikabu.ru?" вернет вам "такого хоста не существует" - потому что DNS хостинг-провайдера, где находится ваша внешняя зона pikabu.ru (и куда в конце-концов дочапает DNS-запрос) понятия не имеет о вашей внутренней зоне.


Часть 6. Интересные факты:


Сейчас для распределения нагрузки на корневые сервера используется anycast – это такая публикация маршрутов в сети (BGP), при которой, вам ответит географически ближайший сервер, а не тот, до которого маршрут по некоторым причинам короче.


Максимальное имя поддомена 63 символа, максимальное общее доменное имя 255 символов.


Обычно, обратную зону надо просить прописывать своего провайдера. Но есть вариант, при котором провайдер делает у себя пару записей, а вы после этого можете менять PTR-запись прям у себя в админке родного DNS от хостинг-провайдера (ну, насколько я поняла). Статья вот.


P.S.: Что-то дофига получилось, мда. Надеюсь, кому-то стало понятнее. Правки по существу приветствуются.

Показать полностью 6
1

Задачка со звёздочкой...

Всем привет. Нужна помощь. Сам эту загадку решить не смог. Предыстория: На дня умер мой старенький роутер ТП-линк 940, на замену ему был приобретён бюджетный (для квартиры больше и не надо) Винга WR-AC1200. Работает отлично. Скоростя для домашних нужд достаточные. Теперь сама история, не скачивается  ни одно приложение в гугл плэй, в сам маркет заходит, обновления видит, кнопку нажать позволяет, даже как бы начинается процесс скачивания на он так на стартовом этапе и висит какое-то время, а потом появляется ошибка 495 (гуглом воспользовался, все советы делал). Тестировал на 4-х телефонах. Проблема точно не в телефоне. Подключаешься к другой Wi-Fi сети, приложение скачиваются, подключаешь мобильную связь, приложения скачиваются. Тупо не скачиваются на данном конкретном роутере. Как я подумал, проблема с закрытыми портами (хотя это странно закрывать такие порты с завода), нашёл какие порты использует гугл маркет, зашёл в настройку NAT.... и тут мои знания и интуиция основательно иссякли. Прошу помощи. Что мне, блин, сделать что бы качались приложения?? Сорри за ошибки, нервничаю. Фото настроек ниже, комменты для минусов будут.

Показать полностью 2

Глючит Libre Officce Calc

На работе стоит сервак c Ubuntu 16.04 lts, на нем ltsp,dhcp,клиент тонкий работают 4 пользователя - сидят в почте, да документы в "экселе".

На 1 компьютере постоянно возникает глюк - каждый раз когда работник перезагружает компьютер,часть строк пропадают (скрываются),несмотря на то,что документ сохраняется (проверено лично) .Строки эти -одни и те же,работнику надоело каждый раз их восстанавливать.

Гугление особо не помогло,надеюсь кто-то сталкивался с подобной проблемой.

36

Проблемы с Windows

Всем привет! Прошу помощи знающих людей и хочу немного высказаться на счет форума поддержки Microsoft. Буквально 2 месяца назад появилась проблема съедания svchost'ом всей оперативной памяти. На секундочку, её у меня 24 гб.

Собственно, вся проблема в этом маленьком процессе, который возникает из ниоткуда (самый верхний)

Загружает процессор на 30% постоянно, и начинает постепенно съедать оперативную память, по 20-30 мб в секунду. Я написал на форум Microsoft, чтобы мне хотя бы дали направление как решать данную проблему, так как гугление ничего путного не дало. Собственно, вот сам вопрос на форуме и тамошние ответы:


https://answers.microsoft.com/ru-ru/windows/forum/windows_10...


Ответ свелся к тому, что нужно удалить системные приложения Люди, Почта и Календарь. Я немного прифигел с такого, но это не всё. С моей проблемой столкнулся ещё один человек, который просто влез в обсуждение, и админы начали отвечать только ему, игнорируя мои сообщения. У него оказалась старая мат. плата, и ему посоветовали обратиться в поддержку его мат. платы. НО у меня то не старая, но админы просто проигнорили, хоть я им и писал, какая у меня плата, и даже делал всё, что там говорили второму человеку. НО это не помогло! (вот так неожиданность!).

Короче прошу помощи в данной ситуации, так как я уже не знаю что делать. На пикабу я давно, целых 5 лет :)

Скину ещё скрин самого процессора, который съедает память.

Не плюсов ради, комменты для минусов внутри.

Показать полностью 2
35

MikroTik: Пример настройки клиента PPPoE в WinBox

Представляю свою первую заметку по настройке и применению MikroTik.


Данный пример показывает как настроить клиент PPPoE на MikroTik RB951Ui-2HnD, RouterOS 6.41 (stable). Скорее всего всё приведённые ниже настройки подойдут и для других устройств MikroTik.

Перед выполнением данных настроек устройство имело настройки по умолчанию.

Интерфейс для подключения к провайдеру: порт №1 (ether1).

Клиентская сеть: порты №№ 2...5 (ether2...ether5).

Настройка выполняется в программе WinBox.


1. Интерфейс PPPoE Client

Нужно создать новый интерфейс типа PPPoE Client.

Для этого нужно выполнить следующие действия:

1.1. В меню Interfaces выбрать вкладку Interface, нажать кнопку

и выбрать из списка пункт PPPoE Client.


1.2. Настройка:

На вкладке General

• В поле Name нужно задать имя интерфейса, значение по умолчанию: pppoe-out1

• В поле Interfaces нужно выбрать интерфейс для подключения к серверу PPPoE , например ether1


На вкладке Dial Out

• В поле User нужно задать имя пользователя

• В поле Password нужно задать пароль пользователя

• Выбрать ✔ Use Peer DNS

• Выбрать ✔ Add Default Route


1.3. Применить настройки: нажать кнопку

2. Настройка Firewall

Сначала нужно создать запрещающее правило, для этого нужно выполнить следующие действия:

2.1. В меню IP/Firewall выбрать вкладку Firewall Rules и нажать кнопку

2.2. Настройка:

На вкладке General

• В поле Chain нужно выбрать input

• В поле In. Interface нужно выбрать имя PPPoE интерфейса, например pppoe-out1


На вкладке Action в поле Action нужно выбрать drop


2.3. Применить настройки: нажать кнопку

Далее нужно добавить и настроить правило преобразования сетевых адресов (NAT), для этого нужно выполнить следующие действия:

2.4. В меню IP/Firewall выбрать вкладку NAT и нажать кнопку

2.5. Настройка:

На вкладке General

• В поле Chain нужно выбрать srcnat

• В поле Out. Interface нужно выбрать имя PPPoE интерфейса, например pppoe-out1


На вкладке Action в поле Action нужно выбрать masquerade


2.6. Применить настройки: нажать кнопку

На этом настройка завершена!


Подробнее о  MikroTik RB951Ui-2HnD здесь.

Исходные материалы и ссылки здесь.

Показать полностью 7
3785

Недостаточно ресурсов для предсказания будущего!

Недавно заметил в панели управления программу загрузки курсов акций.

Ставится вместе с Microsoft Application Compatibility Toolkit

Недостаточно ресурсов для предсказания будущего!

Я это о чем...

У кого-нибудь случаем не завалялось 64TB RAM и камушек на 6800 GHz? Есть таки очень хороший бизнес-план!

81

Ноутбук Asus X541N - мечта СЦ и печаль юзеров

Уже давно меня тревожили смутные слухи по новые модели ноутбуков, в которых аккумуляторная батарея упрятана глубоко в корпус. Каждый раз я судорожно крестился, что таковые мне не попадались в работе. И вот такой момент настал, давняя знакомая попросила "поставить программы" на свежекупленный белоснежный красавец-ноутбук Асус X541N.

В процессе пляски с бубном при установки винды и перезагрузок-входов в биос-включения-выключения, на второй день пользования ноутбук перестал вообще включаться.

Не беда,- подумал я,- нужно просто на десять сек вынуть батарею!

Привычным движением перевернул ноутбук, шкряб-шкряб по крышке, а батареи-то и нет...


И вот сел я как та бабка у разбитого корыта, с мыслями "кто виноват и что делать?".

Очевидно же, что ноутбук глюканул и нужно для начала отрубить ему доступ к источнику питания, коим является батарея. Но для этого его нужно разобрать. А это может повлечь аннулирование гарантии.


С другой стороны, если разобрать ноут, перезагрузить питание, а проблема не уйдет  (по причине заводского брака, например), то нужно будет его сдавать по гарантии.

И в лучшем случае придется объяснять знакомой, "почему дали тебе новый и рабочий, а ты вернул поломанный". В худшем случае, ноут по гарантии не примут, мотивируя несанкционированным вскрытием.


Для принятия более взвешенного решения как мне быть, я погуглил указанную проблему и оказалось, что она отнюдь не редка. У кого-то Asus X541N перестал включаться через 3 месяца, у кого раньше. Проблема предсказуемо решалась разборкой ноутбука и перевключением батареи.


И я решился. Разобрал ноут, отключил батарею.

Потом подключил и собрал заново. Нажал "Вкл" и ноутбук загрузился, как ни в чем не бывало!


В общем, на практике подтвердились мои теоретические выкладки, что ноутбуки с несъемной батареей это полная х..ня. Неудачливые владельцы подобных ноутбуков рано или поздно будут вынуждены отнести их умельцам только для того, что бы ноут разобрали и перезагрузили питание. А самые хитрожопые работники сервисных центров еще и разведут на "системная плата сгорела, поставили вам новую за 100500 денег".


Не покупайте дерьмовый Asus X541N и любой другой ноутбук с несъемной батареей.

Показать полностью 2
126

Infinity Call Center

Infinity? А, знаю — редкостное говнище!

(с) Один знакомый программист.


Честное слово, вначале я не хотела портить репутацию программному продукту и пилить пост на пикабу. Но потом подумала, что всё это я хотела бы прочитать до того, как мы решили его купить и внедрить. Это не значит, что мы бы его тогда не купили, просто хотелось бы знать, к чему готовиться.


Осторожно, ненормативная лексика!


Всё ниженаписанное – исключительно моё субъективное мнение.


Чтоб не начинать с чернухи, кое-какие плюсы всё же есть. На мой взгляд, если вам нужен типовой (совсем типовой) Call-центр в ваш небольшой интернет-магазин для впаривания чего-нибудь, то Инфинити вам в общем-то подойдёт. Одну из типовых конфигураций самую малость подпилят под вас, покажут, где менять файлики с текстом впаривания и на этом всё. Реально, под стандартные задачи есть даже какие-никакие инструкции на сайте, жить можно.


Опять же, Инфинити у нас работает и не так плохо, как может показаться из моего поста. Но подгорает-то не от положительных моментов.

А теперь о том, что мне радикально не понравилось. То есть, о минусах.


Сначала, как всегда приходят люди с красивой презентацией. Ясен перец, 50% минимум там либо не упоминается, либо враньё, потому на основных вопросах акцентируемся в диалоге и уточняем несколько раз.


(мы): Будет работать на слабом интернет-канале?

(Инфинити): Конечно, будет! Если там работает IP-телефония, то будет работать и наш клиент.

(мы): Реально маленький канал, до 1 мегабита. IP-телефония работает без нареканий, даже два телефона одновременно.

(Инфинити): тогда вообще без проблем. Мы же сказали, если IP-телефония работает, то и наш клиент будет.


Итог: враньё. 5 мегабит минимум для какой-никакой нормальной работы. Ну, в три можно попробовать ужаться. Клиент на Чукотке (или на 3g модеме в зоне нелучшего приёма) запускается примерно 1:40м (один час сорок минут). Это просто запуск клиента – он грузит свои модули с сервера, судя по всему. А если запуск оборвался, то заново. Карточка позвонившего грузится от 10 до 40 минут (потому что кэп говорит, что мегабит - это не только для инфити, да и не всегда он доступен целиком). Когда обратили на это внимание поддержки, они сказали что-то типа «ну мы ж не думали, что там реально мегабит». Мы решили отдельно запуском софтофона на месте, а клиент инфинити запускается в терминалке через RemoteApp.


И еще о скорости работы и карточках клиента. У нас в карточку подгружается по номеру телефона инфа о клиенте. Ну там, ФИО, пол, возраст и некоторая сопроводиловка. Всего текста на страничку А4 в худшем случае – ничего экстраординарного, никаких фоток и прочей ереси. Филиалы замучили жалобами на медленную загрузку карточки. Глянули Wireshark’ом. 9 мегабайт! Как можно раздуть кусок текста до 9 мегабайт?! Мы даже спросили, может они скриншоты карточки в HD там гоняют? Специально для нас разработчики оптимизировали передачу информации в карточке клиента (до 5 мегабайт на штуку). Тогда-то у нас и стал клиент сносно работать на канале в 4-5 мегабит. То есть, у вас без оптимизации будет та же лажа. Наших программеров оттаскивали от телефона под вопли «дайте мне 10% от цены поддержки и я научу программировать их сраных программистов!».


Внедрение. Как ни странно, внедрение отработали нормально. То есть, хотелки из ТЗ более-менее учтены, правки оперативно вносились. Минус – гонят быстрее провести обучение админов (у нас входило в стоимость 2, кажется, дня обучения). То есть, система еще на стадии подгона под хотелки, в релиз не запущена, трогать ничего нельзя, а вас уже учат с ней работать. Учат на типовой конфигурации и простых примерах, ваши задачи ни разу не учитывают.


Дальше – полный мрак. Система запускается в работу. Ок, первые пробные запуски нормально. Переходим на Инфинити ииии… Специалист техподдержки с вами ровно до 18:00. Вроде бы и ничего страшного, все мы люди. Но мы помним, что после запуска в реальную работу обязательно вылезут косяки. Кредо Инфинити: «Накатим изменения на живую систему в скрипт, который запускается в ночное время. Проверять, конечно, не будем. Трубку брать тоже, мы же работаем с 10 до 18». То есть вам днём, часто не сообщая об этом, вносят изменения в систему. Ночью у вас работает другая логика (с дежурными операторами и другим автоответчиком, например) и всё в 18:00 ломается. Звонки идут в тишину, «набранный номер не существует», сброс звонка через 15 секунд, звонки Москвы идут на Хабаровск – выбери своё, что называется. А в 18:01 уже никто не возьмет трубку и не заглянет в трекер, будь там хоть какой статус у заявки. Тут вариант только разбираться самим и править их свежие косяки «на коленке». Еще можно попытаться вернуть старую логику и тут мы плавно подходим к следующему минусу.


Отсутствие лога изменений. Даже банальной даты создания/изменения скрипта нет. В принципе, если углубиться, то можно найти скомпилированные скрипты в папке Инфинити и посмотреть дату создания файла. Но в самой системе ничего подобного нет. Мы настойчиво попросили писать в поле комментария строку типа «15.04.2016 14:20, сделано то-то. Вася.».


Итак, вы немного освоились, система перестала отрубаться по 3 раза в неделю, и вы решаетесь внести изменения. Ну, потому что надо же когда-то начинать, вы же платите за поддержку, а не за то, чтобы вам вносили изменения, отличные от ТЗ. Например, вам надо что-то чуток изменить в основном скрипте. Вы копируете последнюю версию, открываете иии… Б@#!!! Ну, вы видели значок Хабра? Где что-то среднее между клубочком и Ктулху? Вот что-то подобное вы и наблюдаете. При попытке разобраться, то есть врубить на компонентах отображение направления движения, всё намертво зависает. Оперативки дохрена, а интерфейс её не хавает. Либо шевелите мышкой, либо на экране бегают пузырики данных. Ау, программеры Инфинити! Меня на втором курсе учили, что отображение данных и обработка нажатий пользователя должна быть в разных потоках, чтоб интерфейс «не вис». Ладно, пофиг. Мне потребовалось примерно 10 рабочих часов, чтоб вынести половину в отдельный скрипт и «причесать» остальной трешак. Почему так много? Так я была разбалована Visual Studio, теперь-то скилл прокачан. Сообщаю, здесь нет копи-паста. Ладно, в соседний скрипт скопировать нельзя, но тут нет копи-пасты даже в рамках одного скрипта. То есть, если вам нужно 20 одинаковых компонентов, которые различаются только одним параметром (из 10), то вам 20 раз надо настроить 10 параметров. Скопировать нельзя. Ага, а исходный код можно посмотреть (есть секретная комбинация: зажать Ctrl и нажать иконку сохранения). Код на плюсах, казалось бы – поправь, вставь, скомпилируй! Хрен там, посмотреть можно, скопировать можно, вставить – нет. «Это слишком сложные компоненты».


Итак, пришло время для серьезных изменений! Вы открываете документацию… стойте, где же она? Наверное, на сайте? Нет, там только вики по «стандартным решениям» — в основном, как звонить и пользоваться клиентом. Ну и немного по основным компонентам в стиле «компонент «поднять трубку» используется для того, чтобы поднять трубку». Наверное, нам забыли выслать документацию. Звоним в поддержку и получаем чудесный ответ: «А она еще не написана, в общем то мы и не собирались.» Короче, мы выцыганили примерное описание БД «на отъебись» - только часть баз и таблиц, которые техподдержке показались наиболее значимыми — и это всё. Ни документации системы в целом, ни нашей модификации – ничего этого нет в природе.


Отлично, вы материтесь каждый день, но стокгольмский сидром берет своё, да и просто приноровились к этой чудо-системе. И тут вам начинают жаловаться на неуловимые глюки. Ну там, отчеты врут или звук пропадает. Вы заводите тикет в поддержке, а в ответ тишина. Ну то есть, он даже не принят в работу. День-два-неделя – ноль реакции. Звоните, а в ответ «решаются более приоритетные задачи». Эмм, заглядываете в договор. За поддержку отвалено более полуляма, хоть и российских, но денег – люди как бы не бесплатно работают. После этапа внедрения техподдержка у вас практически отсутствует. У нас, например, начались (и продолжаются) внезапные падения сервиса. То есть, все клиенты зависают, а звонки идут в тишину. При этом переключения на резервный номер не происходит, потому что звонки-то приземляются. Помогает только физический ребут сервера. Реакция на проблему с уровнем «фатально» была до недели (не решение – просто начало работы с заявкой). На более мелкие – от нескольких дней до трех месяцев (бонус в комментариях). Получите сервис за пол-лимона, называется. Ладно, к их чести, менеджер проблему признал (когда мы отказались платить за следующий год, раньше жалобы не помогали). И нам дали три месяца бесплатной поддержки в компенсацию. Стало намного лучше, реакция день-в-день или на следующий. Но! Опять, черт возьми, их эксперименты на живой системе. «Этот скрипт не должен был его уронить, там ничего такого». Конечно, только после его запуска на полдня лёг сервер совместно с номером 8-800 (потому что, чтоб починить, надо было, чтоб звонки шли – логи отслеживать). Опять спрашиваю, у вас что, мощностей на виртуалку нет? Взяли и протестировали бы. Ну, «всё сложно с этим». Лень, я понимаю (правда понимаю, но вы ж, нехорошие люди, за это деньги берёте!).


Ну и еще немного. Техподдержка работает в Инфинити под админской учеткой (что логично). Но если у вас куплена одна админская учетка – вы идете лесом, одновременно работать нельзя. Мы им предложили – да добавьте нам одну лицензию под своего сотрудника! Куплено 120 лицух по 14к каждая. Когда их тоже заколебало, что я постоянно прошу освободить лицуху, нам милостиво предложили сделать одну из наших лицензий администратором (ну хренли, 580к за поддержку + 14к, чтобы она могла работать удобненкько и минус лицуха, которая посчитана для оператора).


Первый чувак из техподдержки нам еще врал, что бэкап делается только с полной остановкой сервера и только из web-интерфейса. Хорошо, следующий сознался, что всё это не обязательно.


А, да, еще полная несовместимость с Каспером (да и со стандартным виндовым firewall тоже). В исключение надо прописывать кучу всего. И всё равно, буквально в начале января в экзешнике задетектился троян. Техподдержка «логично» говорит, что «уберите его в исключения и уведомления антивируса не будут вас беспокоить». Ну конечно, как мы не догадались, не троян же это у них сидит, в самом деле!


Из более свежего. Присылают тут скрипт перезапуска служб (правда же, если за год не разобрались, почему сервер падает, давайте будем просто регулярно перезапускать службы). Вот как бы вы добавили в батник паузу? SLEEP? TIMEOUT? Не наш метод! «ping -n 1 -w 10000 192.168.254.254 >null» — вот супер-метод с ответов мэил.ру! На вопрос, что это за хрень? Ответ: «Это проверенный временем скрипт, мы рекомендуем использовать именно его». Не, конечно, можно и гландны через жопу удалить, вопрос — надо ли?


Чтобы запилить свой отчет вам понадобятся навыки SQL (немного) и навыки экстрасенса (много). К счастью, у меня был под рукой гуру-SQL’щик и прокаченый скилл чтения мыслей.


Из самого свежего. Из одного скрипта надо запустить скрипт поствызывной обработки (это типа «дайте оценку оператору от хорошо до прекрасно, спасибо, что вы с нами»). И сюрприз – ошибка компиляции, вы пытаетесь привести тип Int64 к Integer. Знаете, в какой переменной приведение? В ID скрипта! То есть (как я предполагаю), сделали сначала Int на ID, замутили вызов функции. Потом подумали через несколько лет, а вдруг Integer не хватит? Давай замутим Int64! А в прототипе функции никто ничего не менял. Хуле тестировать, в самом-то деле. Решение – «скопируйте функционал в наш старый скрипт, там ID нужного типа, или забейте, авось не выйдете за диапазон» (второй вариант сработал). Ну, тикет еще в работе, может всё не так, как я додумала, а может всё так, но поправят.


Передать переменную в скрипт, который вызывается особым образом (причем непонятно, почему именно тут его надо вызывать по-другому)? Функционал не предусмотрен. Ну ведь есть же аргументы командной строки, ну почему?!


Из свежих плюсов: новый специалист поддержки, Андрей, отвечает реально быстро, более-менее по делу и даже обратил внимание на одну неточность у меня в скрипте (эх, была бы документация!) – прогресс налицо. Но остального не отменяет.


Итог.. Да нет итога. Работаем с чем есть, я уже относительно разобралась и ваяю скрипты. Наверное, есть много недокументированных возможностей, которые облегчают работу, но их надо еще найти. Гуру-SQL’щик помог запилить отчеты. Всегда приходил на помощь наш цискарь, чтобы снять с инфинити как можно больше функционала (и помедитировать со мной на логи wireshark с ошибками). В общем, для типовой конфигурации с операторами на жирных интернет-каналах можно. Для специфического чего-нибудь с перспективой допиливания своими силами – не советую.


Чуток ответов на вероятные вопросы:


Почему не запилили свою систему? Надо было относительно срочно (за полгода), а программистов отрывать от дела запретили (на них два крупных внутренних программных продукта, очень специфичных и постоянно меняющихся в связи с изменениями в законодательстве + несколько мелких). Нам дали двух программеров на пару месяцев для интеграции с нашей БД. Надо было не только интеграцию, но и красивую мордаху, красивые отчеты и классический функционал call-центра (статусы, учет рабочего времени, скрипты, карточки клиента – вот это всё).


Почему не спросили про документацию? Спросили. Нам сказали, что она есть. Да, мы лошары и поверили.


Почему столько негатива, не всё ж так плохо? Потому что, про то, как инфинити решил все проблемы и погнал бизнес в гору, можно прочитать на сайте Инфинити.


Я ни в коем случае не призываю к написанию других негативных отзывов и не говорю, что данный продукт вообще нельзя применять. Просто подумайте, подходит ли он лично вам в вашей ситуации и оговорите нюансы оказания технической поддержки заранее (в договоре).


Бонус, напоминаю, в комментариях.

Показать полностью
Отличная работа, все прочитано!