середа, 26 грудня 2012 р.

UFW: коротка довідка команд і пояснення правил

UFW — засіб керування мережевим екраном у Linux. Нижче впорядковано команди з початкової нотатки. Вони призначені для довідки: застосування правил змінює мережевий доступ, тому на віддаленому сервері спершу потрібно перевірити, чи залишиться доступним адміністративне підключення.

Стан, журналювання та політики

ufw enable
ufw disable
ufw logging on
ufw logging off
ufw default allow
ufw default deny
ufw status
ufw status numbered
ufw reload

enable вмикає екран, disable вимикає його. logging керує журналюванням, default — політикою за замовчуванням. status показує стан, а reload перечитує правила. Варіанти з вертикальною рискою в оригінальній шпаргалці означали вибір однієї дії, а не виконання shell-конвеєра.

Порти та адреси

ufw allow 21
ufw delete allow 21
ufw allow 53/tcp
ufw allow from 10.123.192.199
ufw deny proto tcp to 72.55.148.21
ufw deny proto tcp from 72.55.148.21
ufw allow in on eth0 to any port 80 proto tcp

ufw allow 21 додає дозвільне правило, а не показує стан порту. Правило лише з адресою джерела охоплює більше, ніж один порт. Адреси й ім’я eth0 — приклади з оригіналу, які потрібно замінювати відповідно до своєї мережі.

Запис ufw deny 80 from 72.55.148.21 у початковому тексті мав неправильний порядок аргументів. Для заборони TCP-доступу від цього джерела до порту 80 використовується:

ufw deny proto tcp from 72.55.148.21 to any port 80

Порядок і видалення правил

ufw deny proto udp to any
ufw insert 2 deny proto udp to any
ufw status numbered
ufw delete 3

Перші два приклади задають широку заборону UDP; вони не є універсальним налаштуванням сервера. insert 2 вставляє правило на другу позицію. Перед delete 3 слід заново перевірити нумерований список, оскільки після змін номери можуть зсуватися.

Загальна форма

ufw allow|deny|reject|limit [in|out on INTERFACE] [log|log-all] [proto protocol] [from ADDRESS [port PORT]] [to ADDRESS [port PORT]]

Це схема синтаксису, а не готова команда: квадратні дужки позначають необов’язкові частини, а вертикальна риска — альтернативи. Повний опис напрямків і правил: офіційна довідка UFW для Ubuntu.

вівторок, 11 грудня 2012 р.

Параметри монітора Ubuntu через KVM: приклад xorg.conf

Під час роботи із серверами через апаратний KVM-перемикач у нашій конфігурації Ubuntu вибирала завелику роздільну здатність і частоту 100 Гц. KVM не показував зображення, а за відсутності мережевого доступу це ускладнювало керування сервером. Тут KVM означає перемикання клавіатури, відео та миші, а не технологію віртуалізації Linux.

Приклад конфігурації Xorg

У системі не було файла /etc/X11/xorg.conf. Для цього випадку ми створили його й задали параметри дисплея вручну. Нижче збережено приклад із первинної публікації:

Section "Monitor"
Identifier  "My Monitor"
HorizSync   31.5 - 50.0
VertRefresh 40-90
EndSection

Section "Screen"
Identifier    "Default Screen"
Monitor     "My Monitor"
DefaultDepth 24
Subsection "Display"
Depth       24
Modes "1024x768"
ViewPort 0 0
EndSubsection
EndSection

Частоти монітора та передавання DDC

Значення HorizSync та VertRefresh стосуються конкретної конфігурації й не є універсальними межами для будь-якого монітора. Їх потрібно брати з характеристик обладнання та враховувати можливості KVM. Перед змінами збережіть попередню конфігурацію й спосіб повернутися до робочого відеорежиму.

Відсутність xorg.conf сама по собі не є помилкою: Xorg підтримує автоматичне визначення обладнання. Його офіційна довідка окремо згадує KVM, які не передають інформацію DDC. Описаний приклад належить до історичного середовища Xorg і не переноситься безпосередньо на всі сучасні графічні сеанси.

вівторок, 15 травня 2012 р.

Індикатор розкладки клавіатури в Xfce: нотатка для Ubuntu

Без видимого індикатора розкладки легко помилитися мовою введення. У моєму тодішньому середовищі Ubuntu з Xfce допоміг набір додатків xfce4-goodies, відомий за сайтом http://goodies.xfce.org/.

У початковій конфігурації пакет встановлювався командою з правами адміністратора:

apt-get install xfce4-goodies

Після цього на панель можна було додати індикатор клавіатури, індикатор навантаження процесора та інші додатки. Це опис історичного набору: склад метапакета й доступність окремих модулів залежать від випуску Ubuntu.

Індикатори на панелі Xfce з початкової публікації

Як працює індикатор розкладки

Офіційна документація xfce4-xkb-plugin описує додавання модуля на панель і відображення поточної розкладки текстом або прапорцем. Через його налаштування можна відкрити параметри клавіатури та задати розкладки й комбінацію перемикання. Встановлення пакета й додавання елемента на панель — окремі кроки.

субота, 12 травня 2012 р.

PPTP VPN на Ubuntu: архівна конфігурація 2012 року та її обмеження

Цей запис зберігає приклад налаштування PPTP-сервера на Ubuntu з травня 2012 року. Його не слід використовувати як готову безпечну конфігурацію для нового робочого сервера: у прикладі вимогу MPPE-шифрування було закоментовано, а MS-CHAP v2/PPTP має відомі обмеження безпеки.

Microsoft попереджає про потенційно небезпечну конфігурацію MS-CHAP v2 без додаткової інкапсуляції в PPTP. Для нового розгортання на підтримуваній Ubuntu доцільно оцінити сучасне VPN-рішення; приклад окремого напряму — офіційні матеріали Ubuntu про WireGuard.

Встановлення й перевірка у старому прикладі

apt-get install ppp pptpd
netstat -ap | grep pptp

У первинному записі очікуваний результат було скорочено до:

1723 LISTENED

Це умовний запис, а не точний рядок виводу netstat. Відкритий TCP-порт 1723 сам по собі не підтверджує працездатність VPN: PPTP також використовує GRE для перенесення пакетів, як описано в RFC 2637.

Файли конфігурації з нотатки

/etc/pptpd.conf:

option /etc/ppp/pptpd-options
logwtmp
localip 10.1.1.1 # адрес сервера в создаваемой виртуальной сети
remoteip 10.1.1.50-59 # адреса, раздаваемые клиентам

Діапазони VPN не мають конфліктувати з мережами клієнтів або іншими маршрутами. Самого вибору адрес недостатньо для налаштування маршрутизації та правил доступу.

/etc/ppp/pptpd-options:

lock
name pptpd
nodefaultroute
refuse-pap
refuse-mschap
require-mschap-v2
#require-mppe-128 # шифрование. В теории должно работать, на практике у меня не вышло его завести
proxyarp
nodefaultroute

Закоментований рядок require-mppe-128 означає, що цей приклад не вимагає MPPE-128. Дубль nodefaultroute залишено як частину первинного фрагмента. Ці налаштування не є підтвердженням захищеного каналу.

Приклад /etc/ppp/chap-secrets:

# Secrets for authentication using CHAP
# client    server    secret            IP addresses
user          pptpd     password        *
user2        pptpd     password2    10.1.1.54

Назви користувачів і паролі тут демонстраційні. У первинній схемі останній стовпець задавав довільну або визначену адресу клієнта. Реальні секрети не слід публікувати чи залишати доступними стороннім.

Наприкінці нотатки службу перезапускали так:

sudo /etc/init.d/pptpd restart

Історичне джерело конфігурації: нотатка про pptpd, Ubuntu та Windows. Наведені команди збережено для розуміння старого середовища.

DataSnap у Delphi: багатоланкові застосунки та добірка матеріалів

У пошуку альтернативи DCOM мене цікавив спосіб будувати багатоланкові застосунки з меншою залежністю від COM та технологій Microsoft. Таким варіантом стала архітектура DataSnap, описана в матеріалах епохи Delphi XE.

Важливе уточнення: назва DataSnap охоплює різні покоління технології. Embarcadero описує перехід від віддаленої роботи через COM/DCOM до відкритішої взаємодії на основі TCP/IP. Тому формулювання «DataSnap взагалі не використовує COM» без указання архітектури та версії було б неточним.

У власних тодішніх тестах мені вдалося запускати відповідний Windows-застосунок під Wine. Це результат перевірки конкретного застосунку й середовища, а не гарантія нативної підтримки всіх операційних систем або сумісності будь-якого сервера та клієнта DataSnap.

Матеріали з початкової добірки

Нижче збережено адреси історичних навчальних матеріалів. Приклади XE слід читати у контексті відповідної версії:

  • Вступ до DataSnap — http://echmel.ru/2011/07/essential-to-datasnap/.
  • Багатоланкова архітектура DataSnap XE для баз даних — http://www.interface.ru/home.asp?artId=26212.
  • Звичайні об’єкти як параметри DataSnap XE — http://www.interface.ru/home.asp?artId=26210.
  • Життєвий цикл серверних методів — http://www.interface.ru/home.asp?artId=26211.
  • Простий сервіс DataSnap XE: калькулятор — http://www.interface.ru/home.asp?artId=25687.
  • Callbacks: механізми зворотного виклику — http://www.interface.ru/home.asp?artId=26208.
  • DataSnap Server Wizard.
  • Створення SSL-сертифікатів для Apache та mod_ssl — http://www.opennet.ru/base/dev/apache_mod_ssl.txt.html.
  • Використання OpenSSL.

Останні два посилання стосуються SSL та OpenSSL. Їхні старі команди й параметри не варто переносити в сучасну конфігурацію TLS без перевірки документації встановлених версій.

Пояснення розвитку архітектури від виробника: Developing DataSnap Applications.

VMware Workstation 8 після оновлення до Ubuntu 12.04: історія виправлення

Ubuntu 12.04 вийшла за планом і запропонувала оновитися. Я натиснув кнопку, забувши про звичні пригоди після оновлень, і… VMware перестала запускатися. Я знайшов сторонній опис виправлення й застосував патч модулів для тодішнього ядра. Нижче збережено параметри та послідовність саме того випадку.

Ubuntu 12.04 давно завершила загальну підтримку; це підтверджує оголошення Ubuntu. Старий патч не є рекомендацією для сучасної інсталяції.

Знімок екрана помилки або запуску VMware Workstation 8 на Ubuntu 12.04
Знімок екрана помилки або запуску VMware Workstation 8 на Ubuntu 12.04
Знімок екрана помилки або запуску VMware Workstation 8 на Ubuntu 12.04
Знімок екрана помилки або запуску VMware Workstation 8 на Ubuntu 12.04
Знімок екрана помилки або запуску VMware Workstation 8 на Ubuntu 12.04
Знімок екрана помилки або запуску VMware Workstation 8 на Ubuntu 12.04

Перевірка версій із початкової нотатки

cat /etc/*release*
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=12.04
DISTRIB_CODENAME=precise
DISTRIB_DESCRIPTION="Ubuntu 12.04 LTS"

uname -r
3.2.0-23-generic-pae

toor@toor-ls:~$ vmware-installer -l
Product Name          Product Version
==================== ====================
vmware-workstation   8.0.2.591240
toor@toor-ls:~$

Історичні команди патча

Джерелом тоді був http://xaxatyxa.ru/_ubuntu/zapuskaetsya-vmware-workstation-ubuntu-12-04.html. У нотатці наведено:

wget http://xaxatyxa.ru/download/vmware802fixlinux320.tar.gz
tar xpvf vmware802fixlinux320.tar.gz
sudo ./patch-modules_3.2.0.sh

Походження й вміст цього старого архіву зараз не підтверджені. Команда sudo виконує сторонній код із правами адміністратора, а адреса HTTP не захищає завантаження. Команди залишено для історичної точності; запускати цей архів без перевірки не слід.

У моєму тодішньому випадку після патча VMware знову запускалася й показувала ліцензійну угоду. Знімки екрана збережено. Для поточної системи потрібно перевіряти сумісність версії VMware з дистрибутивом та ядром і використовувати підтримувані засоби постачальника.

Wine на Ubuntu 12.04: архівні команди, драйвери та приклад PlayOnLinux

У травні 2012 року я зібрав нотатки про встановлення Wine на Ubuntu 12.04, проблеми 3D-графіки та окреме середовище для гри Perfect World у PlayOnLinux. Нижче збережено команди й послідовність того часу з поясненням, чому їх не можна механічно переносити на сучасну систему.

1. Старий приклад встановлення Wine

Після відкриття термінала комбінацією Ctrl+Alt+T пропонувалося виконати:

sudo add-apt-repository ppa:ubuntu-wine/ppa
sudo apt-get update
sudo apt-get install wine1.5

Wine 1.5 і наведений PPA належать до старого середовища. Нові випуски можуть виправляти старі проблеми сумісності, а можуть і додавати нові — з Wine траплялося й таке :). Потрібну версію слід визначати за конкретним застосунком; актуальні матеріали проєкту доступні на WineHQ.

Історичне джерело цього фрагмента: інструкція для Wine 1.5.2 та Ubuntu 12.04.

2. Графічний драйвер

У тому середовищі виникали проблеми відображення 3D. Оновлення драйвера могло частково допомогти, як і вимкнення окремих ефектів 3D. Проте мій досвід із тодішніми драйверами ATI та NVIDIA не дає підстав однаково оцінювати всі моделі й версії Linux. Причину потрібно шукати в конкретному поєднанні GPU, драйвера, Wine та програми.

Тодішній приклад для NVIDIA:

sudo add-apt-repository ppa:ubuntu-x-swat/x-updates
sudo apt-get update
sudo apt-get install nvidia-current=295.33-0ubuntu1~precise~xup1

Це фіксована версія для старого випуску, а не спосіб установити «найновіший драйвер» сьогодні. Для підтримуваної Ubuntu використовуйте інструкцію Ubuntu щодо NVIDIA: вона рекомендує пакети дистрибутива та керування через ubuntu-drivers або «Додаткові драйвери».

3. PlayOnLinux і різні версії Wine

PlayOnLinux допомагає керувати окремими віртуальними дисками та версіями Wine для різних програм. Це описано в його документації. Така організація полегшує перевірку сумісності, але не гарантує запуску будь-якого Windows-застосунку.

У первинному матеріалі наводився такий старий спосіб встановлення:

wget -q "http://deb.playonlinux.com/public.gpg" -O - | sudo apt-key add -
sudo wget http://forum.pwonline.ru/fredirect.php?url=http://deb.playonlinux.com/playonlinux_maverick.list -O /etc/apt/sources.list.d/playonlinux.list
sudo apt-get update
sudo apt-get install playonlinux

У другому рядку початкового HTML адреса відображалася скорочено, а посилання вело через форумний редирект; тут показано адресу з його href. Назва maverick стосується іншого старого випуску Ubuntu й не узгоджується з Precise 12.04. Крім того, apt-key є застарілим засобом. Цей блок збережено для історії, а не для виконання на чинній системі.

4. Приклад Perfect World у тодішньому інтерфейсі

Опис із форумної теми пропонував такі дії:

  1. У PlayOnLinux відкрити «Утиліти → Керування версіями Wine» та встановити Wine 1.2.3.
  2. Натиснути «Установка», вибрати встановлення програми, відсутньої у списку, і перейти до Manual Installation.
  3. Створити новий віртуальний диск через Install a program in a new virtual drive та назвати його, наприклад, pw.
  4. Вибрати Use another version of Wine та Install some libraries, а далі — Wine 1.2.3 замість System.
  5. Додати компоненти POL_Install_d3dx9, POL_Install_directx9, POL_Install_ie6 та POL_Install_vbrun6.
  6. Вибрати PW_Setup.exe. Файли PW_Setup-1.bin, PW_Setup-2.bin та PW_Setup-3.bin мали лежати поруч.
  7. Після встановлення за потреби створити ярлик патчера.

Вимога «тільки Wine 1.2.3» та набір бібліотек стосувалися тогочасної гри. Не потрібно безумовно встановлювати всі старі компоненти чи погоджуватися з кожним діалогом. Для іншого випуску програми спочатку перевірте сумісність і потрібні залежності; довідка PlayOnLinux також радить враховувати результати тестів Wine.

Оригінальні знімки

Wine і PlayOnLinux на Ubuntu 12.04: знімок інструкції 2012 року Wine і PlayOnLinux на Ubuntu 12.04: знімок інструкції 2012 року Wine і PlayOnLinux на Ubuntu 12.04: знімок інструкції 2012 року Wine і PlayOnLinux на Ubuntu 12.04: знімок інструкції 2012 року Wine і PlayOnLinux на Ubuntu 12.04: знімок інструкції 2012 року Wine і PlayOnLinux на Ubuntu 12.04: знімок інструкції 2012 року Wine і PlayOnLinux на Ubuntu 12.04: знімок інструкції 2012 року Wine і PlayOnLinux на Ubuntu 12.04: знімок інструкції 2012 року Wine і PlayOnLinux на Ubuntu 12.04: знімок інструкції 2012 року Wine і PlayOnLinux на Ubuntu 12.04: знімок інструкції 2012 року Wine і PlayOnLinux на Ubuntu 12.04: знімок інструкції 2012 року Wine і PlayOnLinux на Ubuntu 12.04: знімок інструкції 2012 року Wine і PlayOnLinux на Ubuntu 12.04: знімок інструкції 2012 року Wine і PlayOnLinux на Ubuntu 12.04: знімок інструкції 2012 року

Ціни на нерухомість у Києві перед Євро-2012: прогноз і чотири графіки

У травні 2012 року, напередодні Євро-2012, я стежив за цінами на нерухомість у Києві. На мій погляд, очікування забудовників і рієлторів щодо попиту перед чемпіонатом не справдилися. Після короткого й невеликого підвищення я знову помічав зниження цін. Тоді я припускав, що після турніру спад прискориться.

Чому я очікував падіння цін

  • Продавці, які тримали ціни в розрахунку на продажі під час чемпіонату, могли переглянути очікування.
  • Купівельна спроможність, за моєю оцінкою, була низькою, тоді як пропозицій на ринку було багато. Іпотека здавалася малодоступною, тож покупці здебільшого розраховували на власні кошти.
  • Я вважав київські ціни завищеними й порівнював квартиру без оздоблення в Києві з пропозиціями готового житла подібної площі біля узбережжя Туреччини.
  • Я очікував, що європейська криза позначиться й на Україні. Ще одним чинником вважав спрощення дозвільних процедур.

Графіки середніх цін, які я дивився у травні 2012 року

Для порівняння я взяв чотири графіки київських цін із тодішньої сторінки Domik.net. Вони охоплюють різні періоди, тож короткий рух цін варто читати разом із довшою динамікою.

Два попередні місяці

Три роки

П’ять років

Увесь доступний період

На які ціни я тоді орієнтувався

Я порівнював очікуваний спад із реакцією ринку на кризу 2008 року. Своїм орієнтиром для київської квартири без оздоблення вважав 500 доларів США за м². Це була моя оцінка прийнятної ціни, сформована на той час.

Серед оголошень я також бачив окремі пропозиції офісів із ремонтом за 650–850 доларів США за м². За моїми спостереженнями, такі варіанти швидко зникали з продажу. Цей діапазон описував окремі пропозиції офісів у 2012 році.

Я припускав, що для конкуренції забудовники скорочуватимуть витрати, переглядатимуть ціни й поліпшуватимуть якість пропозицій, зокрема продаватимуть більше приміщень із внутрішнім оздобленням.

Як зберегти термінальну сесію після від’єднання SSH: GNU Screen

Фоновий запуск із символом &

Фоновий запуск і збереження процесу після завершення SSH-сеансу — різні завдання. У старій нотатці пропонувалося:

rar a -r ppp.rar arh_papka &

Символ & запускає команду у фоні, але сам по собі не гарантує, що процес переживе закриття термінала: це залежить від оболонки, сигналів та потоків вводу-виводу.

Сесія GNU Screen та повернення до неї

Для роботи з від’єднуваною сесією можна використати GNU Screen:

screen Ваша_команда
screen -r

Замініть заповнювач реальною командою. Щоб від’єднатися від типової сесії Screen, натисніть Ctrl+A, потім D. Для повернення використовується screen -r; за кількох сесій потрібно вибрати потрібну.

Що відбувається за розриву з’єднання

За типової увімкненої autodetach сесія від’єднується при розриві термінала. Це не захищає від перезавантаження сервера чи помилок самої програми. Див. GNU Screen: Detach.

Перевірка мережевої швидкості сервера через iperf: практичний випадок

У цьому випадку я помітив, що передавання із сервера було значно повільнішим за очікувані 100 Мбіт/с. Між сервером і моїм комп'ютером швидкість становила приблизно 0,8–2 Мбіт/с, хоча локальний канал декларувався як 80 Мбіт/с.

Перевірка через Speedtest показувала близько 20–40 Мбіт/с. Вона використовувала інший маршрут і сервер, тому сама по собі не пояснювала вузьке місце. Як же перевірити саме сервер? Для перевірки потрібного з'єднання я використав iperf.

Команди з початкової нотатки

apt-get install iperf
iperf -s
iperf -c НазваниеВашегоСервера -P 20

У цьому прикладі -s запускає сервер, -c задає його адресу, а -P 20 створює 20 паралельних потоків. Тест потрібно погоджувати з власниками обох вузлів: він навантажує канал і потребує доступу до відповідного порту.

Для Windows тоді наводився архів JPerf: http://iperf.ru/wp-content/uploads/2009/07/jperf-2.0.0.zip. Адресу збережено як історичну; вона не є перевіреним сучасним джерелом встановлення.

Перший вимір

------------------------------------------------------------

Client connecting to corp2.net, TCP port 5001

TCP window size: 8.00 KByte (default)

------------------------------------------------------------

[1760] local 192.168.0.99 port 27951 connected with 77.88.252.136 port 5001

[1696] local 192.168.0.99 port 27955 connected with 77.88.252.136 port 5001

[1664] local 192.168.0.99 port 27957 connected with 77.88.252.136 port 5001

[1808] local 192.168.0.99 port 27948 connected with 77.88.252.136 port 5001

[1792] local 192.168.0.99 port 27949 connected with 77.88.252.136 port 5001

[1632] local 192.168.0.99 port 27959 connected with 77.88.252.136 port 5001

[1840] local 192.168.0.99 port 27946 connected with 77.88.252.136 port 5001

[1776] local 192.168.0.99 port 27950 connected with 77.88.252.136 port 5001

[1600] local 192.168.0.99 port 27961 connected with 77.88.252.136 port 5001

[1552] local 192.168.0.99 port 27964 connected with 77.88.252.136 port 5001

[1728] local 192.168.0.99 port 27953 connected with 77.88.252.136 port 5001

[1568] local 192.168.0.99 port 27963 connected with 77.88.252.136 port 5001

[1744] local 192.168.0.99 port 27952 connected with 77.88.252.136 port 5001

[1712] local 192.168.0.99 port 27954 connected with 77.88.252.136 port 5001

[1680] local 192.168.0.99 port 27956 connected with 77.88.252.136 port 5001

[1648] local 192.168.0.99 port 27958 connected with 77.88.252.136 port 5001

[1616] local 192.168.0.99 port 27960 connected with 77.88.252.136 port 5001

[1856] local 192.168.0.99 port 27945 connected with 77.88.252.136 port 5001

[1824] local 192.168.0.99 port 27947 connected with 77.88.252.136 port 5001

[1584] local 192.168.0.99 port 27962 connected with 77.88.252.136 port 5001

[ ID] Interval       Transfer     Bandwidth

[1792]  0.0-10.0 sec   120 KBytes  98.1 Kbits/sec

[1824]  0.0-10.0 sec   360 KBytes   294 Kbits/sec

[1696]  0.0-10.1 sec   184 KBytes   149 Kbits/sec

[1664]  0.0-10.2 sec   152 KBytes   123 Kbits/sec

[1712]  0.0-10.2 sec  48.0 KBytes  38.6 Kbits/sec

[1808]  0.0-10.3 sec   696 KBytes   556 Kbits/sec

[1616]  0.0-10.3 sec  40.0 KBytes  31.8 Kbits/sec

[1760]  0.0-10.7 sec   448 KBytes   342 Kbits/sec

[1584]  0.0-10.7 sec   320 KBytes   245 Kbits/sec

[1776]  0.0-14.1 sec  32.0 KBytes  18.5 Kbits/sec

[1600]  0.0-14.1 sec  32.0 KBytes  18.5 Kbits/sec

[1840]  0.0-14.2 sec  48.0 KBytes  27.8 Kbits/sec

[1552]  0.0-14.1 sec  32.0 KBytes  18.5 Kbits/sec

[1632]  0.0-15.2 sec  56.0 KBytes  30.3 Kbits/sec

[1648]  0.0-18.1 sec  40.0 KBytes  18.2 Kbits/sec

[1568]  0.0-18.1 sec  32.0 KBytes  14.5 Kbits/sec

[1856]  0.0-18.1 sec  40.0 KBytes  18.1 Kbits/sec

[1680]  0.0-23.0 sec  40.0 KBytes  14.3 Kbits/sec

[1728]  0.0-23.1 sec  40.0 KBytes  14.2 Kbits/sec

[1744]  0.0-23.1 sec  40.0 KBytes  14.2 Kbits/sec

[ ID] Interval       Transfer     Bandwidth

[SUM]  0.0-23.1 sec  2.73 MBytes   993 Kbits/sec

Сумарний результат — 993 Кбіт/с — справді був далеким від очікуваного. Висновок стосувався конкретного маршруту, часу й параметрів цього тесту.

Після перевірки провайдером

За моїм тодішнім описом, провайдер повідомив про некоректне спрацювання шейпера. Після зміни обмеження результат покращився:

------------------------------------------------------------

Client connecting to srv1.corp2.net, TCP port 5001

TCP window size: 8.00 KByte (default)

------------------------------------------------------------

[1824] local 192.168.0.99 port 28769 connected with 77.88.252.135 port 5001

[1552] local 192.168.0.99 port 28786 connected with 77.88.252.135 port 5001

[1840] local 192.168.0.99 port 28768 connected with 77.88.252.135 port 5001

[1856] local 192.168.0.99 port 28767 connected with 77.88.252.135 port 5001

[1808] local 192.168.0.99 port 28770 connected with 77.88.252.135 port 5001

[1632] local 192.168.0.99 port 28781 connected with 77.88.252.135 port 5001

[1776] local 192.168.0.99 port 28772 connected with 77.88.252.135 port 5001

[1760] local 192.168.0.99 port 28773 connected with 77.88.252.135 port 5001

[1744] local 192.168.0.99 port 28774 connected with 77.88.252.135 port 5001

[1792] local 192.168.0.99 port 28771 connected with 77.88.252.135 port 5001

[1712] local 192.168.0.99 port 28776 connected with 77.88.252.135 port 5001

[1728] local 192.168.0.99 port 28775 connected with 77.88.252.135 port 5001

[1696] local 192.168.0.99 port 28777 connected with 77.88.252.135 port 5001

[1664] local 192.168.0.99 port 28779 connected with 77.88.252.135 port 5001

[1600] local 192.168.0.99 port 28783 connected with 77.88.252.135 port 5001

[1680] local 192.168.0.99 port 28778 connected with 77.88.252.135 port 5001

[1648] local 192.168.0.99 port 28780 connected with 77.88.252.135 port 5001

[1568] local 192.168.0.99 port 28785 connected with 77.88.252.135 port 5001

[1616] local 192.168.0.99 port 28782 connected with 77.88.252.135 port 5001

[1584] local 192.168.0.99 port 28784 connected with 77.88.252.135 port 5001

[ ID] Interval       Transfer     Bandwidth

[1568]  0.0-10.1 sec  1.77 MBytes  1.47 Mbits/sec

[1744]  0.0-10.1 sec  1.08 MBytes   893 Kbits/sec

[1616]  0.0-10.2 sec  1.55 MBytes  1.27 Mbits/sec

[1680]  0.0-10.2 sec   704 KBytes   564 Kbits/sec

[1584]  0.0-10.2 sec  1.91 MBytes  1.57 Mbits/sec

[1856]  0.0-10.2 sec  1.20 MBytes   981 Kbits/sec

[1552]  0.0-10.2 sec   904 KBytes   723 Kbits/sec

[1760]  0.0-10.2 sec  1.51 MBytes  1.24 Mbits/sec

[1792]  0.0-10.2 sec  1.26 MBytes  1.03 Mbits/sec

[1712]  0.0-10.2 sec  1.70 MBytes  1.39 Mbits/sec

[1776]  0.0-10.2 sec  1.26 MBytes  1.03 Mbits/sec

[1648]  0.0-10.2 sec  1.14 MBytes   938 Kbits/sec

[1728]  0.0-10.2 sec  1.32 MBytes  1.08 Mbits/sec

[1808]  0.0-10.2 sec  1.05 MBytes   858 Kbits/sec

[1824]  0.0-10.3 sec  1.51 MBytes  1.23 Mbits/sec

[1696]  0.0-10.3 sec  1.70 MBytes  1.39 Mbits/sec

[1600]  0.0-10.3 sec  1.75 MBytes  1.43 Mbits/sec

[1840]  0.0-10.3 sec  1.44 MBytes  1.17 Mbits/sec

[1664]  0.0-10.3 sec  1.34 MBytes  1.09 Mbits/sec

[1632]  0.0-11.4 sec  1.67 MBytes  1.23 Mbits/sec

[ ID] Interval       Transfer     Bandwidth

[SUM]  0.0-11.4 sec  27.7 MBytes  20.4 Mbits/sec

У журналах перший тест звертається до corp2.net (77.88.252.136), а наступний — до srv1.corp2.net (77.88.252.135). Це різні кінцеві вузли, тому наведені числа не є контрольованим порівнянням одного й того самого маршруту до та після зміни шейпера. Пояснення провайдера наведене з мого тодішнього опису.

Отримано 20,4 Мбіт/с. Окреме вимірювання між серверами всередині мережі провайдера дало вищий результат:

iperf -c srv1.corp2.net -P 20
------------------------------------------------------------

Client connecting to srv1.corp2.net, TCP port 5001

TCP window size: 16.0 KByte (default)

------------------------------------------------------------

[ 19] local 77.88.252.136 port 42503 connected with 77.88.252.135 port 5001

[  8] local 77.88.252.136 port 42485 connected with 77.88.252.135 port 5001

[  9] local 77.88.252.136 port 42484 connected with 77.88.252.135 port 5001

[  3] local 77.88.252.136 port 42487 connected with 77.88.252.135 port 5001

[  6] local 77.88.252.136 port 42486 connected with 77.88.252.135 port 5001

[  5] local 77.88.252.136 port 42488 connected with 77.88.252.135 port 5001

[  7] local 77.88.252.136 port 42489 connected with 77.88.252.135 port 5001

[ 10] local 77.88.252.136 port 42490 connected with 77.88.252.135 port 5001

[  4] local 77.88.252.136 port 42492 connected with 77.88.252.135 port 5001

[ 13] local 77.88.252.136 port 42491 connected with 77.88.252.135 port 5001

[ 11] local 77.88.252.136 port 42493 connected with 77.88.252.135 port 5001

[ 14] local 77.88.252.136 port 42494 connected with 77.88.252.135 port 5001

[ 12] local 77.88.252.136 port 42495 connected with 77.88.252.135 port 5001

[ 16] local 77.88.252.136 port 42496 connected with 77.88.252.135 port 5001

[ 15] local 77.88.252.136 port 42498 connected with 77.88.252.135 port 5001

[ 18] local 77.88.252.136 port 42497 connected with 77.88.252.135 port 5001

[ 17] local 77.88.252.136 port 42499 connected with 77.88.252.135 port 5001

[ 21] local 77.88.252.136 port 42500 connected with 77.88.252.135 port 5001

[ 22] local 77.88.252.136 port 42501 connected with 77.88.252.135 port 5001

[ 20] local 77.88.252.136 port 42502 connected with 77.88.252.135 port 5001

[ ID] Interval       Transfer     Bandwidth

[  4]  0.0-10.0 sec  7.79 MBytes  6.53 Mbits/sec

[ 10]  0.0-10.0 sec  8.04 MBytes  6.73 Mbits/sec

[ 14]  0.0-10.0 sec  6.90 MBytes  5.77 Mbits/sec

[ 13]  0.0-10.0 sec  8.16 MBytes  6.81 Mbits/sec

[ 15]  0.0-10.0 sec  7.19 MBytes  6.00 Mbits/sec

[ 18]  0.0-10.1 sec  7.20 MBytes  6.00 Mbits/sec

[ 21]  0.0-10.1 sec  7.34 MBytes  6.12 Mbits/sec

[  7]  0.0-10.1 sec  2.73 MBytes  2.27 Mbits/sec

[ 11]  0.0-10.1 sec  7.27 MBytes  6.04 Mbits/sec

[  3]  0.0-10.1 sec  10.6 MBytes  8.83 Mbits/sec

[  5]  0.0-10.1 sec  2.95 MBytes  2.45 Mbits/sec

[ 17]  0.0-10.1 sec  7.20 MBytes  5.96 Mbits/sec

[  6]  0.0-10.2 sec  9.50 MBytes  7.85 Mbits/sec

[ 20]  0.0-10.2 sec  2.42 MBytes  1.99 Mbits/sec

[ 12]  0.0-10.2 sec  7.15 MBytes  5.88 Mbits/sec

[ 22]  0.0-10.2 sec  2.22 MBytes  1.82 Mbits/sec

[  8]  0.0-10.3 sec  2.37 MBytes  1.93 Mbits/sec

[  9]  0.0-10.3 sec  3.23 MBytes  2.62 Mbits/sec

[ 16]  0.0-10.4 sec  4.59 MBytes  3.69 Mbits/sec

[ 19]  0.0-10.4 sec  2.66 MBytes  2.13 Mbits/sec

[SUM]  0.0-10.4 sec    118 MBytes  94.4 Mbits/sec

94,4 Мбіт/с були близькими до номінальних 100 Мбіт/с для цього тесту. Початкові журнали й адреси збережено як історичні дані, а не як запрошення тестувати ці сервери сьогодні.

Як інтерпретувати вимірювання

Паралельні потоки, затримка, втрата пакетів, навантаження вузлів і напрям передавання впливають на результат. 20 потоків не описують продуктивність кожного окремого застосунку.

Старий приклад використовує iperf 2 і порт 5001. iperf3 — інша реалізація: її сервер і клієнт слід використовувати узгоджено. Для сучасного тесту звіряйте параметри з документацією ESnet iperf3, а для старого сценарію — з документацією iperf 2.

субота, 21 січня 2012 р.

Чорний екран Ubuntu через KVM-перемикач: історичне налаштування Xorg

Під час роботи із серверами через апаратний KVM-перемикач у нашій конфігурації Ubuntu вибирала завелику роздільну здатність і частоту 100 Гц. KVM не показував зображення, а за відсутності мережевого доступу це ускладнювало керування сервером. Тут KVM означає перемикання клавіатури, відео та миші, а не технологію віртуалізації Linux.

Приклад конфігурації Xorg

У системі не було файла /etc/X11/xorg.conf. Для цього випадку ми створили його й задали параметри дисплея вручну. Нижче збережено приклад із первинної публікації:

Section "Monitor"
Identifier  "My Monitor"
HorizSync   31.5 - 50.0
VertRefresh 40-90
EndSection

Section "Screen"
Identifier    "Default Screen"
Monitor     "My Monitor"
DefaultDepth 24
Subsection "Display"
Depth       24
Modes "1024x768"
ViewPort 0 0
EndSubsection
EndSection

Частоти монітора та передавання DDC

Значення HorizSync та VertRefresh стосуються конкретної конфігурації й не є універсальними межами для будь-якого монітора. Їх потрібно брати з характеристик обладнання та враховувати можливості KVM. Перед змінами збережіть попередню конфігурацію й спосіб повернутися до робочого відеорежиму.

Відсутність xorg.conf сама по собі не є помилкою: Xorg підтримує автоматичне визначення обладнання. Його офіційна довідка окремо згадує KVM, які не передають інформацію DDC. Описаний приклад належить до історичного середовища Xorg і не переноситься безпосередньо на всі сучасні графічні сеанси.

Графічне віддалене адміністрування Ubuntu: x11vnc і віртуальні сеанси

Сервер Linux можна адмініструвати через текстовий термінал за SSH або через графічний сеанс. Для графічного доступу важливо спочатку визначити завдання: працювати з уже відкритим робочим столом чи створити окремий сеанс.

Дві програми, які я використовував

Для графічного адміністрування я використовував два серверні застосунки з різним призначенням:

  • x11vnc дає доступ до наявного X-дисплея. Це зручно, коли потрібно бачити той самий робочий стіл, що й локальний користувач.
  • vnc4server у описаній старій конфігурації використовувався для окремих віртуальних робочих столів. Такий сеанс не слід плутати з екраном фізичного монітора.

Як визначити потрібний дисплей

Позначення :0 часто відповідає першому локальному X-дисплею, проте номер сам по собі не гарантує, що це саме поточний монітор. Потрібно перевіряти, який X-сервер і сеанс обслуговує конкретний процес.

Нотатка стосується історичного налаштування Ubuntu з X11. Наявність пакета vnc4server та спосіб запуску залежать від випуску дистрибутива; опис не є універсальною інструкцією для Wayland. Призначення x11vnc пояснено в офіційному репозиторії проєкту.

Сканування шляхів phpMyAdmin: що показує журнал Nginx 2011 року

У нотатці, опублікованій у січні 2012 року, я навів серію підозрілих HTTP-запитів до нашого сервера. Самі записи датовано 30 серпня 2011 року. Усі вони звертаються до різних можливих каталогів phpMyAdmin та файла scripts/setup.php.

Фрагмент журналу

Нижче збережено всі 45 записів із початкової публікації. Вони охоплюють проміжок від 08:44:26 до 08:44:49 за вказаним у журналі часовим поясом +0300.

72.55.148.21 - - [30/Aug/2011:08:44:26 +0300] "GET //admdb/scripts/setup.php HTTP/1.1" 403 169 "-" "-"
72.55.148.21 - - [30/Aug/2011:08:44:26 +0300] "GET //!mysql/scripts/setup.php HTTP/1.1" 403 169 "-" "-"
72.55.148.21 - - [30/Aug/2011:08:44:27 +0300] "GET //phpma1/scripts/setup.php HTTP/1.1" 403 169 "-" "-"
72.55.148.21 - - [30/Aug/2011:08:44:27 +0300] "GET //adminsql/scripts/setup.php HTTP/1.1" 403 169 "-" "-"
72.55.148.21 - - [30/Aug/2011:08:44:27 +0300] "GET //madm/scripts/setup.php HTTP/1.1" 403 169 "-" "-"
72.55.148.21 - - [30/Aug/2011:08:44:28 +0300] "GET //ladminadminl/scripts/setup.php HTTP/1.1" 403 169 "-" "-"
72.55.148.21 - - [30/Aug/2011:08:44:29 +0300] "GET //myad/scripts/setup.php HTTP/1.1" 403 169 "-" "-"
72.55.148.21 - - [30/Aug/2011:08:44:32 +0300] "GET //PmA/scripts/setup.php HTTP/1.1" 403 169 "-" "-"
72.55.148.21 - - [30/Aug/2011:08:44:33 +0300] "GET //phpMyAdmin-2.11.5.1-all-languages/scripts/setup.php HTTP/1.1" 403 169 "-" "-"
72.55.148.21 - - [30/Aug/2011:08:44:33 +0300] "GET //phpmyadmin_2.10/scripts/setup.php HTTP/1.1" 403 169 "-" "-"
72.55.148.21 - - [30/Aug/2011:08:44:33 +0300] "GET //phpmyadmin2011/scripts/setup.php HTTP/1.1" 403 169 "-" "-"
72.55.148.21 - - [30/Aug/2011:08:44:33 +0300] "GET //phpmyadmin211/scripts/setup.php HTTP/1.1" 403 169 "-" "-"
72.55.148.21 - - [30/Aug/2011:08:44:37 +0300] "GET //phpMyAdmin211/scripts/setup.php HTTP/1.1" 403 169 "-" "-"
72.55.148.21 - - [30/Aug/2011:08:44:37 +0300] "GET //pma2011/scripts/setup.php HTTP/1.1" 403 169 "-" "-"
72.55.148.21 - - [30/Aug/2011:08:44:37 +0300] "GET //pma211/scripts/setup.php HTTP/1.1" 403 169 "-" "-"
72.55.148.21 - - [30/Aug/2011:08:44:38 +0300] "GET //db2011/scripts/setup.php HTTP/1.1" 403 169 "-" "-"
72.55.148.21 - - [30/Aug/2011:08:44:38 +0300] "GET //db211/scripts/setup.php HTTP/1.1" 403 169 "-" "-"
72.55.148.21 - - [30/Aug/2011:08:44:38 +0300] "GET //dbadmin2011/scripts/setup.php HTTP/1.1" 403 169 "-" "-"
72.55.148.21 - - [30/Aug/2011:08:44:41 +0300] "GET //php2011/scripts/setup.php HTTP/1.1" 403 169 "-" "-"
72.55.148.21 - - [30/Aug/2011:08:44:42 +0300] "GET //php211/scripts/setup.php HTTP/1.1" 403 169 "-" "-"
72.55.148.21 - - [30/Aug/2011:08:44:42 +0300] "GET //_sql/scripts/setup.php HTTP/1.1" 403 169 "-" "-"
72.55.148.21 - - [30/Aug/2011:08:44:42 +0300] "GET //sql2011/scripts/setup.php HTTP/1.1" 403 169 "-" "-"
72.55.148.21 - - [30/Aug/2011:08:44:43 +0300] "GET //sql211/scripts/setup.php HTTP/1.1" 403 169 "-" "-"
72.55.148.21 - - [30/Aug/2011:08:44:43 +0300] "GET //phpadmin2011/scripts/setup.php HTTP/1.1" 403 169 "-" "-"
72.55.148.21 - - [30/Aug/2011:08:44:43 +0300] "GET //phpadmin211/scripts/setup.php HTTP/1.1" 403 169 "-" "-"
72.55.148.21 - - [30/Aug/2011:08:44:43 +0300] "GET //mysql2011/scripts/setup.php HTTP/1.1" 403 169 "-" "-"
72.55.148.21 - - [30/Aug/2011:08:44:44 +0300] "GET //mysql211/scripts/setup.php HTTP/1.1" 403 169 "-" "-"
72.55.148.21 - - [30/Aug/2011:08:44:44 +0300] "GET //phpM/scripts/setup.php HTTP/1.1" 403 169 "-" "-"
72.55.148.21 - - [30/Aug/2011:08:44:44 +0300] "GET //phpMyAdmin.life/scripts/setup.php HTTP/1.1" 403 169 "-" "-"
72.55.148.21 - - [30/Aug/2011:08:44:45 +0300] "GET //pma_2/scripts/setup.php HTTP/1.1" 403 169 "-" "-"
72.55.148.21 - - [30/Aug/2011:08:44:45 +0300] "GET //phpMyAdmini/scripts/setup.php HTTP/1.1" 403 169 "-" "-"
72.55.148.21 - - [30/Aug/2011:08:44:45 +0300] "GET //phpmysql/sql/scripts/setup.php HTTP/1.1" 403 169 "-" "-"
72.55.148.21 - - [30/Aug/2011:08:44:45 +0300] "GET //pma_ai/scripts/setup.php HTTP/1.1" 403 169 "-" "-"
72.55.148.21 - - [30/Aug/2011:08:44:46 +0300] "GET //mygoodadmin/scripts/setup.php HTTP/1.1" 403 169 "-" "-"
72.55.148.21 - - [30/Aug/2011:08:44:46 +0300] "GET //wp-pma-mod/scripts/setup.php HTTP/1.1" 403 169 "-" "-"
72.55.148.21 - - [30/Aug/2011:08:44:46 +0300] "GET //phpMyAdmin-old/scripts/setup.php HTTP/1.1" 403 169 "-" "-"
72.55.148.21 - - [30/Aug/2011:08:44:47 +0300] "GET //phpma/scripts/setup.php HTTP/1.1" 403 169 "-" "-"
72.55.148.21 - - [30/Aug/2011:08:44:47 +0300] "GET //madm/scripts/setup.php HTTP/1.1" 403 169 "-" "-"
72.55.148.21 - - [30/Aug/2011:08:44:47 +0300] "GET //php_jibin/scripts/setup.php HTTP/1.1" 403 169 "-" "-"
72.55.148.21 - - [30/Aug/2011:08:44:47 +0300] "GET //db_my/scripts/setup.php HTTP/1.1" 403 169 "-" "-"
72.55.148.21 - - [30/Aug/2011:08:44:48 +0300] "GET //data_admin/scripts/setup.php HTTP/1.1" 403 169 "-" "-"
72.55.148.21 - - [30/Aug/2011:08:44:48 +0300] "GET //phpMyAdmin-2.11.1/scripts/setup.php HTTP/1.1" 403 169 "-" "-"
72.55.148.21 - - [30/Aug/2011:08:44:48 +0300] "GET //rootsql/scripts/setup.php HTTP/1.1" 403 169 "-" "-"
72.55.148.21 - - [30/Aug/2011:08:44:48 +0300] "GET //rcsu_mydb/scripts/setup.php HTTP/1.1" 403 169 "-" "-"
72.55.148.21 - - [30/Aug/2011:08:44:49 +0300] "GET //phpMyAdmin-2.11.9.6/scripts/setup.php HTTP/1.1" 403 169 "-" "-"

Що можна встановити

Видно послідовні GET-запити з однієї записаної IP-адреси до багатьох варіантів шляху інсталяційного скрипта. Така послідовність схожа на автоматизований пошук доступного phpMyAdmin. Це висновок із наведеного фрагмента, а не встановлення особи чи намірів власника адреси.

В усіх записах сервер повернув 403. За HTTP-семантикою це відмова виконати запит. Вона не доводить ані існування конкретного файла, ані успішного доступу до нього. Поля журналу залежать від налаштованого формату access_log Nginx.

Чому «брутфорс» був неточною назвою

Початковий заголовок називав подію спробою злому брутфорсом. Однак у цьому фрагменті немає доказів перебору паролів: видно перебір URL. Також ці записи самі собою не підтверджують злам, виконання шкідливого коду чи відмову сервера.

Великий потік запитів може створювати навантаження, але для оцінки наслідків потрібні ширший журнал, частота запитів, час обробки та метрики ресурсів. З наведених 45 рядків не можна зробити висновок, що база даних або вебсервер припинили роботу.

Практичний висновок для адміністратора

Перевірте, які адміністративні й інсталяційні інтерфейси справді доступні з мережі та кому вони потрібні. Перегляньте суміжні записи, налаштування доступу й актуальність установлених компонентів. Історична IP-адреса не є підставою для висновків про її поточного користувача.

Команда phpMyAdmin радить стежити за оновленнями безпеки, використовувати HTTPS і обмежувати доступ до службових ресурсів. Реальний захист визначають налаштування сервера та застосунку; robots.txt не є механізмом авторизації.

Ammyy Admin: історичний досвід вибору засобу віддаленого доступу

Пошук зручного засобу віддаленого доступу

Під час пошуку зручного інструмента віддаленого адміністрування я випробував VNC, Radmin, CrossLoop, TeamViewer і передавання екрана через Skype. У моїх тодішніх умовах жоден варіант повністю не задовольняв потреб: відрізнялися мережеві налаштування, набір функцій, стабільність і умови використання.

У моїй роботі через Skype додатковою умовою була наявність самого Skype, а сеанси здавалися нестабільними. CrossLoop тоді не вистачало потрібних мені функцій порівняно з TeamViewer; у TeamViewer мене вже не влаштовували умови використання.

Що мені сподобалося в Ammyy Admin

Зрештою звернув увагу на Ammyy Admin. У початковій публікації я відзначав такі переваги:

  • підключення за ідентифікатором без публічної IP-адреси на кожному кінці;
  • прийнятну для моїх завдань роботу як у швидких, так і в повільних мережах;
  • передавання файлів;
  • простий інтерфейс і запуск невеликого виконуваного файла без звичайної процедури встановлення.

Мережеві умови підключення

Підключення через NAT, файловий менеджер і роботу без встановлення також описує розробник. Водночас працездатність залежить від мережі, політик доступу й конкретної версії програми; вислів «працює через будь-який брандмауер» був би надмірним узагальненням.

Для прямого VNC-з’єднання потрібен мережевий шлях до сервера, але це не означає обов’язкову публічну IP-адресу на кожному пристрої. Так само умови ліцензування TeamViewer не можна зводити до твердження «став платним» без уточнення редакції та виду використання.

Після підключення VPN зникає інтернет: перевірка шлюзу та маршрутів

Якщо після встановлення VPN-з’єднання перестають відкриватися зовнішні сайти, причиною може бути зміна маршруту за замовчуванням. Частина VPN-профілів спрямовує весь трафік через віддалену мережу, де вихід в інтернет має бути налаштований окремо.

Варіант для старого інтерфейсу Windows

У початковій нотатці допомогла така зміна: властивості VPN-з’єднання → «Мережа» → властивості TCP/IP → «Додатково» → зняти прапорець «Використовувати основний шлюз у віддаленій мережі» (Use default gateway on remote network).

Це один зі способів розділити маршрути: зовнішній трафік іде через локальне підключення, а потрібні корпоративні підмережі — через VPN. Для віддалених ресурсів необхідні відповідні маршрути; саме зняття прапорця не налаштовує їх автоматично. Назви й доступність пунктів залежать від версії Windows та VPN-клієнта.

Застосовуйте таку зміну лише для профілю, де дозволена роздільна маршрутизація. Якщо організація вимагає передавати весь трафік через VPN, адміністратор має перевірити вихід в інтернет на стороні віддаленої мережі. Також варто відрізняти проблему маршрутів від збою DNS — одна зміна шлюзу не усуває всі можливі причини.

Опис цього випадку та налаштування клієнта: Microsoft Learn, KB 317025.

Навантажувальне тестування K2 ERP: що перевірити до пікової зміни

Демонстраційна база швидко відкривається, презентація переконлива, а справжня перевірка починається перед відправленням машин: склад проводи...