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
- Záloha:
/data/npa_r04_cli.conf.en→/data/npa_r04_cli.conf.en.bak. - V
.ense přepíše jen řádekremotenaremote <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 jakohost:port. - Stav testu se zapíše do
/data/vpn_switch.json(fázetesting, lhůta). systemctl restart openvpn-client@npa_r04_cli(aktivní config je symlink/data/npa_r04_cli.conf → .en, jednotka ho případně narovná).- 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:
.bak→.en(původní config byte po bytu), restart OpenVPN.- 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)),.bakse 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
remotez.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 /loginodpovídat{"res":"ok"}(vizlogin.md). Server bez tohoto endpointu = test vždy skončí návratem. - Název serveru:
hostnebohost: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.cpp → NVpnSwitch (Start, Loop, Revert, Finish, RewriteRemote, RestartOpenVpn) |
| Login s rychlým opakováním | nremotelog.cpp → NRemoteLog::RestartLogin(), LoginOk() |
Čtení remote z configu |
nstate.cpp → NState::ReadVpnRemote() |
| Routy | server.cpp → vpn_switch_start / vpn_switch_status / vpn_switch_cancel |
| Web | html/v2/vpn_switch.html (vkládá NHtml::NetSettings), html/v2/info.html |