mirror of
https://github.com/Ysurac/openmptcprouter-vps-admin.git
synced 2025-03-09 15:40:05 +00:00
Add multiple DSVPN support
This commit is contained in:
parent
fe726e1c3f
commit
6266935a7c
1 changed files with 57 additions and 8 deletions
65
omr-admin.py
65
omr-admin.py
|
@ -123,6 +123,25 @@ def add_glorytun_udp(userid):
|
||||||
f.write(glorytun_udp_key)
|
f.write(glorytun_udp_key)
|
||||||
os.system("systemctl -q restart glorytun-udp@tun" + str(userid))
|
os.system("systemctl -q restart glorytun-udp@tun" + str(userid))
|
||||||
|
|
||||||
|
def add_dsvpn(userid):
|
||||||
|
port = '654{:02d}'.format(userid)
|
||||||
|
with open('/etc/dsvpn/dsvpn0','r') as f, open('/etc/dsvpn/dsvpn' + str(userid),'a+') as n:
|
||||||
|
for line in f:
|
||||||
|
if 'PORT' in line:
|
||||||
|
n.write('PORT=' + port + "\n")
|
||||||
|
elif 'DEV' in line:
|
||||||
|
n.write('DEV=dsvpn' + str(userid) + "\n")
|
||||||
|
elif 'LOCALTUNIP' in line:
|
||||||
|
n.write('LOCALTUNIP=10.255.251.' + str(userid) + '1' + "\n")
|
||||||
|
elif 'LOCALTUNIP' in line:
|
||||||
|
n.write('REMOTETUNIP=10.255.251.' + str(userid) + '2' + "\n")
|
||||||
|
else:
|
||||||
|
n.write(line)
|
||||||
|
dsvpn_key = secrets.token_hex(32)
|
||||||
|
with open('/etc/dsvpn/dsvpn' + str(userid) + '.key','w') as f:
|
||||||
|
f.write(glorytun_tcp_key)
|
||||||
|
os.system("systemctl -q restart dsvpn@dsvpn" + str(userid))
|
||||||
|
|
||||||
def ordered(obj):
|
def ordered(obj):
|
||||||
if isinstance(obj, dict):
|
if isinstance(obj, dict):
|
||||||
return sorted((k, ordered(v)) for k, v in obj.items())
|
return sorted((k, ordered(v)) for k, v in obj.items())
|
||||||
|
@ -459,14 +478,24 @@ def config(current_user: User = Depends(get_current_user)):
|
||||||
glorytun_udp_host_ip = '10.255.254.' + str(userid) + '1'
|
glorytun_udp_host_ip = '10.255.254.' + str(userid) + '1'
|
||||||
glorytun_udp_client_ip = '10.255.254.' + str(userid) + '2'
|
glorytun_udp_client_ip = '10.255.254.' + str(userid) + '2'
|
||||||
available_vpn = ["glorytun-tcp", "glorytun-udp"]
|
available_vpn = ["glorytun-tcp", "glorytun-udp"]
|
||||||
if os.path.isfile('/etc/dsvpn/dsvpn.key'):
|
if os.path.isfile('/etc/dsvpn/dsvpn' + str(userid) + '.key'):
|
||||||
dsvpn_key = open('/etc/dsvpn/dsvpn.key').readline().rstrip()
|
dsvpn_key = open('/etc/dsvpn/dsvpn' + str(userid) + '.key').readline().rstrip()
|
||||||
available_vpn.append("dsvpn")
|
available_vpn.append("dsvpn")
|
||||||
else:
|
else:
|
||||||
dsvpn_key = ''
|
dsvpn_key = ''
|
||||||
dsvpn_port = '65011'
|
dsvpn_port = '65401'
|
||||||
dsvpn_host_ip = '10.255.251.1'
|
if os.path.isfile('/etc/dsvpn/dsvpn' + str(userid)):
|
||||||
dsvpn_client_ip = '10.255.251.2'
|
with open('/etc/dsvpn/dsvpn' + str(userid),"r") as dsvpn_file:
|
||||||
|
for line in dsvpn_file:
|
||||||
|
if 'PORT=' in line:
|
||||||
|
dsvpn_port = line.replace(line[:5], '').rstrip()
|
||||||
|
|
||||||
|
if userid == 0:
|
||||||
|
dsvpn_host_ip = '10.255.251.1'
|
||||||
|
dsvpn_client_ip = '10.255.251.2'
|
||||||
|
else:
|
||||||
|
dsvpn_host_ip = '10.255.251.' + str(userid) + '1'
|
||||||
|
dsvpn_client_ip = '10.255.251.' + str(userid) + '2'
|
||||||
|
|
||||||
if os.path.isfile('/etc/iperf3/public.pem'):
|
if os.path.isfile('/etc/iperf3/public.pem'):
|
||||||
with open('/etc/iperf3/public.pem',"rb") as iperfkey_file:
|
with open('/etc/iperf3/public.pem',"rb") as iperfkey_file:
|
||||||
|
@ -913,16 +942,30 @@ def dsvpn(*,params: DSVPN,current_user: User = Depends(get_current_user)):
|
||||||
if current_user.permission == "ro":
|
if current_user.permission == "ro":
|
||||||
set_lastchange(10)
|
set_lastchange(10)
|
||||||
return {'result': 'permission','reason': 'Read only user','route': 'dsvpn'}
|
return {'result': 'permission','reason': 'Read only user','route': 'dsvpn'}
|
||||||
|
userid = current_user.userid
|
||||||
|
if userid == None:
|
||||||
|
userid = 0
|
||||||
key = params.key
|
key = params.key
|
||||||
port = params.port
|
port = params.port
|
||||||
if not key or port is None:
|
if not key or port is None:
|
||||||
return {'result': 'error','reason': 'Invalid parameters','route': 'dsvpn'}
|
return {'result': 'error','reason': 'Invalid parameters','route': 'dsvpn'}
|
||||||
initial_md5 = hashlib.md5(file_as_bytes(open('/etc/dsvpn/dsvpn.key', 'rb'))).hexdigest()
|
|
||||||
|
fd, tmpfile = mkstemp()
|
||||||
|
with open('/etc/dsvpn/dsvpn' + str(userid),'r') as f, open(tmpfile,'a+') as n:
|
||||||
|
for line in f:
|
||||||
|
if 'PORT=' in line:
|
||||||
|
n.write('PORT=' + str(port) + '\n')
|
||||||
|
else:
|
||||||
|
n.write(line)
|
||||||
|
os.close(fd)
|
||||||
|
move(tmpfile,'/etc/dsvpn/dsvpn' + str(userid))
|
||||||
|
|
||||||
|
initial_md5 = hashlib.md5(file_as_bytes(open('/etc/dsvpn/dsvpn' + str(userid) + '.key', 'rb'))).hexdigest()
|
||||||
with open('/etc/dsvpn/dsvpn.key','w') as outfile:
|
with open('/etc/dsvpn/dsvpn.key','w') as outfile:
|
||||||
outfile.write(key)
|
outfile.write(key)
|
||||||
final_md5 = hashlib.md5(file_as_bytes(open('/etc/dsvpn/dsvpn.key', 'rb'))).hexdigest()
|
final_md5 = hashlib.md5(file_as_bytes(open('/etc/dsvpn/dsvpn' + str(userid) + '.key', 'rb'))).hexdigest()
|
||||||
if not initial_md5 == final_md5:
|
if not initial_md5 == final_md5:
|
||||||
os.system("systemctl -q restart dsvpn-server")
|
os.system("systemctl -q restart dsvpn-server@dsvpn" + str(userid))
|
||||||
shorewall_add_port(current_user.username,str(port),'tcp','dsvpn')
|
shorewall_add_port(current_user.username,str(port),'tcp','dsvpn')
|
||||||
set_lastchange()
|
set_lastchange()
|
||||||
return {'result': 'done'}
|
return {'result': 'done'}
|
||||||
|
@ -975,6 +1018,12 @@ def router(*,lanconfig: Lanips,current_user: User = Depends(get_current_user)):
|
||||||
if not lanips:
|
if not lanips:
|
||||||
return {'result': 'error','reason': 'Invalid parameters','route': 'lan'}
|
return {'result': 'error','reason': 'Invalid parameters','route': 'lan'}
|
||||||
modif_config_user(current_user,{'lanips': lanips})
|
modif_config_user(current_user,{'lanips': lanips})
|
||||||
|
with open('/etc/openmptcprouter-vps-admin/omr-admin-config.json') as f:
|
||||||
|
omr_config_data = json.load(f)
|
||||||
|
client2client = false
|
||||||
|
if 'client2client' in omr_config_data:
|
||||||
|
client2client = omr_config_data["client2client"]
|
||||||
|
|
||||||
return {'result': 'done','reason': 'changes applied'}
|
return {'result': 'done','reason': 'changes applied'}
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue