• Не работает NAT на MikroTik — один из вариантов

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

    Так и вышло. Почему-то слетели настройки NAT Connection Tracking. В интерфейсе по пути -> IP -> Firewall -> Connections -> Tracking есть вот такая таблица. Хорошо, что был другой MikroTik, на котором можно было подглядеть. Вот так она должна выглядеть.

    Как оно могло слететь — ума не приложу, я точно сюда не лазил.

  • ThinkPad T430, i3840QM, Linux и перегрев

    Обладаю я великолепнейшим ноутбуком Lenovo ThinkPad T430. Сделал апгрейд, установив максимально возможный процессор Core i7 3840QM, а у него TDP 45W против штатных 35 и он вырубался под тяжёлой нагрузкой.

    Спустя 4 месяца дождался с Алиэкспресса улучшенную систему охлаждения от версии с дискретной видеокартой. Отличаются отдельным ушком.

    Shopee Malaysia | Free Shipping Across Malaysia

    Стало лучше, но при очень большой нагрузке в док-станции с двумя мониторами он всё равно отрубался, несмотря на хорошую дорогую термопасту. И тут я стал гуглить и обнаружил великолепный интерфейс к ACPI, позволяющий управлять вентилятором, и выяснил, что штатно система при высокой температуре крутит вентилятор на 5400 rpm, хотя может быть 5900. 500 оборотов это не в тапки пысать! Если выдать команду в файл-устройство:
    # echo level 7 > /proc/acpi/ibm/fan
    то выяснится, что скорость вентилятора будет 5400 оборотов. Чтобы выжать максимум, надо выдать команду
    # echo full-speed >/proc/acpi/ibm/fan

    Для этого есть демон thinkfan.

    1. Устанавливаем thinkfan из штатных репозиториев:
      # apt-get install thinkfan
      Дописываем опцию для модуля ядра thinkpad в файл /etc/modprobe.d/thinkpad_acpi.conf
      options thinkpad_acpi fan_control=1
      и перезагружаемся.
    2. Пишем конфиг /etc/thinkfan.conf. Первая строка — откуда брать температуру, вторая группа записей — первая цифра это номер уровня скорости вентилятора (0-7), вторая — минимальное значение, при котором уходить на предыдущий, третья — максимальное, при котором уходить на следующий.
    hwmon /sys/devices/virtual/thermal/thermal_zone0/hwmon0/temp1_input
    (0, 0, 55)
    (1, 48, 60)
    (2, 50, 61)
    (3, 52, 63)
    (4, 56, 65)
    (5, 59, 66)
    (7, 63, 87)
    ("level full-speed", 85, 131072)
    

    3. Строковое значение не даст thinkfan запуститься с ошибкой:
    мар 11 22:41:41 remotehost thinkfan[7825]: Invalid fan level string. This check can be disabled by using DANGEROUS mode.
    поэтому нужно дописать опцию -D в /etc/default/thinkfan. Получится вот так:
    DAEMON_ARGS="-q -D"
    4. Заставляем Thinkfan стартовать вместе с системой и запускаем его:
    # systemctl enable thinkfan
    # systemctl start thinkfan

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

    Кстати говоря, можно спокойно играться с диапазонами, скажем, выключив вентилятор до 60-65 градусов вообще. А зачем он?
    Например, с помощью такого профиля:

    (0,	0,	65)
    (1,	60,	70)
    (2,	65,	72)
    (3,	70,	75)
    (4,	73,	80)
    (5,	78,	85)
    (7,	83,	87)
    ("level full-speed",	85,	131072)
    


  • Присвоить названия нескольким ОС AstraLinux на одном компьютере

    На компьютере установлено несколько систем AstraLinux. Нужно как-то различать их в меню grub, чтобы грузить нужную. При этом крайне желательно обойтись без ручного редактирования файла /boot/grub/grub.cfg, который будет перезаписан после установки новой системы, например.

    Делаем следующее:

    1. Присваиваем всем файловым системам метку:
    # e2label /dev/sda1 ASTRA1
    # e2label /dev/sda2 ASTRA2

    2. Правим два файла. Первый /etc/grub.d/10_linux, строка 136. Меняем

      echo "menuentry '$(echo "$title" | grub_quote)' ${CLASS} \$menuentry_id_option 'gnulinux-$version-$type-$boot_device_id' {" | sed "s/^/$submenu_indentation/"

    на

      echo "menuentry '$(echo "$title ($(e2label `blkid -U $boot_device_id`))" | grub_quote)' ${CLASS} \$menuentry_id_option 'gnulinux-$version-$type-$boot_device_id' {" | sed "s/^/$submenu_indentation/"

    Второй — /etc/grub.d/30_os-prober, строка 297. Меняем

    menuentry '$(echo "$title" | grub_quote)' --class gnu-linux --class gnu --class os \$menuentry_id_option 'osprober-gnulinux-$LKERNEL-${recovery_params}-$boot_device_id' {

    на

    menuentry '$(echo "$title ($(e2label $DEVICE))" | grub_quote)' --class gnu-linux --class gnu --class os \$menuentry_id_option 'osprober-gnulinux-$LKERNEL-${recovery_params}-$boot_device_id' {

    3. Вызываем update-grub.

    На выходе имеем в grub.cfg что-то такое:

    menuentry 'AstraLinuxCE GNU/Linux, with Linux 4.15.3-1-generic (на /dev/nvme0n1p6) (ASTRA1)' --class gnu-linux --class gnu --class os $menuentry_id_option 'osprober-gnulinux-/boot/vmlinuz-4.15.3-1-generic--a009ed5b-4c18-4235-9baa-a711f5443472' {

    Единственный нюанс — нужно это делать либо в каждой Астре, либо обновлять Grub только из одной.