Sommige gebruikers huren relatief goedkope VPS met Windows voor het draaien van een remote desktopservice. Hetzelfde kan ook op Linux worden gedaan zonder dat er eigen hardware in een datacenter moet worden geplaatst of een dedicated server moet worden gehuurd. Sommigen hebben een vertrouwde grafische omgeving nodig voor tests en ontwikkeling of een remote desktop met een breed kanaal om met mobiele apparaten te werken. Er zijn talloze toepassingsmogelijkheden voor het op het Remote FrameBuffer (RFB) protocol gebaseerde Virtual Network Computing (VNC) systeem. In dit korte artikel bespreken we hoe je het kunt instellen op een virtuele machine met een hypervisor.
Inhoudsopgave:
Kiezen van een VNC-server
De VNC-service kan in het virtualisatiesysteem worden ingebouwd, waarbij de hypervisor deze verbindt met de geëmuleerde apparaten, zodat er geen extra configuratie nodig is. Deze optie brengt aanzienlijke overhead met zich mee en wordt lang niet door alle providers ondersteund — zelfs in minder resource-intensieve implementaties, waarbij in plaats van het emuleren van een echt grafisch apparaat, een vereenvoudigde abstractie (framebuffer) aan de virtuele machine wordt doorgegeven. Soms wordt de VNC-server gekoppeld aan een werkende X-server, maar deze methode is beter geschikt voor toegang tot een fysiek apparaat, aangezien het op een virtuele machine een aantal technische complicaties met zich meebrengt. Het eenvoudigste is om een VNC-server met een ingebouwde X-server te installeren. Dit vereist geen fysieke apparaten (zoals een videoadapter, toetsenbord of muis) of hun emulatie via de hypervisor, en is daarom geschikt voor elk type VPS.
Installatie en configuratie
We hebben een virtuele machine met Ubuntu Server 18.04 LTS nodig in de standaardconfiguratie. In de standaard repositories van deze distributie zijn er verschillende VNC-servers beschikbaar: , , en andere. We hebben gekozen voor TigerVNC — de actuele fork van het niet-ondersteunde TightVNC. De configuratie van andere servers verloopt op een vergelijkbare manier. Ook moet je een desktopomgeving kiezen: naar onze mening is XFCE de beste optie vanwege de relatief lage eisen aan de computermiddelen. Wie wil, kan een andere DE of WM installeren: de keuze hangt hier volledig af van persoonlijke voorkeuren, maar de keuze van de software heeft directe invloed op de behoefte aan RAM en rekenkernen.

De installatie van de desktopomgeving met alle afhankelijkheden wordt uitgevoerd met de volgende opdracht:
sudo apt-get install xfce4 xfce4-goodies xorg dbus-x11 x11-xserver-utilsVervolgens moeten we de VNC-server installeren:
sudo apt-get install tigervnc-standalone-server tigervnc-commonHet is een slechte idee om het met superuser-rechten uit te voeren. Laten we een gebruiker en groep aanmaken:
sudo adduser vnc 
Voeg de gebruiker toe aan de sudo-groep, zodat hij administratieve taken kan uitvoeren. Als dit niet nodig is, kan deze stap worden overgeslagen:
sudo gpasswd -a vnc sudoIn de volgende stap moet je de VNC-server starten met de rechten van de gebruiker vnc, zodat je een veilig wachtwoord en configuratiebestanden in de map ~/.vnc/ kunt aanmaken. De lengte van het wachtwoord kan tussen de 6 en 8 tekens zijn (overtollige tekens worden verwijderd). Indien nodig kan er ook een alleen-voor-weergave wachtwoord ingesteld worden, dat wil zeggen zonder toegang tot het toetsenbord en de muis. De volgende commando's worden uitgevoerd onder de naam van gebruiker vnc:
su - vnc
vncserver -localhost no 
Standaard gebruikt het RFB-protocol een bereik van TCP-poorten van 5900 tot 5906 - dit zijn de zogenaamde schermpoorten, die elk overeenkomen met een X-server scherm. De poorten zijn geassocieerd met schermen van :0 tot :6. De door ons opgestarte VNC-server luistert naar poort 5901 (scherm :1). Andere exemplaren kunnen op andere poorten draaien met schermen :2, :3 enzovoort. Voordat we verder gaan met de configuratie, moeten we de server stoppen:
vncserver -kill :1Het commando zou ongeveer deze melding moeten geven: 'Killing Xtigervnc process ID 18105… success!'.
Bij het starten van TigerVNC voert het het script ~/.vnc/xstartup uit om de configuratie-instellingen in te stellen. Laten we een eigen script maken, nadat we een back-up hebben gemaakt van het bestaande, indien aanwezig:
mv ~/.vnc/xstartup ~/.vnc/xstartup.b
nano ~/.vnc/xstartupDe desktopomgeving XFCE wordt gestart met het volgende xstartup-script:
#!/bin/bash
unset SESSION_MANAGER
unset DBUS_SESSION_BUS_ADDRESS
xrdb $HOME/.Xresources
exec /usr/bin/startxfce4 &Het commando xrdb is nodig zodat het VNC-systeem het bestand .Xresources in de thuismap leest. Hier kan de gebruiker verschillende parameters voor de grafische desktop definiëren: lettertype-rendering, terminal-kleuren, cursor-thema's, enz. Het script moet uitvoerbaar worden gemaakt:
chmod 755 ~/.vnc/xstartupDe configuratie van de VNC-server is hiermee voltooid. Als je het start met het commando vncserver -localhost no (onder de gebruiker vnc), kun je met het eerder ingestelde wachtwoord verbinding maken en het volgende beeld zien:

De service starten via systemd
Handmatig de VNC-server starten is niet geschikt voor productiegebruik, daarom stellen we een systeemdienst in. De commando's worden uitgevoerd onder de naam root (gebruik sudo). Laten we beginnen met het aanmaken van een nieuwe eenheid-bestand voor onze server:
sudo nano /etc/systemd/system/vncserver@.serviceHet symbool @ in de naam maakt het mogelijk om een argument door te geven voor de configuratie van de dienst. In ons geval stelt het de poort van het VNC-scherm in. Het eenheid-bestand bestaat uit verschillende secties:
[Unit]
Description=TigerVNC server
After=syslog.target network.target
[Service]
Type=simple
User=vnc
Group=vnc
WorkingDirectory=/home/vnc
PIDFile=/home/vnc/.vnc/%H:%i.pid
ExecStartPre=-/usr/bin/vncserver -kill :%i > /dev/null 2>&1
ExecStart=/usr/bin/vncserver -depth 24 -geometry 1280x960 :%i
ExecStop=/usr/bin/vncserver -kill :%i
[Install]
WantedBy=multi-user.targetVervolgens moet je systemd op de hoogte brengen van de nieuwe file en deze activeren:
sudo systemctl daemon-reload
sudo systemctl enable vncserver@1.serviceHet cijfer 1 in de naam geeft het schermnummer aan.
Stop de VNC-server, start deze als een service en controleer de status:
# от имени пользователя vnc
vncserver -kill :1# с привилегиями суперпользователя
sudo systemctl start vncserver@1
sudo systemctl status vncserver@1Als de service actief is, zouden we ongeveer dit resultaat moeten krijgen.

Verbinden met de desktop
Onze configuratie maakt geen gebruik van encryptie, waardoor netwerkpakketten door kwaadwillenden onderschept kunnen worden. Bovendien worden er bij VNC-servers vaak , dus het is niet verstandig om deze toegang vanuit het internet te geven. Voor een veilige verbinding op de lokale computer moet het verkeer in een SSH-tunnel worden verpakt, en daarna moet de VNC-client worden ingesteld. Onder Windows kan je een grafische SSH-client gebruiken (bijvoorbeeld PuTTY). Voor de veiligheid luistert TigerVNC op de server alleen naar localhost en is deze niet rechtstreeks toegankelijk vanuit openbare netwerken:
sudo netstat -ap |more 
In Linux, FreeBSD, OS X en andere UNIX-achtige besturingssystemen wordt de tunnel van de clientcomputer gemaakt met het utiliteitsprogramma ssh (op de VNC-server moet sshd actief zijn):
ssh -L 5901:127.0.0.1:5901 -C -N -l vnc vnc_server_ipDe optie -L koppelt de poort 5901 van de externe verbinding aan poort 5901 op localhost. De optie -C schakelt compressie in, en -N geeft het ssh-programma aan dat er geen externe opdracht uitgevoerd hoeft te worden. De optie -l geeft de login voor de externe toegang aan.
Na het instellen van de tunnel op de lokale computer moet de VNC-client worden gestart en verbinding gemaakt met de host 127.0.0.1:5901 (localhost:5901), waarbij het eerder ingestelde wachtwoord voor de toegang tot de VNC-server wordt gebruikt. Nu kunnen we veilig communiceren via een versleutelde tunnel met de desktopomgeving XFCE op de VPS. Op de screenshot in de terminalemulator is het utiliteitsprogramma top gestart om het geringe verbruik van de virtuele machine van rekenkracht te tonen. Verder hangt alles af van de gebruikersapplicaties.

Een VNC-server op Linux installeren en configureren kan op vrijwel elke VPS. Hiervoor zijn geen dure en veeleisende configuraties met video-adapteremulatie of de aankoop van commerciële softwarelicenties nodig. Naast de door ons besproken systeemdienst zijn er ook andere opties: opstarten als een daemon (via /etc/rc.local) bij het opstarten van het systeem of op aanvraag via inetd. Laatstgenoemde is interessant voor het creëren van multi-user configuraties. De internet-superserver start de VNC-server en verbindt deze met de client, terwijl de VNC-server een nieuw scherm creëert en een sessie start. Voor authenticatie binnen deze sessie kan een grafische display manager worden gebruikt (bijvoorbeeld, ), en na het loskoppelen van de client wordt de sessie afgesloten en worden alle programma's die op het scherm draaide beëindigd.
Bron: habr.com
