2018-04-22

Замена диска FreeNAS

Имеем: FreeNAS 9.0 + raidz / zfs + geli шифрование.
Один из дисков массива начал серьёзно сбоить.
Ещё один на очереди - но пока тфу-тфу-тфу.
Потребовалось заменить диск с пониманием того, что вводится и зачем это делается.
Из коробки через веб интерфейс не получилось правильно добавить новый диск в массив.
Может оно и можно, но как-то страшненько стало потерять весь массив.
Пошаговая инструкция для себя - ну может кому ещё понадобится.

Итак.

1. Находим отказавший винт и заменяем его новым.
Оказалось не так просто - WD Green просто не имеют лампочки активности (внезапно).
Решение: Получил через smartctl -a /dev/{ada3} серийный номер и вытаскивая винты один за другим искал его по этикеткам.
Предложение: записать сразу серийные номера дисков в корзине до их монтажа и прилепить на бумажке. Индикация активности есть в разъёме питания (pin 11) но нужно тоже как-то дорабатывать.

2. Логинимся на сервер и размечаем диск в GPT.
Этот этап сделался "сам" через графический интерфейс пока ковырялся с попытками замены через gui.
Делается элементарно командой:
gpart create -s GPT {ada1}
3. Разбираемся с шифрованием.
Надо зашифровать новый диск в системе geli теми же ключами и паролем, что и остальной массив.
Тут нужно понимать следующие вещи.
Основные настройки FreeNAS лежат в sqlite3 базе данных /data/freenas-v1.db
Посмотрите из консоли содержимое таблиц:
sqlite3 /data/freenas-v1.db .dump storage_%
Файлы ключей защищены паролем и лежат в папке: /data/geli/{KEY-GUID}.key
{KEY-GUID} можно посмотреть в табличке: storage_volume

Системное шифрование FreeBSD управляется утилитой geli
Диски для монтирования берут в папке: /dev/gptid/{GUID}
И перечислены в табличке: storage_encrypteddisk

3.1. Создаём файлик {passfile} например в папке /tmp с паролем на массив (иначе придётся вводить его много-много раз).
Заходим в папку /dev (чтобы автодополнение GUID работало).
3.2. Для нового диска инициализируем:
geli init -K /data/geli/{KEY-GUID}.key -J {pass-file} gptid/{GUID}

PS: Ключ -b указывать не нужно, иначе у раздела появится флаг BOOT и он будет требовать ввода пароля при загрузке. Чтобы снять флаг, если его поставили: geli config -B gptid/{GUID}
3.2. Подключаем все шифрованные диски, последовательно для всех имеющихся:
geli attach -k /data/geli/{KEY-GUID}.key -j {pass-file} gptid/{GUID}
Появятся расшифрованные диски: /dev/gptid/{GUID}.eli

4. Добавляем в таблицу настроек (см. п.3) упоминания о шифровании диска:
sqlite3 /data/freenas-v1.db
INSERT INTO "storage_encrypteddisk" VALUES(1,{seq-num},'gptid/{guid}',{disk-id});
{disk-id} можно посмотреть в таблице storage_disk

5. Запускаем zpool:
zpool import {poolname}
Если сбоит монтирование из-за readonly файловой системы:
zfs set mountpoint=/mnt/Pool Pool
zfs mount -a
6. Добавляем запасной диск:
zpool add spare {Pool} gptid/{newgid}.eli
(PS: не нужно, можно сразу делать replace)
Смотрим состояние массива:
zpool status
и заменяем отказавший:
zpool replace {Pool} {dead-id} gptid/{newgid}.eli
Ждём окончания ресильверинга (можно сразу после загрузки zpool в п. 5) удаляем ненужное:
zpool detach {Pool} {dead-id}

2017-04-14

Криптопро и экспорт ключей. Или воюем с OID 1.2.840.113549.1.12.1.80

Немного поковырялся с экспортом ключей и шифрованием гост.
Собрал openssl 1.1.1 с внешней (теперь) библиотекой engine gost.

В perl использую Digest::GOST::Cryptopro  и Crypt::GOST_PP. (Модуль от 2001 года Crypt::GOST не собирается. К тому же там нет кузнечика 2015 года - только Магма 89).

Итак, суть проблемы. Экспорт ключей из хранилища крипто-про через штатные средства системы делает нечитаемые openssl pkcs#12/p12/pfx.
Через утилитку P12FromGostCSP.exe лиссисофта (инфотекса) делаются (вроде) читаемые.

Генерируем через КриптоАРМ самоподписанный сертификат и импортируем его в хранилище.
Экспортируем через P12FromGostCSP в p12.pfx и успешно импортируем в Fox-XCA. После чего сохраняем из xca приватный ключ в нешифрованном PEM файле.

Для изучения проблемы удобно пользоваться ASN.1 Viewer и соответственно все манипуляции с ключами ведём только в бинарном DER формате (который на самом деле ASN.1 - в любом случае нам PEM/Base64 "обвязка" ни к чему).

Нашёл даже ещё более удобный онлайн сервис чтобы приводить асн1/сертификаты в JSON вид: http://gostcrypto.com/tool-syntax.html

Вот сам секретный ключ:
    0 30  228: SEQUENCE {
    3 06    9:  OBJECT IDENTIFIER id-tc26-gost-3410-12-512-paramSetA (1.2.643.7.1.2.1.2.1)
   14 06    8:  OBJECT IDENTIFIER id-tc26-gost3411-12-512 (1.2.643.7.1.1.2.3)
   24 04   64:  OCTET STRING
             :   28 a1 3c 57 05 eb 32 9d b6 e7 ab c4 09 88 e1 74
             :   ca b3 df 19 35 bc 75 8a ea c0 da 35 08 bc ef dc
             :   02 91 7d d9 ef 0f e0 41 1e d1 9f 73 94 33 98 bb
             :   30 e9 9c 8b e0 d3 40 37 c8 52 e5 8d 50 ae 54 8d
   90 04    8:  OCTET STRING
             :   61 99 e9 f6 2d 67 fb d8
  100 04  128:  OCTET STRING
             :   5a da 7d 4e 4d 7a 24 6c 12 83 b0 57 9f b7 9f ca
             :   b8 4b b0 ee 64 60 41 5c 18 5d 42 7f 8c c2 fb 88
             :   d5 d7 23 52 17 5e 9c 31 30 e3 6a 8e f1 e4 85 b9
             :   38 10 bf 97 2a 01 12 b5 0a 8b 6e 5c aa 01 01 db
             :   c6 4b 1f 83 2c 79 3a 03 67 a2 59 25 24 3a 42 54
             :   fc a5 c7 53 5b a5 d0 56 89 9b a4 b6 f2 1d 66 28
             :   e9 db 35 23 d8 31 1b 37 88 fc fc c1 0f 09 58 e5
             :   32 0a b3 71 e9 2a 56 ec 92 74 ab ad f4 27 e4 77
             : }
Первый блоб у нас секретная часть ключа, второй блоб непонятно (рабочая точка кривой?, секретная?),
последний блоб - публичный ключ. Его видно в сертификатах и легко вытащить программно.

Итого наш "секрет" имеет размер 64 байта (512 бит).
Будем пробовать его вытаскивать certutil.

Вот что мы видим для криптопро PFX:



{    version: 3,
    authSafe: {
        contentType: "data",
        content: [
            0x30, 0x82, 0x04, 0xa3, 0x30, 0x82, 0x01, 0xca, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d,
            0x01, 0x07, 0x01, 0xa0, 0x82, 0x01, 0xbb, 0x04, 0x82, 0x01, 0xb7, 0x30, 0x82, 0x01, 0xb3, 0x30,
            0x82, 0x01, 0xaf, 0x06, 0x0b, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x0c, 0x0a, 0x01, 0x02,
            0xa0, 0x81, 0xd4, 0x30, 0x81, 0xd1, 0x30, 0x1c, 0x06, 0x0a, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d,
            0x01, 0x0c, 0x01, 0x03, 0x30, 0x0e, 0x04, 0x08, 0xf1, 0xc8, 0xaf, 0xf2, 0x7f, 0xbd, 0x6a, 0xe1,
            0x02, 0x02, 0x07, 0xd0, 0x04, 0x81, 0xb0, 0xc2, 0x1c, 0x25, 0xa3, 0xe0, 0x75, 0xca, 0xf4, 0xab,
            0xf5, 0xc6, 0xe9, 0x34, 0xb9, 0x33, 0x30, 0xfd, 0xdf, 0xca, 0xc0, 0x45, 0x18, 0x81, 0x4e, 0x50,
            0xcf, 0xa6, 0xe2, 0x73, 0xf6, 0x2b, 0xf3, 0xd8, 0x42, 0xc5, 0x06, 0xef, 0xbd, 0xcc, 0x4a, 0x95,
            0xbe, 0xb9, 0x9d, 0x40, 0xeb, 0xb5, 0x5b, 0xed, 0x4e, 0xd5, 0xa0, 0xbc, 0x0a, 0xc0, 0x60, 0x7e,
            0xc2, 0xaa, 0x8f, 0xf3, 0x7b, 0x2b, 0xd9, 0x1b, 0xc7, 0x53, 0x8d, 0x33, 0x06, 0x7a, 0x75, 0x27,
            0xe2, 0xf1, 0xee, 0xb9, 0xb9, 0xfe, 0xc7, 0xb1, 0xea, 0x15, 0x38, 0xc5, 0xc2, 0x8a, 0xf3, 0xad,
            0x07, 0x18, 0x93, 0xad, 0x99, 0x4f, 0x1d, 0xb6, 0xe2, 0x25, 0x54, 0x91, 0xf6, 0x0e, 0x34, 0xed,
            0xea, 0x38, 0x6e, 0x17, 0xdd, 0x96, 0x01, 0xec, 0x0e, 0x36, 0xa4, 0xac, 0xf5, 0xbe, 0xd1, 0x08,
            0x1b, 0xef, 0x95, 0x8f, 0x47, 0x93, 0x1d, 0xdd, 0xc1, 0x88, 0x4f, 0x58, 0xa6, 0x34, 0xef, 0x17,
            0xf5, 0xb4, 0x82, 0x89, 0x83, 0xf0, 0xa7, 0xb0, 0xff, 0x93, 0x08, 0x97, 0x94, 0x71, 0xf5, 0x2a,
            0x9d, 0x22, 0x0b, 0x44, 0x51, 0x60, 0xf0, 0x1e, 0xf0, 0x8d, 0x92, 0x2b, 0x4c, 0xb6, 0x25, 0x66,
            0x1a, 0x23, 0xf1, 0x8a, 0x9f, 0xb8, 0x50, 0x31, 0x81, 0xc8, 0x30, 0x13, 0x06, 0x09, 0x2a, 0x86,
            0x48, 0x86, 0xf7, 0x0d, 0x01, 0x09, 0x15, 0x31, 0x06, 0x04, 0x04, 0x01, 0x00, 0x00, 0x00, 0x30,
            0x19, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x09, 0x14, 0x31, 0x0c, 0x1e, 0x0a,
            0x00, 0x54, 0x00, 0x65, 0x00, 0x73, 0x00, 0x74, 0x00, 0x31, 0x30, 0x81, 0x95, 0x06, 0x09, 0x2b,
            0x06, 0x01, 0x04, 0x01, 0x82, 0x37, 0x11, 0x01, 0x31, 0x81, 0x87, 0x1e, 0x81, 0x84, 0x00, 0x43,
            0x00, 0x72, 0x00, 0x79, 0x00, 0x70, 0x00, 0x74, 0x00, 0x6f, 0x00, 0x2d, 0x00, 0x50, 0x00, 0x72,
            0x00, 0x6f, 0x00, 0x20, 0x00, 0x47, 0x00, 0x4f, 0x00, 0x53, 0x00, 0x54, 0x00, 0x20, 0x00, 0x52,
            0x00, 0x20, 0x00, 0x33, 0x00, 0x34, 0x00, 0x2e, 0x00, 0x31, 0x00, 0x30, 0x00, 0x2d, 0x00, 0x32,
            0x00, 0x30, 0x00, 0x31, 0x00, 0x32, 0x00, 0x20, 0x00, 0x53, 0x00, 0x74, 0x00, 0x72, 0x00, 0x6f,
            0x00, 0x6e, 0x00, 0x67, 0x00, 0x20, 0x00, 0x43, 0x00, 0x72, 0x00, 0x79, 0x00, 0x70, 0x00, 0x74,
            0x00, 0x6f, 0x00, 0x67, 0x00, 0x72, 0x00, 0x61, 0x00, 0x70, 0x00, 0x68, 0x00, 0x69, 0x00, 0x63,
            0x00, 0x20, 0x00, 0x53, 0x00, 0x65, 0x00, 0x72, 0x00, 0x76, 0x00, 0x69, 0x00, 0x63, 0x00, 0x65,
            0x00, 0x20, 0x00, 0x50, 0x00, 0x72, 0x00, 0x6f, 0x00, 0x76, 0x00, 0x69, 0x00, 0x64, 0x00, 0x65,
            0x00, 0x72, 0x30, 0x82, 0x02, 0xd1, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x07,
            0x01, 0xa0, 0x82, 0x02, 0xc2, 0x04, 0x82, 0x02, 0xbe, 0x30, 0x82, 0x02, 0xba, 0x30, 0x82, 0x02,
            0xb6, 0x06, 0x0b, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x0c, 0x0a, 0x01, 0x03, 0xa0, 0x82,
            0x02, 0x8e, 0x30, 0x82, 0x02, 0x8a, 0x06, 0x0a, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x09,
            0x16, 0x01, 0xa0, 0x82, 0x02, 0x7a, 0x04, 0x82, 0x02, 0x76, 0x30, 0x82, 0x02, 0x72, 0x30, 0x82,
            0x01, 0xde, 0xa0, 0x03, 0x02, 0x01, 0x02, 0x02, 0x08, 0x18, 0x9e, 0x42, 0x75, 0xf7, 0xe9, 0x7f,
            0x0b, 0x30, 0x0a, 0x06, 0x08, 0x2a, 0x85, 0x03, 0x07, 0x01, 0x01, 0x03, 0x03, 0x30, 0x22, 0x31,
            0x0b, 0x30, 0x09, 0x06, 0x03, 0x55, 0x04, 0x06, 0x13, 0x02, 0x52, 0x55, 0x31, 0x13, 0x30, 0x11,
            0x06, 0x03, 0x55, 0x04, 0x03, 0x1e, 0x0a, 0x04, 0x42, 0x04, 0x35, 0x04, 0x41, 0x04, 0x42, 0x00,
            0x31, 0x30, 0x1e, 0x17, 0x0d, 0x31, 0x37, 0x30, 0x34, 0x30, 0x36, 0x31, 0x30, 0x31, 0x30, 0x32,
            0x36, 0x5a, 0x17, 0x0d, 0x31, 0x38, 0x30, 0x34, 0x30, 0x36, 0x31, 0x30, 0x31, 0x30, 0x32, 0x36,
            0x5a, 0x30, 0x22, 0x31, 0x0b, 0x30, 0x09, 0x06, 0x03, 0x55, 0x04, 0x06, 0x13, 0x02, 0x52, 0x55,
            0x31, 0x13, 0x30, 0x11, 0x06, 0x03, 0x55, 0x04, 0x03, 0x1e, 0x0a, 0x04, 0x42, 0x04, 0x35, 0x04,
            0x41, 0x04, 0x42, 0x00, 0x31, 0x30, 0x81, 0xaa, 0x30, 0x21, 0x06, 0x08, 0x2a, 0x85, 0x03, 0x07,
            0x01, 0x01, 0x01, 0x02, 0x30, 0x15, 0x06, 0x09, 0x2a, 0x85, 0x03, 0x07, 0x01, 0x02, 0x01, 0x02,
            0x01, 0x06, 0x08, 0x2a, 0x85, 0x03, 0x07, 0x01, 0x01, 0x02, 0x03, 0x03, 0x81, 0x84, 0x00, 0x04,
            0x81, 0x80, 0x5a, 0xda, 0x7d, 0x4e, 0x4d, 0x7a, 0x24, 0x6c, 0x12, 0x83, 0xb0, 0x57, 0x9f, 0xb7,
            0x9f, 0xca, 0xb8, 0x4b, 0xb0, 0xee, 0x64, 0x60, 0x41, 0x5c, 0x18, 0x5d, 0x42, 0x7f, 0x8c, 0xc2,
            0xfb, 0x88, 0xd5, 0xd7, 0x23, 0x52, 0x17, 0x5e, 0x9c, 0x31, 0x30, 0xe3, 0x6a, 0x8e, 0xf1, 0xe4,
            0x85, 0xb9, 0x38, 0x10, 0xbf, 0x97, 0x2a, 0x01, 0x12, 0xb5, 0x0a, 0x8b, 0x6e, 0x5c, 0xaa, 0x01,
            0x01, 0xdb, 0xc6, 0x4b, 0x1f, 0x83, 0x2c, 0x79, 0x3a, 0x03, 0x67, 0xa2, 0x59, 0x25, 0x24, 0x3a,
            0x42, 0x54, 0xfc, 0xa5, 0xc7, 0x53, 0x5b, 0xa5, 0xd0, 0x56, 0x89, 0x9b, 0xa4, 0xb6, 0xf2, 0x1d,
            0x66, 0x28, 0xe9, 0xdb, 0x35, 0x23, 0xd8, 0x31, 0x1b, 0x37, 0x88, 0xfc, 0xfc, 0xc1, 0x0f, 0x09,
            0x58, 0xe5, 0x32, 0x0a, 0xb3, 0x71, 0xe9, 0x2a, 0x56, 0xec, 0x92, 0x74, 0xab, 0xad, 0xf4, 0x27,
            0xe4, 0x77, 0xa3, 0x81, 0xab, 0x30, 0x81, 0xa8, 0x30, 0x0e, 0x06, 0x03, 0x55, 0x1d, 0x0f, 0x01,
            0x01, 0xff, 0x04, 0x04, 0x03, 0x02, 0x01, 0xde, 0x30, 0x1d, 0x06, 0x03, 0x55, 0x1d, 0x25, 0x04,
            0x16, 0x30, 0x14, 0x06, 0x08, 0x2b, 0x06, 0x01, 0x05, 0x05, 0x07, 0x03, 0x02, 0x06, 0x08, 0x2b,
            0x06, 0x01, 0x05, 0x05, 0x07, 0x03, 0x04, 0x30, 0x1d, 0x06, 0x03, 0x55, 0x1d, 0x0e, 0x04, 0x16,
            0x04, 0x14, 0xff, 0x31, 0x79, 0xbb, 0xc3, 0xb0, 0xc7, 0x48, 0x3d, 0xac, 0x64, 0x38, 0xce, 0x06,
            0x56, 0x55, 0xc9, 0x81, 0xc7, 0x88, 0x30, 0x47, 0x06, 0x03, 0x55, 0x1d, 0x23, 0x04, 0x40, 0x30,
            0x3e, 0x80, 0x14, 0xff, 0x31, 0x79, 0xbb, 0xc3, 0xb0, 0xc7, 0x48, 0x3d, 0xac, 0x64, 0x38, 0xce,
            0x06, 0x56, 0x55, 0xc9, 0x81, 0xc7, 0x88, 0xa1, 0x26, 0xa4, 0x24, 0x30, 0x22, 0x31, 0x0b, 0x30,
            0x09, 0x06, 0x03, 0x55, 0x04, 0x06, 0x13, 0x02, 0x52, 0x55, 0x31, 0x13, 0x30, 0x11, 0x06, 0x03,
            0x55, 0x04, 0x03, 0x1e, 0x0a, 0x04, 0x42, 0x04, 0x35, 0x04, 0x41, 0x04, 0x42, 0x00, 0x31, 0x30,
            0x0f, 0x06, 0x03, 0x55, 0x1d, 0x13, 0x04, 0x08, 0x30, 0x06, 0x01, 0x01, 0xff, 0x02, 0x01, 0x01,
            0x30, 0x0a, 0x06, 0x08, 0x2a, 0x85, 0x03, 0x07, 0x01, 0x01, 0x03, 0x03, 0x03, 0x81, 0x81, 0x00,
            0x5a, 0x9b, 0x83, 0x59, 0x72, 0x6b, 0x99, 0xcb, 0xfd, 0x76, 0x62, 0xea, 0xfd, 0x90, 0xf1, 0xd5,
            0x30, 0x73, 0x77, 0x71, 0x46, 0xd6, 0xeb, 0x57, 0x39, 0xbc, 0x58, 0x61, 0x9e, 0x4b, 0x2c, 0x80,
            0xf9, 0xca, 0xe6, 0x62, 0xef, 0x36, 0xa4, 0x9e, 0xd0, 0x00, 0xb7, 0xd5, 0xcf, 0xf0, 0xed, 0x23,
            0x09, 0xc1, 0x93, 0xf8, 0xde, 0x85, 0x71, 0x23, 0x94, 0xc3, 0xb2, 0xe4, 0x88, 0x24, 0xa4, 0x36,
            0x68, 0x64, 0x17, 0x0e, 0x31, 0x1b, 0xae, 0x16, 0x4a, 0x24, 0xad, 0x98, 0xda, 0x12, 0x53, 0x06,
            0x97, 0xab, 0x46, 0x61, 0x28, 0xe9, 0xcf, 0x3d, 0x4e, 0xfd, 0xdd, 0x3f, 0x55, 0xbb, 0x96, 0x43,
            0xcf, 0x01, 0x8c, 0x61, 0x4f, 0xbb, 0xd7, 0x67, 0x25, 0xb2, 0x46, 0xd4, 0x00, 0xbb, 0x95, 0x64,
            0x5e, 0xf2, 0x40, 0xb0, 0x23, 0xc4, 0xc3, 0xc6, 0xd5, 0x14, 0xd2, 0x48, 0xbb, 0xa2, 0xde, 0x12,
            0x31, 0x15, 0x30, 0x13, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x09, 0x15, 0x31,
            0x06, 0x04, 0x04, 0x01, 0x00, 0x00, 0x00
        ]
    },
    macData: {
        mac: {
            digestAlgorithm: {
                name: "SHA-1",
                id: "sha1"
            },
            digest: [
                0xa8, 0xc4, 0xab, 0x31, 0x0c, 0xa5, 0x5c, 0x38, 0xda, 0xd4, 0xf6, 0x9e, 0xb7, 0x8a, 0x05, 0xc6,
                0xe5, 0xc8, 0xbd, 0x41
            ]
        },
        macSalt: [
            0xaa, 0xbf, 0x9e, 0xa1, 0xb4, 0x1b, 0x04, 0x44, 0x02, 0x34, 0x2e, 0x8f, 0xc7, 0xa3, 0x99, 0x75,
            0xfc, 0x79, 0xef, 0x91
        ],
        iterations: 2000
    }
}

Версия контейнера 3, затем идёт блоб данных, затем секция HMAC контрольной суммы.
КС на алгоритме SHA-1, видим соль, количество итераций, и саму сумму.
Чуток исследований и получаем следующий алгоритм проверки суммы:

use v5.10;
use Digest::SHA qw/hmac_sha1 sha1/;
use Encode qw/encode/;
use utf8;

sub unhex($){my $d=shift;$d=~s/[^0-9a-fA-F]//g;pack'H*',$d}
sub tohex($){my $d=uc unpack 'H*',shift;$d=~s/../$& /g;chop $d;$d}
$salt=unhex '70 FA F5 FD AB EE 39 0F 1F CE 34 B8 3F 87 17 A2 D2 11 25 75';
$rounds=2000;
$ver=3;
$pass='1234Ё';
$pass=encode('UCS-2BE', $pass."\0");
$data=((pack'C',$ver) x 64) . substr($salt x 4, 0, 64) . substr($pass x 16, 0, 64);
say "ToHash:",tohex $data;
for (my $i=0;$i<$rounds;$i++){$data=sha1($data)}
say "Hmac_Key:",uc unpack'H*', $data;

$crc=unhex 'a8, 0xc4, 0xab, 0x31, 0x0c, 0xa5, 0x5c, 0x38, 0xda, 0xd4, 0xf6, 0x9e, 0xb7, 0x8a, 0x05, 0xc6,
                0xe5, 0xc8, 0xbd, 0x41';
$blob=unhex '';
my $crc1=hmac_sha1($blob, $data);
say "Data is: ".($crc eq $crc1? "Valid": "Invalid");

Но это пока не проблема.
Проблема внутри блоба. Посмотрим его отдельно.
http://gostcrypto.com/tool-asn1.html

OBJECT IDENTIFIER pkcs8ShroudedKeyBag (1.2.840.113549.1.12.10.1.2)
[0] {
 SEQUENCE {
  SEQUENCE {
   OBJECT IDENTIFIER pbeWithSHAAnd3-KeyTripleDES-CBC (1.2.840.113549.1.12.1.3)
    SEQUENCE {
      OCTET STRING   f1 c8 af f2 7f bd 6a e1
      INTEGER 2000
    }
  }
  OCTET STRING
             :          c2 1c 25 a3 e0 75 ca f4 ab f5 c6 e9 34 b9 33 30
             :          fd df ca c0 45 18 81 4e 50 cf a6 e2 73 f6 2b f3
             :          d8 42 c5 06 ef bd cc 4a 95 be b9 9d 40 eb b5 5b
             :          ed 4e d5 a0 bc 0a c0 60 7e c2 aa 8f f3 7b 2b d9
             :          1b c7 53 8d 33 06 7a 75 27 e2 f1 ee b9 b9 fe c7
             :          b1 ea 15 38 c5 c2 8a f3 ad 07 18 93 ad 99 4f 1d
             :          b6 e2 25 54 91 f6 0e 34 ed ea 38 6e 17 dd 96 01
             :          ec 0e 36 a4 ac f5 be d1 08 1b ef 95 8f 47 93 1d
             :          dd c1 88 4f 58 a6 34 ef 17 f5 b4 82 89 83 f0 a7
             :          b0 ff 93 08 97 94 71 f5 2a 9d 22 0b 44 51 60 f0
             :          1e f0 8d 92 2b 4c b6 25 66 1a 23 f1 8a 9f b8 50
   }
 }

Иногда экспортируется вот в таком формате: pbeWithSHAAnd3-KeyTripleDES-CBC
Но чаще вот в этом:
   65 06   11:           OBJECT IDENTIFIER pkcs8ShroudedKeyBag (1.2.840.113549.1.12.10.1.2)
   78 a0  219:           [0] {
   81 30  216:            SEQUENCE {
   84 30   36:             SEQUENCE {
   86 06   10:              OBJECT IDENTIFIER pbeUnknownGost (1.2.840.113549.1.12.1.80)
   98 30   22:              SEQUENCE {
  100 04   16:               OCTET STRING
             :                d0 c5 eb df 99 b7 b7 82 7c e0 b1 a6 7f a7 57 10
  118 02    2:               INTEGER 2000
             :              }
             :             }
  122 04  175:             OCTET STRING, encapsulates {
  125 82    5:              [2]
             :               d5 12 ea 73 dc
             :             }
             :            }

pbeUnknownGost: OID=1.2.840.113549.1.12.1.80


Суть алгоритма в следующем. Генерируется 16-байтная соль.
В данном случае SALT=d0 c5 eb df 99 b7 b7 82 7c e0 b1 a6 7f a7 57 10
Количество итераций ROUNDS=2000=0x7C0
Берётся пароль, кодировка UCS-2LE.

use Digest::GOST::CryptoPro qw(gost);
$salt="\x11" x 16;$rounds=0x7D0;$pass='1';$pass=encode('UCS-2LE', $pass); $key=$pass;for (my $i=1;$i<=$rounds;$i++){$key=gost($key.$salt.pack('n',$i))}

Полученный ключ используется как
1) ключ шифрования для экспорта приватного из криптопровайдера и 
2) ключ шифрования блоба от криптопровайдера алгоритмом гост89.
Encrypt_Gost89(D, IV=>"\x11" x 16, Key=>"\x22" x 32);
То есть для расшифровки надо сначала расшифровать блоб симметричным алгоритмом
Гост89, KEY=$key, IV=$salt, MODE=CFB
А затем что-то сделать с ключом, чтобы расшифровать транспортную кодировку
криптопровайдера ALG_XXX_EXPORT.
Да, да. Ключ дважды зашифрован - от провайдера идёт зашифрованный секретный ключ,
благо "пароль" мы уже знаем, а потом его ещё раз шифрует certutil.
Алгоритм транспортного шифрования для "новых" ключей (после 2012 года)
CALG_PRO12_EXPORT 0x6621.

Старые Гост89 ключи и сеансовые ключи могут шифроваться CALG_SIMPLE_EXPORT 0x6620.
Ключи до 2012 года также могут быть зашифрованы CALG_PRO_EXPORT 0x661F.
Посмотрим, что у нас есть.
После расшифровки контейнера получаем такую структуру:

Try1:
07 20 00 00 42 AA 00 00 4D 41 47 31 40 00 00 00 
30 81 85 30 7D 04 08[B6 4C 7D F7 03 3B FB A1]
30 48 04 40[53 43 86 06 ED 3E 98 B2 11 46 1C 3A E3 60 72 42 B2 34 5C 7F 3A FB D4 E8 45 BF 51 92 34 21 66 BE 27 81 B7 71 25 C3 A1 03 B0 48 23 02 2F 99 A7 D2 A7 A0 76 EE 9C ED FE 1A A1 F5 A9 EC 26 62 AB 58]
04 04[24 CE 0F 03]A0 27 03 02 05 A0 A0 21 06 08 2A 85 03 07 01 01 06 02 30 15 06 09 2A 85 03 07 01 02 01 02 01 06 08 2A 85 03 07 01 01 02 03 04 04[B5 13 07 5C]

SALT=B6 4C 7D F7 03 3B FB A1
DATA=53 43 86 06 ED 3E 98 B2 11 46 1C 3A E3 60 72 42 B2 34 5C 7F 3A FB D4 E8 45 BF 51 92 34 21 66 BE 27 81 B7 71 25 C3 A1 03 B0 48 23 02 2F 99 A7 D2 A7 A0 76 EE 9C ED FE 1A A1 F5 A9 EC 26 62 AB 58
CRC1=24 CE 0F 03
CRC2=B5 13 07 5C

Try2:
07 20 00 00 42 AA 00 00 4D 41 47 31 40 00 00 00 
30 81 85 30 7D 04 08[B0 FF 35 17 58 46 51 5D]
30 48 04 40[7E 72 A9 41 D9 83 52 F2 FE 93 4C 68 3C 55 0B 2F E8 34 93 3C 54 2F 9C 54 7D 6B AF C5 66 D5 20 7F A1 EC 44 6E 1D 2F C6 FA 4E FA A9 C3 A4 A8 E5 5D B2 62 3E E1 60 9B 8D 64 83 EC 46 6B 82 24 B5 8F]
04 04[28 33 16 9D]A0 27 03 02 05 A0 A0 21 06 08 2A 85 03 07 01 01 06 02 30 15 06 09 2A 85 03 07 01 02 01 02 01 06 08 2A 85 03 07 01 01 02 03 04 04[2E 89 9F 22]

Вначале структуры видны 16 байт заголовка, после чего идёт ASN.1
Опять видим соль (8 байт), данные (64 байта) и пара 4-байтных чисел (имитовставки или кс).
В заголовке видны цифры:
0x2007 - видимо сигнатура заголовка и заодно год создания стандарта структуры :)
CALG_DH_GR3410_2012_512_SF  = 0AA42h    ; Идентификатор алгоритма обмена ключей по Диффи-Хеллману на базе закрытого ключа пользователя.
Открытый ключ получается по ГОСТ Р 34.10 2012 (512 бит).

GR3410_1_MAGIC   = 3147414Dh            ; Признак ключей ГОСТ Р 34.10-94 и ГОСТ Р 34.10-2001.
040h = размер секретного ключа (64 байта).

Внутри ASN.1 нас дополнительно посылают на OID:
1.2.643.7.1.1.6.2
1.2.643.7.1.2.1.2.1
1.2.643.7.1.1.2.3

to be continued...

2015-10-30

GDB Android

Опять. Пара недель и забылось как отлаживать андроид :)

1. На андроиде.
gdbserver --attach `pidof evil.proc` :5039

2. На pc.
В папке с библиотеками, которые будут отлаживаться:
gdb libgame.so
target remote tcp:lg:5039
handle SIG33 nostop noprint
handle SIGSEGV nostop
info functions MD5::
break *0xa08badec
commands
x/s $r1
cont
end

x/i $pc

2015-08-07

АТОМНАЯ БОМБА. Доклад группы работников Посольства, посетивших Хиросима

тт. Сталину, Берия, Маленкову, Микояну + мне.
22.XI.45г.

ПОСОЛЬСТВО СССР
В ЯПОНИИ.

АТОМНАЯ БОМБА

(Материалы о последствиях применения атомной бомбы в Хиросима и Нагасаки; описания наших очевидцев и данные японской прессы).

Сентябрь 1945г.

1.     ПОЯСНЕНИЯ К СБОРНИКУ.
В данном сборнике помещены материалы о последствиях применения американцами атомной бомби в японских городах Хиросима и Нагасаки.
Посольством СССР в Токио была командирована группа сотрудников для осмотра и ознакомления на месте с послед­ствиями взрыва атомной бомбы в г. Хиросима (Япония). Сотрудникам удалось лично осмотреть место и результаты взрыва этой бомбы, беседовать с местным населением и оче­видцами, посетить госпиталь, в котором находились на излечении люди, пострадавшие от действия взрыва атомной бомбы. Все виденное и слышанное вместе со своими личными впечатлениями эти сотрудники изложили в специальном крат­ком обзоре, помещаемом в настоящем сборнике.
Вторая группа сотрудников Посольства и Советской Военной миссии в Токио посетила г. Нагасаки с целью оз­накомления с последствиями применения там атомной бомбы.
В составе группы был также кинооператор Союзкинохроники, который заснял на кинопленку место взрыва атомной бомбы и разрушения, причиненные этим взрывом. Доклад о результатах осмотра Нагасаки оформляет и должен представить из Токио генерал-майор Воронов.
Посольством собраны и переведены на русский язык наиболее значительные статьи из японской прессы об атомной бомбе. Переводы этих статей также помещены в настоящем сборнике.
Основное из доклада и газетных статей изложено в кратком резюме, помещенном в начале сборника.

Посол  Малик



АТОМНАЯ БОМБА.
(Доклад группы работников Посольства, посетивших Хиросима).

Атомная бомба к вызванные ею разрушения произвели огромное впечатление на население Японии. О ней упоминается в императорском рескрипте и официальных заявлениях японского правительства, как об одной из причин капитуляции Японии. Поскольку о ней говорится как о непосредственной причине поражения Японии, то естественно, что ее разрушительная сила и длительность действия после разрыва всячески преувеличиваются прессой. Народная молва подхватывает сообщения прессы, искажает их и иногда доводит до абсурда. Распространился даже слух, что и в настоящее время появление людей в районе разрыва атомной бомбы сопряжено с опасностью для жизни. Неоднократно приходилось слышать и от американцев, и от японцев, что после посещения районов, подвергшихся воздействию атомной бомбы, женщины теряют способность к деторождению, а мужчины заболевают импотенцией.
Эти разговоры подогревались радиопередачами из Сан- Франциско, в которых говорилось, что в районах разрыва атомной бомбы ничто живое не может существовать в течение семидесяти лет.
Характерно, что наряду с конкретными и правдивыми сведениями, японская печать не только не опровергала эти сообщения, а, наоборот, подхватывала их и распространяла. Возможно, что здесь преследовалось две цели: во-первых, оправдать безоговорочную капитуляцию невозможностью бороться против этого ужасного оружия и, во-вторых, помешать массовым поездкам населения в Хиросима и Нагасаки для розысков родных, близких и знакомых.
Не доверяя всем этим слухам и сообщениям и поставив перед собой задачу лично ознакомиться с действием атомной бомбы, группа сотрудников Посольства в составе корреспондента ТАСС Варшавского, бывшего, исполняющего обязанности военного атташе Романова и сотрудника морского аппарата Кикенина 13 сентября выехала в Хиросима и Нагасаки. Настоящий сжатый очерк ограничивается записью бесед с местным населением и пострадавшими и кратким изложением личных впечатлений, без каких-либо обобщений и выводов.
Группа сотрудников Посольства прибыла в Хиросима на рассвете 14 сентября. Непрерывно шел сильный дождь, что крайне мешало осмотру местности и, главное, мешало сделать фотоснимки. Железнодорожная станция и город уничтожены в такой степени, что негде даже было укрыться от дождя. Начальник станции и его сотрудники приютились в наскоро сколоченном сарае. Город представляет из себя выжженную равнину с возвышающимися 15-20 остовами железобетонных зданий.
На расстоянии полукилометра от станции мы встретили старую японку, которая вылезла из землянки и начала рыться в пожарище. На вопрос, в каком месте упала атомная бомба, старуха ответила, что произошел сильный блеск молнии и огромной силы удар, в результате чего она упала и потеряла сознание. Поэтому она не помнит, где упала бомба и что произошло потом.
Пройдя дальше метров 100, мы увидели подобие навеса и поспешили укрыться там от дождя. Под навесом мы обнаружили спящего человека. Он оказался пожилым японцем, строящим хижину на месте пепелища своего дома. Он рассказал следующее:
6-го августа около 8 часов утра в Хиросима было снято угрожаемое положение. Через 10 минут над городом появился американский самолет и одновременно с этим произошел удар молнии, за которым последовал сильный взрыв. Людей обожгло лучами, они падали и умирали. Погибло много народа. Затем возникли пожары. Был ясный день и с моря дул ветер. Пожар распространялся повсюду и даже против ветра.
Далее он сказал, что бомба упала на расстоянии 1,5 - 2 км. от железнодорожной станции. Это же самое утверждали и другие жители.
На вопрос, каким образом он остался жив, находясь дома, который расположен примерно на расстоянии 1-1,5 км. от места падения бомбы, старик ответил, что как-то случилось, что он не был задет лучами, но дом его сгорел, ибо повсюду свирепствовал пожар.
В настоящее время, сказал он, жить здесь безопасно. На окраинах города в землянках ютится несколько десятков тысяч человек. Было опасно первые 5-10 дней. В первые дни, заметил он, люди, пришедшие оказывать помощь пострадавшим, погибли. Погибла даже рыба в воде на небольшой глубине. Растения начинают оживать. Я, сказал японец, возделал огород и ожидаю, что скоро начнутся всходы.
И действительно, наперекор всем утверждениям, мы видели, как в различных местах начинает зеленеть трава и даже на некоторых обгоревших деревьях появляются новые листья.
После этого мы осмотрели здание полицейского управления. Оно, как и все железобетонные здания с железобетонными потолками и полами, уцелело. Характерно, что стекла вместе с выбитыми рамами со всех четырех сторон летели вовнутрь здания. Потолок выпучило вверх.
Находившийся в этом здании полицейский сказал нам, что внутри помещения сгорели изделия из эбонита, но большого пожара в здании не было. По его словам, бомба упала в районе армейского плаца на расстоянии полутора километров от вокзала.
Район действия атомной бомбы имеет в радиусе 6-8 км на расстоянии 6-7 км. от ст. Хиросима до ст. Кои мы не видели ни одного непострадавшего в той или иной степени здания. Как правило, это небольшие японского типа деревянные домики с черепичной крышей. В непосредственной близости от ст. Хиросима они полностью разрушены и сгорели. Дальше идут частичные разрушения, а на расстоянии 5-6 км. разрушены крыши или же приведена в беспорядок черепица. На всем расстоянии сосны, бамбук и другая растительность опалена и приобрела коричнево-бурую окраску. В некоторых местах она опалена сильнее, в других - слабее, и есть участки, совершенно не затронутые лучами. Это дает основание предположить, что энергия бомбы излучалась не сплошной массой, а пучками, в результате чего остались непораженные участки. Этим, по-видимому, объясняется и тот факт, что одни люди получали ожоги, а другие их не получали, хотя они находились в непосредственной близости от пострадавших. Это относится только к участкам, значительно удаленным от места разрыва бомбы. На участке же непосредственного воздействия бомбы в радиусе до одного км. уничтожено все живое. Опрошенные нами японцы говорили, что звук разорвавшейся бомбы был слышен на большом расстоянии. По пути в Хиросима ехавший с нами лейтенант сказал, что он слышал звук разрыва и блеск молнии с расстояния 50 км. находясь в Ивакуни. Начальник станции Миядзимагути в 30 км. от Хиросима заявил, что, когда он шел на пароход к пристани Миядзима, то увидел молнию и почувствовал прикосновение теплой струи к щеке и укол.
Одному из членов нашей группы удалось посетить больницу красного Креста в Хиросима. Она помещается в полуразрушенном здании и в ней содержатся пострадавшие от атомной бомбы. Там лежат обожженные и получившие другие ранения и среди них больные, доставленные через 15-20 дней после раненая. В этом двухэтажном здании находится до 80 больных. Они находятся в антисанитарном состоянии. У них главным образом, ожоги открытых частей тела. Многие получили только сильные ранения стеклом. У обожженных преимущественно ожоги лица, рук и ног. Некоторые работали только в трусах и кепках, поэтому у них обожжена большая часть тела. Тело обожженных тёмно-коричневого цвета с открытыми ранами. Все они обинтованы бинтами и намазаны белой мазью, напоминающей цинковую. Глаза не повреждены.
Сильно пострадавшие с обожженными конечностями не потеряли способности двигать пальцами ног и рук. Многие ранены стеклами, у них глубокие порезы до кости. У лиц, подвергшихся воздействию с непокрытой головой, выпали волосы.
По выздоровлении на лысых черепах начинают вырастать волосы отдельными пучками. Больные имеют бледновосковой цвет лица. Один пострадавший мужчина лет 40-45 находился на расстоянии 500 м. от места падения бомбы. Он работал на каком-то предприятии электрокомпании. У него осталось до 2700 белых кровяных шариков в одном кубическом см. крови. В больницу он пришел сам и сейчас выздоравливает.
Нам не удалась установить причины, что его могло спасти на таком близком расстоянии от места разрыва бомбы. Удалось только установить, что он работал с электрооборудованием. У него ожогов нет, но вылезли волосы. Ему дают витамины В и С и овощи. Отмечается увеличение белых кровяных шариков.
На железнодорожной станции наше внимание привлек человек с повязкой на руке, на которой было написано: помощь пострадавшим. Мы обратились к нему с вопросом, и он сказал, что он врач по специальности уха, горла и носа и приехал в Хиросима оказывать помощь пострадавшим от атомной бомбы. Этот японский врач по фамилии Фукухара сказал нам, что на Хиросима было сброшено три атомных бомбы с парашютами. По его словам, он лично видел три парашюта с расстояния в 1-2 км. Две неразорвавшихся бомбы, как утверждал врач, были подобраны военными и в настоящее время изучаются.
На место спасательных работ Фукухара прибыл на второй день. После того, как он выпил воды, у него начался понос. Другие заболели через полтора суток. Он сказал, что лучи атомной бомбы прежде всего вызывают изменение состава крови. В одном кубическом см. крови здорового человека, сказал врач, имеется 8000 белых кровяных шариков. В результате воздействия лучей атомной бомбы количество белых кровяных шариков уменьшается до 3000, 2000, 1000 и даже до 300 и 200. В результате сильное кровотечение из носа, горла, глаз и у женщин - маточное кровотечение. У пострадавших температура поднимается до 39, 40 и 41 градусов. После 3-4 дней больные, как правило, умирают. Для понижения температуры применяют сульфазол. При лечении пострадавших прибегают к переливанию крови, вводится также глюкоза и физиологический раствор. При переливании крови вводится до 100 гр. крови.
Раненые, эвакуированные с мест ранения, выздоравливают быстрей. Около Хиросима имеется две больницы для пострадавших: в Кусацу, где имеется 80 человек, и в Дзигодзен - 100 человек.
Пострадавшие, пившие воду или обмывавшиеся водой в районе падения бомбы в день ее разрыва, сказал далее врач, моментально умирали. В течение 10 дней после разрыва бомбы там опасно было работать: урановые лучи продолжали излучаться из земли. Сейчас пребывание в тех местах считается безопасным, сказал врач, но этот вопрос еще изучается. По его словам, защитная одежда против урановой бомбы - резина и всякий изолятор против электричества.
Во время нашего разговора с врачом к нему обратился старик-японец за советом. Он указал на еще не совсем зажившую обожженную шею и спросил, скоро ли она заживет. Врач осмотрел шею и сказал, что все в порядке. Старик рассказал нам, что в момент разрыва бомбы он упал и почувствовал острую боль. Сознание не потерял. Боль чувствовал и в дальнейшем вплоть до выздоровления.
По дороге в Нагасаки мы разговорились с двумя японскими студентами. Они нам рассказали, что одна девушка, родственница одного из них, через несколько дней после разрыва бомбы поехала в Хиросима узнать о своих близких. Спустя продолжительное время, 25 августа, она заболела, а через два дня, т.е. 27 августа, умерла.
В Нагасаки мы прибили 16 сентября. Погода снова нам не благоприятствовала: непрерывный дождь не позволил произвести фотосъемки.
Город Нагасаки разделен большой горой на две части: старый и новый город. Бомба была сброшена над новым городом, поэтому старый город разрушен значительно меньше, тем более, что распространению лучей атомной бомбы помешала гора.
В "Бич Хотэл", находящемся на расстоянии 8-10 км. от железнодорожной станции, мы опросили начальника полицейского участка, который рассказал нам следующее:
Атомная бомба была сброшена 9 августа около 10 часов утра на расстоянии 2-2,5 км. от вокзала. До этого над городом появилось соединение американских самолетов, была объявлена боевая тревога. Затем был отбой боевой тревоги объявлено угрожаемое положение. Рабочие приступили к работе. Над городом появились два самолета противника, но на это не обратили внимания. В это время в городе созывались соседские группы "тонари гуми" для обсуждения контрмер против атомной бомбы, учитывая опыт в Хиросима.
Бомба упала на расстоянии 8 км. от "Бич Хотеля". В отеле выбиты стекла и кое-где разрушена крыша. Из квартала, расположенного поблизости от "Бич Хотеля", сказал полицейский, многие пошли в Нагасаки, чтобы узнать о судьбе своих родственников. Почти все они умерли.
Объезжая город на автомобиле, мы забросали японского шофера вопросами. Он сказал нам, что в первый день спасательных работ не велось, поскольку повсюду свирепствовал огонь. Работы начались только на второй день. В ближайшем к разрыву бомбы районе никто не остался в живых. Погибли военнопленные, главным образом филиппинцы, работавшие на военном заводе "Мицубиси Хейки", и японские рабочие на заводе "Нагасаки Сейко".
Атомная бомба, сказал шофер, упала в районе университетского госпиталя (район Ураками). Остов госпиталя сохранился. Все больные госпиталя вместе с обслуживающим персоналом, врачами и директором погибли.
Газгольдер, находящийся примерно на расстоянии 400 метров от места падения бомбы, смят и приплюснут к земле.
Два других газгольдера, расположенные на расстоянии 1-1,5 км. взорвались. Первый корпус завода "Нагасаки", находящийся на расстоянии 1200-1300 м. от места падения бомбы, сплюснут. Завод "Мицубиси Хейки" расположен дальше. От его корпусов остался голый железный каркас.
В районе падения бомбы сильный трупный запах: много трупов еще не убрали из-под развалин и пожарища. Шофер сказал нам, что были случаи, когда дети сидели на деревьях в листве и оставались в живых, а те, кто неподалеку играл на земле, погибли.
Вокзал уничтожен: он сгорел от пожаров. Начальник станции со своим штатом помещается на одной из платформ под навесом. Из числа сотрудников вокзала погибло только два человека - они были придавлены вагонами. Начальник станции в момент разрыва находился на вокзале и получил небольшой ожог левой части лица и уха. Он все время не прекращал работать и сейчас чувствует себя хорошо.

Большинство японцев отмечает, что бомба над Хиросима была сброшена на парашюте и разорвалась на расстоянии 500-600 метров от земли. В противоположность этому начальник санитарной службы пятого американского флота Спруенс командор Виллкаттс, с которым мы проделали обратный путь в Токио, утверждал, что атомные бомбы в Хиросима и Нагасаки сбрасывалась без парашютов. Он также отрицал всякую возможность случая, когда бы атомная бомба упала не разорвавшись. Он утверждал, что после разрыва бомбы в районе ее падения безопасно. По его мнению, японцы сильно преувеличивают эффективность атомной бомбы. Признаки заболевания, которые отмечал японский врач Фукухара, он подтверждает и считает правильными методы лечения.

2015-01-23

Ассиметричный роутинг

Есть локальный роутер "mine". Обеспечивает выход по ADSL до "интернета".
Есть внешний VPS сервер "sam". На ооочень жирном канале.
Есть "внутренний" VPN сервер в сети прова "bridge" - до которого трафик бесплатен - а с него уже практически бесплатен наружу - но канал чуток мелковат.

Схема подключений по впн:
mine --> bridge --> sam
   \------(<$$$)--------^

В обратном направлении от sam к mine трафик Сильно Платный - остальные каналы бесплатны в любых направлениях.

В первом приближении захотелось чтобы то, чтобы mine->sam шло "прямо" а обратно по пути sam->bridge->mine. Поддержание туннеля vpn идёт через udp на порт ХХХ, ip-адрес sam: SAM.

Sam знает роутинг до "внутренних" адресов сети mine через br.

Неплохие ссылки с картинкой по iptables:
http://www.iptables.info/en/structure-of-iptables.html
http://www.iptables.info/files/tables_traverse.jpg

Итак, правила роутинга:

ip -4 rule add from SAM fwmark 8/8 table 8
ip -4 rule add to   SAM fwmark 8/8 table 8
ip -4 route add default dev ppp0 table 8

("нормальный" дефолтный роутинг идёт через br/tap0)

iptables -A PREROUTING -t mangle -s SAM -p udp --sport XXX -j MARK --set-mark 8/8
iptables -A OUTPUT -t mangle -d SAM -p udp --dport XXX -j MARK --set-mark 8/8

А, ну и чтобы не было проблем с "марсианами" - делаем:

for i in /proc/sys/net/ipv4/conf/tap*/rp_filter;do echo 0 | sudo tee $i;echo $i;done

2014-06-27

Долгий логин через SSH

Победил давно достававший лаг в открытии ssh сессии на сервер Ubuntu 10.04.4 LTS через PuTTY.
2014-06-27 12:31:23 Trying Pageant key #0
2014-06-27 12:31:23 Sending Pageant's response
2014-06-27 12:31:23 Access granted
2014-06-27 12:41:04 Opened channel for session
2014-06-27 12:41:04 Requesting X11 forwarding
2014-06-27 12:41:04 X11 forwarding enabled
2014-06-27 12:41:04 Allocated pty (ospeed 38400bps, ispeed 38400bps)
2014-06-27 12:41:04 Started a shell/command
Между "Access granted" и "Opened channel for session" задержка стала уже почти 10 МИНУТ!
Причём это происходило только для первой открытой сессии ("утренней").
Повторное открытие сессий происходило почти мгновенно.

После авторизации по ключу (или паролю - не в ключах дело) - сессия не обрывается, но и приглашение консоли не появляется. В списке "w" сессии не появляется, сервис висит в состоянии:
sshd: root [priv]
Это не "UseDNS" фича - dns сервер работает нормально - и отключение этой опции в конфиге сервера не помогало. К тому же он влияет на задержку перед Access granted а не после.

Нашёл описание бага без решения в этом давно закрытом посте.

В итоге через strace нашёл где собака порылась (ведь даже штатно "быстрое" подключение давало задержку в этом месте 3-5 секунд). Увидел запуск кучи скриптов из папки
/etc/update-motd.d
Гугление привело сюда и сюда. Решение простое.
  1. Удалить проприетарщину (у меня не было)
    apt-get purge landscape-client landscape-common
  2. Закомментировать в файлах /etc/pam.d/login /etc/pam.d/sshd строки:
  3. session    optional   pam_motd.so
Собственно и всё. Самое обидное, что у меня было давно создан файлик ~/.hushlogin чтобы не получать этот motd :)

2014-02-15

Злой Хром

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

Опять давно нашёл - сделал и забыл как. А тут "новый" неиспорченный хром - и новомодный вид окошка. Итак.

1. Лезем на chrome://flags/ - находим такую опцию:

Включить расширенный API Живого поиска Mac, Windows, Chrome OS
Включение расширенного API Живого поиска, обеспечивающего более полную интеграцию с поисковой системой по умолчанию, включая обновленную страницу быстрого доступа, появление поисковых запросов и выпадающий список в омнибоксе, а также предварительный просмотр результатов Живого поиска по мере их ввода в омнибоксе. #enable-instant-extended-api
(даже хештег есть - можно в поиске набивать)

2. Ставим ОТКЛЮЧЕНО
3. Перезагружаем браузер
4. PROFIT