пʼятниця, 6 травня 2016 р.

Організація віддаленої технічної підтримки на VNC

Багато організацій використовують AmmyAdmin або TeamViewer для надання технічної підтримки працівникам/клієнтам. Але ці програми небезкоштовні для комерційного використання (і доволі недешеві). Можна закривати очі на ліцензійні проблеми або знайти безкоштовне рішення.

Рішення існує вже давно - VNC (Virtual Network Control). Зокрема є програма TightVnc, яка є цілком безкоштовною, працює на Linux, Windows (при чому на всіх версіях!) але має один серйозний недолік на фоні комерційних конкурентів - це складність встановлення з'єднання, коли і оператор і клієнт виходять в інтернет через NAT. Правду кажучи навіть TeamViewer має проблеми, коли клієнти/оператори сидять за подвійним NAT.

Отже, яка піґулка? Транзитний сервер. Є програми-репітери для VNC, наприклад uvncrepeater (упс... не працює з TightVnc для Windows) або reflector від TightVnc (мені не вдалося налаштувати його і через регулярні збої я відмовився від нього). Але ж у нас є SSH і тунелювання! Використаймо їх.

Отже, на сервері Linux з публічним IP організовуємо Remote Port Forwarding. Перш за все додаємо виняток у Firewall (дозвіл приймаи з'єднання на порт 5500) для вхідних VNC з'єднань від клієнтів. Плюс для нормальної роботи такого тунелю з можливістю зовнішніх підключень на порт необхідно включити в /etc/ssh/sshd_config дві опції:

AllowTcpForwarding yes
GatewayPorts yes

За потреби перезапускаємо ssh:

sudo service ssh restart

Тепер оператори з Linux створюють тунель до публічного сервера і включають Viewer в режимі реверсного підключення

ssh -Nf -R 5500:localhost:5500 user@remote.server.with.public.ip
ssvncviewer -listen

5500 - відкритий на публічному сервері порт. Якщо порт на сервері інший (скажімо умовно XXXX), тоді буде:

ssh -Nf -R XXXX:localhost:5500 user@remote.server.with.public.ip

-N - не виконувати команд на сервері. Лише port forwarding.
-f - перейти в фоновий режим після авторизації.
Обидві опції можна і не використовувати.

Клієнти з Windows тепер спокійно підключаються до публічного сервера за допомогою зворотнього (reverse) VNC на його публічний порт (5500 або XXXX). Права кн.миші -> Attach Listening Viewer...


remote.server.with.public.ip:5500

Клієнти з Linux використовують x11vnc:

vncconnect remote.server.with.public.ip:5500
Ось власне і все.