🏠: Viacheslav

Путь к улучшению путём осмысления целого или автонастройка прокси-сервера на клиентских машинах

Хорошо спроектированная система обладает следующими признаками:

  • Обладает максимальным охватом всех возможных применений в рамках её предназначения
  • Управляется централизованно и имеет автоматические проверки и процедуры для минимизации влияния т. н. человеческого фактора
  • Имеет лаконичное и хорошо читаемое описание
  • Не требует большого количества исключений и их ручной настройки
  • Рационально использует ресурсы

Может быть, что-то ещё, но направление мысли, думаю, понятно. Применительно, предположим, к настройке подключения к интернету пользователей в организации — если централизованно вроде бы что-то и настроено, но при этом постоянно нужно что-то делать на пользовательских машинах, прописывать маршруты, ставить-снимать галки в свойствах браузера, делать резервирования в DHCP, разрешать прямой выход в интернет в обход прокси-сервера, просить сетевиков написать на шлюзе очередное правило для одной машины, при этом все эти 100500 изменений нигде не записаны и делаются бессистемно от случая к случаю; если в организации существуют дополнительные шлюзы, где всё открыто, потому что «надо работать и некогда разбираться» — это всё наводит на мысли, что система спроектирована как-то неправильно.

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

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

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

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

Выяснилось, что за автонастройку клиентов отвечает файл wpad.dat следующего содержания:

function FindProxyForURL(url, host)
{
    $NewProxy = "PROXY proxy.domain.ru:3128";

    if (isPlainHostName(host)) {return "DIRECT";}   
    if (isInNet(host, "10.1.0.0", "255.255.0.0")) {return "DIRECT";}
    if (dnsDomainIs(host,"localhost")) {return "DIRECT";}
    if (dnsDomainIs(host,"127.0.0.1")) {return "DIRECT";}

    if (dnsDomainIs(host,"domain.ru")) {return "DIRECT";}
    if (dnsDomainIs(host,"support.domain.ru")) {return "DIRECT";}
    if (dnsDomainIs(host,"test-sps.domain.ru")) {return "DIRECT";}
    if (dnsDomainIs(host,"portal.domain.ru")) {return "DIRECT";}
    if (dnsDomainIs(host,"portal.domain.ru")) {return "DIRECT";}

    if (shExpMatch(url, "http:*")
    ||  shExpMatch(url, "https:*")
    ||  shExpMatch(url, "ftp:*")
    ||  shExpMatch(url, "gopher:*"))
    return $NewProxy;

    return $NewProxy;
     }

Не принимая в расчёт общую неструктурированность файла, дубль записи и явную копипасту раздела с url (кто вообще сегодня знает про gopher?), возникает вопрос — а почему просто не пустить напрямую весь локальный .domain.ru? «А потому что есть ресурсы в domain.ru, опубликованные на внешних IP-адресах», — ответили мне. Дело в том, что и внешний, и внутренний домен названы одинаково. Что же делать? Полез в интернет и через некоторое время обнаружил отличное описание файла конфигурации с примером, как раз подходящим в моей ситуации:

function FindProxyForURL(url, host) {
  if (
    (isPlainHostName(host) || dnsDomainIs(host, ".mozilla.org")) &&
    !localHostOrDomainIs(host, "www.mozilla.org") &&
    !localHostOrDoaminIs(host, "merchant.mozilla.org")
  ) {
    return "DIRECT";
  } else {
    return "PROXY w3proxy.mozilla.org:8080; DIRECT";
  }
}

Красивая логика — на одну ступенечку сложнее, и уже такая мощь! Пускаем напрямую имена без указания домена или весь домен, но не конкретные имена в этом же домене. Больше того, можно указывать цепочку прокси-серверов — в данном примере, если не будет доступен w3proxy.mozilla.org, то идти напрямую.

Так, логика ясна. И сразу напрашивается решение эти опубликованные вовне ресурсы локального домена собирать из DNS автоматически — они ведь могут добавляться туда — и на этой основе формировать файл автонастройки. Тут уже приходит на помощь любимый Powershell:

# Records in domain.ru zone
$domainRecs = Get-DnsServerResourceRecord -ZoneName "domain.ru" -computerName "srv-dc3" |select hostname,recordtype,@{n='IPAddr';e={$_.RecordData.ipv4address.IPAddressToString}},@{n='Alias';e={$_.RecordData.hostnamealias -replace "\.domain\.ru\."}}
# External A records
$domainARecsExt = $domainRecs |? {$_.IPAddr -match "^186" -and $_.recordtype -eq "A"}
# CNAMEs which correspond external A records
$domainCnameRecsExt = foreach ($aRec in $domainARecsExt.hostname) {
$domainRecs |? {$_.recordtype -eq "CNAME" -and $_.alias -eq "$aRec"}
}
# all external names list
$domainAllExtRecs = ($domainARecsExt + $domainCnameRecsExt).hostname -replace "$",".domain.ru" |sort

# PAC file
$pac1 = "function FindProxyForURL(url, host) {
  if (
    (isPlainHostName(host) ||
    dnsDomainIs(host, `".domain.ru`") ||
    isInNet(host, `"10.0.0.0`", `"255.0.0.0`") ||    
    isInNet(host, `"127.0.0.0`", `"255.0.0.0`") ||
    localHostOrDomainIs(host, `"localhost`")) `&`&
"

# form the list for PAC
$total = $domainAllExtRecs.count
$C = 1

$pac2 = $domainAllExtRecs |% {
    if ($c -lt $total) {
    "    !localHostOrDomainIs(host, `"$_`") `&`&"
    }
    else {
    "    !localHostOrDomainIs(host, `"$_`")"
    }
$c++
}

$pac3 = "
  ) {
    return `"DIRECT`";
  } else {
    return `"PROXY proxy.domain.ru:3128`";
  }
}
"
# Combine all pieces and dump
$pac1 + ($pac2 -join "`n") + $pac3 |Out-File ~\Documents\proxy.pac -Encoding default

По желанию можно прикрутить сверку и оповещение на почту, если что-то убрали или добавили в DNS (в примере адреса начинаются на 186). Вот итоговый файл:

function FindProxyForURL(url, host) {
  if (
    (isPlainHostName(host) ||
    dnsDomainIs(host, ".domain.ru") ||
    isInNet(host, "10.0.0.0", "255.0.0.0") ||
    isInNet(host, "127.0.0.0", "255.0.0.0") ||
    localHostOrDomainIs(host, "localhost")) &&
    !localHostOrDomainIs(host, "8mar.domain.ru") &&
    !localHostOrDomainIs(host, "wolf.domain.ru") &&
    !localHostOrDomainIs(host, "wolf1.domain.ru") &&
    !localHostOrDomainIs(host, "wolf3.domain.ru") &&
    !localHostOrDomainIs(host, "wolfapi.domain.ru") &&
    !localHostOrDomainIs(host, "docs.domain.ru") &&
    !localHostOrDomainIs(host, "old.domain.ru") &&
    !localHostOrDomainIs(host, "xonix.domain.ru") &&
    !localHostOrDomainIs(host, "services.domain.ru") &&
    !localHostOrDomainIs(host, "test.xonix.domain.ru") &&
    !localHostOrDomainIs(host, "test.services.domain.ru") &&
    !localHostOrDomainIs(host, "web.domain.ru") &&
    !localHostOrDomainIs(host, "www.8mar.domain.ru") &&
    !localHostOrDomainIs(host, "www.docs.domain.ru") &&
    !localHostOrDomainIs(host, "www.domain.ru") &&
    !localHostOrDomainIs(host, "www.xonix.domain.ru") &&
    !localHostOrDomainIs(host, "www.services.domain.ru")
  ) {
    return "DIRECT";
  } else {
    return "PROXY proxy.domain.ru:3128";
  }
}

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

А теперь уже можно заняться другими интересными вещами — отрезать назойливую телеметрию, засоряющую access.log, настраивать кэширование для того, чтобы каждый компьютер не лез в интернет за обновлением Google Chrome, а получал его с прокси-сервера, и так далее.

Конец велосезона - 2020

По совокупности факторов я решил закончить велосезон. Дорога стала больше испытанием, чем удовольствием: холодно, темно, ветрено, скорость передвижения снизилась, время поездок на работу из-за этого увеличилось до 2 часов в один конец, что делает их нецелесообразными, хотя технически ездить ещё вполне можно — дороги почти сухие и снег ещё не выпал.

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

Этот год с велосипедной точки зрения был очень удачным — погода была почти идеальной, лишь несколько недель выпало из-за дождей, а лето не было сильно жарким. Я проехал свыше 4200 км, а общий пробег на счётчике — почти 18200 км.

Это был пятый, можно сказать, юбилейный, сезон. Будем двигаться дальше.

Что сделал - 8

Ежемесячная автоматическая отсылка статистики правовой системы Консультант+

$t = get-date
$zip = "C:\Scripts\Consultant\Cons-Stat-$($t.ToShortDateString()).zip"
$consGuy = "email@mail.eu"

# compress the statistics folder and test archive (use Compress-Archive if possible)
& 'C:\Program Files\7-Zip\7z.exe' a "$zip" "K:\ADM\STS"
$test = & 'C:\Program Files\7-Zip\7z.exe' t "$zip"

# if archive succesfully created
if ($test -match "Everything is Ok") {
# send an email
$body = "<p>Добрый день!<br>
Высылаем статистику СПС Консультант по состоянию на $($t.ToLongDateString())</p>
<p><i>С уважением,<br>
Отдел ИТ<br>
АО "ЗАО"</i></p>
<p style=`"color:red;`">Это письмо создано автоматически, не отвечайте на него.</p>
"

Send-MailMessage -SmtpServer mail.domain.ru -From "robot@domain.ru" -To "$consGuy" -Cc "bulynkin@domain.ru" -Subject "АО ЗАО - Статистика СПС Консультант" -Body "$body" -Attachments "$zip" -Encoding UTF8 -bodyashtml

# wipe statistics folder
del K:\ADM\STS\* -Force -Confirm:$false
}

# if archive creation failed, send an alert
else {
Send-MailMessage -SmtpServer mail.domain.ru -From "robot@domain.ru" -To "bulynkin@domain.ru" -Subject "АО ЗАО - Статистика СПС Консультант" -Body "Ошибка отсылки статистики!" -Priority High -Encoding UTF8 -bodyashtml
}

Система видеоконференцсвязи Jitsi

Один центральный сервер + 5 серверов Jibri — это компонент для записи, пять штук нужно для пяти одновременных потоков. Дополнительно сделал автонастройку интерфейса через скрипт в кроне, чтобы после каждого обновления не прописывать заново название конторы, логотип и т. п. По уму, конечно, надо не плодить виртуальные машины, чтобы они пыхтели 24/7, а сделать какой-то оркестратор контейнеров, где работает только основной сервер и один Jibri, а при задействовании одного записывающего потока поднимался дополнительный контейнер с Jibri и так далее, т. е., система должна распухать и сдуваться динамически. Но это дело будущего, т. к. я пока не осилил контейнеризацию, а нахожусь в процессе освоения.

Все сервера Jibri пишут в свой локальный каталог. Чтобы не лазать по всем серверам в поисках записи — ведь неизвестно, какой именно будет писать ту или иную конференцию — я сделал автоматическое копирование с них на общую папку на Windows-сервере, и последующее автоудаление: с локальных серверов через 3 дня, а на Windows-сервере — через 2 недели.

Виртуализация старого веб-сервера на Ubuntu 8.04

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

Группы в AD на основании статуса сотрудника

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

Отчёт по пользователям, подключающимся по VPN

Оказалось, что в Powershell (точнее, в .NET) есть механизм генерации графиков, и помимо самого списка пользователей, в письмо вставляется почасовой график количества подключений, очень красиво.

Критерий выгрузки почтовых ящиков из Exchange

Раньше было так — если сотрудник не заходил в систему больше 180 дней, то ящик выгружался. Теперь поступило указание выгружать ящики только через месяц после увольнения сотрудников. Когда сотрудник пропадает из штатного расписания, генерируется команда на заполнение атрибута comment, от чего можно потом оттолкнуться:

Set-ADUser "CN=Петрова Светлана Викторовна,OU=1_Users,DC=domain,DC=ru" -replace `
@{'comment'="Сотрудник уволен 16.10.2020"}

И, наконец, самое вкусное —

Прокси-сервер на базе Squid с прозрачной аутентификацией через Kerberos, с управлением уровнем доступа через группы в AD + статистика

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

Мой подход состоит в том, чтобы иметь самую минимальную конфигурацию, которая выполняет поставленные задачи; максимально оставлять настройки по умолчанию, чтобы все настройки были по возможности осмысленными, было известно, что они конкретно делают, и документировать их. Иначе получается очередной чёрный ящик, который непонятно как работает, и через пару лет к нему становится страшно прикоснуться, потому что если он повалится, то мало того, что никто не знает, как он устроен и как его чинить и восстанавливать — никто иногда даже не знает, что он конкретно делает. В общем, классика отечественных ИТ, да и не только ИТ. Оказалось, что Kerberos не так страшен и Linux-системы довольно легко вяжутся с доменом Windows, что многие пакеты, описанные в интернет-статьях, не требуется ставить (например, Samba), либо они устарели. Но лично мне это стало понятно после двух недель напряжённой работы по разбору этих авгиевых конюшен текста и бесчисленных проб и ошибок. Не сказать, чтобы я создал идеальную конфигурацию — кое-что перекочевало из старой «до востребования», но это во всяком случае более безопасная и структурированная настройка по сравнению с тем, что было раньше.

Статистику тоже хотелось сделать красиво, генерировать списки пользователей и отделы автоматически. На старом прокси-сервере стоял LightSquid, его я и взял для этой цели. Номера отделов для отчётов по группам я сначала просто задумал генерировать скриптом, а потом подумал, что лучше брать эти номера из того же штатного расписания, и попросил коллегу-программиста 1С добавить в ежедневную выгрузку и номер подразделения. Прописав всем пользователям на этой основе атрибут departmentNumber в AD, я написал следующий скрипт на bash:

#!/bin/bash

realnamecfgUTF8="/var/www/html/stat/realname.cfg.utf8";
realnamecfg="/var/www/html/stat/realname.cfg";
groupcfgUTF8="/var/www/html/stat/group.cfg.utf8";
groupcfg="/var/www/html/stat/group.cfg";
rm -f $realnamecfgUTF8 $realnamecfg $groupcfgUTF8 $groupcfg && touch $realnamecfgUTF8 $realnamecfg $groupcfgUTF8 $groupcfg

kinit HTTP/proxy.domain.ru -k

for i in `ldapsearch -H ldap://vmws-dc1.domain.ru -b dc=domain,dc=ru -LLLQ -o ldif-wrap=no "(&(objectclass=person)(primaryGroupID=513)(!(samaccountname=*mailbox*))(!(UserAccountControl:1.2.840.113556.1.4.803:=2)))" sAMAccountName |grep 'sAMAccountName: ' |sed 's/sAMAccountName: //'`;
do
nameRaw=`ldapsearch -H ldap://vmws-dc1.domain.ru -b dc=domain,dc=ru -LLLQ -o ldif-wrap=no "(sAMAccountName=$i)" name |grep 'name:'`;
depRaw=`ldapsearch -H ldap://vmws-dc1.domain.ru -b dc=domain,dc=ru -LLLQ -o ldif-wrap=no "(sAMAccountName=$i)" department |grep 'department:'`;
depNum=`ldapsearch -H ldap://vmws-dc1.domain.ru -b dc=domain,dc=ru -LLLQ -o ldif-wrap=no "(sAMAccountName=$i)" departmentNumber |grep 'departmentNumber:' |sed "s/departmentNumber: //"`;

if [[ $nameRaw =~ '::' ]]
then
name=`echo $nameRaw |sed "s/name:: //" |base64 -d`
else
name=`echo $nameRaw |sed "s/name: //"`
fi

if [[ $depRaw =~ '::' ]]
then
dep=`echo $depRaw |sed "s/department:: //" |base64 -d`
else
dep=`echo $depRaw |sed "s/department: //"`
fi

loginLow=`echo $i |tr "[:upper:]" "[:lower:]"`
if [[ $depNum =~ [0-9] ]]
then
login=`echo "$loginLow@domain.ru"`
echo -e "$login\t$depNum\t$dep" >> $groupcfgUTF8
else
login=`echo "$loginLow"`
fi

#echo -e "$loginRaw\t$nameRaw\t$depRaw"
#echo -e "$login\t$name\t$dep"
#echo -e "$login\t$name\t$depNum\t$dep"

echo -e "$login\t$name" >> $realnamecfgUTF8

done

iconv -f utf-8 -t cp1251 -o $realnamecfg $realnamecfgUTF8
iconv -f utf-8 -t cp1251 -o $groupcfg $groupcfgUTF8

Перекодировка в cp1251 нужна для корректного отображения в браузере. Примерный вид статистики:

Доступ к статистике нужно было тоже ограничить, и это было сделано на той же самой базе Kerberos и basic-аутентификации + LDAP-авторизация. Для Apache2 существует два модуля аутентификации Kerberos — старый mod_auth_kerb, который описан во всех статьях, и новый mod_auth_gssapi. Конечно, хотелось пользоваться новым. В процессе настройки я немножко не разобрался и задал вопрос не в тему автору модуля, но в результате всё получилось. Теперь доступ к статистике имеют только те, кто входит в определённую группу в AD, и это очень удобно. Осталось только подать нагрузку на этот новый прокси-сервер, но это не вполне от меня зависит.

Починил стиральную машинку

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

Несмотря на то, что моей машинке Samsung WF6450N7W, судя по расшифровке серийного номера, в сентябре этого года стукнуло 12 лет, менять её на новую не хотелось, не говоря уже о стоимости такой внезапной замены. Работает она хорошо, и мне нравится её внешний вид — только кнопки, поворотная ручка выбора программ стирки, цифровое табло таймера и никаких попсовых ЖК-экранов и прочих побрякушек.

Я решил отремонтировать машинку самостоятельно по нескольким причинам — во-первых, это интересно, во-вторых, дешевле (если всё делать правильно), а в-третьих, и, наверное, это самое главное — хотелось сделать работу качественно. Повидал я достаточно «мастеров», которые делают свою работу тяп-ляп и за неадекватный ценник, и никакой гарантии, что в этот раз попадётся хороший добросовестный профессионал, у меня не было. Дополнительным аргументом к ремонту стал разборный бак — это гораздо более ремонтопригодный вариант по сравнению с баком клееным, который ставят в большинство современных недорогих стиральных машин.

На начальном этапе

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

Со снятой передней крышкой Бетонные балансиры Бак демонтирован Бак со шкивом, двигателем и амортизаторами

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

Посадочное место барабана Сальник после демонтажа

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

Общий вид барабана после демонтажа

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

Старые подшипники и импровизированное долото

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

Вид моего ремкомплекта, фото с ozon.ru

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

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

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

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

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

Герметик, старые и новые амортизаторы Кромка бака с нанесённым герметиком

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

Видео, где слышна разница между состоянием до ремонта и после.

Работает отлично, будем надеяться, что я всё сделал правильно и машинка будет служить ещё долго.

Смета:

  1. Ремкомплект бака — 926 руб.
  2. Амортизаторы — 600 руб.
  3. Поворотный ключ — 550 руб.
  4. Удлинитель для поворотного ключа — 462 руб.
  5. Набор торцевых головок — 419 руб.
  6. Герметик — 300 руб.
  7. Стяжки — 39 руб.

Итого — 3296 руб.

Список использованного видео:

Техобслуживание и совмещение маршрутов

Прошлая неделя была ударной в плане велопоездок. В среду, 29 июля, у меня неожиданно после полудня поломался интернет, провайдер сказал, что до шести вечера идут работы по модернизации сети, тем не менее, перерыв должен быть не больше 20 минут. Когда интернета не было уже часа четыре, я опять позвонил провайдеру, где мы выяснили, что интернета действительно нет не по моей вине, и мне сообщили, что мастер будет аж 3 августа! «Фигасе у них эс-эл-эй» — подумал я, после чего набрал номер другого провайдера, где договорился о подключении 1 августа, а через некоторое время мне перезвонили и сказали, что есть возможность сделать это 31 июля, на что я радостно согласился.

Всё это, конечно, хорошо, но фер-то ке? Работать не могу — интернета пока нет, надо бы с пользой потратить освободившееся время и съездить в веломастерскую, решить проблему стука при педалировании. Проблему я заметил сразу, когда возвращался 30 мая с ТО домой, но подумал — мало ли, разработается, может, с нова что-то постукивает. Но нет — тихий, мерный, но весьма раздражающий стук никуда не делся, и почти два месяца я проездил так. Дефект плавающий: то стучит, то нет.

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

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

Сегодня я решил добраться до устья Яузы, а потом — до конца набережной Москвы-реки, где далее мне нужно было разведать путь до м. «Волгоградский проспект» — этот маленький отрезок был единственным, который я знал нетвёрдо. Дальнейший путь был уже известен по поездкам в веломастерскую. Так как после прибытия на Волгоградский проспект я чувствовал себя довольно неплохо, сделал ещё пару крюков — в Кузьминский парк и вокруг Новокосино, собрав воедино разрозненные куски разных маршрутов, уже исследованных ранее.

3 ч 35 м, на счётчике 55,4 км

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