VPN automatikus újracsatlakoztatása

 ( lajos22 | 2018. január 12., péntek - 13:27 )

Üdv,
Belefutottam egy problémába, a nagyszerű internetszolgáltató, óránként kényszeríti ki az IP cím cserét, ezért a szépen beröffentett VPN leszakad. Azt szeretném megoldani, hogy ilyen esetben a helyi gép (Linux) amint lehet (tehát megszületett az új IP), csatlakozzon vissza a szerverre (szintén Linux, openVPN) anélkül, hogy nekem oda kéne menni naponta és mutogassam még 835263. alkalommal is, hogy mit kell bepötyögni a terminálba (pedig már színes-szagos script is van rá, és csak 3 betűt kell így megjegyezni.)

Köszi előre is.

Hozzászólás megjelenítési lehetőségek

A választott hozzászólás megjelenítési mód a „Beállítás” gombbal rögzíthető.

Kell egy cron script ami percenként pinggel és ha gond van újracsatlakozik. Vagy egy Mikrotik router Netwatch-csal.

Mikrotik kiesik. A cron scriptes megoldáson elgondolkodtam, azt gondoltam előtte körbejárom van-e elegánsabb megoldása.

--
openSUSE 42.2 x86_64

Elegánsabb normális internetre váltani.

Amúgy lehetne olyan scriptet vagy programot írni, ami végtelen ciklusban fut és nem kell cron se hozzá, valami paraszt démon :D . De nem hiszem hogy ne lenne már kész megoldás valami Netwatch szerű dologra jobb disztrók alatt, csak lusta voltam ilyet keresni.

Annyit nem fizetnek, hogy paraszt daemont írjak rá.

--
openSUSE 42.2 x86_64

annyira nem értesz hozzá hogy annyit fizessenek :P

--
Gábriel Ákos

Tedógod, de egy vájltrúdupingif leírása SZERINTEM kisebb erőfeszítés, mint megtalálni, telepíteni és ellenőrizni valamit, ami effektíve egy vájltrúdupingifet csinál - rossz esetben mellékhatása is van.

man 8 openvpn a varázsszó a "keepalive" :-P

https://hup.hu/node/142079
--
Gábriel Ákos

Néztem az autostart=true paramétert, de szarik rá.

--
openSUSE 42.2 x86_64

Lentebb a keepalive opciót ajálnják, már a végefele.

Na azon átsiklottam. Megalkottam egy olyan konfigot, meglátom mi lesz.

--
openSUSE 42.2 x86_64

- Csinalj egy bash scriptet, ami elinditja az openvpn kapcsolatot, DE nem forkolja magat processbe, hanem a terminalban fut, ertsd: ha bezarod a terminalt, megszakad a kapcsolat.

- Tedd fel a circus nevu process managert( https://circus.readthedocs.io/en/latest/ ), az /etc/circus/conf.d/ mappaban csinalj egy vpn.ini filet, valahogy igy:


[watcher:vpn]
working_dir = /opt/vpn
cmd = ./VPN_Tunnel
args =
uid = ovpn
numprocesses = 1
autostart = true
send_hup = true
stdout_stream.class = FileStream
stdout_stream.filename = /var/log/vpn_stdout.log
stdout_stream.max_bytes = 10485760
stdout_stream.backup_count = 12
stderr_stream.class = FileStream
stderr_stream.filename = /var/log/vpn_stderr.log
stderr_stream.max_bytes = 10485760
stderr_stream.backup_count = 12

A `working_dir`, `cmd`, `args`, `uid` parametereket tessek ertelemszeruen kitolteni, utana

`circusctl reloadconfig` majd `circusctl status`
ha a vpn nevu watcher active akkor elvileg mindent jol csinaltal es kesz vagy.
ha a megszakad a vpn, akkor az autostart = true es send_hup = true miatt triggerelni fogja a parancsot ismet.

Ubuntu 16.04 alatt ezzel futtatok minden ilyen jellegu processt mindenfele hiba nelkul

-------------------------
Roses are red
Violets are blue
Unexpected '}' on line 32

Ok, ránézek, ha az eddigi nem jött be. Hátha visszanő a hajam végre. :D

--
openSUSE 42.2 x86_64

Nomostan ilyen respawn dolgot már a jó öreg sysvinit is tudott, és ez a systemd-ból sem veszett ki, úgyhogy mielőtt repókon kívülről (javítása, frissítése megoldatlan) plusz lomokat rak fel, illene körbenézni, hogy házon belül hogz lehet/kell megoldani.
Egyébként meg mondjuk egy "keepalive 10 120" a konfigban.


#!/bin/bash +x

# Source: http://www.gabsoftware.com/tips/automatically-reconnect-to-your-vpn-on-linux/

# Description:
# Make the script executable "chmod +x /path/to/the/script.sh
# Put the script in .profile or .bashrc so it can be run on user login:
# Example: echo "/path/to/the/script.sh start &" >> .bashrc
# The script can be bound to shortcut keys with these commands:
# /path/to/the/script.sh start # starts and monitors VPN connection
# /path/to/the/script.sh stop # stops the monitor and also the VPN connection

##########
# Config #
##########

# You can see those with "nmcli con" command
VPN_NAME="VPN-Name"
VPN_UID="57ab4185-xxxx-xxxx-xxxx-291daa7d9a46"

# Delay in secconds
DELAY=30

# File path with write permission to the executing user to store script status information
LOG="/home/ohmy/.openvpn/vpn-reconnect.log"

# Enable/disable ping connection check
PING_CHECK_ENABLED=true

# Check IP/Hostname
CHECK_HOST="8.8.8.8"

# Configure DISPLAY variable for desktop notifications
DISPLAY=0.0

##################
# Implementation #
##################

if [[ $1 == "stop" ]]; then
nmcli con down uuid $VPN_UID

echo "VPN monitoring service STOPPED!"
echo "$(date +%Y/%m/%d\ %H:%M:%S) -> VPN monitoring service STOPPED!" >> $LOG
notify-send "VPN monitoring service STOPPED!"

SCRIPT_FILE_NAME=`basename $0`
PID=`pgrep -f $SCRIPT_FILE_NAME`
kill $PID
elif [[ $1 == "start" ]]; then
while [ "true" ]
do
VPNCON=$(nmcli con show --active | grep $VPN_NAME | cut -f1 -d " ")
if [[ $VPNCON != $VPN_NAME ]]; then
echo "$(date +%Y/%m/%d\ %H:%M:%S) -> Disconnected from $VPN_NAME, trying to reconnect..." >> $LOG
(sleep 1s && nmcli con up uuid $VPN_UID)
else
echo "$(date +%Y/%m/%d\ %H:%M:%S) -> Already connected to $VPN_NAME!" >> $LOG
fi
sleep $DELAY

if [[ $PING_CHECK_ENABLED = true ]]; then
PINGCON=$(ping $CHECK_HOST -c2 -q -W 3 |grep "2 received")
if [[ $PINGCON != *2*received* ]]; then
echo "$(date +%Y/%m/%d\ %H:%M:%S) -> Ping check timeout ($CHECK_HOST), trying to reconnect..." >> $LOG
(nmcli con down uuid $VPN_UID)
(sleep 1s && nmcli con up uuid $VPN_UID)
else
echo "$(date +%Y/%m/%d\ %H:%M:%S) -> Ping check ($CHECK_HOST) - OK!" >> $LOG
fi
fi
done

echo "VPN monitoring service STARTED!"
echo "$(date +%Y/%m/%d\ %H:%M:%S) -> VPN monitoring service STARTED!" >> $LOG
notify-send "VPN monitoring service STARTED!"
else
echo "$(date +%Y/%m/%d\ %H:%M:%S) -> Unrecognised command: $0 $@" >> $LOG
echo "Please use $0 [start|stop]"
notify-send "UNRECOGNIZED COMMAND" "VPN monitoring service could not recognise the command!"
fi

Nem kell ide cron, meg semmi script. ping, ping-restart, connect-retry, resolv-retry opciókat nézd meg.
--
"Sose a gép a hülye."

oriasi +1

+1

+vegyen ki minden manuális opciót, hogy terminálba bármit pötyögni kelljen.
még az openwrt-m is tudja, hogy betölti az openvpn-hez ami kell, és ha leszakad, magától újracsatlakozik.

debian(/ubuntu), meg tök alap, hogy az openvpn service csinálja a dolgát, ahogy kell.

+1

Általában elég a "ping n ping-restart m" párosra forduló keepalive n m :-D

[Feliratkozás]

Nem lehet esetleg beszélni a szolgáltatóval,hogy 10 per helyett legalább egy napig hagyja a kiosztott ip-t?
Ez szerintem amúgy sem normális időkorlát, az ő hálózatának is plusz terhelést ad.
És a VPN mindenképpen megszakad, pedig úgy néz ki,hogy az a cél,hogy ne szakadjon meg 10 percenként...


Nem csak az M$ számol furán... A Zinternet lenne ilyen gyors?
65% [62 Sources 1528 kB/6239 kB 24%] 3062 PB/s 0s

Az első kör a szolgáltató volt, ügyfélszolin mutogattak a ászf-re, hogy azért van, mert nem lehet szervert futtatni és így akadályozzák meg. Azt fel sem fogták, hogy nem onnan megy a szerver, hanem szerverre csatlakoznának.

--
openSUSE 42.2 x86_64

Ezek szatyorban élnek...? Dyndns és társairól hallottak-e? Egyébként lehet tudni, hogy melyik ez a kőkorszaki bagázs...?
Ha tényleg tíz percenként megszaggatnak minden sessiont, ami az ügyféltől kapcsolódik a nagyvilág felé, akkor én elkezdeném 10 percenként leadni hibára, mérve a reconnect() idejét, ami a 10 perchez képest elég, ha 20-30s, ugyanis az bizony szolgáltatáskiesés, és ha ezt minden 600s során megcsinálják, akkor máris ott van, hogy legfeljebb 95%-os rendelkezésre állással szolgáltatnak - bár gondolom, ennél sz@rabb érték a vállalásuk...

Azt hol láttad, hogy 10 percet írtam? Óránként, tehát 60 percenként kényszeríti ki, tehát nem is az, hogy max egy órát él az IP, ha nem csatlakozik semmi, hanem mindenképp bontja a modem a vonalat és reconnectel.

Amúgy azt hiszem Inviteltől átvette valami kis cég, azt meg így a kuplerájjal együtt a Digi. Legalább is most épp ő küldi a csekket. De ennél konkrétabb infóm nincs. Azt tudom, hogy a Digis macának panaszkodtam, ő meg küldött ászf-et nézni. Abban is erre "A munkaállomáshoz 1 db (dinamikusan változó) publikus IP címet biztosítunk. Internetszerverszolgáltatás
üzemeltetésére ebben a csomagban nincs lehetőség" kitérve. A problémát eleve nem is értette.

Ohh, egyébként ezen a hálózaton külső SMTP-re sem lehet csatlakozni, mert timeouttal eldobja a dolgot. Én az otthoni, lanos digiről simán csatlakozok bármilyen smtp-re. Ez is érdekes. Szóval átvették 1-1ben a szemetet, aztán úgy ahogy van, le is szarják

--
openSUSE 42.2 x86_64

A 10 perc Herka hozzászólásából jött: "hogy 10 per helyett legalább egy napig hagyja a kiosztott ip-t"

Nem túl vigasztaló, de várhatóan néhány hónap alatt azért gatyába fogják rázni (beintegrálják a Digi-s rendszerekbe) az egész kupit, ha sikerül, sajnos az ilyen dolgokkal baromi sok munka van, pláne, ha közben még szolgáltatni is kell. Csobánkai ismerőst is nyugtatgatom, hogy idővel ott is rend lesz, csak türelem...

A balfasz társaságot is ki kéne vágni az ügyfélszolgálatról. Vagy legalább egy csapat értelmeset is összerakni, ahova át lehet kérni az ügyintézést, ha egy "indítsa újra a windowst" megoldásnál komolyabbat akarok hallani.

--
openSUSE 42.2 x86_64

Szerintem van náluk felvétel jobbf@sz pozícióra :-P

Hát én akkor is megb***nám f****al a kedves szolgáltatót, ha óránként bontana.
Nézem épp a livestream-et (mielőtt bárki megkérdezné: legálisan, fizetek érte a jogtulajdonos cégnek), aztán a 3 órás közvetítés alatt a 3 szakadás tuti nem a reklámok közben történne, hanem amikor épp a legizgalmasabb események vannak.

+1, sajnos ez az "örökség", amit gatyába kell rázniuk - reméljük, az elsők között lesz az óránkénti bontás kihajítása, ha lehet, mert ez így tényleg nem XXI. századi szolgáltatás.

lol, +100
--
Gábriel Ákos

nekem crontabbol fut egy scriptem, ami pingel es nmcli-vel csatlakozik, ha kell.

Egyelőre úgy tűnik működik a dolog a keepalive opcióval, de IP változáskor 2-3, akár 5 percre is képtelen visszaéledni. Ez nem tudom miért van, de eddig csak a monitoring szólt érte, nem zavarja a munkát.

--
openSUSE 42.2 x86_64

Lehet a szerver oldalon kellene valamit még püfölni, valamint a naplót nézegetni, mit ír ilyenkor. Biztosan a régi címről várná a csomagokat, az új címről érkezőkre meg még nem válaszol egy darabig.
Ha a naplóból kilesnéd a hibaüzeneteket, talán könnyebben találnál megoldást. Esetleg még kipróbálni, hogy UDP helyett TCP-vel mennyire stabil a kapcsolat és milyen gyorsan reagál a kliens címének változására.

Aki meg ennyire kib63ik az ügyfeleivel, azt ott kell hagyni.

Semmit nem naplóz ilyenkor az a problémám.

--
openSUSE 42.2 x86_64

loglevelt célszerű ilyenkor állítani

Debug van. Még a programozó cerkájának aktuális állapota is a logban, de más nincs. Mintha eleve nem is kapna ilyenkor semmit.

--
openSUSE 42.2 x86_64

Csak tipp:
Valoszinu nem veszi eszre, hogy megszakadt alatta a kapcsolat. Esetleg erdemes lehetne TCP-re valtani es a VPN-ben par masodpercenkent pingelni. Ha a VPn-es gep kapcsolodik pppoe -vel, akkor valoszinu egz ip-up scriptbol is lehetne ezt jelezni az OpenVPN-nek.

--
http://blog.htmm.hu/