NPA Jantar s.r.o.
← Zpět na dokumentaci
⬇ Stáhnout PDF

Přesun VPN na nový server (test s automatickým návratem)

Platí pro verzi NPA R04: 2.15.beta9 · Vytvořeno: 2026-09-04

Jednotky se přesouvají na nový cloudový server (např. update.energyadmin.cz). Dosud se to dělalo ručně: do /data/npa_r04_cli.conf.en se zapsal nový remote a jednotka se restartovala. Když je ale u zákazníka blokovaná cesta k novému serveru (port UDP 1780, jiná IP), tunel se nenaváže a vzdálený přístup je ztracen.

Tlačítko Otestovat a přepnout na stránce Nastavení sítě (karta Přesun VPN na nový server, jen pro admina a vyšší) udělá totéž s pojistkou: přepne VPN dočasně, ověří spojení s novým serverem zprávou login (login.md) a když se server do zadané doby neozve, vrátí VPN na starý server.

Co se stane po stisknutí tlačítka

  1. Záloha: /data/npa_r04_cli.conf.en/data/npa_r04_cli.conf.en.bak.
  2. V .en se přepíše jen řádek remote na remote <nový server> <port>; zbytek souboru (klíče, certifikáty, proto, dev) zůstává beze změny. Port se převezme z původního řádku, není-li zadán jako host:port.
  3. Stav testu se zapíše do /data/vpn_switch.json (fáze testing, lhůta).
  4. systemctl restart openvpn-client@npa_r04_cli (aktivní config je symlink /data/npa_r04_cli.conf → .en, jednotka ho případně narovná).
  5. Zpráva login se posílá znovu od začátku, každých 15 s, na server odvozený z adresy nového tunelu (GetVpnNpaServerIp()). Zbytek cloudové komunikace (measuring) míří po navázání tunelu automaticky na nový server.

Úspěch

Nový server odpoví na login {"res":"ok"} → test končí OK, jednotka zůstává na novém serveru. Záloha se přejmenuje na /data/npa_r04_cli.conf.en.old-<starý server> (pro ruční návrat). Opakování loginu se vrátí na běžnou minutu.

Neúspěch

Server do lhůty (výchozí 180 s, nastavitelné 30–900 s) login nepotvrdí (tunel se nenaváže, server neběží, nemá endpoint /login…) → návrat:

  1. .bak.en (původní config byte po bytu), restart OpenVPN.
  2. Fáze reverting: login se posílá na starý server (každých 15 s, nejvýše 120 s), aby bylo vidět, že se spojení obnovilo. Pak test končí CHYBA s textem důvodu (poslední chyba loginu, např. VPN server IP neznama (tunel tun_npa_r04 nebezi)), .bak se smaže.

Tlačítko Zrušit test spustí návrat okamžitě (výsledek ZRUSENO).

Restart nebo reboot během testu

Stav je v /data/vpn_switch.json, takže po startu NPA se v testu pokračuje (lhůta běží dál) nebo, když lhůta mezitím vypršela, se rovnou provede návrat. Pomáhá to i při rebootu: OpenVPN po startu nabíhá s novým configem, ale NPA ho vrátí, když server nepotvrdí.

Kde je vidět výsledek

  • Karta na stránce Nastavení sítě: stav se obnovuje každé 3 s (vpn_switch_status), pod ním posledních 20 kroků (záloha, zápis, restart, návrat…).
  • Stránka Info, řádek Přesun VPN (poslední test) – zeleně OK, červeně CHYBA/ZRUŠENO, tučně probíhající test. Stejný řádek je v diagnostice (Kopírovat diagnostiku) spolu s aktuálním remote z .en.

Pozor: pokud jste připojeni přes VPN, spojení se během testu přeruší. Buď test spouštějte z místní sítě, nebo se po chvíli připojte přes nový (při úspěchu) či starý (při neúspěchu) server a výsledek přečtěte na stránce Info.

Podmínky

  • VPN zapnutá (ns_vpn = true) a cloud zapnutý (ns_cloud ≠ false) – jinak login neodejde a tlačítko odmítne start.
  • Nový server musí na POST /login odpovídat {"res":"ok"} (viz login.md). Server bez tohoto endpointu = test vždy skončí návratem.
  • Název serveru: host nebo host:port (písmena, číslice, tečky, pomlčky; musí obsahovat tečku). Test neběží, když už jiný běží, nebo když je zadaný server už nastaven.

Soubory

Soubor Význam
/data/npa_r04_cli.conf.en aktivní OpenVPN config (řádek remote host port)
/data/npa_r04_cli.conf.en.bak záloha po dobu testu; po skončení zmizí (přejmenuje se, nebo se smaže)
/data/npa_r04_cli.conf.en.old-<host> původní config po úspěšném přesunu (ruční návrat: zkopírovat zpět do .en a restartovat OpenVPN)
/data/vpn_switch.json stav a výsledek posledního testu (fáze, servery, lhůta, výsledek, log kroků)

Endpointy (HTTP, jen admin/guru/sasa, odpověď JSON)

Endpoint Význam
vpn_switch_start?host=<h>[:port]&timeout=<s> spustí test; {"res":"ok"} nebo {"res":"error","msg":…}
vpn_switch_status stav: phase (testing/reverting/done), new_host, old_host, seconds_left, result, result_text, current_remote, vpn_ip, srv_ip, login, text, log[]
vpn_switch_cancel okamžitý návrat na starý server

Zdrojové soubory

Část Soubor / symbol
Stavový automat, práce s configem a službou nvpnswitch.cppNVpnSwitch (Start, Loop, Revert, Finish, RewriteRemote, RestartOpenVpn)
Login s rychlým opakováním nremotelog.cppNRemoteLog::RestartLogin(), LoginOk()
Čtení remote z configu nstate.cppNState::ReadVpnRemote()
Routy server.cppvpn_switch_start / vpn_switch_status / vpn_switch_cancel
Web html/v2/vpn_switch.html (vkládá NHtml::NetSettings), html/v2/info.html