Synology-Forum.nl
Firmware => Synology DSM algemeen => Topic gestart door: UnixExpertWannaBe op 02 oktober 2024, 23:59:41
-
Hallo. Ik gebruik een vertaler omdat ik geen Nederlands spreek, dus wees geduldig.
Mijn probleem is dat het gebruik van de standaard keepalive richtlijn in het OpenVPN server bestand niet voldoet aan mijn behoeften, omdat ik de detectie van Synology's OpenVPN Server van afgelopen, dode VPN-verbindingen (van een bepaalde CN = Common Name) erg onstabiel vind. Volgens de logbestanden heeft de server 120 seconden nodig om een dode VPN-sessie (van een bepaalde CN) te verbreken, wat te lang is.
Ik zou de keepalive-richtlijn drastisch kunnen verlagen, maar gezien het feit dat veel van de laptops die de VPN gebruiken om verbinding te maken met de NAS deze onstabiele mobiele breedband 4G modem/router USB-sticks gebruiken, zou dit er toe leiden dat de laptops de VPN-verbinding steeds weer verbreken, dus dat is in mijn geval niet echt een optie.
Wat zijn mijn opties? Ik heb een python-script geschreven dat de klus zou moeten klaren, maar ik weet niet zeker of dit op dit moment de beste manier is. Hoe dan ook, hier is mijn python-script:
#!/usr/bin/env python3
import socket
import sys
import time
import argparse
import logging
logging.basicConfig(filename='/path/to/logfile.log', level=logging.INFO)
def send_command_to_socket(command, socket_path="/path/to/socket"):
try:
sock = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM)
sock.connect(socket_path)
sock.sendall(f"{command}\n".encode())
response = receive_all(sock)
sock.close()
return response
except socket.error as e:
logging.error(f"Socket error: {e}")
return None
def receive_all(sock):
response = ""
sock.settimeout(5)
try:
while True:
data = sock.recv(8192).decode()
if not data:
break
response += data
if "END" in data or "ERROR:" in data:
break
except socket.timeout:
logging.error("Socket timed out while receiving data.")
return response
def is_client_connected(status_output, client_cn):
lines = status_output.split('\n')
client_list_started = False
for line in lines:
if line.startswith('CLIENT_LIST'):
client_list_started = True
parts = line.strip().split(',')
if len(parts) > 1 and parts[1] == client_cn:
return True
elif client_list_started and line == 'END':
break
return False
def wait_for_disconnect(client_cn, socket_path, timeout=10):
start_time = time.time()
while time.time() - start_time < timeout:
time.sleep(1)
status_output = send_command_to_socket("status", socket_path=socket_path)
if status_output is None:
logging.error("Failed to retrieve status while waiting for disconnect.")
return False
if not is_client_connected(status_output, client_cn):
return True
return False
parser = argparse.ArgumentParser(description='Manage OpenVPN client sessions.')
parser.add_argument('client_cn', help='Client common name')
parser.add_argument('client_ip', help='Client IP address')
args = parser.parse_args()
client_cn = args.client_cn
client_ip = args.client_ip
status_output = send_command_to_socket("status")
if status_output is None:
logging.error("Failed to retrieve status from OpenVPN management interface.")
sys.exit(1)
elif is_client_connected(status_output, client_cn):
logging.info(f"Existing connection found for client: {client_cn}. Killing old session.")
send_command_to_socket(f"kill {client_cn}")
if wait_for_disconnect(client_cn, socket_path="/path/to/socket"):
logging.info(f"Session for {client_cn} successfully killed.")
else:
logging.error(f"Failed to kill session for {client_cn}.")
else:
logging.info(f"No existing session for client: {client_cn}.")
-
Ik vind het al heel wat dat je in ieder geval probeert je reactie in het Nederlands te stellen.
Omdat dit een Nederlandstalig forum is, schrijf ik in principe ook mijn reactie „in het Nederlands“ (ik ken niet je moedertaal).
Er zijn ook internationale gebruikers communities van Synology:
Because this is a Dutch-language forum, I will also write my response "in Dutch" in principle.
(I don't know your native language). There are also international user communities of Synology:
https://community.synology.com/enu/forum/1
https://www.synoforum.com/
https://www.synology.com/en-global/support/community
https://www.reddit.com/r/synology/
https://mariushosting.com/
Vertalen / translate:
Het gemakkelijkste de huidige "AI" versie „Microsoft Edge“ webbrowser te gebruiken, om terug te vertalen naar je eigen taal.
(Weet namelijk niet wat je eigen moedertaal is).
The easiest way to use the current AI version of "Microsoft Edge" web browser, to translate back to your own language.
(I don't know what your own native language is).
1. Mogelijke oplossing die ik vond om een kortere "reconnect" tijd in te stellen:
(Vermijd de code om naar een andere server te gaan zoeken):
https://forums.openvpn.net/viewtopic.php?t=30877
2. Bij mobiele connecties met mogelijke verbrekingen / overgang tussen de ene mobiele zendmast en een andere zendmast.
Aanpassing OpenVPN configuratiebestand. Gebruik van het commando "float".
Dat commando is zodanig krachtig, dat het een VPN verbinding herstelt, als je tijdens een VPN-verbindingg via "vast internet",
overgaat naar een mobiele hotspot verbinding. (Van WiFi met thuisnetwerk, handmatig wisselen naar WiFi SSID mobiele hotspot).
Standaard, zonder verdere aanpassingen van code, wordt de VPN-verbinding hiermee binnen een minuut hersteld.
Mogelijk nog te combineren met een kortere responstijd / reconnect zoals bij punt 1. omschreven.
Overigens heb ik die laatste mogelijkheid in combinatie met punt 1. zelf niet werkend gekregen.
(Als U tot een kortere responstijd kan komen, hoor ik dat graag).
# The "float" tells OpenVPN to accept authenticated packets from any address,
# not only the address which was specified in the --remote option.
# This is useful when you are connecting to a peer which holds a dynamic address
# such as a dial-in user or DHCP client.
# (Please refer to the manual of OpenVPN for more information.)
float
OpenVPN:
OpenVPN is eigenlijk altijd al een „zorgenkindje“, omdat implementaties voor een Synology NAS (of router),
doorgaans altijd al ver achterlopen met updates van OpenVPN zelf.
En dat is ook nog afhankelijk welke versie DSM versie je gebruikt voor een NAS (of SRM voor een Synology router).
Met betrekking tot een „onbetrouwbare“ en „onstabiele“ VPN-connectie, denk ik dat je het in de verkeerde aanpassingen zoekt.
Het gaat niet zozeer om een verkorting van de tijd om een nieuwe VPN connectie op te zetten,
na storingen en verbreking van een onstabiele VPN verbinding.
Maar om een VPN verbinding veel stabieler te maken, zodat verbrekingen gewoonweg niet (nauwelijks) voorkomen.
Eerder heb ik eens een „marathon“ VPN-test uitgevoerd. (Echt meer dan "42 VPN connecties" tests).
Met aanbevelingen waar op te letten.
https://www.synology-forum.nl/synology-router/bug-in-laatste-versie-vpn-plus-1-4-2-0533/msg305776/#msg305776
Wel testen met VPN verbindingen van/naar (of vanuit) een Synology router.
Maar overlapt tevens de functies ook die van een VPN server geïnstalleerd op een NAS.
M.b.t. OpenVPN
Daar zou ik nu nog meer aanvullende „correcties“ op kunnen toevoegen aan „code“
die in een OpenVPN configuratie bestand "tegenwoordig" moeten worden toegevoegd.
Om te voldoen aan de „huidige“ OpenVPN standaarden. (Bijgewerkt tot pakweg zomer 2024).
Afhankelijk waarop je nu problemen ervaart, is daar mogelijk nog specifiek advies op te geven.
Bedenk verder ook nogal wat "gedonder" als je internetverbindingen tevens ook met IPv6 zijn geconfigureerd.
De meeste "Synology VPN verbindingen" en opties met "VPN Server" (op een NAS), zijn enkel nog "IPv4" gerelateerd.
Overigens ben ikzelf helemaal niet thuis in "python-scripts". :o :geek: