Шукати в цьому блозі

понеділок, 25 вересня 2023 р.

Як ввімкнути rc.local в Debian?

Якщо ви запускаєте дистрибутив Linux з використанням Systemd, то можете помітити, що при завантаженні системи інструкції з файлу /etc/rc.local не виконуються. Далі в статті йдеться про те як це виправити.

Якщо раптом при виконанні команди sudo systemctl status rc.local  побачите подібне повідомлення:
$ sudo systemctl status rc-local
○ rc-local.service - /etc/rc.local Compatibility
     Loaded: loaded (/lib/systemd/system/rc-local.service; static)
    Drop-In: /usr/lib/systemd/system/rc-local.service.d
             └─debian.conf
     Active: inactive (dead)
       Docs: man:systemd-rc-local-generator(8)
Або інше, відмінне від "Active: active", а sudo systemctl enable rc-local  видасть
$ sudo systemctl enable rc-local
The unit files have no installation config (WantedBy=, RequiredBy=, Also=,
Alias= settings in the [Install] section, and DefaultInstance= for template
units). This means they are not meant to be enabled using systemctl.
 
Possible reasons for having this kind of units are:
• A unit may be statically enabled by being symlinked from another unit's
  .wants/ or .requires/ directory.
• A unit's purpose may be to act as a helper for some other unit which has
  a requirement dependency on it.
• A unit may be started when needed via activation (socket, path, timer,
  D-Bus, udev, scripted systemctl call, ...).
• In case of template units, the unit is meant to be enabled with some
  instance name specified.
То можна виконати наступні інструкції, які мають виправити ситуацію:

$ echo "[Unit]
Description=/etc/rc.local Compatibility
ConditionPathExists=/etc/rc.local

[Service]
Type=forking
ExecStart=/etc/rc.local start
TimeoutSec=0
StandardOutput=tty
RemainAfterExit=yes
SysVStartPriority=99

[Install]
WantedBy=multi-user.target" | sudo tee /etc/systemd/system/rc-local.service > /dev/null
$ printf '%s\n' '#!/bin/bash' 'exit 0' | sudo tee -a /etc/rc.local
#!/bin/bash
exit 0
$ sudo chmod +x /etc/rc.local
$ sudo systemctl enable rc-local
Created symlink /etc/systemd/system/multi-user.target.wants/rc-local.service → /etc/systemd/system/rc-local.service.
$ sudo systemctl start rc-local.service
І отримати результат:
$ sudo systemctl status rc-local.service
* rc-local.service - /etc/rc.local Compatibility
     Loaded: loaded (/etc/systemd/system/rc-local.service; enabled; preset: enabled)
    Drop-In: /usr/lib/systemd/system/rc-local.service.d
             `-debian.conf
     Active: active (exited) since Mon 2023-09-25 13:38:53 EEST; 15min ago
    Process: 34112 ExecStart=/etc/rc.local start (code=exited, status=0/SUCCESS)
        CPU: 1ms

Sep 25 13:38:53 oghome systemd[1]: Starting rc-local.service - /etc/rc.local Compatibility...
Sep 25 13:38:53 oghome systemd[1]: Started rc-local.service - /etc/rc.local Compatibility.
За мотивами статті How to Enable /etc/rc.local with Systemd.

вівторок, 19 вересня 2023 р.

OpenOffice Calc - IPv4-адреса (з маскою) в число + маска

 Припустимо, що в стовпці A у нас знаходяться ip-адреси з маскою, в форматі: n.n.n.n/m

В стовпці B ми хочемо отримати десятичне число, яке відповідає ip-адресі n.n.n.n, а в стовпці C, відповідно, маску мережі m.

Дві формули.

Для стовпця B:

=VALUE(LEFT($A1;FIND(".";$A1)-1))*256^3+VALUE(MID($A1;FIND(".";$A1)+1;FIND(".";$A1;FIND(".";$A1)+1)-FIND(".";$A1)-1))*256^2+VALUE(MID($A1;FIND(".";$A1;FIND(".";$A1)+1)+1;FIND(".";$A1;FIND(".";$A1;FIND(".";$A1)+1)+1)-FIND(".";$A1;FIND(".";$A1)+1)-1))*256^1+VALUE(MID($A1;FIND(".";$A1;FIND(".";$A1;FIND(".";$A1)+1)+1)+1;FIND("/";$A1;FIND(".";$A1;FIND(".";$A1;FIND(".";$A1)+1)+1)+1)-FIND(".";$A1;FIND(".";$A1;FIND(".";$A1)+1)+1)-1))
Для стовпця C:
=VALUE(MID($A1;FIND("/";$A1)+1;FIND("/";$A1)-1))
Як результат, маємо щось накшталт:


За основу взято статтю [Solved] IP address sorting.

середа, 23 серпня 2023 р.

Поговоримо трохи про whois

Список AS що входять в as-set:

ASSET=AS-UKRHUB; whois -r ${ASSET} | awk '$1~/^members:/ && $2~/^AS[0-9]+/ { print $2 }'

AS які супроводжує mnt-by:

MNTBY=YZ42-RIPE-MNT; whois -r -i mnt-by ${MNTBY} -T aut-num | awk '$1~/^aut-num:/ { print $2 }'

Які IPv4-мережі анонсує AS?

AS=AS12593; whois -K -r -i origin ${AS} | awk '$1~/^route:$/ { print $2 }'

Які IPv6-мережі анонсує AS?

AS=AS12593; whois -K -r -i origin ${AS} | awk '$1~/^route6:$/ { print $2 }'

Отримати інформацію по організації AS:

AS=AS12593; whois -r $( whois -r ${AS} | awk '$1~/^org:$/ { print $2 }' )

Список діапазонів мереж які супроводжує mnt-by:

MNTBY=YZ42-RIPE-MNT; whois -r -i mnt-by ${MNTBY} -T inetnum | awk '$1~/^inetnum:$/ { print }'

Список IPv4-мережі які супроводжує mnt-by:

MNTBY=YZ42-RIPE-MNT; whois -r -i mnt-by ${MNTBY} -T route | awk '$1~/^route:$/ { print $2 }'

Список IPv6-мережі які супроводжує mnt-by:

MNTBY=YZ42-RIPE-MNT; whois -r -i mnt-by ${MNTBY} -T route6 | awk '$1~/^route6:$/ { print $2 }'

Список as-set які супроводжує mnt-by:

MNTBY=YZ42-RIPE-MNT; whois -r -i mnt-by ${MNTBY} -T as-set | awk '$1~/^as-set:/ { print $2 }'

AS по org:

ORG=ORG-SE1-RIPE; whois -r -i org ${ORG} -T aut-num

вівторок, 22 серпня 2023 р.

Клієнт DNS over HTTPS (DoH)

DNS over HTTPS (DoH) — це протокол для виконання DNS-запитів через протокол HTTPS. Надає певні переваги в захисті DNS-запитів. Якщо звичайний запит по 53/udp доволі легко перехопити і проаналізувати через, наприклад, Wireshark то з запитом через HTTPS цей "фокус" стає не таким вже й тривіальним. Mikrotik дозволяє нам налаштувати DNS over HTTPS (DoH) з тими чи іншими службами, наприклад з Google або Cloudflare.
Завантажуємо та імпортуємо сертифікат:
/tool fetch url=https://cacerts.digicert.com/DigiCertGlobalRootCA.crt.pem
/certificate import file-name=DigiCertGlobalRootCA.crt.pem passphrase=""
Далі, в DHCP-клієнті вимикаємо отримання DNS-серверів, наприклад, від провайдера, а також видаляємо використання будь-яких користувацьких налаштувань щодо DNS-серверів:
/ip dns set servers=""
/ip dhcp-client set [ find ] use-peer-dns=no
Ну й налаштовуємо DNS over HTTPS (DoH) для Google:
/ip dns set use-doh-server=https://8.8.8.8/dns-query verify-doh-cert=yes
або Cloudflare:
/ip dns set use-doh-server=https://1.1.1.1/dns-query verify-doh-cert=yes
Після цього можна скинути наявний кеш і перевірити, що DNS over HTTPS (DoH) працює:
/ip dns cache flush
/ping meta.ua count=4
/ip dns cache print without-paging

ovpn-файл до статті "Налаштування OpenVPN-сервера на Mikrotik"

Вступ

Нещодавно в статті Налаштування OpenVPN-сервера на Mikrotik (метод 2) було наведено вміст ovpn-файла, для OpenVPN-клієнта Windows/Linux, в той самий час в статті Налаштування OpenVPN-сервера на Mikrotik було розглянуто лише налаштування OpenVPN-клієнта в RouterOS. Спробуємо виправити ситуацію.

Експорт сертифікатів

Нарешті ми налаштували OpenVPN-сервер на Mikrotik і тепер хочемо роздати нашим клієнтам ovpn-файл, щоб вони підключалися до сервера.

Експортуємо ca та клієнтський сертифікати. Тут все просто:
/certificate export-certificate ca file-name=ca-v1 type=pem 
/certificate export-certificate ovpn-muter file-name=ovpn-client-v1 type=pem export-passphrase="passphrase"
Створюємо ovpn-файл
client
dev tun
remote <ip address or dns name of the ovpn server> 1194 tcp
nobind
persist-key
persist-tun
remote-cert-tls server
data-ciphers AES-256-CBC
cipher AES-256-CBC
auth-user-pass
auth SHA1
redirect-gateway def1
verb 1
<ca>
-----BEGIN CERTIFICATE-----
вставляємо вміст з експортованого файла ca-v1.crt
-----END CERTIFICATE-----
</ca>
<cert>
-----BEGIN CERTIFICATE-----
вставляємо вміст з експортованого файла ovpn-client-v1.crt
-----END CERTIFICATE-----
</cert>
<key>
-----BEGIN ENCRYPTED PRIVATE KEY-----
вставляємо вміст з експортованого файла ovpn-client-v1.key
-----END ENCRYPTED PRIVATE KEY-----
</key>

Налаштування OpenVPN-сервера на Mikrotik (метод 2)

Вступ

Вже був розповідав як налаштувати OpenVPN-сервер на Mikrotik (назвемо його - метод 1). В тому методі ми налаштували сервер де організували з кожним клієнтом point-to-point канал і маршрутизували трафік. Але подекуди нам зустрічаються локальні мережі в яких працює специфічний софт, який "не любить" маршрутизацію і чи зовсім не працює з нею, чи працює лише після танців з бубном. В таких випадках нам зможе допомогти другий метод налаштування OpenVPN-сервера, коли клієнт входить безпосередньо в бродкаст домен (bridge-інтерфейс) локальної мережі.

Сертифікати

В цьому другому методі нам теж треба згенерувати сертифікати, але з іншими правами. Якщо генерувати сертифікати в тими правами, що були у попередньому методі, нічого не буде працювати. Це важливо.

Генеруємо корневий сертифікат нашого "сертифікаційного центру":

/certificate add name=ca-v2 country="UA" state="KY" locality="Locality" organization="Organization" unit="Unit" common-name="ca-v2" key-size=2048 days-valid=3650 key-usage=digital-signature,key-encipherment,data-encipherment,key-cert-sign,crl-sign
/certificate sign ca-v2

Створюємо сертифікат та закритий ключ для OpenVPN-сервера:

/certificate add name=ovpn-server-v2 country="UA" state="KY" locality="Locality" organization="Organization" unit="OpenVPN-server-v2" common-name="ovpn-server-v2" key-size=2048 days-valid=3650 key-usage=digital-signature,key-encipherment,data-encipherment,key-cert-sign,tls-server
/certificate sign ovpn-server-v2 ca=ca-v2

Генеруємо клієнтський сертифікат:

/certificate add name=ovpn-client-v2 country="UA" state="KY" locality="Locality" organization="Organization" unit="OpenVPN-client-v2" common-name="ovpn-client-v2" key-size=2048 days-valid=3650 key-usage=tls-client
/certificate sign ovpn-client-v2 ca=ca-v2

Сервер

З сертифікатами поки закінчили, тепер налаштуємо сам OpenVPN-сервер.

/ppp profile add bridge=bridge bridge-learning=yes local-address=192.168.0.1 name=profile-ovpn remote-address=default-dhcp use-ipv6=no
/interface ovpn-server server set auth=sha1 certificate=OVPN-server cipher=aes256 default-profile=profile-ovpn enabled=yes mode=ethernet require-client-certificate=yes

Тут важливо розуміти що на відміну від метода 1 тут ми вводимо клієнтів безпосередньо в бродкаст домен (bridge-інтерфейс) локальної мережі, відповідно для сервера вказуємо mode=ethernet, а в профілі використовуємо наявний для локальної мережі dhcp-діапазон адрес і локальним адресом вказуємо адресу на bridge-інтерфейсі.

Далі додаємо користувачів
/ppp secret add name=USERNAME password=PASSWORD profile=ovpn service=ovpn
та не забуваємо відкрити OpenVPN-сервер для доступу:
/ip firewall filter add action=accept chain=input dst-port=1194 protocol=tcp

Клієнт

Тепер давайте створимо ovpn-файл для OpenVPN-клієнта. Спочатку експортуємо ca та клієнтський сертифікати. Тут все просто:
/certificate export-certificate ca-v2 file-name=ca-v2 type=pem 
/certificate export-certificate ovpn-client-v2 file-name=ovpn-client-v2 type=pem export-passphrase="passphrase"
Важливо! Для клієнтського сертифіката необхіжно вказати бодай якусь passphrase, інакше не буде експортовано закритий ключ, а він нам необхідний.

Сам вміст ovpn-файла може бути приблизно таким.

client.ovpn:

client
dev tap
proto tcp
remote <ip address or dns name of the ovpn server> 1194
nobind
persist-key
persist-tun
remote-cert-tls server
data-ciphers AES-256-CBC
cipher AES-256-CBC
auth-user-pass
keepalive 10 120
verb 1
auth SHA1
<ca>
-----BEGIN CERTIFICATE-----
вставляємо вміст з експортованого файла ca-v2.crt
-----END CERTIFICATE-----
</ca>
-----BEGIN CERTIFICATE-----
вставляємо вміст з експортованого файла ovpn-client-v2.crt
-----END CERTIFICATE-----
</cert>
<key>
-----BEGIN ENCRYPTED PRIVATE KEY-----
вставляємо вміст з експортованого файла ovpn-client-v2.key
-----END ENCRYPTED PRIVATE KEY-----
</key>
Якщо OpenVPN-клієнт для Windows дозволяє запам'ятати введену passphrase та ім'я та пароль користувача то для Linux такої можливості немає, але в сам ovpn-файл можна додати опції:
auth-user-pass auth.cfg
askpass store.pass
а в самих файлах розмістити, відповідно, ім'я користувача з паролем та passphrase.

auth.cfg:

USERNAME
PASSWORD

store.pass:

passphrase
Ось і все, щодо метода 2.

четвер, 27 липня 2023 р.

Налаштування wifiwave2 на hAP ax² (C52iG-5HaxD2HaxD).

Так вже сталося, що потрапив мені в руки Mikrotik hAP ax². Перша, й характерна, відмінність, від того до чого звик, це WiFi 6 і пакет wifiwave2. Що хочеться сказати: все, що знали про налаштування WiFi на Mikrotik до wifiwave2 — забудьте! Все, що знали про налаштування CAPsMAN на Mikrotik до wifiwave2 — забудьте!

Одразу хочу сказати, що не стану тут пересказувати статтю WifiWave2 з офіційного джерела Mikrotik-а. Стаття гарна і висвічує майже всі аспекти. Я просто розповім про свої митарства і про позитивний досвід.

Спочатку, так як залізо було новим, спробував подивитися, що та як налаштовує Quick Set і, як це зазвичай буває, мені це не дуже сподобалося. Ні, звісно, що працювати якось буде, але… ну не те.

Не помітив улюбленого пункту меню CAPsMAN… Хм… Пішов до меню Wireless і одразу побачив схожість вкладок до меню CAPsMAN попередніх версій. Ну, думаю, супер! Адже CAPsMAN мені дуже подобається, особливо коли мова йдре про масштабування wifi-мережі. Але не все так сталося як гадалося. Функціонал попередніх версій CAPsMAN подекуди докорінно відрізнявся від того, що побачив тут. Окрім того, тут, назвемо так, "гібрідний функціонал". Тобто можна налаштовувати через меню Wireless як безпосередньо wifi-інтерфейси так і задіяти для того самого CAPsMAN.

Так як треба було все налаштувати швидко то налаштував через winbox два інтерфейси у вкладці WiFi Wawe 2. Запрацювало. Добре. Але… але не подобалося, от якось не те, хотілося, прямо кортіло, задіяти функціонал CAPsMAN

Треба сказати, що грішив від самого початку на версію прошивки. Factory Firmware була 7.6, а на той час як hAP ax² потрапив до рук, то актуальною stable-версією була 7.9. Раз підхід. Два підхід. Ну не виходить кам'яна квітка… Повернувся до налаштувань WiFi Wawe 2 без CAPsMAN і "забув".

Все змінилося, коли вийшла stable-версія прошивки 7.10.2, до якої прямо було написано

wifiwave2 - fixed interface hangs on IPQ6010-based boards (introduced in v7.9)

Далі без лірики. Далі практика.

Оновлюємося до прошивки не меншої за 7.10.2, щоб успішно задіяти функціонал CAPsMAN пакету wifiwave2.

Відкриваємо консоль. І робимо дві магічні команди, бо без них подальші дії будуть схожі на шаманські танці з бубном, але результату буде мало. Так от, робимо:

/interface/wifiwave2/remove [ find ]
/interface/wifiwave2/reset [ find ]

таким чином ми видаляємо всі наявні "підлеглі" wifi-інтерфейси і скидаємо налаштування щодо "основних".

Після цього все стає не просто, а занадто просто:

/interface wifiwave2 channel
add disabled=no name=channel2 width=20/40mhz-Ce
add disabled=no name=channel5 skip-dfs-channels=disabled
/interface wifiwave2 datapath
add bridge=bridge disabled=no interface-list=LAN name=datapath1
/interface wifiwave2 security
add authentication-types=wpa2-psk,wpa3-psk passphrase=p@ssw0rd disabled=no group-encryption=ccmp name=sec1
/interface wifiwave2 configuration
add channel=channel5 country="United States" datapath=datapath1 disabled=no name=5ghz security=sec1 ssid=SampleWiFi tx-power=32
add channel=channel2 country=Ukraine datapath=datapath1 disabled=no name=2ghz security=sec1 ssid=SampleWiFi tx-power=32
add channel=channel5 country="United States" datapath=datapath1 disabled=no name=5ghz.5 security=sec1 ssid=SampleWiFi.5
add channel=channel2 country=Ukraine datapath=datapath1 disabled=no name=2ghz.2 security=sec1 ssid=SampleWiFi.2
/interface wifiwave2 cap
set discovery-interfaces=bridge enabled=yes
/interface wifiwave2 capsman
set enabled=yes interfaces=bridge upgrade-policy=none
/interface wifiwave2 provisioning
add action=create-dynamic-enabled disabled=no master-configuration=5ghz name-format=wifi1-5G-%I slave-configurations=5ghz.5 supported-bands=5ghz-n,5ghz-a,5ghz-ac,5ghz-ax
add action=create-dynamic-enabled disabled=no master-configuration=2ghz name-format=wifi2-2G-%I slave-configurations=2ghz.2 supported-bands=2ghz-n,2ghz-g,2ghz-ax

Ну от в принципі і все. Після цього починає нормально працювати CAPsMAN з пакета wifiwave2. Ну а всі інші налаштування — на власний розсуд. Не забуваємо дати команду:

/interface/wifiwave2/radio/provision [ find ]

Також зверну увагу, про що написано й в документації WifiWave2, що WifiWave2 CAPsMAN може керувати лише інтерфейсами WifiWave2, а WifiWave2 CAP може приєднуватися лише до WifiWave2 CAPsMAN, так само, CAPsMAN попередніх версій підтримує лише не-WifiWave2 пристрої.

Окреме зауваження щодо country. Для 5ГГц діапазона обрано United States. Чому? Скоріш за все за звичкою. Бо колись, коли тільки почали з'являтися 5ГГц-пристрої, iPhone погано "дружив" з  Mikrotik-ами на цьому діапазоні, ащо країна відрізнялася від United States. Час плине, можливо зараз все змінилося, але звичка залишилася.

Ще раз скажу, що документація щодо налаштувань WifiWave2 з офіційного джерела Mikrotik-а заслуговує на увагу, як і всі інші статті. Якщо у вас щось не виходить то це не тому, що Mikrotik такий прямо ну поганий і кривий, можливо просто в дзеркалі щось не так. Нічого не маю проти інших вендорів, але за критеріями ціна-якість-можливості, вважаю, що Mikrotik це всюдихід, який можна налаштувати майже під будь-які потреби… хіба що HTCPCP не підтримує ;)