Запрет macOS менять имя машины

Довольно часто я со своим макбуком попадаю в чужие сети. И некоторые (не будем показывать пальцем) в DHCP ответе отдают новое имя машины. А macOS как и положено, меняет свое имя на указанное. Мелочь, но напрягает когда в терминале видишь непривычное имя.

Решение простое: сделать скрипт/выполнить следующие команды. Вместо mbook поставьте свое

NAME="mbook"
sudo scutil --set HostName ${NAME}
sudo scutil --set LocalHostName ${NAME}
sudo scutil --set ComputerName "${NAME}"

Решение простое: DHCP может переписать HostName, но приоритет у LocalHostName и остального выше.

Кто такие DevOps?

Слово модное…это да!! Но если публиковать как «Системный администратор», то откликаются мальчики-настройщики компов, если «Программист», то жесткие программеры без фантазии © Объяснения одной дамы

Любой, кто интересовался этой темой, знают, что данное сокращение произошло от Development и Operations. Или если перевести на русский – Программисты и Сисадмины. Да, operations дословно переводится не так, но здесь я использую слово «сисадмины» в самом широком смысле.

Кто такие «сисадмины»? Если кратко, то это именно те люди, на руках которых держится вся инфраструктура. Где-то этим словом называют приходящих «аникейщиков», которые меняют картриджи в принтере и изредка чистят компьютеры от вирусов и троянов. А где-то это целые залы людей, разбитых на свои касты. Кто-то занимается сетями, кто-то базами данных, а кто-то обслуживанием датацентров и их инфраструктуры. Титаны антистрессовых методик.

Точно такое же широкое определение имеют и «программисты». И тот, кто пишет на javascript проверку ввода на сайт и тот, кто добавляет код во внутренний модуль корпоративной системы – все они «программисты». И даже тот, кто пишет на встроенном языке 1С, тоже программист, что бы об этом не думали другие.

В чем же основная причина, приведшая к появлению девопсов? Для этого необходимо немного углубиться в специфику работы каждой «секты».

Для сисадмина самое важное это то, что бы вверенная ему система работала без перебоев. Не обращая внимания на тупых пользователей, идиотов-разработчиков, отключения питания и поломок оборудования. Все, абсолютно все, рассматривается с точки зрения надежности. И венцом этой надежности является достижение времени доступности системы в 99,999% (или «5 девяток»). Поверьте, заставить современные системы работать так, чтобы их время недоступности не превышало 5 минут в год – это очень сложная задача. И когда вы добиваетесь, что максимальное время, когда подчиненная система может сказать «ой, я не могу» — это 6 секунд в сутки, то спокойно можете брать с полки пирожок.

У разработчиков же другое положение. Над ними коршунами вьются кровососы-менеджеры, которые постоянно требуют новый функционал, который должен работать быстрее или лучше. И всё это великолепие не должно поломать уже существующий функционал. И код, который прекрасно работает на твоей машине, почему-то отказывается работать как надо даже в тестовом окружении. А еще эти гамадрилы-сисадмины не дают нормально покопаться в получившейся у них системе и понять, что пошло не так даже после успешно пройденных тестов. Эти чудаки на букву «м» постоянно орут как резанные и набрасывают говен на вентилятор при любом чихе. И никто кроме коллег не способен оценить красоты получившегося кода или изящества алгоритма.

А рядом вьются … коллеги из отдела тестирования. Эти вообще постоянно нудят про то, что с говнокодом пора кончать и им опять нужна свежая копия базы данных.

В эту сложную и нервную обстановку добавляет перцу то обстоятельство, что «сисадмины» никогда не писали код размером больше чем на пару страниц, а «разработчики» никогда не обслуживали написанные ими системы (а часто даже и не пользовались ими). Результат абсолютно предсказуемый: тотальное непонимание друг друга и подковёрные войны.

Вот в горниле этих битв и родилось новая каста – DevOps или девопсы. Как водится, поначалу были перегибы с обоих сторон и презрение к «переметнувшимся». Плюс из-за молодости самого термина у него множество толкований и определений. Кто-то считает девопс методологией, направленной на автоматизацию и увеличение числа релизов, а кто-то – на уменьшение ошибок. Я же считаю, что девопс – это прежде всего человек, главной задачей которого является снижение головной боли у программеров, сисадминов и QAшников. А те уже сами напишут, отконфигурят и оттестируют нужное.

Ибо если поглядеть с любой стороны, девопс будет выглядеть как некий недоучка, лишь в редких случаях способный выдать что-то толковое. Бегает со своими скриптами наперевес, чего-то там курочит в коде и лишь принадлежность к «своим» не позволяет его послать в очень далекое эротическое путешествие. У меня нет ни капли сомнения, что программер переиграет девопса в программировании, сисадмин – в администрировании, а тестировщик – на своем тестировочном поле.

Но ценность девопса именно в стоянии нараскоряку в постоянном процессе разрушения стен непонимания между «сейчас зальем, а там разгребут» и «чего там эти опять одноклеточные выделили». Да, сложно, но как показывает практика, вполне возможно.

Сейчас, в самом начале жизни девопсов (с 2009 года же), самой основной их задачей является автоматизация. Объёмы того, что необходимо автоматизировать – поистине ужасающие. Ведь все (программеры и сисадмины) непрерывно трудятся над увеличением завалов не один десяток лет.

Что обычно автоматизируют?
— Развертывание очередного релиза кода. В тест, в стейджинг, в продакшн. Да хоть на машину разработчика. С необходимыми сервисами и данными. Разных версий.
— Обновление. Сервера, сервисы и сайты. Быстро и еще быстрей.
— Управление инфраструктурой. Сегодня 100 серверов в одном датацентре, завтра 500 в трех, а послезавтра 1000 снова в одном. Мониторинг, сбор логов и куча других мелких задач, которые раньше выполнялись вручную или не выполнялись совсем.

Это самые общие задачи. Где-то спектр для автоматизации побольше, а где-то поменьше.

Широкий характер выполняемых задач автоматически формирует и необходимые требования к девопсам:

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

— Наличие знаний (есть еще умное слово «компетенций») по всему процессу разработки. Причем знания должны быть реальными и боевыми. Потому что некому кроме девопса остановить программера, когда он решит напрямую засовывать json в обычную базу данных. Для разработчика в этом нет ничего крамольного (база поддерживает? поддерживает!), для сисадмина тоже (ну растет база и требует больше ресурсов – это нормально), а DBA по привычке обматерит всех и молча пойдет строить индексы и партиционировать базу. А то, что полученная конструкция могла быть быстрее и надежней – это никому не интересно. Кроме девопсов.

Нет ни того, ни другого? Тогда получаются люди, которые прекрасно характеризуются как «чуваки с накачанным ЧСВ и недержанием кода».

Требования большие? Да, большие. Зато и награда велика.

Сама возможность пощупать возведенное твоими трудами, а не какого-нибудь сферического коня в вакууме стоит дорого. Причем ощутить весь процесс возведения от «долбанное ничего» до «обалдеть какая няшка». Ни разработчики, ни сисадмины, ни тестировщики такой возможностью не обладают …

P.S. Ну и денег дают нормально.

Пробую ATI 2017 на зуб. День 3. Разрыв шаблонов.

Сегодня я хотел заняться версией Acronis True Image для Windows, но в комментах меня спросили: а каким образом ATI для Android восстанавливает программы? И в самом деле, такой функционал не был заявлен … Результат: я посыпаю голову пеплом и каюсь в своем несовершенстве. Программы и прочее восстановил толи гугл, толи самсунг своим софтом. У меня SGS6 и пока я там вводил пароли и делал прочие действия после сброса, эти злобные искажатели истины все вернули «как было». Издержки цифрового мира с хорошим каналом в интернет.

Не проблема, опять сброс, но теперь я везде жамкаю «отмена», «не надо» и «нету у меня никаких паролей». Ставлю ATI и прошу вернуть все назад. Крутится индикатор и на телефон постепенно возвращаются мои смски и фотографии. Никаких обид и разочарований. Но я не я, если бы не нашел один обидный ляп.

ati03-01

Не важно, из-за чего произошла ошибка (в данном случае я злобно выключил WiFi прямо на взлете), ATI будет висеть на этом экране, даже если условия изменились. Проверил путем оставления телефона на ночь. Мелочь, но очень неприятная мелочь. (делая пассы руками в сторону офиса Acronis) я полностью уверен что скоро это поправят …

А теперь об обидном для меня. Я как-то привык, что софт для маков лучше и функциональней софта для виндовса. Или как минимум выходит раньше. Или хотя-бы просто симпатичней. Но ATI для виндовса полностью порвал мне этот шаблон. Windows версия превосходит OS X версию как президентский лимузин ржавую «копейку». И то и то доставит вашу пятую точку из пункта А в пункт Б, но на лимузине это будет приятней.

Так вот. ATI для Windows и есть тот самый лимузин. Сравните окно настроек для OS X (честно, я его нашел только после того, как мне виндовс версия ненавязчиво так его подсунула)

ati03-02

И окно настроек для Windows

ati03-03

И да. Данные окна прямо и однозначно указывают на мою ошибку вчера. Acronis True Image является полноценным софтом для резервного копирования и только Android версия ущемленная. Расставив галочки как вам надо, можно получить любую схему копирования. В общем, был категорически не прав, в чем и подписываюсь.

А сколько в Windows-версии опций! Начиная от возможности слать оповещения о проведенном копировании и предупреждения о заканчивающемся месте и заканчивая мелочами типа «при копировании на внешний диск сделай так, что бы с него можно было загрузиться». Про приятные мелочи типа «разбивай архив так, что бы залез на CD/DVD/BlueRay/Ещекуда» даже не стоит упоминать. Оно там просто есть.

На этом моменте проверяю, что все везде зелененькое …

ati03-04

… все везде копируется и «в облако» и «на диск». Теперь я насильно «забуду» про софт на некоторое время, а потом посмотрю, что надо будет делать, когда «внезапно» что-нибудь случится.

Пробую ATI 2017 на зуб. День 2. Восстановление …

Прверил в очередной раз, что все статусы везде зелененькие, я решил внезапно вспомнить и попробовать восстановить удаленное. И тут меня ждал грандиозный облом. Но давайте поподробнее.

Если коротко, то опять во всем виноваты мои любимые маркетолухи. Дело в том, что Acronis True Image — это софт не для резервного копирования, а для disaster recovery. Дословный перевод: «восстановление после аварии». В чем разница?

Классический софт для резервного копирования обеспечивает возможность вернуть состояние чего-либо назад с определенной гранулярностью. Например, в течении дня — на любой час, в течении недели — на любой день, в течении месяца — на любое воскресенье, а в течении года — на любое первое число.

Софт для восстановления после аварии действует по другому. Вся его задача это обеспечить максимально быстрое восстановление системы «как было ДО». И вот Acronis True Image — именно софт для восстановления после аварии. Остальное по такому же принципу, что и в «облаках».

Хорошо это или плохо? Для обычного пользователя — однозначно хорошо. Нет никаких заморочек со всякими планами, зато есть уверенность в том, что все будет хорошо.

Решил и я проверить, насколько будет мне хорошо. Беру телефон и сбрасываю его в «заводские» настройки. Прохожу все положенные «далее-далее» и первым делом ставлю ATI. Там сразу же давлю на «восстановление».

Точно такой же экран, как и при копировании, только про восстановление. И … это было реально быстро. Буквально за 5 минут я получил свой телефон назад. Со всем настроенным и предустановленным софтом. Единственное напоминание, что текущее состояние не забекаплено:

ati02-01

Повторный бекап прошел минуты за две. И опять все зеленое и симпатичное. Это реально впечатляет.

Теперь с десктопным софтом. А вот тут все плохо. Вообще и полностью.

Во-первых, функционал «архива». Ну это классический dropbox/onedrive/придумайте сами. Выглядит это так

ati02-02

То есть два каких-то диска/шары. «выброс» любого одного ведет к полному выключению функционала. И это не включить назад до перезагрузки. На мой взгляд, это ужасно.

Во-вторых, любая попытка восстановить файл/диск отправляет на веб-страницу. Там может показать что-то полезное, но в 95% вы увидите что-то вроде этого

ati02-03

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

ati02-04

И даже более того, один раз я все-таки скачал назад свой удаленный файл. Да, я скачал назад удаленное.

Но представьте свое состояние «у меня все упало, все разрушилось», а тут такое …

Пробую ATI 2017 на зуб. День 1. Бэкап …

Зачем нужно резервное копирование, если сейчас все можно хранить в облаках? Ответ простой: облака обеспечивают доступность, а резервное копирование — сохранность. Толку иметь доступ к облаку, если до этого из них удалил самый нужный на текущий момент файл? Да, некоторые облачные провайдеры дают «хранение 5ти последних копий», но в реальности от этого смысла мало: при регулярном сохранении файла эти 5 копий исчерпывают себя в течении часа.

Конечно, есть и встроенные решения в современные операционные системы (та же Time Machine в OS X), но они сделаны по остаточному принципу. Кому-то везет, но лично у меня с ними больше проблем, чем радости. Поэтому я решил взять и пощупать Acronis True Image 2017. По уверениям рекламы самый-самый, сохраняет быстро, а восстанавливает еще быстрее.

Что самое важное в резервном копировании? Две вещи: скопировать нужное и дать доступ до нужного после «того случая». Все остальное — пыль и тлен.

Ок, берем триальный Acronis True Image и ставим на ноутбук и телефон. Процесс установки ничем оригинальным не блещет (и это хорошо), поэтому описание пропускаю.

После запуска предложили выкинуть то, что в «облаках».

ati01-01

Но почему не предложили исключить из бекапа программы? С одной стороны, будет уверенность, что после восстановления у меня будут именно те версии, с которыми я работал, а с другой — смысл мне бекапить Microsoft Office? Недочет? Недосмотр? Дизайнерский вывих?

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

ati01-02

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

ati01-03

Оставляю копироваться ноутбук и беру в руки мобильный телефон, отмечаю все галочками …

ati01-04

Засекаю, сколько будет идти полное копирование телефона и сколько есть сейчас батарейки …

ati01-05

и фиксирую окончание

ati01-06

45 минут и и 6% батарейки на Samsung Galaxy S6. Не знаю как вам, но по-моему очень хорошо.

(пропущена ночь)

Дожидаюсь, когда на веб-панели мне сообщат, что всё отлично, все забекаплено и вообще шикарно.

ati01-09

Что в следующем шаге? А в следующем шаге обычная работа и утеря чего-либо очень-очень важного для меня.

На роль важного в мобильном телефоне выступит спам от МГТС. Делаю скрин на память.

ati01-08

А на роль очень важного на десктопе выступит скриншот из игры Elite:Dangerous. Название файла space_is_beatiful.jpg и он расположен прямо в моем домашнем каталоге.

ati01-10

Считаем, что смс и файлик мне дороги как память, поэтому с чистой совестью удаляем и чистим корзины.

Теперь ждем завтрашнего дня, когда я внезапно обнаружу, что кто-то (ну не я же, правда?) удалил эти важные частички моей цифровой жизни. Восстановить не получится, ибо в процессе работы место на диске и в телефоне перетерто уже много раз. Но это будет завтра.

Делаем пользу из телевизора.

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

Но использовать их у меня не получается: смотреть нечего. То, что предлагают имеющиеся каналы совершенно не удовлетворяет мои вкусы. Телевизор стоящий в спальне гордо имеет на боку какую-то кастрированную OS и умеет ходить в интернет. Там есть всякие «амедиатеки», «ивиру», «нетфликсы» и прочий хлам, отличающийся от эфирных каналов лишь ценником. Смотреть там точно так же нечего.

Итак, я сформировал задачу: надо сделать так, что бы телевизор не собирал пыль. Для этого эта штука должна обзавестись следующими навыками:
— Научиться играть музыку. Я практически все делаю под музыку.
— Научиться показывать киношки именно те, которые я хочу и те, когда я хочу. Важное дополнение: некоторые киношки я смотрю на языке оригинала, а некоторые — с расположенного дома сетевого диска (просто по причине их тотального отсутствия в магазинах).
— Не трахать мозги.

Первым в голову пришло собрать домашний медиацентр. Берем Raspberry PI, втыкаем туда что надо и вперед. Идея хорошая, но если честно, то лень. Линуксов и прочего у меня на работе выше крыши, поэтому превращать дом в филиал работы мне не очень хочется. Но как запасной вариант очень даже.

Google Chromecast уже смотрится лучше. Тем более один из телевизоров имеет какую-то старую (ну или аналогичную) версию. Основной минус — трансляция только с телефона/компьютера. Значит, надо иметь постоянно включенным еще один компьютер или держать телефон поблизости. Нет, с компьютерами проблем нет, а вот с телефонами проблема — Chromecast никак не поддерживает Apple.

Куча hdmi-донглов проходит под первым пунктом и точно так же не вызывает энтузиазма.

В итоге остается только новый Apple TV. Старый — он как хромкаст и тоже требует внешнего устройства. Согласно рекламе и описаниям, он умеет делать все, что требуется.

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

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

Второй проблемой стали фильмы. На любой чих приставка выдавала сообщение о неустранимой ошибке и закрывала «приложеньице». Сказать, что я был огорчен — ничего не сказать. Более того, при попытке играть кино на планшете и потом включение AirPlay приводило к 50% зависанию проигрывания. Отдельные кадры показывает, но кино играть не желает.

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

Перезагрузки и прочие шаманские танцы не помогали точно так же.

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

Все проблемы сняло как рукой. Обычного интернета в 80 мегабит (пиковых,постоянно доступно там 30-40 от силы) в воскресенье вечером хватает на показ фильма в FullHD без каких-либо пауз, квадратиков и прочих аттрибутов.

Поставил VLC. Играет, все что я ему попробовал подсунуть.

Звуковые дорожки переключаются. В iTunes сразу и без проблем, VLC иногда плющит.

Музыка полностью аналогична той же самой на айфонах-айпадах. Все работает.

Задача выполнена и я провел половину воскресенья за пересмотром «звездных войн». Качественное FullHD на большом экране очень непривычно смотреть. Внезапно обнаружилось, что я как-то уже привык к «мылу». Как бы не повторилась история с «аудиофильством»

PS Так же внезапно обнаружилось приятное дополнение. Понажимав несколько раз кнопку menu (то есть уйдя на главный экран и попытаться уйти «выше»), можно запустить «скринсейвер», представляющий собой HD видео разных городов с высоты.

Игрища с сервером — 2 (openvpn, ssh и freeipa)

Наконец-то можно приступить к самому приятному: выбиванию окон во внешний мир. Или VPN. Ответы на вопросы зачем, почему и куда оставлю за рамками. Мне надо и все тут. Для организации канала буду использовать широко известный openvpn.

Ставим удобности.

yum -y install epel-release mc

Для начала подниму для проверки просто сервер. Без каких-либо излишеств.

yum -y install openvpn easy-rsa
cp /usr/share/doc/openvpn-*/sample/sample-config-files/server.conf /etc/openvpn
mcedit /etc/openvpn/server.conf

Конфиг после удаления лишнего получился примерно такой

port 1194
proto udp
dev tun
ca ca.crt
cert server.crt
key server.key
dh dh2048.pem
server 10.100.2.0 255.255.255.0
ifconfig-pool-persist ipp.txt
push "route 10.100.0.0 255.255.255.0"
;push "redirect-gateway def1 bypass-dhcp"
push "dhcp-option DNS 10.100.0.10"
push "dhcp-option DOMAIN local.multik.org"
duplicate-cn
keepalive 10 120
comp-lzo
user nobody
group nobody
persist-key
persist-tun
verb 3

Полностью по мануалу, без каких-либо отклонений. Значение каждой строчки можно посмотреть в документации.

Теперь ключи. Опять же, не отходя от канонов.

mkdir -p /etc/openvpn/easy-rsa/keys
cp -rf /usr/share/easy-rsa/2.0/* /etc/openvpn/easy-rsa
mcedit /etc/openvpn/easy-rsa/vars

Тут я поправил строки «по умолчанию»

export KEY_COUNTRY="RU"
export KEY_PROVINCE="RU"
export KEY_CITY="Moscow"
export KEY_ORG="VseMoe"
export KEY_EMAIL="multik@multik.org"
export KEY_OU="Internet"
...
export KEY_NAME="Server"
...
export KEY_CN="vpn.vsemoe.com"

Дальше просто лог команд, везде давим Enter.

cp /etc/openvpn/easy-rsa/openssl-1.0.0.cnf /etc/openvpn/easy-rsa/openssl.cnf
cd /etc/openvpn/easy-rsa
source ./vars
./clean-all
./build-ca
./build-key-server server
./build-dh
cd /etc/openvpn/easy-rsa/keys
cp dh2048.pem ca.crt server.crt server.key /etc/openvpn
cd /etc/openvpn/easy-rsa
./build-key client

Разрешаем форвард

mcedit /etc/sysctl.conf
net.ipv4.ip_forward = 1
sysctl -p

И стартуем сервер

systemctl enable openvpn@server.service
systemctl start openvpn@server.service

Теперь на хосте надо открыть порт 1194/udp и перебросить его на виртуалку с openvpn

-A INPUT -p udp -m state --state NEW -m udp --dport 1194 -j ACCEPT
-A PREROUTING -d 136.243.151.196/32 -i eth0 -p udp --dport 1194 -j DNAT --to-destination 10.100.0.133

И на самой виртуалке открыть тем или иным образом порт

firewall-cmd --add-service=openvpn --permanent
firewall-cmd --permanent --add-port=53/udp
firewall-cmd --reload

Теперь перетаскиваем на клиента все client* файлы и ca.crt и делаем конфиг (обычный текстовый файл)

client
dev tun
proto udp
remote 136.243.151.196 1194
resolv-retry infinite
nobind
persist-key
persist-tun
comp-lzo
verb 3
ca ca.crt
cert client.crt
key client.key

Пробуем соедениться

$ sudo openvpn --config confif.vpn
Wed Jan 27 03:55:22 2016 OpenVPN 2.3.8 x86_64-redhat-linux-gnu [SSL (OpenSSL)] [LZO] [EPOLL] [PKCS11] [MH] [IPv6] built on Aug 4 2015
Wed Jan 27 03:55:22 2016 library versions: OpenSSL 1.0.1e-fips 11 Feb 2013, LZO 2.06
Wed Jan 27 03:55:22 2016 WARNING: No server certificate verification method has been enabled. See http://openvpn.net/howto.html#mitm for more info.
Wed Jan 27 03:55:22 2016 Socket Buffers: R=[212992->131072] S=[212992->131072]
Wed Jan 27 03:55:22 2016 UDPv4 link local: [undef]
Wed Jan 27 03:55:22 2016 UDPv4 link remote: [AF_INET]136.243.151.196:1194
Wed Jan 27 03:55:22 2016 TLS: Initial packet from [AF_INET]136.243.151.196:1194, sid=3dd59a35 34ce24da
Wed Jan 27 03:55:22 2016 VERIFY OK: depth=1, C=RU, ST=RU, L=Moscow, O=VseMoe, OU=Internet, CN=vpn.vsemoe.com, name=Server, emailAddress=multik@multik.org
Wed Jan 27 03:55:22 2016 VERIFY OK: depth=0, C=RU, ST=RU, L=Moscow, O=VseMoe, OU=Internet, CN=server, name=Server, emailAddress=multik@multik.org
Wed Jan 27 03:55:23 2016 Data Channel Encrypt: Cipher 'BF-CBC' initialized with 128 bit key
Wed Jan 27 03:55:23 2016 Data Channel Encrypt: Using 160 bit message hash 'SHA1' for HMAC authentication
Wed Jan 27 03:55:23 2016 Data Channel Decrypt: Cipher 'BF-CBC' initialized with 128 bit key
Wed Jan 27 03:55:23 2016 Data Channel Decrypt: Using 160 bit message hash 'SHA1' for HMAC authentication
Wed Jan 27 03:55:23 2016 Control Channel: TLSv1.2, cipher TLSv1/SSLv3 DHE-RSA-AES256-GCM-SHA384, 2048 bit RSA
Wed Jan 27 03:55:23 2016 [server] Peer Connection Initiated with [AF_INET]136.243.151.196:1194
Wed Jan 27 03:55:25 2016 SENT CONTROL [server]: 'PUSH_REQUEST' (status=1)
Wed Jan 27 03:55:25 2016 PUSH: Received control message: 'PUSH_REPLY,route 10.100.0.0 255.255.255.0,dhcp-option DNS 10.100.0.10,route 10.100.2.1,topology net30,ping 10,ping-restart 120,ifconfig 10.100.2.14 10.100.2.13'
Wed Jan 27 03:55:25 2016 OPTIONS IMPORT: timers and/or timeouts modified
Wed Jan 27 03:55:25 2016 OPTIONS IMPORT: --ifconfig/up options modified
Wed Jan 27 03:55:25 2016 OPTIONS IMPORT: route options modified
Wed Jan 27 03:55:25 2016 OPTIONS IMPORT: --ip-win32 and/or --dhcp-option options modified
Wed Jan 27 03:55:25 2016 ROUTE_GATEWAY 172.16.137.2/255.255.255.0 IFACE=eno16777736 HWADDR=00:0c:29:fa:0a:54
Wed Jan 27 03:55:25 2016 TUN/TAP device tun1 opened
Wed Jan 27 03:55:25 2016 TUN/TAP TX queue length set to 100
Wed Jan 27 03:55:25 2016 do_ifconfig, tt->ipv6=0, tt->did_ifconfig_ipv6_setup=0
Wed Jan 27 03:55:25 2016 /usr/sbin/ip link set dev tun1 up mtu 1500
Wed Jan 27 03:55:25 2016 /usr/sbin/ip addr add dev tun1 local 10.100.2.14 peer 10.100.2.13
Wed Jan 27 03:55:25 2016 /usr/sbin/ip route add 10.100.0.0/24 via 10.100.2.13
Wed Jan 27 03:55:25 2016 /usr/sbin/ip route add 10.100.2.1/32 via 10.100.2.13
Wed Jan 27 03:55:25 2016 Initialization Sequence Completed

Как видно по последней строчке, соединение установилось. Пробуем добраться до любого хоста «внутри» сети.

$ ssh root@10.100.0.10
ssh: connect to host 10.100.0.10 port 22: No route to host

Облом. По простой причине — ничего в сети 10.100.0 не знает про сеть 10.100.2, которую я отдал под VPN. Самое простое решение — включить маскарадинг на выходе

firewall-cmd --permanent --add-masquerade
firewall-cmd --reload

Пробую еще раз

$ ssh root@10.100.0.10
The authenticity of host '10.100.0.10 (10.100.0.10)' can't be established.
ECDSA key fingerprint is fb:c1:72:a2:9a:a1:df:f5:d0:95:09:a4:3b:2e:9d:68.

Сработало. Это хорошо. Теперь немного добавим безопасности путем добавление пре-авторизационного ключа. Опять же, по мануалу

openvpn --genkey --secret ta.key
tls-auth ta.key 0

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

Опять же, вариантов много. Самый распространенный — это использование freeipa как ldap сервера. Мне лично лень. Я решил воспользоваться вариантом, когда freeipa авторизует пользователей в системе (так как это стандартный способ), а openvpn авторизовать уже через пользователей в системе.

Ставим на vpn все необходимое и подключаемся к ипе (подробности в ранних постах).

yum install -y ipa-client
ipa-client-install --mkhomedir

И тут оно обламывается. По простой причине — для vpn.local.multik.org нет адреса в базе. А у машины два локальных интерфейса и какой использовать для чего — непонятно.

Идем в виртуалку с ipa и добавляем

[root@ipa ~]# kinit admin
Password for admin@LOCAL.MULTIK.ORG:
[root@ipa ~]# ipa dnsrecord-add
Record name: vpn
Zone name: local.multik.org
Please choose a type of DNS resource record to be added
The most common types for this type of zone are: A, AAAA

DNS resource record type: A
A IP Address: 10.100.0.133
Record name: vpn
A record: 10.100.0.133

И снова пробуем — теперь все получится.

Теперь небольшой трюк. Что бы не давать по умолчанию доступ до VPN всем, я создам новый «сервис».

cd /etc/pam.d/
ln -s system-auth openvpn

Теперь Осталось мелочь — создать в ипе HBAC сервис openvpn и установить правила. Создаем сервис, группу для него и соединяем вместе

[root@ipa ~]# ipa hbacsvc-add openvpn
----------------------------
Added HBAC service "openvpn"
----------------------------
Service name: openvpn

[root@ipa ~]# ipa hbacrule-add allow_openvpn
-------------------------------
Added HBAC rule "allow_openvpn"
-------------------------------
Rule name: allow_openvpn
Enabled: TRUE

[root@ipa ~]# ipa hbacrule-add-service allow_openvpn --hbacsvcs=openvpn
Rule name: allow_openvpn
Enabled: TRUE
Services: openvpn
-------------------------
Number of members added 1
-------------------------

Проверяю, что натворил.

[root@ipa ~]# ipa hbacrule-find allow_openvpn
-------------------
1 HBAC rule matched
-------------------
Rule name: allow_openvpn
Enabled: TRUE
Services: openvpn
----------------------------
Number of entries returned 1
----------------------------

Добавляю к правилу пользователя и хост

[root@ipa ~]# ipa hbacrule-add-user allow_openvpn --user=multik
Rule name: allow_openvpn
Enabled: TRUE
Users: multik
Services: openvpn
-------------------------
Number of members added 1
-------------------------

[root@ipa ~]# ipa hbacrule-add-host allow_openvpn --hosts=vpn.local.multik.org
Rule name: allow_openvpn
Enabled: TRUE
Users: multik
Hosts: vpn.local.multik.org
Services: openvpn
-------------------------
Number of members added 1
-------------------------

Проверяю, что сработает на меня и на админа (который вроде как и не должен иметь доступ)

[root@ipa ~]# ipa hbactest --user=admin --host=vpn.local.multik.org --service=openvpn
--------------------
Access granted: True
--------------------
Matched rules: allow_all
Not matched rules: allow_openvpn

[root@ipa ~]# ipa hbactest --user=multik --host=vpn.local.multik.org --service=openvpn
--------------------
Access granted: True
--------------------
Matched rules: allow_all
Matched rules: allow_openvpn

Как вижу, в системе есть правило по умолчанию, которое дает доступ всем до всего. Но если его просто выкусить, то я тупо лишусь доступа И по ssh тоже. Поэтому надо сделать аналогичное для ssh

[root@ipa pam.d]# cd
[root@ipa ~]# ipa hbacsvc-add sshd
ipa: ERROR: HBAC service with name "sshd" already exists

Опс, сервис такой уже по умолчанию есть. Ну пойду дальше

[root@ipa ~]# ipa hbacrule-add allow_sshd
----------------------------
Added HBAC rule "allow_sshd"
----------------------------
Rule name: allow_sshd
Enabled: TRUE
[root@ipa ~]# ipa hbacrule-add-service allow_sshd --hbacsvcs=sshd
Rule name: allow_sshd
Enabled: TRUE
Services: sshd
-------------------------
Number of members added 1
-------------------------
[root@ipa ~]#

ipa hbacrule-add-user allow_sshd --user=multik
ipa hbacrule-add-host allow_sshd --hosts=vpn.local.multik.org

Проверяю

[root@ipa ~]# ipa hbactest --user=admin --host=vpn.local.multik.org --service=sshd
--------------------
Access granted: True
--------------------
Matched rules: allow_all
Not matched rules: allow_openvpn
Not matched rules: allow_sshd
[root@ipa ~]# ipa hbactest --user=multik --host=vpn.local.multik.org --service=sshd
--------------------
Access granted: True
--------------------
Matched rules: allow_all
Matched rules: allow_sshd
Not matched rules: allow_openvpn

Все на месте. Выкусываю нафиг
[root@ipa ~]# ipa hbacrule-disable allow_all
------------------------------
Disabled HBAC rule "allow_all"
------------------------------

Согласно выводу выше, я теперь не могу залогиниться на хост vsemoe-com пользователем multik.

[root@ipa ~]# ssh multik@vsemoe-com
multik@vsemoe-com's password:
Connection closed by UNKNOWN

Не соврала система. «Не пущаит». Проверяю почему

[root@ipa ~]# ipa hbactest --user=multik --host=vsemoe-com.local.multik.org --service=sshd
---------------------
Access granted: False
---------------------
Not matched rules: allow_openvpn
Not matched rules: allow_sshd

Добавляю хост, как разрешенный к коннекту на него по ssh

[root@ipa ~]# ipa hbacrule-add-host allow_sshd --hosts=vsemoe-com.local.multik.org
Rule name: allow_sshd
Enabled: TRUE
Users: multik
Hosts: vpn.local.multik.org, vsemoe-com.local.multik.org
Services: sshd
-------------------------
Number of members added 1
-------------------------

Будет пускать?

[root@ipa ~]# ipa hbactest --user=multik --host=vsemoe-com.local.multik.org --service=sshd
--------------------
Access granted: True
--------------------
Matched rules: allow_sshd
Not matched rules: allow_openvpn

Должно. Проверяю

[root@ipa ~]# ssh multik@vsemoe-com
multik@vsemoe-com's password:
Last failed login: Thu Jan 28 12:53:43 MSK 2016 from 2a01:4f8:171:1a43:5054:ff:fea4:8c6 on ssh:notty
There was 1 failed login attempt since the last successful login.
Last login: Mon Jan 25 16:51:46 2016 from 10.100.0.254

Как говорится, работает. Теперь последняя проверка: пустит ли пользователя multik на хосте vpn для сервиса openvpn?

[root@ipa ~]# ipa hbactest --user=multik --host=vpn.local.multik.org --service=openvpn
--------------------
Access granted: True
--------------------
Matched rules: allow_openvpn
Not matched rules: allow_sshd

Для vpn пустит, а по ssh не пустит. Теперь остались сущие мелочи. Добавялем в конфиг сервера

plugin /usr/lib64/openvpn/plugins/openvpn-plugin-auth-pam.so openvpn

а в конфиг клиента

auth-user-pass

и пробуем

$ sudo openvpn --config confif.vpn
Thu Jan 28 04:57:42 2016 OpenVPN 2.3.8 x86_64-redhat-linux-gnu [SSL (OpenSSL)] [LZO] [EPOLL] [PKCS11] [MH] [IPv6] built on Aug 4 2015
Thu Jan 28 04:57:42 2016 library versions: OpenSSL 1.0.1e-fips 11 Feb 2013, LZO 2.06
Enter Auth Username: ******
Enter Auth Password: ***********

Как видим, спросило логин и пароль. И дальше как обычно. Но каждый раз вводить логин и пароль лень. Всякие ViscoCity и прочие умеют это. Научим и консольного клиента.

Сделаем обычный текстовый файлик из 2х строчек: логина и пароля. И укажем его имя сразу после auth-user-pass. Если все сделано правильно, то openvpn ничего не будет спрашивать, а просто возьмет и прицепится.

Теоретически, на этом можно и закончить процесс. Но некрасиво как-то. «Клиентами» моего сервиса будут люди, далекие от техники. Дизайнеры всякие и менеджеры. Пока им объяснишь, чего куда совать и на что нажимать …

Технология очень простая. Берем исходный конфиг для клиента, и добавляем к нему следующие строки

key-direction 1

<ca>
——BEGIN CERTIFICATE——
ca.crt
——END CERTIFICATE——
</ca>

<cert>
——BEGIN CERTIFICATE——
client.crt
——END CERTIFICATE——
</cert>

<key>
——BEGIN PRIVATE KEY——
client.key
——END PRIVATE KEY——
</key>

<tls-auth>
——BEGIN OpenVPN Static key V1——
ta.key
——END OpenVPN Static key V1——
</tls-auth>

Внутрь просто копируем содержимое соответствующих файлов. Любым текстовым редактором. Ну и убираем строки

ca ca.crt
cert client.crt
key client.key

Полученному файлу надо поставить расширение ovpn и его магическим образом станут понимать практически все системы, заявляющие о поддержке openvpn.

Всё. Я получил в свое распоряжение VPN сервер. Управляемый хоть из консоли, хоть из веб-морды (как? я не писал? сходите браузером на адрес ipa сервера). Ну вообще-то не только VPN сервер, но в этой рассказке я писал только про VPN.

Удачи!

Игрища с сервером — 1

Или даешь централизацию! Сервер установлен, некоторые виртуалки перенесены, а некоторые удалены. Надо облегчать себе жизнь.

Уже сейчас на хосте размещено с десяток виртуалок. И уже сейчас всеми ими рулить скучно. Зашел на одну, обновил, сходил на другую, обновил. А пароли поменять? А дать доступ очередному фрилансеру и потом не забыть его отобрать? В общем, тяжело. Было.

Первым делом надо поставить единую систему авторизации. Что бы все пароли были в одном месте и думать не надо было. Так как основной системой везде у меня CentOS, то самым логичным кандидатом на эту тему становится FreeIPA.

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

yum -y install ipa-server bind bind-dyndb-ldap ipa-server-dns
ipa-server-install --setup-dns --mkhomedir

Если что-то где-то накосячили (а вы в первый раз обязательно накосячите), то всегда можно убрать все в первоначальное состояние.
ipa-server-install --uninstall

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

Итак, оно вроде сказало, что готово. Чего делаем? Первым делом — сделаем, что бы у пользователей по умолчанию был шелл /bin/bash, а не /bin/sh.

kinit admin
ipa config-mod --defaultshell=/bin/bash

И добавлю себя любимого

# ipa user-add
First name: Viacheslav
Last name: Kaloshin
User login [vkaloshin]: multik
-------------------
Added user "multik"
-------------------
User login: multik
First name: Viacheslav
Last name: Kaloshin
Full name: Viacheslav Kaloshin
Display name: Viacheslav Kaloshin
Initials: VK
Home directory: /home/multik
GECOS: Viacheslav Kaloshin
Login shell: /bin/bash
Kerberos principal: multik@LOCAL.MULTIK.ORG
Email address: multik@local.multik.org
UID: 1624000001
GID: 1624000001
Password: False
Member of groups: ipausers
Kerberos keys available: False

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

# ipa user-mod multik --password
Password:
Enter Password again to verify:
----------------------
Modified user "multik"
----------------------
User login: multik
First name: Viacheslav
Last name: Kaloshin
Home directory: /home/multik
Login shell: /bin/bash
Email address: multik@local.multik.org
UID: 1624000001
GID: 1624000001
Account disabled: False
Password: True
Member of groups: ipausers
Kerberos keys available: True

Теперь в принципе можно проверить, залогинившись на хост свежесозданным пользователем

# ssh multik@10.100.0.10
multik@10.100.0.10's password:
Password expired. Change your password now.
Creating home directory for multik.
WARNING: Your password has expired.
You must change your password now and login again!
Changing password for user multik.
Current Password:
New password:
Retype new password:
passwd: all authentication tokens updated successfully.
Connection to 10.100.0.10 closed.

Как видим, система принудительно заставляет пользователя сменить пароль. Это хорошо.

В принципе, можно все необходимое делать из консоли, а можно и с веб-интерфейса — просто браузером сходите и все сами увидите.

Но это только начало. Нам надо к этой системе подключить остальные виртуалки. Для этого надо сделать две простые вещи: настроить DNS и поставить клиента ipa. Пока для проверки, я это сделаю только на одном хосте.

на виртуалке:

# cat /etc/resolv.conf
search local.multik.org
nameserver 10.100.0.10
nameserver 10.100.0.254

на ipa надо открыть днс:

firewall-cmd --permanent --add-port=53/tcp
firewall-cmd --permanent --add-port=53/udp
firewall-cmd --reload

и опять на виртуалке

# ping ipa -c 2
PING ipa.local.multik.org (10.100.0.10) 56(84) bytes of data.
64 bytes from ipa.local.multik.org (10.100.0.10): icmp_seq=1 ttl=64 time=0.344 ms
64 bytes from ipa.local.multik.org (10.100.0.10): icmp_seq=2 ttl=64 time=0.461 ms

--- ipa.local.multik.org ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1001ms
rtt min/avg/max/mdev = 0.344/0.402/0.461/0.061 ms

Отлично. Теперь подключим виртуалку

На ipa

firewall-cmd --permanent --add-service={ntp,http,https,ldap,ldaps,kerberos,kpasswd}
firewall-cmd --reload

на виртуалке

yum install -y ipa-client
# ipa-client-install --mkhomedir
Discovery was successful!
Client hostname: vsemoe-com.local.multik.org
Realm: LOCAL.MULTIK.ORG
DNS Domain: local.multik.org
IPA Server: ipa.local.multik.org
BaseDN: dc=local,dc=multik,dc=org

Continue to configure the system with these values? [no]: yes
Synchronizing time with KDC...
Attempting to sync time using ntpd. Will timeout after 15 seconds
User authorized to enroll computers: admin
Password for admin@LOCAL.MULTIK.ORG:
Successfully retrieved CA cert
Subject: CN=Certificate Authority,O=LOCAL.MULTIK.ORG
Issuer: CN=Certificate Authority,O=LOCAL.MULTIK.ORG
Valid From: Mon Jan 25 12:03:20 2016 UTC
Valid Until: Fri Jan 25 12:03:20 2036 UTC

Enrolled in IPA realm LOCAL.MULTIK.ORG
Created /etc/ipa/default.conf
New SSSD config will be created
Configured sudoers in /etc/nsswitch.conf
Configured /etc/sssd/sssd.conf
Configured /etc/krb5.conf for IPA realm LOCAL.MULTIK.ORG
trying https://ipa.local.multik.org/ipa/json
Forwarding 'ping' to json server 'https://ipa.local.multik.org/ipa/json'
Forwarding 'ca_is_enabled' to json server 'https://ipa.local.multik.org/ipa/json'
Systemwide CA database updated.
Added CA certificates to the default NSS database.
Hostname (vsemoe-com.local.multik.org) does not have A/AAAA record.
Missing reverse record(s) for address(es): 10.100.0.178, 2a01:4f8:171:1a43:5054:ff:fe51:f70e.
Adding SSH public key from /etc/ssh/ssh_host_rsa_key.pub
Adding SSH public key from /etc/ssh/ssh_host_ecdsa_key.pub
Adding SSH public key from /etc/ssh/ssh_host_ed25519_key.pub
Forwarding 'host_mod' to json server 'https://ipa.local.multik.org/ipa/json'
SSSD enabled
Configured /etc/openldap/ldap.conf
NTP enabled
Configured /etc/ssh/ssh_config
Configured /etc/ssh/sshd_config
Configuring local.multik.org as NIS domain.
Client configuration complete.

При этом процессе, сразу создадутся и прямые записи в днс. Почему и как создавать сразу и обратные — я не разбирался.

[root@ipa ~]# host vsemoe-com
vsemoe-com.local.multik.org has address 10.100.0.178
vsemoe-com.local.multik.org has IPv6 address 2a01:4f8:171:1a43:5054:ff:fe51:f70e

Проверяю, как оно работает

[root@tower ~]# ssh multik@10.100.0.178
multik@10.100.0.178's password:
Creating home directory for multik.
[multik@vsemoe-com ~]$ whoami
multik
[multik@vsemoe-com ~]$ id
uid=1624000001(multik) gid=1624000001(multik) groups=1624000001(multik) context=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023

Как вижу, работает отлично. Пока я остановлюсь на этом шаге. Ибо мне нужен нормальный удаленный доступ, а то потом слишком много придется переделывать.

Новый сервер с игрищами и блудницами – 5

Или баррикадируемся от подборщиков паролей.

Захожу я утром на свой сервер, а мне добрая система сообщает

Last failed login: Sat Jan 23 10:23:49 MSK 2016 from 183.3.202.106 on ssh:notty
There were 5278 failed login attempts since the last successful login.

Китайцы и прочий народ ломится, пытается пароль к руту пободрать. Не то, что бы это напрягало, но тем не менее, некрасиво.

-A INPUT -p tcp -m state --state NEW --dport 22 -m recent --update --seconds 20 -j DROP
-A INPUT -p tcp -m state --state NEW --dport 22 -m recent --set -j ACCEPT
#-A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT

Как это работает, можно почитать на хабре в комментах.

Поглядел в логи — ляпота и чистота.

Теперь (лично мне) надо поставить 6ю центось. Надо по двум причинам: попробовать графическую консоль (ибо в полном тексте как 7я оно не ставится), и надо для OpenVZ, у которой опять же с 7й еще есть проблемы.

Поначалу я попробовал SPICE, предлагаемый по умолчанию. Тормозит дико. Даже на толстых каналах. Плюс клиентов нет под всякие разные операционки. Попробовал vnc — вот это другое дело. Не скажу, что прямо как «на настоящем», но работать вполне можно.

virt-install --name openvz --ram 8912 --disk path=/vm/openvz.qcow2,size=8,bus=virtio,cache=none --vcpus 4 --os-type linux --network bridge=virbr0,model=virtio -c /vm/iso/CentOS-6.7-x86_64-minimal.iso --accelerate --noautoconsole --graphics vnc,password=test,listen=10.100.0.254 -v --input tablet,bus=usb

Теперь ssh -L 5900:10.100.0.254:5900 root@host и любым VNC клиентом на 127.0.0.1:5900. Пароль, как видно из команды — test. Просто, удобно и понятно.

Но мне понравилось, что можно в машину забраться и через virsh console. В винтуальной машине делаем

cat /etc/init/ttyS0.conf
stop on runlevel[016]
start on runlevel[345]
respawn
instance /dev/ttyS0
exec /sbin/mingetty /dev/ttyS0

В самый конец /etc/securetty добавляем
ttyS0

И запускаем

initctl start ttyS0

И в общем, должны попасть через virsh console. Для логов загрузки, для kernel в /etc/grub.conf добавляем

console=ttyS0

У меня все получилось. Дальше иду как написано в вики OpenVZ. Ставлю, мигрирую и так далее.

Новый сервер с игрищами и блудницами – 4

Прошлый раз я закончил на том что мне удалось завести сертификат для vsemoe.com. Вручную, но тем не менее. Но доменчиков у меня целая куча и руками для них запрашивать сертификаты каждые три месяца … я слишком ленивый для этого. Да и интернет предлагает разные варианты решения этой проблемы.

Первым делом конфигурирую домены vsemoe.org и kaloshina.com аналогично vsemoe.com

bash-3.2$ host vsemoe.com
vsemoe.com has address 136.243.151.196
vsemoe.com has IPv6 address 2a01:4f8:171:1a43:5054:ff:fee4:b6d1
vsemoe.com mail is handled by 10 mail.multik.org.
bash-3.2$ host kaloshina.com
kaloshina.com has address 136.243.151.196
kaloshina.com has IPv6 address 2a01:4f8:171:1a43:5054:ff:fee4:b6d1
kaloshina.com mail is handled by 10 mail.multik.org.
bash-3.2$ host vsemoe.org
vsemoe.org has address 136.243.151.196
vsemoe.org has IPv6 address 2a01:4f8:171:1a43:5054:ff:fee4:b6d1
vsemoe.org mail is handled by 10 mail.multik.org.

В конфиг nginx добавил

location '/.well-known/acme-challenge' {
default_type "text/plain";
root /tmp/letsencrypt-auto;
}

и попробовал заказать сертификат

./letsencrypt-auto certonly --server https://acme-v01.api.letsencrypt.org/directory -a webroot --agree-tos --webroot-path=/tmp/letsencrypt-auto/ -d kaloshina.com

Фигу. Создал там файлик test. Сервер в логах упорно ругается

[error] 1346#0: *3 open() "/tmp/letsencrypt-auto/.well-known/acme-challenge/test" failed (2: No such file or directory), client: 91.195.22.23, server: kaloshina.com, request: "GET /.well-known/acme-challenge/test HTTP/1.1", host: "kaloshina.com"

Хотя если проверить вручную, то этот фаил есть

cat /tmp/letsencrypt-auto/.well-known/acme-challenge/test
BLYA

Прочитал про пакость от systemd про приватные /tmp. Сменил

/lib/systemd/system/nginx.service
PrivateTmp=false

Не помогло.

Плюнул и создал каталог /opt/letsencrypt и переместил все туда

./letsencrypt-auto certonly --server https://acme-v01.api.letsencrypt.org/directory -a webroot --agree-tos --webroot-path=/opt/letsencrypt/ -d vsemoe.org
Updating letsencrypt and virtual environment dependencies......
Requesting root privileges to run with virtualenv: /root/.local/share/letsencrypt/bin/letsencrypt certonly --server https://acme-v01.api.letsencrypt.org/directory -a webroot --agree-tos --webroot-path=/opt/letsencrypt/ -d vsemoe.org

IMPORTANT NOTES:
- Congratulations! Your certificate and chain have been saved at
/etc/letsencrypt/live/vsemoe.org/fullchain.pem. Your cert will
expire on 2016-04-18. To obtain a new version of the certificate in
the future, simply run Let's Encrypt again.
- If you like Let's Encrypt, please consider supporting our work by:

Donating to ISRG / Let's Encrypt: https://letsencrypt.org/donate
Donating to EFF: https://eff.org/donate-le

Сразу же скриптуем это 🙂

# cat /opt/ssl_get
#!/bin/bash
cd /root/letsencrypt
./letsencrypt-auto certonly --server https://acme-v01.api.letsencrypt.org/directory -a webroot --agree-tos --webroot-path=/opt/letsencrypt/ -d $1

и для обновления

# cat ssl_renew
#!/bin/bash
cd /root/letsencrypt
./letsencrypt-auto --renew certonly --server https://acme-v01.api.letsencrypt.org/directory -a webroot --agree-tos --webroot-path=/opt/letsencrypt/ -d $1
service nginx restart

Проверяем. У меня работает. При этом автоматом включился SNI и прекрасно раздает с одного ип-адреса много https сайтов.

Отлично, теперь пора переносить контент сайтов.

Новый сервер с игрищами и блудницами – 3

TL;DR; Статья грустная, в которой ничего почти не получилось, зато узнано много нового.

Почти вся полезная нагрузка сервера — это веб-сервера. Маленькие и не очень, требующие много места и просто пустышки. Так как я хочу сделать так, что бы все сервера были видны из интернета по SSL, то придется сделать ход конем.

Все запросы на http/https будут приходить на nginx. А тот будет работать SSL-декриптором и общаться с серверами уже по чистому http. Делать двойное шифрование-расшифрование я смысла не вижу — только трата процессорного времени. А те, кто знает про ipv6 — получат прямой доступ.

Из особенностей: машинам присваиваю имена сразу в полном формате: nginx.local.multik.org. При этом домен не пересекается с реальным, но является субдоменом. Потом, когда я буду поднимать единую систему авторизации, это сильно облегчит жизнь.

Делаем машинку для nginx

virt-install --name nginx --ram 1024 --disk path=/vm/nginx.qcow2,size=8,bus=virtio,cache=none --vcpus 2 --os-type linux --network bridge=virbr0,model=virtio --location /vm/iso/CentOS-7-x86_64-DVD-1511.iso --extra-args='console=tty0 console=ttyS0,115200n8 serial' --nographics --accelerate

и для первого сервера vsemoe.com, на котором буду тренироваться.

virt-install --name vsemoe.com --ram 1024 --disk path=/vm/vsemoe.com.qcow2,size=8,bus=virtio,cache=none --vcpus 1 --os-type linux --network bridge=virbr0,model=virtio --location /vm/iso/CentOS-7-x86_64-DVD-1511.iso --extra-args='console=tty0 console=ttyS0,115200n8 serial' --nographics --accelerate

На всякий случай проверяем, что машинки в автозапуске

virsh autostart nginx
virsh autostart vsemoe.com

На nginx — обновляемся, ставим epel-release, nginx, проколупываем дырки и ребутимся

yum update
yum install epel-release
yum install nginx
systemctl enable nginx
firewall-cmd --permanent --zone=public --add-service=http
firewall-cmd --permanent --zone=public --add-service=https

на vsemoe — обновляемся, ставим апач и далее по тексту

yum update
yum install httpd
systemctl enable httpd
firewall-cmd --permanent --zone=public --add-service=http

Nginx получил адреса 10.100.0.186 и 2a01:4f8:171:1a43:5054:ff:fee4:b6d1
vsemoe.com 10.100.0.178 и 2a01:4f8:171:1a43:5054:ff:fe51:f70e

Теперь иду на DNS и делаю так, что бы все видели vsemoe.com по правильным адресам

$ host vsemoe.com
vsemoe.com has address 136.243.151.196
vsemoe.com has IPv6 address 2a01:4f8:171:1a43:5054:ff:fe51:f70e

Добавляем на хосте

firewall-cmd --zone=public --add-forward-port=port=80:proto=tcp:toaddr=10.100.0.186 --permanent

firewall-cmd --permanent --zone=public --add-service=http
firewall-cmd --reload

И ничего не работает. Вернее, все попытки возвращаются как connection refused. Однако если на хосте поднять nc -l 80, то все получается. Вывод — не работает порт-форвардинг.

Проверяю

[root@tower ~]# sysctl net.ipv4.ip_forward
net.ipv4.ip_forward = 1
[root@tower ~]# cat /proc/sys/net/ipv4/ip_forward
1

Все на месте. Проверяю «ручной режим»

systemctl stop firewalld
iptables -t nat -A PREROUTING -d 136.243.151.196 -i eth0 -p tcp -m multiport --dports 80 -j DNAT --to-destination 10.100.0.186

Работает. Значит где-то проблема в правилах. Читаем вывод iptables -S и натыкаемся на баг 1079088

iptables -D FORWARD -o virbr0 -j REJECT --reject-with icmp-port-unreachable

и все заработало. По крайней мере я увидел в браузере заставку от nginx.

firewall-cmd --permanent --zone=public --add-service=https --permanent
firewall-cmd --zone=public --add-forward-port=port=443:proto=tcp:toaddr=10.100.0.186 --permanent

что бы не мучаться, я создал маленький скрипт

[root@tower ~]# cat > /usr/bin/firewall-restart
#!/bin/bash
firewall-cmd --reload && sleep 1 && iptables -D FORWARD -o virbr0 -j REJECT --reject-with icmp-port-unreachable
[root@tower ~]# chmod +x /usr/bin/firewall-restart

Пробуем телнетом

[root@outpost ~]# telnet vsemoe.com 80
Trying 2a01:4f8:171:1a43::2...
telnet: connect to address 2a01:4f8:171:1a43::2: Connection refused
Trying 136.243.151.196...
Connected to vsemoe.com.
Escape character is '^]'.

Так как ipv6 порты не форвардятся, то меняем адрес vsemoe.com на нормальный и пробуем

[root@outpost ~]# telnet vsemoe.com 80
Trying 2a01:4f8:171:1a43:5054:ff:fe51:f70e...
Connected to vsemoe.com.
Escape character is '^]'.
^]

Все, как и полагается. ipv4 идет на nginx, а ipv6 — напрямую на сервер.

Теперь правим nginx. Мне надо, что бы в логах указывалось, к какому серверу изначально был запрос. Добавляю «$server_name» в log-format

Добавляю описание сайта

# cat /etc/nginx/conf.d/vsemoe.com.conf
server {
listen 80;
server_name vsemoe.com www.vsemoe.com;

location ~ /.svn/ {
deny all;
}

location / {
proxy_pass http://10.100.0.178;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_buffer_size 4K;
proxy_buffers 64 4K;
}
}

Перезагружаю и вижу в браузере уже заставку apache. Значит, сработало. Сходил с ipv6 машинки — опять показало. Ура, значит еще один шаг сделан. Теперь надо зашифроваться.

Покупать сертификаты я пробовал — чертовски невыгодная штука. Но благодаря разным людям появился проект Let’s Encrypt, который позволяет получить сертификат бесплатно.

Что бы не мучаться с заставками, на vsemoe.com создал маленькую страничку

cat > index.html
this is vsemoe.com site
[root@outpost ~]# curl -4 vsemoe.com
this is vsemoe.com site
[root@outpost ~]# curl -6 vsemoe.com
this is vsemoe.com site

Опять же работает. Пора пробовать letsencypt

yum install git
git clone https://github.com/letsencrypt/letsencrypt letsencrypt

И тут я обнаруживаю, что интернет в виртуальных машинах не работает. Пинги идут, но все соединения вылетают по тайм-ауту.

Убираю правила

firewall-cmd --zone=public --remove-forward-port=port=443:proto=tcp:toaddr=10.100.0.186 --permanent
firewall-cmd --zone=public --remove-forward-port=port=80:proto=tcp:toaddr=10.100.0.186 --permanent

И все работает. Добавляю — падает. Читаю вывод iptables -S и понимаю, что там тупо все пакеты пытаются завернуться на nginx. Ни слова про интерфейс или адрес. Читаю маны и понимаю, что оно должно, но не работает. Пробую создать спец-правила

firewall-cmd --add-rich-rule='rule family="ipv4" destination address="136.243.151.196" forward-port to-addr="10.100.0.186" to-port="80" protocol="tcp" port="80"' --permanent
firewall-cmd --add-rich-rule='rule family="ipv4" destination address="136.243.151.196" forward-port to-addr="10.100.0.186" to-port="443" protocol="tcp" port="443"' --permanent

Интернет пропадает …

firewall-cmd --remove-rich-rule='rule family="ipv4" destination address="136.243.151.196" forward-port to-addr="10.100.0.186" to-port="80" protocol="tcp" port="80"' --permanent
firewall-cmd --remove-rich-rule='rule family="ipv4" destination address="136.243.151.196" forward-port to-addr="10.100.0.186" to-port="443" protocol="tcp" port="443"' --permanent

… и появляется. В конфигах (/etc/firewalld) все правильно, а в реальных правилах — ни слова про адреса. А день потерян …

Выкидываем firewalld и ставим старый добрый iptables

systemctl stop firewalld
yum -y install iptables-services
systemctl enable iptables
systemctl enable ip6tables
systemctl start iptables
systemctl start ip6tables
iptables -t nat -A PREROUTING -d 136.243.151.196 -i eth0 -p tcp -m multiport --dports 80,443 -j DNAT --to-destination 10.100.0.186
iptables -t nat -A POSTROUTING -s 10.0.0.0/8 -o eth0 -j SNAT --to-source 136.243.151.196
iptables -D FORWARD -j REJECT --reject-with icmp-host-prohibited
ip6tables -D FORWARD -j REJECT --reject-with icmp6-adm-prohibited
service iptables save
service ip6tables save
yum remove firewalld

И отправляю машину в ребут, что бы проверить. Вижу кучу лишних правил, которые насовал kvm, что бы выпустить машины в интернет.

virsh net-destroy default
virsh net-edit default
virsh net-start default

Но правила все равно продолжают добавляться. Нашел еще один баг 433484. Там предлагают на хуки повешать все.

Лень. Проще в /etc/rc.d/rc.local добавить строчки


echo "Waiting for libvirt start"
sleep 5
service iptables restart
service ip6tables restart

Теперь вроде работает. Все и везде.

git clone https://github.com/letsencrypt/letsencrypt letsencrypt
cd letsencrypt/
./letsencrypt-auto

Поставит дикую кучу всего, после чего завершится со словами

Creating virtual environment...
Updating letsencrypt and virtual environment dependencies......
Requesting root privileges to run with virtualenv: /root/.local/share/letsencrypt/bin/letsencrypt
No installers are available on your OS yet; try running "letsencrypt-auto certonly" to get a cert you can install manually

Ну хорошо, торможу nginx

service nginx stop

И пускаю скриптик

./letsencrypt-auto certonly

Он у меня спрашивает разные вещи (типа емайла или домена) и завершается с

IMPORTANT NOTES:
- Congratulations! Your certificate and chain have been saved at
/etc/letsencrypt/live/vsemoe.com/fullchain.pem. Your cert will
expire on 2016-04-16. To obtain a new version of the certificate in
the future, simply run Let's Encrypt again.
- If you like Let's Encrypt, please consider supporting our work by:

Donating to ISRG / Let's Encrypt: https://letsencrypt.org/donate
Donating to EFF: https://eff.org/donate-le

Быстренько копирую конфиг для сервера

cat vsemoe.com.conf
server {
listen 80;
listen [::]:80;
server_name vsemoe.com www.vsemoe.com;

location ~ /.svn/ {
deny all;
}

location ~ /.ht {
deny all;
}

location '/.well-known/acme-challenge' {
default_type "text/plain";
root /tmp/letsencrypt-auto;
}

location / {
return 301 https://$server_name$request_uri;
}
}

server {
listen 443 ssl spdy;
listen [::]:443 ssl spdy;

ssl_certificate /etc/letsencrypt/live/vsemoe.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/vsemoe.com/privkey.pem;
ssl_trusted_certificate /etc/letsencrypt/live/vsemoe.com/fullchain.pem;
ssl_session_timeout 1d;
ssl_session_cache shared:SSL:50m;

# openssl dhparam -out /etc/nginx/dhparam.pem 2048
ssl_dhparam /etc/nginx/dhparam.pem;

# What Mozilla calls "Intermediate configuration"
# Copied from https://mozilla.github.io/server-side-tls/ssl-config-generator/
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers 'ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:ECDHE-RSA-DES-CBC3-SHA:ECDHE-ECDSA-DES-CBC3-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:AES:CAMELLIA:DES-CBC3-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!aECDH:!EDH-DSS-DES-CBC3-SHA:!EDH-RSA-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA';
ssl_prefer_server_ciphers on;

# HSTS (ngx_http_headers_module is required) (15768000 seconds = 6 months)
add_header Strict-Transport-Security max-age=15768000;

# OCSP Stapling
# fetch OCSP records from URL in ssl_certificate and cache them
ssl_stapling on;
ssl_stapling_verify on;

resolver 8.8.8.8 8.8.4.4 valid=86400;
resolver_timeout 10;

location / {
proxy_pass http://10.100.0.178;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_buffer_size 4K;
proxy_buffers 64 4K;
}
}

Генерирую требуемое (долго идет)

openssl dhparam -out /etc/nginx/dhparam.pem 2048

Перезапускаю nginx, захожу браузером … и ляпота!

Screenshot 2016-01-17 20.37.26

Ну и проверка …

Screenshot 2016-01-17 20.47.00

Следующим шагом разрулим ситуацию с ipv6.

Новый сервер с игрищами и блудницами — 2

Итак, надо виртуализироваться. Виртуализироваться будем через KVM потому что опять же продвигается редхатом, всеми поддерживается и так далее и тому подобное.

Для начала ставим кучку жутко «необходимого» софта: yum install qemu-kvm libvirt python-virtinst bridge-utils

Затем запускаем установленное

systemctl start libvirtd
systemctl enable libvirtd

Опять же, ничего такого вроде не появилось, за исключением пары интерфейсов с названиями virbr и адресом 192.168.122.1/24.

3: virbr0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN
link/ether 52:54:00:ba:d8:82 brd ff:ff:ff:ff:ff:ff
inet 192.168.122.1/24 brd 192.168.122.255 scope global virbr0
valid_lft forever preferred_lft forever
4: virbr0-nic: <BROADCAST,MULTICAST> mtu 1500 qdisc pfifo_fast master virbr0 state DOWN qlen 500
link/ether 52:54:00:ba:d8:82 brd ff:ff:ff:ff:ff:ff

Первым делом мне надо добавить ipv6 адрес. Только не вздумайте искать по совпадениям и править руками. Есть гораздо более приятные средства.

virsh net-destroy default
virsh net-edit default

Screenshot 2016-01-16 15.18.40

И добавим еще одно определение сети.

Screenshot 2016-01-16 15.27.38

virsh net-start default

Screenshot 2016-01-16 15.30.24

а в логах должно быть что-то похожее на

Jan 16 13:28:36 tower dnsmasq-dhcp[3544]: DHCP, IP range 10.100.0.100 -- 10.100.0.200, lease time 1h
Jan 16 13:28:36 tower dnsmasq-dhcp[3544]: DHCPv6, IP range 2a01:4f8:171:1a43:8000::1000 -- 2a01:4f8:171:1a43:8000::2000, lease time 1h
Jan 16 13:28:36 tower dnsmasq-dhcp[3544]: router advertisement on 2a01:4f8:171:1a43::
Jan 16 13:28:36 tower dnsmasq-dhcp[3544]: IPv6 router advertisement enabled

Откуда появился 2a01:4f8:171:1a43:8000::2/96 ?

Дело в том, что hetzner выдал мне ipv6 адрес 2a01:4f8:171:1a43::2/64. Типа подсеть на хост и все такое. Я взял с серединки (:8000) кусочек в 32 бита (128-96) или 4 миллиарда адресов. Ну или столько, сколько сейчас адресов в интернете 🙂 Из этого диапазона я выделил малюсенький кусочек в тысячу адресов для виртуалок. Думаю, что мне этого хватит 🙂 Ну и заодно поменял адрес для ipv4 на более подходящий мне.

Теперь самое время проверить доступность с другого хоста.

[root@outpost ~]# ping6 2a01:4f8:171:1a43:8000::2 -c 2
PING 2a01:4f8:171:1a43:8000::2(2a01:4f8:171:1a43:8000::2) 56 data bytes
64 bytes from 2a01:4f8:171:1a43:8000::2: icmp_seq=1 ttl=59 time=0.864 ms
64 bytes from 2a01:4f8:171:1a43:8000::2: icmp_seq=2 ttl=59 time=0.490 ms

--- 2a01:4f8:171:1a43:8000::2 ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1000ms
rtt min/avg/max/mdev = 0.490/0.677/0.864/0.187 ms
[root@outpost ~]# ping6 2a01:4f8:171:1a43::2 -c 2
PING 2a01:4f8:171:1a43::2(2a01:4f8:171:1a43::2) 56 data bytes
64 bytes from 2a01:4f8:171:1a43::2: icmp_seq=1 ttl=59 time=0.341 ms
64 bytes from 2a01:4f8:171:1a43::2: icmp_seq=2 ttl=59 time=0.452 ms

--- 2a01:4f8:171:1a43::2 ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1000ms
rtt min/avg/max/mdev = 0.341/0.396/0.452/0.058 ms

В общем, все как в ipv4, только маски дикие по размерам и не привычные.

Теперь надо поднять какую-нибудь виртуалку, что бы протестировать роутинг и прочие штуки.

Добавляем полезную утилиту для лентяев yum install virt-install virt-viewer

И останавливаемся. Потому что нам надо выделить немножко места для виртуалок.

lvcreate -L 100G -n vm vg0
mkfs.xfs /dev/vg0/vm
mkdir /vm
mcedit /etc/fstab
mount /vm

100Гб для начала хватит, а потом по необходимости растяну.

Так как я хардкорничаю, то добавляю необходимое для selinux

yum install policycoreutils-python
semanage fcontext -a -t virt_image_t "/vm(/.*)?"
restorecon -R /vm

И выкачиваю дистрибутив CentOS (Тут немного бальзама: качается по ipv6. Мелочь, а приятно)

mkdir /vm/iso
cd /vm/iso
wget http://ftp.funet.fi/pub/mirrors/centos.org/7/isos/x86_64/CentOS-7-x86_64-DVD-1511.iso

Ну и теперь пора поставить тестовую машину. Пока без всяких ускорений, акселераций и прочего. Мне надо просто проверить сеть и все, что с ней связано.

virt-install --name test --ram 1024 --disk path=/vm/test.qcow2,size=8 --vcpus 1 --os-type linux --network bridge=virbr0 --location /vm/iso/CentOS-7-x86_64-DVD-1511.iso --extra-args='console=tty0 console=ttyS0,115200n8 serial' --nographics

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

Screenshot 2016-01-16 16.40.05

После установки мы увидим консоль сервера и может туда залогиниться и даже попинговать ipv4 адреса. ipv6 не пингуется, потому что на интерфейсе сидит только локальный адрес.

Screenshot 2016-01-16 17.37.01

Более того, можно даже немного поэстетствовать и использовать графический virt-manager. Правда, придется добавить немного пакетов, что бы графическая часть морды не ругалась.

yum install xauth libcanberra-gtk3 PackageKit-gtk3-module dejavu-lgc-sans-fonts dejavu-lgc-sans-mono-fonts

Если virt-manager ругается на то, что консоль занята, значит вы не отцепились (Ctrl-]) от текстовой в другом терминале

Ну и затем с любого линукса ssh -X на машину и я получаю вот это.

Screenshot 2016-01-16 17.50.45

В принципе, полный контроль над машинами. Иногда очень удобно, иногда нет.

Но я отвлекся. В виртуальной машине ipv4 есть, получен и даже работает, а ipv6 нет. И еще тормозит по диску уж больно жутко.

Диск лечится просто: тормозим машину, virsh edit test и где driver добавляем cache=’unsafe’ (для рабочих не надо так делать). После запускаем и видим вполне себе шустро бегающую машинку.

Теперь с сетью. Заходим на тестовую машину, запускаем dhclient -6 ens3 (ens3 это у меня сетевой интерфейс). И видим в логах

Jan 16 16:30:58 tower dnsmasq-dhcp[3544]: no address range available for DHCPv6 request via virbr0

Оппа! А почему? Вроде же определили все и выдали тоже все …

Прибиваем в тестовой машине адрес 2a01:4f8:171:1a43:8000::99 и пингуем — пингуется, но только с хоста. Это нормально.

Как прибить? В /etc/sysconfig/network-scripts/ifcfg-ens3

#IPV6_AUTOCONF=yes
IPV6ADDR=2a01:4f8:171:1a43:8000::1234

и перезапустить network

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

<ip family='ipv6' address='2a01:4f8:171:1a43:8000::2' prefix='64'>
<dhcp>
<range start='2a01:4f8:171:1a43:8000::100' end='2a01:4f8:171:1a43:8000::200'/>
</dhcp>
</ip>

Как видите, разница только в маске. Как ни странно, но в этом отношении ipv6 (вернее, его роутинг в линуксе) ведет себя немного «странней», чем для ipv4. Но в любом случае, прочитанное оказалось верным и машина получила свой адрес.

Jan 16 18:03:01 tower dnsmasq-dhcp[5491]: DHCPREQUEST(virbr0) 10.100.0.141 52:54:00:81:5b:8f
Jan 16 18:03:01 tower dnsmasq-dhcp[5491]: DHCPACK(virbr0) 10.100.0.141 52:54:00:81:5b:8f test
Jan 16 18:03:03 tower dnsmasq-dhcp[5491]: RTR-SOLICIT(virbr0)
Jan 16 18:03:03 tower dnsmasq-dhcp[5491]: RTR-ADVERT(virbr0) 2a01:4f8:171:1a43::
Jan 16 18:03:03 tower dnsmasq-dhcp[5491]: DHCPCONFIRM(virbr0) 00:01:00:01:1e:2d:1e:b1:52:54:00:81:5b:8f
Jan 16 18:03:04 tower dnsmasq-dhcp[5491]: DHCPSOLICIT(virbr0) 00:01:00:01:1e:2d:1e:b1:52:54:00:81:5b:8f
Jan 16 18:03:04 tower dnsmasq-dhcp[5491]: DHCPADVERTISE(virbr0) 2a01:4f8:171:1a43:8000::13c 00:01:00:01:1e:2d:1e:b1:52:54:00:81:5b:8f
Jan 16 18:03:05 tower dnsmasq-dhcp[5491]: DHCPREQUEST(virbr0) 00:01:00:01:1e:2d:1e:b1:52:54:00:81:5b:8f
Jan 16 18:03:05 tower dnsmasq-dhcp[5491]: DHCPREPLY(virbr0) 2a01:4f8:171:1a43:8000::13c 00:01:00:01:1e:2d:1e:b1:52:54:00:81:5b:8f

Вывод ip addr

2: ens3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
link/ether 52:54:00:81:5b:8f brd ff:ff:ff:ff:ff:ff
inet 10.100.0.141/24 brd 10.100.0.255 scope global dynamic ens3
valid_lft 3590sec preferred_lft 3590sec
inet6 2a01:4f8:171:1a43:8000::13c/128 scope global dynamic
valid_lft 3595sec preferred_lft 3595sec
inet6 fe80::5054:ff:fe81:5b8f/64 scope link
valid_lft forever preferred_lft forever

Как видно, сервер получил свой персональный ipv6 адрес, но ничего, кроме хоста пинговать не может. Причина простая как грабли — ipv6 не имеет NAT в принципе. Только роутинг.

Косвенным подтверждением является попытка попинговать адрес тестовой машины снаружи

[root@outpost ~]# ping6 2a01:4f8:171:1a43:8000::13c
PING 2a01:4f8:171:1a43:8000::13c(2a01:4f8:171:1a43:8000::13c) 56 data bytes
From 2a01:4f8:171:1a43::2 icmp_seq=1 Destination unreachable: Address unreachable
From 2a01:4f8:171:1a43::2 icmp_seq=2 Destination unreachable: Address unreachable

То есть пинг доходит до хоста, а тот отвечает, что не знает, куда роутить этот адрес. Аналогичное получим, если попытаемся напрямую с хоста попинговать. Ну нету этого адреса в таблице роутинга и все тут. Меняем маску на основном интерфейсе (64->128), что бы таблицу роутинга в порядок привести. Без перезагрузки

ip addr del 2a01:4f8:171:1a43::2/64 dev eth0
ip addr add 2a01:4f8:171:1a43::2/128 dev eth0

А с перезагрузкой в /etc/sysconfig/network-scripts/ifcfg-eth0

Что изменилось? С хоста началась пинговаться виртуалка и все. В общем, лично мне стало понятно, что ipv6 — это нифига не ipv4, только с бОльшими масками.

(чтение мануалов опущено)

В общем, с одной стороны все проще, а с другой — все сложнее. В ipv6 есть такая штука, как SLAAC, которая работает как некий навороченный DHCP сервер. Подробнее в маны.

Поэтому выкидываю нафиг все из настроек dnsmasq (virsh net-edit default) и оставляю только описание интерфейса.

<ip family='ipv6' address='2a01:4f8:171:1a43::3' prefix='64'>
</ip>

Ну и адрес попроще сделал. И сделал /etc/radvd.conf

interface virbr0
{
AdvSendAdvert on;
AdvManagedFlag off;
AdvOtherConfigFlag off;
prefix 2a01:4f8:171:1a43::/64
{
AdvOnLink on;
AdvAutonomous on;
AdvRouterAddr on;
};
RDNSS 2001:db8:0:a0a1::add:1010
2001:db8:0:a102::add:9999
2001:db8:0:a111::add:9898
{
};
};

Затем

systemctl enable radvd.service
systemctl start radvd.service

и перезагрузка виртуалки. Вуаля! Магия ipv6 сработала и виртуалка получила свой адрес.

inet6 2a01:4f8:171:1a43:5054:ff:fe81:5b8f/64 scope global noprefixroute dynamic
valid_lft 86170sec preferred_lft 14170sec

И даже пинги ходят во все стороны. То, что и требовалось получить.

Для проверки я создал еще одну виртуалочку (теперь с сразу с «быстрым» диском)

virt-install --name test2 --ram 1024 --disk path=/vm/test2.qcow2,size=8,bus=virtio,cache=none --vcpus 1 --os-type linux --network bridge=virbr0 --location /vm/iso/CentOS-7-x86_64-DVD-1511.iso --extra-args='console=tty0 console=ttyS0,115200n8 serial' --nographics

И сеть в ней сразу заработала без каких-либо дополнительных команд. То, что и требовалось получить. Теперь можно и виртуалки клепать.

Как выдаются адреса? А очень просто: простым маппингом мак-адреса сетевой. Опять же за подробностями в документацию.

link/ether 52:54:00:e4:63:05 brd ff:ff:ff:ff:ff:ff
inet6 2a01:4f8:171:1a43:5054:ff:fee4:6305/64 scope global noprefixroute dynamic

Главное изменение теперь в «политике безопасности».

Раньше: вся сетевая безопасность лежала на хосте. Гости получали уже отфильтрованный трафик, только на те порты, которые разрешены. Можно было спокойно открывать порты, не опасаясь ничего.

Теперь: каждый гость выставлен наружу «напрямую» и требует соответствующей защиты. И не важно, что ipv4 адреса из «приватной» сети. Фаирволл, обновление и выключение ненужного — наше все.

Не страшно и не сложно, но помнить надо.

Итак, считаю, что очередной шаг закрыт. Теперь надо переносить существующее (разумеется, с одновременным апгрейдом)

Новый сервер с игрищами и блудницами — 1

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

Но просто так переносить сервисы абсолютно не интересно: на старом сервере у меня стоит OpenVZ и весь перенос будет заключаться в паре команд, да смене имен в DNS. Где же развитие и толчок вперед? В общем, потыкался я и решил:

— Сменить основную OS с CentOS 6 на CentOS 7. systemd, firewalld и прочие d в полном изобилии. Некий опыт есть, но чего-то в голову лезут пошлые мысли про RHCE.
— Привести в порядок DNS. Сейчас у меня часть серверов тут, часть там, часть вообще через одно место. Пусть все будет одинаковым и у меня.
— ipv6. Не очень-то и надо, но смотреть выше про развитие.
— SNI. Хватит тратить ipv4 адреса на каждый SSL сервер (да и дешевле будет).
— Да и вообще, надо все закриптовать. А то стыдоба — личный SVN голым ходит.
— Ну и KVM надо. Иногда жутко как требуется винда «в прекрасном и далеком», а городить туннели не охота. Заодно получится бесплатный терминальный сервер для меня любимого.
— OwnCloud тоже не помешал бы, как и OpenVPN сервер для разностей нехороших.
— Ну и остальное по вкусу.

Практика прошлых лет показала, что принцип «ставим один сервер, выкидываем с него лишнее, а все сервисы в виртуалки» оправдал себя на все 100%. Да, при настройке чуть-чуть подумать надо, но зато потом абсолютно никаких проблем и заморочек. Ни с хакерами, ни с распределением нагрузки, ни с резервным копированием … да вообще ни с чем. Так буду и тут делать.

Идем в админку и заказываем новый сервер. Ждем получения письма, в котором пишут радостное:

Screenshot 2016-01-16 10.52.41

Заходим, нас пускают …

Screenshot 2016-01-16 10.52.57

Для приличия делаем passwd root и начинаем осматриваться. Сразу замечаю, что немцы стойко держат флаг «мы делаем нах ордунг» и сделали два больших рейда по 2Тб. Один отдали под /, другой под /home. Интересно, какой у них был сценарий использования? Но в любом случае, мне такое не надо.

Идем опять в консоль и перегружаемся в rescue

Screenshot 2016-01-16 11.04.38

Выглядит именно тем, что я и заказывал (каюсь, да, не посмотрел раньше). Поэтому сразу набираем installimage

Там нам дают в mcedit поправить конфиг. Там я меняю имя сервера на tower.multik.org и ниже я показал, как указываю 16 гигов свопа, 512 мегабайт для /boot и все остальное отдать в LVM. В LVM прошу создать раздел / размером в 16 гигов. Остальное оставить нетронутым. Почему так мало? Так потому что все остальное — в виртуалки! В корне сервера делать лишнему абсолютно нечего, тут будут только штуки, связанные с внешним миром типа фаирволла.

Screenshot 2016-01-16 11.42.58

Сохраняю (F2 или ESC-2), выхожу (ESC-0 или F10) и жду перезаливки сервера

Screenshot 2016-01-16 11.10.30

Потом reboot, снова захожу (про ключи и их смену не говорю) и вуаля! Я в новом сервере.

Screenshot 2016-01-16 11.23.09

Опять меняю пароль root.

Итак, на этом этапе я получил пустой и голый сервер. Что он умеет? Да ничего. Добрые немцы выкусили из образа вообще все (вот тут реально молодцы!) и на сервере есть только ssh и настроенная ipv4/ipv6 сеть.

Первым (опять первым, но тут все такое) делом обновляемся. yum update

Добавляем полезные программки yum install mc screen bind-utils iotop iftop

Включаем синхронизацию времени systemctl start ntpd && systemctl enable ntpd

и переходим к фаирволлу. yum install firewalld ; systemctl enable firewalld ; systemctl start firewalld (Почему firewalld? Потому что мне лень править правила для ipv4 и ipv6 одновременно. Ну и редхатом проталкивается)

Внешне ничего не изменилось, но теперь снаружи на машину можно зайти только по 22му порту. Проверить можно посмотрев правила iptables. Но я-то двигаюсь вперед, поэтому все должно быть по фен-шую.

systemctl status firewalld

Screenshot 2016-01-16 12.13.29

и побалуемся с командой firewall-cmd

Screenshot 2016-01-16 12.15.57

Если я правильно понял, то никаких активных правил нет, просто стоит public по умолчанию, в которой разрешен только dhcp-клиент и ssh. Все остальное запрещено. Вполне логичные правила, но опять же, мне не сильно подходят. Будем менять.

Для начала попробую

firewall-cmd --zone=public --change-interface=eth0 --permanent
firewall-cmd --get-active-zones

И вижу фигу. Ничего не изменилось. Оказывается, это фича. Скрипт видит, что зона public и так применена (ну и что, что по умолчанию, поэтому ничего не делает).

Меняю зону на home и обратно. Вот теперь показывает

Screenshot 2016-01-16 12.27.56

Но лично мне не нужно, что бы было правило для dhcp клиента

firewall-cmd --zone=public --remove-service=dhcpv6-client --permanent
firewall-cmd --list-all

Ну вот теперь хорошо. Ничего лишнего, все закрыто и замуровано. Остался последний шаг — применить все, что я тут натворил, в реальность

firewall-cmd --reload

Все, теперь и iptables показывает именно то, что полагается.

Как говорится, первый шаг сделан. Следующим — виртуализироваться. Но виртуализироваться хардкорно, поэтому ставим SELINUX=permissive для начала и перезагружаемся, проверяя правильность всего преднастроенного.

У меня выползла одна единственная проблема — предустановленный немцами chrony мешался ntpd. Удаляем его (yum remove chrony) и все.

PS В запоминалку: настроить монитор raid.

Lenovo P70

В принципе, после пары месяцев владения уже можно описать свои впечатления от агрегата. Всякие «что внутри» легко можно найти в сети, поэтому повторяться не буду, только личные впечатления.

Итак, для начала о плохом. Внутри android 4.4.4. У самого андроида только одна проблема — кривой часовой пояс. Поэтому время звонков и смсок сдвинуто на час вперед. К сожалению, нормально лечится только рутованием аппарата, поэтому забил.

К самой оболочке есть только одна претензия — на всякие выпенждрежные штуки типа включения-выключения по расписанию разработчики забили. То есть оно может сработать, а может и не сработать. Но так как это именно выпендрежная штука, то никаких проблем она не доставляет.

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

Screenshot_2015-04-01-17-18-18

Этот график я снял в первые дни владения телефоном. Никаких заморочек типа «замораживания» или выключения беспроводных сетей не делалось. Владельцы модных самсунгов и айфонов нервно завидуют.

Леново, привет!

Как понятно из предыдущего поста, я отказался от SGS4A. Повторюсь: основной причиной стала крайне непродолжительная работа от аккумулятора. Для смартфона было подвигом продержаться сутки в режиме бережного использования (а в обычном у меня повсюду были зарядки). В остальном — шикарный агрегат.

Но надо было что-то выбрать на замену. Так как с недавнего времени я стал больше обращать внимания на личное удобство и удовольствие, чем на внешние понты, то передо мной открылся довольно-таки широкий выбор.

Сначала я ударился в крайности: хотел взять texet tm-511R. Неубиваемый телефон с диким временем автономной работы. Остановило только то, что он не умеет никак синхронизировать контакты. Вообще. А потом я попросту не смог его найти в магазинах поблизости. Хотя судя по интернет-сайтам этих магазинов, этот телефон у них был.

Потом решил вспомнить, для чего же я использую смартфон. В результате получилось следующее:
— Часы и будильник.
— Погодопоказыватель. В духе «брать ли зонтик» и «не замерзну ли я».
— Музыкоигралка через проводную или bluetooth гарнитуру. Где-то по 3-4 часа минимум и каждый день.
— Навигация с пробками и без онных. Час в день примерно. Обычно вечером, когда мне надо выбрать, по какой нычке до дома доехать.
— Кофетуалеточиталка фейсбучиков, одноглазников и вконтактиков. Минут 15-20 в день.
— Книгочиталка. От 15-20 минут до 2-3 часов.
— Изредка по инету прошвырнуться или видео посмотреть. Совсем изредка какая-нибудь игрушка класса «tower defence»

И в принципе все. То есть мне не нужно 100500 гигов пямяти, много ядер процессора и прочих NFC с системой отслеживания взгляда и подсчета калорий.

На платформу мне пофиг. Хоть iOS, хоть Android, хоть WinRT. Все что мне надо, есть под все платформы.

Начал смотреть на то, что предлагается рынком. Благодаря активным действиям Марины Рожковой, из списка претендентов сразу был исключен Highscreen Boost. Пусть дальше маркетоидит и пиарит. Хотя может телефон и неплохой.

Потом был составлен список смартфонов с большой батарейкой. В этом мне очень сильно помог http://helpix.ru/articles/battery-test.html Правда там есть не все телефоны, но по разным обзорам можно достаточно точно установить корреляцию.

Следующим шагом стало отсеивание тех смартфонов, про которые ничего не известно таким ресурсам как 4pda.ru и xda-developers.com. Критерий простой: чем больше тем или страниц, тем больше вероятность, что все возможные глюки или фичи найдены, разжеваны и обрисованы.

И как-то кандидатов не осталось. Lenovo P780. Всякие характеристики и прочее можно прочитать в куче обзоров, поэтому повторяться не буду.

И сразу же первые впечатления по сравнению с S4A

— Да, он кое-где подтормаживает. На кофетуалетных приложениях и иногда. Для меня некритично.
— Да, у него разрешение экрана меньше. Но я не вижу разницы. Для меня и там и там гладко.
— У него чудесно настроенная вибра. Это просто надо щупать. Словами … ну она мягче и приятней.
— Карточку на 64Гб сожрал.
— У него прямо из коробки есть режим «как usb флешка». Да, я в курсе, почему этот режим выкидывают. Но начхать, мне он нужнее, чем всякие рассуждения об удобстве мифических пользователей и программистов.
— В телефоне нету горы предустановленного и нестираемого дерьма на все случаи жизни. Одна игрушка (на первый взгляд город надо строить и развивать), загрузчик антивируса (на кой он на смартфоне?), какой-то навигатор и клиент твиттера. Может, потом удалю. А может и забью.
— Да, он не работает из коробки с WiFi каналами выше 11. Но пара команд из консоли и больше нет проблем.
— Да, у него нет 5GHz WiFi. Мне пофиг.
— Да, у него в комплекте OTG шнурок (бум считать, что бесплатно) и через него можно флешки читать и другие телефоны заряжать. Попробовал. Прикольно.

А теперь совершенно невозможное для 99% современных смартфонов. Включено все, что включается: от синхронизаций до интерфейсов, никаких заморочек с заморозками, остановками и прочим. Включил, понаставил всего, чего надо, дождался конца зарядки и пошел использовать в обычном режиме (только постоянно убирал подальше зарядки. рефлекс уже …). Еще раз: все настройки по умолчанию, как было из коробки.

battery

Маленький горбик посредине — это я к компьютеру подключал для синхронизации музыки.

Кластер против облака …

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

На всякий случай у меня под боком есть два компьютера. Ну как компьютеры … по нынешним меркам они скорее обзываются калькуляторами. Но тем не менее все необходимое у них есть. Пару-тройку виртуалок они потянут, а больше для меня и не надо.

Упражнение первое или «мама, у нас все сломалось». Везде пишут (ну и я тоже), что системы виртуализации позволяют осуществлять онлайн-миграцию. А как это поисходит вживую?

cloud1

Вот вам пример. В одном окошке я запустил миграцию виртуальной машины с одной ноды «калькуляторного кластера» на другую, а во втором — просто посылал в сторону мигрируемой машины по пакету в секунду. Как видно на скриншоте, время недоступности машины составило 9 секунд. Общее время миграции было около 30 секунд. На настоящих кластерах время недоступности обычно не превышает и половины секунды. Много ли сервисов требуют для себя такого уровня доступности?

Или вот еще один пример, опять же многократно описываемый. Есть сервис, которому не хватает ресурсов.

cloud2

Если посмотрите на правое окошко (там консоль одной из виртуалок), то там openssl показывает, что он может подсчитать только 11 тысяч хешей md2 за 0.15с. А потом команда free докладывает, что памяти всего 256 мегабайт. Одна команда в левом окошке (на ноде) и openssl уже подсчитывает 540 тысяч за 3 секунды (или 27 тыщ за то же время), а памяти стало уже гигабайт. И все это без остановки или перезагрузки сервиса.

И так можно крутить любой параметр у виртуалки: начиная от числа и скорости процессоров и заканчивая количеством дискового пространства у машины.

Для интереса предлагаю прикинуть, сколько потребуется времени и сил, что бы проделать подобное в обычной инфраструктуре. Удобно? Не то слово!

Надо развернуть новый сервер? Легко!

cloud3

17 секунд (калькулятор, да) и у вас есть готовая машина, которой надо только выделить ресурсы.

cloud4

А когда нужда в ней отпадет … секунда и ненужной машины больше нет.

Точно таким же образом машины можно клонировать или тиражировать, снапшотить для бекапа и выполнять кучу других полезных действий.

Повторюсь, все это сейчас позволяет делать любая система виртуализации.

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

Отличаются они одним. Системой управления всем этим великолепием.

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

Во-вторых, системы управления заточены на разделение ресурсов. В кластере редко возникает необходимость отделить одну группу серверов от другой. В результате все сидят в нескольких VLAN’ах, разрулить которые легко руками. А в облаках тысячи (десятки, сотни — подставьте по вкусу) пользователей, которых надо развести по своим сетям и не давать серверам одного пользователя прямого доступа к серверам другого. Без системы управления, заточенной на облака, подобная затея попросту обречена на провал.

И наконец, облака тащат в себе всю … скажем так, специфику виртуализации. Скажем, для одного сервиса необходимы ноды, которые используют локальное хранилище, да и еще на SSD. А для другого хватит кусочка общего стораджа. Для каждого сервиса есть свои ограничения, требования, правила. И системы управления следят за тем (скажем, при миграциях), что бы каждый сервис работал на ресурсах того класса, который ему выделен, что бы не происходило overselling (или он был с заранее определенными параметрами) и так далее и тому подобное.

Поверьте, все это удержать в голове и рулить этим через консоль или какую-нибудь утилитку — абсолютно нереальная задача.

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

Что нести в облачный офис?

Итак, несмотря на мои страшилки в предыдущих постах, вы все-таки решили использовать «облака» в своей деятельности. Хоть чуть-чуть, но использовать. Как выбрать то, что стоит нести в облака, а что не стоит?

Для этого есть несколько методик, ниже я попробую объяснить наиболее … подходящие, что ли.

Методика первая, пусть будет «секрет полишинеля». В соответствии с ней в облако может отправиться любой сервис, который использует данные из внешнего мира или отдает их туда. Под это определение прекрасно подходят такие сервисы, как электронная почта, телефония и веб-сайт.

«Ну ладно, веб-сайт понятно, а как же с почтой и телефоном? Их смогут читать/слушать чужие люди?». Да, при наличии соответствующих навыков или всяких судебных решений их и так будут читать и слушать чужие люди. Если говорить про телефон, то на операторе (тот, который выдал вам телефонный номер) уже стоит система, позволяющая прослушивать все телефонные разговоры, проходящие через него. А что касается внутренних переговоров, то они в большинстве случаев абсолютно никому не интересны и способны забить любой сервер. То же самое касается и почты. Буквально пара команд у провайдера, который предоставляет вам доступ в интернет, как весь ваш трафик оказывается у него как на ладони. И не обольщайтесь насчет страшных слов SSL/TLS — в подавляющем большинстве случаев все вскрывается так же легко, особенно при наличии административного ресурса. Правда, вынужден добавить ложку меда: по разговорам со знакомыми, такое используют очень редко, ибо во-первых, принцип «неуловимого джо» никто не отменял, а во-вторых, через налоговую сделать все необходимое гораздо проще.

Следующая методика «берите все, что нам негоже». Тут в облака отправляются данные, которые вам не нужны прямо сейчас или которые нужны всем. Тут главное установить принцип, насколько эти данные вам не нужны. Скажем, данные от систем резервного копирования вам именно сейчас не нужны, занимают много места и хранение их рядом с резервируемыми системами прямо противоречит всем нормам. Так зашифруйте их посильнее и пусть лежат где-нибудь в Америке. Что касается данных которые нужны всем: зачем устраивать на своем сервере каталог «для скачки»? Ролики, дистрибутивы программ и прочие подобные штуки с удовольствием примут к себе системы CDN. Будут довольные и пользователи, которые будут скачивать необходимое им быстро и Вы, так как канал до вас (или вашего сервера) не будет загружаться.

И наконец, в облака удобно/выгодно отправлять то, что относится ИТшному понятию R&D. Говоря кратко, то, что запускается «на посмотреть», меняется по двадцать раз на дню и наполняется тестовыми или сильно устаревшими данными.

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

Но (по крайней мере для России) есть одна категория, которую нельзя отправить в «облако»: персональные данные. Говоря простыми словами туда попадает все от паспортных данных и места проживания и до всяких медицинских анализов и выписок. Нельзя не потому что не получится, а потому что «атата, если обнаружат»: ни одно известное мне «облако» не использует сертифицированных средств защиты информации. Вроде в России потихоньку начали появляться провайдеры, которые обеспечивают обработку персональных данных, но там от облаков только название, да и ресурсы, которые они могут предоставить, вызывают лишь недоумение.

А теперь абзац неприкрытой рекламы меня любимого: мне нравятся «облака» и я готов совершенно бесплатно (конечно, не откажусь и от оплаты, если предложите 🙂 ) поконсультировать/помочь/рассказать как сделать по поводу «облаков». Просто из любви к теме. Я не связан с каким-либо провайдером или сервисом «облаков» или производителем систем виртуализции, поэтому мне абсолютно начхать на маркетинговые заморочки. Пишите письма на multik@multik.org, в skype пользователю kiltum или оставляйте комменты.

Дорогие мои облака …

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

Наверняка вы уже задумывались о использовании «облаков» в своем бизнесе, но простые расчеты на калькуляторе и консультации с ИТшниками неизменно приводили к обескураживающим результатам: стоимость аналогичного, но «облачного» сервиса неизменно оказывалась в 1,5-2 раза выше. Как же так? Ведь вон сколько компаний использует облака в своей работе и рапортуют о снижении расходов … А тут ИТшники опять начинают свою вечную волынку про недостаток серверов … Что делать?

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

1. Фаирволл. Он же брэндмауэр. Штука, которая выпускает вас в интернет, фильтрует лишнее и иногда служит HR-инструментом под названием «на какие сайты ходят сотрудники». Хватит 50 тыщ.
2. Почтовый сервер. Без почты нынче никуда. Тут лучше заложить где-то в районе 100 тыщ.
3. Веб-сервер. Сайтик обычно много нагрузки не требует, поэтому тоже 50.
4. Сервер телефонии. Положим те же 50 тыщ.
5. Сервер бухгалтерии. Бухгалтера люди нервные, поэтому 100 тыщ и не надо экономить.
6. Файлопомойка. Сотрудникам надо файликами обмениваться. Возлагать это на почту — моветон. Тыщ 80 надо.
7. Резервное копирование. Есть компании, где уже теряли данные, а есть, где еще только будут. Тыщ 100.

Для начала хватит. Конечно, в реальности часть функций обычно объединяется на одном сервере, но у нас админ печется о безопасности, поэтому старается разнести все. Ну и в разных компаниях добавляются другие сервера: для разработки, тестирования и прочих штук. Но я их учитывать не буду.

Итого получается в районе 550 тысяч рублей. Эти 7 коробок жрут электричество, требуют охлаждения, запасных частей и квалифицированного присмотра. Через некоторое время их мощности начинает не хватать и начинаются узаконенные репресии пользователй в духе «более 500 мегабайт в почтовом ящике не хранить» и «бухгалтерия тормозит, потому что в сервере винт сдох» (хорошо, что тормозит. у некоторых просто падает). Знакомо?

Что делать? Бизнес растет, но на одних серверах разориться же можно … И тут в дело вступает хороший, качественный ИТшник. Срываю так сказать, покровы. Для начала: одиночные сервера никогда не загружены на 100%. Из-за разных там особенностей больше 60-70% нагрузку поднимать попросту нельзя: будет все ломаться.

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

Отсюда вытекает вполне логичное предложение: почему бы серверу резервного копирования не поделиться днем своими ресурсами? А серверу бухгалтерии и файлопомойки ночью? С использованием современных технологий — легко.

Сам процесс объединения стайки серверов в «облако» я пропущу. Вам это во-первых попросту неинтересно, а во-вторых, там слишком много нюансов, описанию которых пришлось бы посвятить много места.

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

Вам же главное знать то, что у вас теперь есть свое «облако». Персональное, частное — называйте как хотите.

Что вы получаете?

— Возможность продать один-другой сервер. Подчеркиваю — возможность (ИТшники просто так не выпустят из своих рук 🙂 ). Ибо если одиночные сервера нельзя грузить на 100%, то в «облаке» вполне.
— Более высокую доступность серверов. Теперь в случае поломки одного из «железных» серверов есть возможность попросить «пододвинуться» другие, пусть и за счет уменьшения скорости работы.
— Возможность отдавать более мощный сервер (у нас же сервера не одинаковые изначально) на более необходимую сейчас работу. Скажем, днем самый мощный сервер будет помогать процессу сдачи бухгалтерского отчета, а ночью обрабатывать данные для системы резервного копирования.
— Более разумно распределять нагрузку. Скажем, отобрать ночью у почтового сервера ресурсы процессора в пользу других. Пусть письмо ходит не 1-2 секунды, как днем, а 10-20. Кому какая разница?

А теперь о более приятном. Если делать подобное с «нуля», то более высокую производительность и бОльший запас по мощности всего комплекса можно получить с помощью пары серверов, каждый из которых стоит по 200тр. И эти серверы будут жрать меньше электричества, меньше греть окружающую среду и требовать меньший уход. 150 тысяч экономии прямо «в лоб»!

Но это «частное облако». Как же можно заработать или сократить расходы с помощью публичных облаков?

Для начала можно легко увеличить безопасность вашего бизнеса. Не знаю как в других странах, но в России до сих пор не изжили «изъятие вещественных доказательств». С одной стороны, счет не заблокирован и на нем есть деньги, а с другой — все данные остались на тех самых «вещественных доказательствах». Вот для примера бухгалтерия. Объемы базы данных очень редко превышают еденицы гигабайт. Вот возьмите и дайте задачу, что бы система резервного копирования попутно заливала данные еще и туда. Для безопасности — хорошо зашифрованными. Сейчас стоимость хранения одного гигабайта на S3 — $0.03 в месяц. Да, я не ошибся — три цента за гигабайт в месяц. Добраться до архивов можно будет с любого компьютера, подключенного к интернету, а уж что с ними делать — дело ваше. Сравните со стоимостью хранения подобного где-нибудь на стороне «обычным» способом.

Затем рассмотрите свои бизнес-процессы и выделите те, которые требуют непродолжительных, но больших компьютерных ресурсов. Скажем, в каком-нибудь рекламном агенстве это может быть процесс рендеринга роликов. Покупать для этого отдельный мощный сервер, который будет 90% времени пинать балду — не выгодно. А без него никак. Куда лучше за $3 в час арендовать гораздо более мощный сервер в облаке и использовать его только тогда, когда надо. И кто мешает арендовать не один сервер, если роликов много?

Надо изредка рассылать большие объемы писем (и которые ни разу не спам)? Вон, SES берется доставить со всеми заморочками тысячу писем за 10 центов. Стоимость обычного почтового сервера, способного переварить хотя бы 20-30 тысяч писем за час, предлагаю узнать самостоятельно.

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

И наконец, можно заранее подготовиться к приятным, но внезапным неожиданностями. Для примера можно подготовить все необходимое, что бы ваш веб-сайт смог выдержать любой поток посетителей. В обычные времена ваш веб-сайт крутится у вас за стенкой. Но стоит возрасти нагрузке (скажем, отдел рекламы провел успешную компанию), как ваш веб-сайт сначала переездет к провайдеру (что бы не загружать ваш канал в интернет), а при дальнейшем повышении нагрузки начнет поднимать у провайдера свои копии. И так до тех пор, пока весь поток посетителей не схлынет. Схлынул — сайт вернулся в родные пенаты. Не верьте мне, просто возьмите калькулятор в руки и подсчитайте стоимость подобного решения. Если у вас подобные случаи случаются регулярно, то вы будете очень обрадованы открывшимися возможностями.

И подобных возможностей в каждой компании — уйма. Честно.

Если все так хорошо, то почему все так плохо? Во всем этом есть одна большая ложка дегтя: без квалифицированных специалистов подобное реализовать нельзя. В смысле реализовать можно, но вы скорее потеряете деньги, чем сэкономите. И пока технологии «молодые», нет никаких сертификатов, лицензий и прочих документов, свидетельствующих о том, что тот или иной ИТшник умеет «нырять» в облака и что более важно, «выныривать» из них …

А таких — мало.

Облака, белогривые лошадки …

… или о облаках простыми словами.

Покупайте наших слонов, теперь и в облаках! Самые облачные облака по выгодным тарифам!

Такое или примерное такое сейчас можно увидеть и услышать в любой рекламе услуг, связанных с компьютерами. Что же такое облака и чего с ними можно делать?

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

Но тут пришли продавцы и маркетологи. Первым надо было увеличить продажи, а вторые помогали первым, ведь им тоже перепадал кусок пирога.

Поначалу шаги было очень осторожными. Практически все шло под лозунгом «сократи расходы на сервера». Ведь в самом деле, поставить и обслуживать один мощный сервер гораздо дешевле, чем кучку маленьких. Тут и стали называть эти маленькие сервера виртуальными. Ведь их нельзя пощупать, но они есть. Постепенно технологии дошли до того, что стало возможно объединять мощные сервера между собой так, что они могли «делиться» с соседями виртуальными серверами без их остановки. И на всех схемах сети такая конструкция обозначалась облаком. Типа мы знаем, что сервер там, но детали реализации от нас скрыты.

Ушлые маркетологи мгновенно раскопали ассоциацию и начали толкать «облака» в массы. В результате вышеописанное (несколько мощных серверов, которые стоят в серверной у вас за стенкой) стали называть «частное облако» или private cloud.

Тут же появились провайдеры, которые стали предлагать «облака» для всех страждущих. Такие облака стали называть «публичными облаками» или public cloud. Услуга довольно быстро стала популярной: ведь большинству людей не нужны для своих задач мощные компьютеры, а провайдерам очень дорого обслуживать обычные слабые сервера.

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

Больше всего «облакам» радовались ИТшники. Благодаря «облакам» у них исчезло очень много нудной работы по обслуживанию серверов … Конечно, появилось много другой работы, но это тема уже для другой статьи.

Итак, в чем же основное преимущество облаков?

— Снижение расходов на серверный парк. По моим прикидкам, переход с классической схемы (один сервис — один сервер) на облачную (много серверов — много сервисов) дает экономию примерно в 20-30% просто от самого факта использования.
— Снижение времени простоя. Теперь для обслуживания «железного» сервера нет необходимости останавливать работу размещенных на нем сервисов.
— Резкое ускорение специфических для ИТ задач. Поднять новый сервер или скопировать работающий — дело минут, но никак не часов.
— Возможность при наличии соответствующих навыков кратковременно и очень резко увеличивать мощность какого-либо сервиса.

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

«Старые» облака (провайдер вам предоставляет один или несколько серверов, возможно объединяя их в одну сеть с вашей) стали называть IaaS (Infrastructure as a service). Инфраструктура как сервис. Легко понимаемая всеми ИТшниками модель. Яркий пример — Amazon

Вон та возможность резко увеличивать мощность (повторюсь, при наличии навыков!) привела к следующему варианту облаков: PaaS (Platform as a service). Платформа как сервис. Пример — Azure. Суть простая. Берет провайдер толковых спецов, которые настраивают какой-либо сервис как надо. А потом продает этот сервис вам. Скажем, у вас есть веб-сайт, на который приходит 1000 человек в день. Ваши маркетологи, продавцы и прочие товарищи что-то такое замутили, что к вам внезапно пришло 100000 человек. Обычно веб-сайт в таких случаях тупо умирает под нагрузкой. В случае PaaS правильно настроенный сервис начинает поднимать для внезапно свалившейся нагрузки еще сервера. Десять, сто, тыщу. В общем пока не переварит весь поток. А потом точно так же берет и «убивает» ставшие ненужными сервера. В итоге все довольны: пользователи увидели ваш сайт, а не сообщение о недоступности, вы получили новые заказы, а провайдер — деньги.

Очень это понравилось маркетологам и они придумали SaaS (Software as a service) или программа как сервис. Оно очень похоже на PaaS, но про отдельный сервис. Скажем, вам нужен почтовый сервер. Можно сказать админу, он купит сервер, настроит его … А можно пойти к провайдеру и купить доступ к его почтовому серверу. Если у вас в компании 100 человек, так и купите кусочек провайдерского сервера на 100 человек. А провайдер пусть уже сам мучается с антивирусами, антиспамами и прочей фигней. Яркий пример — Office 365.

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

Думаете это кого-то остановило? Неа, просто стали продавать старое под новым соусом.

И для резюме нужно подвести итоги. Сравним их с привычной всем «своей серверой»

Преимущества:
— Быстрота развертывания. При наличии денег на карточке можно получить полностью готовый сервер или сервис за десятки минут. Причем в стране на выбор.
— Более высокая доступность. У провайдеров просто больше возможностей это обеспечить.
(ТОЛЬКО для частных облаков) — Более низкая стоимость обслуживания

Недостатки:
— Более высокая стоимость обслуживания. На данный момент — в 1,5-2 раза дороже. За тренд надо платить.
(для всех КРОМЕ частных облаков) — Полная потеря контроля за вашими данными. Что бы там не писали маркетологи в пресс-релизах и зазывалках, данные из облака очень легко (по сравнению с классической схемой) могут быть взяты без возможности какого-либо контроля с вашей стороны. Люди, которые имеют доступ к физическим серверам, всего лишь люди.

Тут обычно возникает мысль про то, что я (в смысле автор) ничего не понимаю. Ведь если «облака» стоят дороже, то почему ими пользуются? Люди же не настолько глупые …

Но где можно «выиграть в облаках», я напишу в другой раз. Вдруг никому не надо и я только зря клавиатуру терзал? 🙂

Добавляем гламура

Решил вылечить очередную родовую болезнь Дрыня: не фиксирующиеся крышки бензобаков. Быть «лопоухим» как-то не комильфо, все-таки не запорожец ..

Для лечения этой болезни на просторах сети я нашел аж целых четыре рецепта:

— Врезать замок.
— Высверлить крепление пружинной пластины и подогнуть ее. Потом прикрепить ее обратно.
— Ближе к оси крышки приделать дополнительную пружину.
— Заменить резиновый демпфер болтом и на крышку прицепить магнит.

После сборки часов для тещи у меня остались шикарные неодимовые магниты. Я убрал резинку, вкрутил на ее место болтик (М5 или М6 — не помню), шлепнул на крышку магнит … Да, крышка теперь держится хорошо, но звук, с которым она закрывается … Этакий «бам с жестяным скрежетом и дребезгом». Попытка смягчить звук путем наклеивания нескольких слоев изоленты не удалась: просто добавилось «причмокивание». Вроде бы и так пойдет, но машина-то для удовольствия, а на каждой заправке слушать этот дребезг с чмоканьем не хочу. На виброизоляцию крышки я был морально и материально не готов, поэтому вернул все в первоначальное состояние.

Сел думать. Пошерстил интернет. Взапно озарило: кто сказал, что магниты могут быть только прямоугольными или квадратными? Цилиндрические тоже есть!

Мухой в магазин, где закупил кучку цилиндрических магнитов диаметром 4мм и длиной от 3 до 6 мм. Пригодятся.

Из магазина к машине на примерку. У меня получилось, что «сверху» от крепления до дверцы 9мм, а «снизу» — 10мм.

Десять раз примеряю и клею!

20131215_153616

20131215_153630

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

Получилось просто изумительно: крышка закрывается, потом с легким таким стуком фиксируется. Куда там дверцам всяких майбахов и ройсов … Доволен.