Vorgabe:
- HS/FS-Visu
- einzelne VPN-User sollen per KNX-GA freigegeben werden können
- Verbindungsstatus einzelner User auf die HS-Visu bringen via KNX
- Wartungs-VPN aktivierbar (=Standardfunktion)
- VPN-Clients werden "ganz normal" übers Webif angelegt, im Plugin nicht aufgeführte User dürfen sich immer einwählen. VPN-Server-Config ist separat zu machen.
- Beim Verbindungsauf&abbau wird auf die in vpn_usermap_status hinterlegte Gruppenadresse eine 0 (Offline) bzw. 1 (Online) gesendet
- Beide Gruppenadressen (Freigabe&Status) können per Lesetelegramm vom Bus abgefragt werden.
Sponsored by Helmut, vielleicht stellt er uns noch einen Screenshot dazu
-> Realisiert per "selbstinstallierendem" Plugin:
(Die einzelnen Schritte und erklärungen evtl. separat)
Man braucht nicht mehr zu machen als das Plugin einzufügen und die Gruppenadressen/VPNClient-Namen unter ### Definitionen zu ändern
Makki
- HS/FS-Visu
- einzelne VPN-User sollen per KNX-GA freigegeben werden können
- Verbindungsstatus einzelner User auf die HS-Visu bringen via KNX
- Wartungs-VPN aktivierbar (=Standardfunktion)
- VPN-Clients werden "ganz normal" übers Webif angelegt, im Plugin nicht aufgeführte User dürfen sich immer einwählen. VPN-Server-Config ist separat zu machen.
- Beim Verbindungsauf&abbau wird auf die in vpn_usermap_status hinterlegte Gruppenadresse eine 0 (Offline) bzw. 1 (Online) gesendet
- Beide Gruppenadressen (Freigabe&Status) können per Lesetelegramm vom Bus abgefragt werden.
Sponsored by Helmut, vielleicht stellt er uns noch einen Screenshot dazu

-> Realisiert per "selbstinstallierendem" Plugin:
Code:
# Plugin zu (de)aktivieren von VPN-Usern per KNX-GA # Hinweise: # Umlaute, Sonderzeichen, Leerzeichen etc. in VPN-Clientnamen vermeiden! # Gross/Kleinschreibung beachten! # (default) hier nicht genannte VPN-User sind aktiviert # Eigenen Aufruf-Zyklus auf 300 Sekunden setzen $plugin_info{$plugname.'_cycle'} = 86400; my %vpn_usermap; # Eintrag darf nicht auskommentiert werden my %vpn_usermap_status; # Eintrag darf nicht auskommentiert werden ############################################################################## ### Definitionen ############################################################################## my $install = 1; # Installiere skripte/config bei Bedarf # KNX-Ga zum freigeben der User - Namen wie in VPN-config $vpn_usermap{'0/7/202'} = "kunde-hsbetreuer"; $vpn_usermap{'0/7/204'} = "kunde-notebook"; $vpn_usermap{'0/7/206'} = "kunde-knx-betreuer"; $vpn_usermap{'0/7/210'} = "kunde-netzwerkbetreuer"; # KNX-GA Verbindungs-Status der User - Namen wie in VPN-config $vpn_usermap_status{'0/7/203'} = "kunde-hsbetreuer"; $vpn_usermap_status{'0/7/205'} = "kunde-notebook"; $vpn_usermap_status{'0/7/207'} = "kunde-knx-betreuer"; $vpn_usermap_status{'0/7/211'} = "kunde-netzwerkbetreuer"; ############################################################################## ### Ende Definitionen ############################################################################## if (%msg) { if ($msg{'apci'} eq "A_GroupValue_Write" and $vpn_usermap{$msg{'dst'}}) { if($msg{'data'}+0) { #enable unlink("/etc/openvpn/servers/$vpn_usermap{$msg{'dst'}}.disabled"); return "enabled $vpn_usermap{$msg{'dst'}} by $msg{'dst'}"; } else { #disable my $dummy = `echo "disabled" > /etc/openvpn/servers/$vpn_usermap{$msg{'dst'}}.disabled`; return "DISabled $vpn_usermap{$msg{'dst'}} by $msg{'dst'}"; } } elsif ($msg{'apci'} eq "A_GroupValue_Read" and $vpn_usermap{$msg{'dst'}}) { my $status = 0; $status = 1 unless (-e "/etc/openvpn/servers/$vpn_usermap{$msg{'dst'}}.disabled"); my @args = ($eib_grpresp_bin, $eib_url, $msg{'dst'},sprintf("%02X", $status)); system(@args); } elsif ($msg{'apci'} eq "A_GroupValue_Read" and $vpn_usermap_status{$msg{'dst'}}) { my $status = `grep "^$vpn_usermap_status{$msg{'dst'}}" /var/run/openvpn.server.status`; $status = 1 unless (!$status); my @args = ($eib_grpresp_bin, $eib_url, $msg{'dst'},sprintf("%02X", $status)); system(@args); } } else { # cyclic/init/change # subscribe GA's while( my ($k, $v) = each(%vpn_usermap) ) { # Plugin an Gruppenadresse "anmelden" $plugin_subscribe{$k}{$plugname} = 1; } open(OUT, ">/etc/openvpn/servers/VPNGA_MAP"); while( my ($k, $v) = each(%vpn_usermap_status) ) { # Plugin an Gruppenadresse "anmelden" $plugin_subscribe{$k}{$plugname} = 1; # Write VPNGA_MAP print OUT "$v=$k\n"; } close(OUT); # Self-installer ;) Multiline-print doesn't work somehow return unless $install; if (! -e '/etc/openvpn/connect.sh' or ! -e '/etc/openvpn/disconnect.sh') { open(OUT, ">/etc/openvpn/connect.sh"); print OUT "#!/bin/bash\n\nif [ -e /etc/openvpn/servers/\$common_name.disabled ]; then\n"; print OUT "\tlogger -t VPN 'refused disabled VPN-user \$common_name from \$trusted_ip'\n"; print OUT "\texit 1\nelse \n"; print OUT "\tlogger -t VPN '\$common_name logged in from \$trusted_ip (\$ifconfig_pool_remote_ip)'\n"; print OUT "\tVPNGA=`grep \"^\$common_name=\" /etc/openvpn/servers/VPNGA_MAP | cut -d'=' -f 2`\n"; print OUT "\tgroupswrite local:/tmp/eib \$VPNGA 1\nfi\nexit 0\n"; close(OUT); open(OUT, ">/etc/openvpn/disconnect.sh"); print OUT "#!/bin/bash\n\n"; print OUT "logger -t VPN '\$common_name logged out from \$trusted_ip (\$ifconfig_pool_remote_ip) T: \$time_duration S: \$bytes_sent R: \$bytes_received'\n"; print OUT "VPNGA=`grep \"^\$common_name\" /etc/openvpn/servers/VPNGA_MAP | cut -d'=' -f 2`\n"; print OUT "groupswrite local:/tmp/eib \$VPNGA 0\n"; close(OUT); chmod 0755, "/etc/openvpn/connect.sh","/etc/openvpn/disconnect.sh"; `sync`; } if (! `grep '^client-connect' /etc/openvpn/server.conf` ) { open(OUT, ">>/etc/openvpn/server.conf"); print OUT "script-security 2\nclient-connect connect.sh\nclient-disconnect disconnect.sh\n"; close OUT; `/etc/init.d/openvpn restart`; `sync`; } } return;
Man braucht nicht mehr zu machen als das Plugin einzufügen und die Gruppenadressen/VPNClient-Namen unter ### Definitionen zu ändern
Makki
Kommentar