Настройка Unbound в ОС FreeBSD

Разрешаем запуск.

echo 'local_unbound_enable="YES"' >> /etc/rc.conf

Инициализируем первоначальную настройку.

# /etc/rc.d/local_unbound onesetup
Performing initial setup.
Extracting forwarders from /etc/resolv.conf.
original /var/unbound/forward.conf saved as /var/unbound/forward.conf.20150128.112451
/var/unbound/lan-zones.conf not modified
/var/unbound/unbound.conf not modified
/etc/resolvconf.conf not modified
original /etc/resolv.conf saved as /etc/resolv.conf.20150128.112451

/etc/resolv.conf
nameserver — IP адрес сервера имён. Сервера опрашиваются в порядке описания. Максимальное количество адресов — три.
search — список доменов для поиска с помощью hostname lookup. Обычно определяется доменом, в котором находится компьютер.
domain — домен, в котором находится компьютер.
options edns0 — Использовать Extension mechanisms for DNS .
Опции search и domain нельзя использовать совместно.

search localdomain
nameserver 127.0.0.1
options edns0

Содержимое файла

server:
         verbosity: 1            # вести журнал
         port: 53
         interface: 127.0.0.1                 # Интерфейс на котором будем слушать 53-й порт
interface: 192.168.37.1               #
         interface-automatic: no              # Определять интерфейсы автоматически мне не нужно
         outgoing-interface: 83.220.87.193  # ip адрес интерфейса, который подключен к интернет
         access-control: 192.168.1.0/24 allow
         access-control: ::1 allow
         do-ip4: yes
         do-ip6: no
         do-udp: yes
         do-tcp: yes
         username: unbound
         directory: /var/unbound
         chroot: /var/unbound
         pidfile: /var/run/local_unbound.pid
         auto-trust-anchor-file: /var/unbound/root.key
         hide-version: yes
include: /var/unbound/forward.conf
include: /var/unbound/lan-zones.conf
include: /var/unbound/control.conf
include: /var/unbound/conf.d/*.conf

Лог в отдельный файл — правим /etc/syslog.conf

!unbound
*.*                                             /var/log/unbound.log

Создадим лог файл.

touch /var/log/unbound.log

Ротация логов /etc/newsyslog

/var/log/unbound.log                    644  7     *    $D0   B    /var/run/local_unbound.pid

Пример файла зоны.

local-zone: "domain.net." static
        local-data: "domain.net. 86400          IN SOA ns.domain.net. noc.domain.net. 2015012815 86400 7200 604800 86400"
        local-data: "domain.net. 3600           IN NS           ns.nic.ru."
        local-data: "doamin.net. 3600           IN NS           ns0.nic.ru."
        local-data: "domain.net. 3600           IN NS           ns1.nic.ru."
        local-data: "domain.net. 3600           IN MX 10        mx01.domain.net."
        local-data: "domain.net. 3600           IN A            192.168.0.1"
        local-data: "www                        IN A            172.16.0.1"
        local-data: "mx1                        IN A            10.0.0.1"
        local-data: "mail                       IN CNAME        mx1"
        local-data: "smtp                       IN CNAME        mx1"
        local-data: "support                    IN A            1.2.3.4"

 

Источник: https://arsmx.ru/archives/767

Скрипт отправки сообщений из микротика в телеграм

:if ($leaseBound =1) do={
    # Variables
    :local Time [/system clock get time];
    :local Date [/system clock get date];
    :local Comment [/ip dhcp-server lease get value-name=comment number=[/ip dhcp-server lease find address=$leaseActIP]]
    :local DeviceName [/system identity get name];

    # START Send Telegram Module
    :local MessageText "\F0\9F\9A\B6  <b>$DeviceName: New DHCP client</b> %0D%0A <b>Name:</b> $"lease-hostname" %0D%0A <b>Comment:</b> [$Comment] %0D%0A <b>Interface:</b> $leaseServerName %0D%0A <b>IP:</b> $leaseActIP %0D%0A <b>MAC:</b> $leaseActMAC";
    :local SendTelegramMessage [:parse [/system script  get MyTGBotSendMessage source]]; 
    $SendTelegramMessage MessageText=$MessageText;
    #END Send Telegram Module

}  else={
:local DeviceName [/system identity get name];
# START Send Telegram Module when disconnect device
:local MessageText "\F0\9F\9A\AA <b>$DeviceName: Disconnect DHCP client</b> %0D%0A <b>Name:</b> $"lease-hostname" %0D%0A <b>Interface:</b> $leaseServerName %0D%0A <b>IP:</b> $leaseActIP %0D%0A <b>MAC:</b> $leaseActMAC";
:local SendTelegramMessage [:parse [/system script get MyTGBotSendMessage source]];
$SendTelegramMessage MessageText=$MessageText;
#END Send Telegram Module when disconnect device
}

Здесь полная инструкция по организации уведомлений в телеграмм. Читать далее «Скрипт отправки сообщений из микротика в телеграм»

Автоматическая настройка прокси через DHCP

Чтобы избежать трудоемкой ручной настройки прокси-сервера на всех компьютерах, телефонах и планшетах, настройка прокси-сервера может быть предоставлена автоматически через DHCP с помощью WPAD.

Для этой настройки необходимы следующие компоненты:

    1. DHCP-сервер, который объявляет параметр DHCP 252 с URL-адресом PAC файла (wpad.dat).
    2. Веб-сервер, который раздаёт файл wpad. dat
    3. Сам файл Wpad.dat(PAC), в котором определяется IP-адрес прокси-сервера

Читать далее «Автоматическая настройка прокси через DHCP»

К Glances через контроль температуры FreeBSD в Home Assistant

Glances — кроссплатформенная утилита системного мониторинга. Позволяет отслеживать состояние системы непосредственно на самом компьютере или удаленно. Для удаленного мониторинга имеет режим сервера, подключение происходит этой же утилитой в режиме клиента, или режим Web сервера, подключение происходит при помощи Web браузера. Доступная версия Glances на момент написания статьи была 3.1.5. Документацию можно почитать здесь. Читать далее «К Glances через контроль температуры FreeBSD в Home Assistant»

Telegram уведомления и управление Home Assistant

  • Создание нового бота в Telegram

Для взаимодействия нам потребуется создать бота. В Telegram через поиск находим бота @BotFather и отсылаем ему команду:

/newbot

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

В сообщении после успешного создания бота будет написан токен для доступа к HTTP API. Читать далее «Telegram уведомления и управление Home Assistant»

Мониторинг компа в Home Assistant

В Home Assistant есть специальная платформа под названием System Monitor с набором сенсоров для мониторинга локальной системы. System Monitor позволяет отслеживать загрузку и температуру процессора, загрузку оперативной памяти и диска, трафик на сетевых интерфейсах. Все описание взято на официальном сайте Home Assistant и применимо для систем семейства Unix/Linux/BSD. Читать далее «Мониторинг компа в Home Assistant»

Измеряем температуру в доме, выводим инфу на сайт

Дано: cc2531 usb плата с программатором, датчики температуры и влажности Sonoff SNZB-02
Задача: на FreeBSD организовать мониторинг температуры в доме.

Читать далее «Измеряем температуру в доме, выводим инфу на сайт»

Сторожевой пес Интернета

#!/bin/sh

#
# Watchdog: keep the Internet up and running.
#
# Phil Chadwick.  2015-11-18.
#
# $Revision: 1.15 $

# For use in root's crontab like this:
# */10 * * * * /etc/firewall/internet_watchdog

PATH="/bin:/usr/bin:/sbin:/usr/sbin"
export PATH

INTERNET_NIC=tun0	# The Internet link interface (e.g. ppp0)
MINUPSECS=1800		# Don't reboot unless uptime > MINUPSECS
REDIALWAIT=240		# Allow this many seconds to re-make the connection
SHUTMESSAGE="Rebooting to restart Internet"

# Ping targets (несвязанный список общедоступных хостов, которые отвечают на ping)
PT1=192.231.203.132	# resolv.internode.on.net
PT2=195.122.30.54	# google.com.au
PT3=104.25.239.31	# www.ozspeedtest.com
PT4=204.79.197.219	# bing.com.au
PING_TARGETS="$PT1 $PT2 $PT3 $PT4"

# Syslog configuration
LOGTAG=$(basename $0)
LOGPRI='local0.notice'

# See if we can ping anything on the Internet...
pingtest()
{
    for host in $PING_TARGETS
    do
	#debian#ping -q -n -c 1 -w10 $host >/dev/null 2>&1 && return 0
	#freebsd#ping -q -n -c 1 -t10 $host >/dev/null 2>&1 && return 0
	ping -q -n -c 1 -t10 $host >/dev/null 2>&1 && return 0
    done
    return 1
}

# Return uptime in seconds.  Tested on FreeBSD 13.0 only.  YMMV.
getuptime()
{
    uptime=${1:-$(uptime)}

    days=0
    hours=0
    minutes=0
    seconds=0

    echo "$uptime" | grep -q " day" && 
	days=$(echo "$uptime" | sed -e 's/.*up \([1-9][0-9]*\) day.*/\1/')
    if echo "$uptime" | grep -q "up.* [0-9][0-9]*:[0-9][0-9]*," 
    then
	hours=$(echo "$uptime" | sed -e 's/.*up.* \([0-9][0-9]*\):.*/\1/')
	minutes=$(echo "$uptime" | sed -e 's/.*up.*:\([0-9][0-9]*\),.*/\1/')
	seconds=0
    else
	echo "$uptime" | grep -q " hrs*" &&
	    hours=$(echo "$uptime" | sed -e 's/.*up.* \([0-9]*\) hr.*/\1/')
	echo "$uptime" | grep -q " mins*" &&
	    minutes=$(echo "$uptime" | sed -e 's/.*up.* \([0-9]*\) min.*/\1/')
	echo "$uptime" | grep -q " secs*" &&
	    seconds=$(echo "$uptime" | sed -e 's/.*up.* \([0-9]*\) sec.*/\1/')
    fi

    upseconds=$(((((((($days*24)+$hours)*60)+$minutes)*60)+$seconds)))
    echo $upseconds
}

# # pppd иногда выполняет атомарный повторный набор после того, как получает сообщение о зависании.
# Итак, если кажется, что ссылка недоступна, мы должны дать ей время вернуться.
n=0
while [ $n -lt $REDIALWAIT ]
do
    ifconfig $INTERNET_NIC 2>/dev/null | grep -q "UP[ ,].*RUNNING"
    [ $? -eq 0 ] && pingtest && exit 0
    sleep 1
    n=$((n+1))
done

# Похоже, интернет-соединение действительно не работает...

# Ниже приведен ряд сложных вопросов, связанных со сроками, которые необходимо решить.
# # Возможно, ваш интернет-провайдер вешает трубку каждый раз, когда мы звоним, из-за превышения квоты.
# # Итак, проверьте время безотказной работы и ничего не делайте, пока не истечет несколько минут.
# Кроме того, запуск и остановка ppp асинхронны, поэтому pppd умирает целую вечность,
# и вы должны дождаться, пока он погаснет, прежде чем перезапускать его; кроме того, мы не хотим
# перейдите в (быстрый) непрерывный цикл перезагрузки (следовательно, 15-минутное ожидание).

# Установите минимальную задержку перезагрузки, чтобы остановить цикл быстрой перезагрузки
#debian#upseconds=$(cut -d. -f1 </proc/uptime)
#freebsd#upseconds=$(getuptime)
upseconds=$(getuptime)
[ "$upseconds" -gt $MINUPSECS ] || exit 0
# Выход из системы, если мы уже запустили последовательность завершения работы.
if [ -f /run/systemd/shutdown/scheduled ]
then 
    cat /run/systemd/shutdown/scheduled
else
    #debian#ps -lef | grep shutdown
    #freebsd#ps auxw | grep shutdown
    ps auxw | grep shutdown
fi | grep -q "$SHUTMESSAGE" && exit 0

# We are now committed to a reboot (unless somebody intervenes manually).
logger -p "$LOGPRI" -t "$LOGTAG" "Internet not running"
service internet stop >/dev/null 2>&1
logger -p "$LOGPRI" -t "$LOGTAG" "Cowardly rebooting to re-start Internet"
shutdown -r +15 "$SHUTMESSAGE"

 

Микротик rb2001UiAs-2HnD-IN

openwrt-19.07.10-ar71xx-mikrotik-nand-large-squashfs-sysupgrade.bin

openwrt-19.07.10-ar71xx-mikrotik-vmlinux-initramfs-lzma.elf

Восстановление

1. Настройте DHCP-сервер с загрузкой по протоколу TFTP (установите на вашем компьютере статический IP диапазона 192.168.1.0/24). Обратите внимание, что файл initramfs должен находиться в каталоге, указанном командой.

 sudo dnsmasq -i eth0 --dhcp-range=192.168.1.100,192.168.1.200 \
 --dhcp-boot=openwrt-ar71xx-mikrotik-vmlinux-initramfs.elf \
 --включить-tftp --tftp-root=~/каталог/где/файл/находится/ \
 -d -u $USER -p0 -K --log-dhcp --bootp-dynamic

2. Подключите ПК к порту Ethernet 1.

3. Выключите маршрутизатор и удерживайте сброс при включении. Подождите 20 секунд, пока не появится файл, отправленный ПК. Отпустите сброс и оставайтесь подключенным к порту Ethernet, пока не увидите сообщение маршрутизатора об имени хоста Openwrt.

4. Подключите ПК к другому порту Ethernet.

5. Войдите в OpenWRT netboot

6. Обновите систему с помощью соответствующего файла Mikrotik sysupgrade.bin. (она либо 64-метровая, либо огромная. Вы можете выбрать нужную, открыв и прочитав номер детали на микросхеме tsop48. Но, это не должно иметь значения, если вы прошиваете не ту, здесь.)

Если вы допустили ошибку, повторите netboot и повторите попытку. На печатной плате рядом с кабелем питания есть UART, если сетевая загрузка работает, но по какой-то причине сбой обновления системы. Возможно, вам понадобится 64-миллиметровый образ, но загрузчик останется, чтобы устройство не было заблокировано, если используется неправильный sysupgrade.

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

Если вы видите ошибки ECC в UART (от 18 и более ранних версий. Была исправлена в 19.07), обратитесь к этому сообщению на форуме: https://forum.openwrt.org/t/ecc-errors-in-ubi-rb2011uias-2hnd-in-and-solution/16424/15

Пользователи сообщили, что несколько устройств повредили их flash при 2-м обновлении системы. В этом случае устройство можно использовать только в режиме сетевой загрузки. Смотрите: https://forum.openwrt.org/t/rb433-bad-sector-cannot-start-openwrt/71519/12

Для получения более подробной информации смотрите:

Источник: https://openwrt.org/toh/mikrotik/rb2011