generated from pavel.muhortov/template-bash
	Compare commits
	
		
			No commits in common. "76f1c8d6dfe4918d4b35ea3730e3a169edbe0e5f" and "142a389d266750128a032770faca644e743127fd" have entirely different histories.
		
	
	
		
			76f1c8d6df
			...
			142a389d26
		
	
		
							
								
								
									
										54
									
								
								README.md
									
									
									
									
									
								
							
							
						
						
									
										54
									
								
								README.md
									
									
									
									
									
								
							| 
						 | 
					@ -2,64 +2,12 @@
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Wireguard management and monitoring utils.
 | 
					Wireguard management and monitoring utils.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
* [`wg_status`.py](https://git.hmp.today/pavel.muhortov/wireguard-management#wg_status-py)
 | 
					 | 
				
			||||||
* [`wg-client-management`.sh](https://git.hmp.today/pavel.muhortov/wireguard-management#wg-client-management-sh)
 | 
					* [`wg-client-management`.sh](https://git.hmp.today/pavel.muhortov/wireguard-management#wg-client-management-sh)
 | 
				
			||||||
 | 
					* [`wg-connect-handling`.sh](https://git.hmp.today/pavel.muhortov/wireguard-management#wg-connect-handling-sh)
 | 
				
			||||||
* [`wg-heavy@wg1`.service](https://git.hmp.today/pavel.muhortov/wireguard-management#wg-heavy-wg1-service)
 | 
					* [`wg-heavy@wg1`.service](https://git.hmp.today/pavel.muhortov/wireguard-management#wg-heavy-wg1-service)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
____
 | 
					____
 | 
				
			||||||
 | 
					
 | 
				
			||||||
## `wg_status`.py
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
**Description:**  
 | 
					 | 
				
			||||||
> Wireguard server status parser.  
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
**Dependencies:**  
 | 
					 | 
				
			||||||
>
 | 
					 | 
				
			||||||
> * privileged rights
 | 
					 | 
				
			||||||
> * [Python 3](https://www.python.org/downloads/) (tested version 3.9.5 on [Debian GNU/Linux 11](http://ftp.debian.org/debian/dists/bullseye/))
 | 
					 | 
				
			||||||
> * [requests](https://requests.readthedocs.io/) Python 3 module (tested version 2.31.0)
 | 
					 | 
				
			||||||
> * to use peer names instead of their public keys, the existence of a directory with configurations or public keys of peers is required
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
| PARAMETERS   |       DESCRIPTION      |    DEFAULT    |
 | 
					 | 
				
			||||||
|--------------|------------------------|---------------|
 | 
					 | 
				
			||||||
|**[-p, --peers_root]**|root path to peers configs or public keys|`/etc/wireguard/pki`|
 | 
					 | 
				
			||||||
|**[-f, --filter]**|client names filter by regex|`.*`|
 | 
					 | 
				
			||||||
|**[-g, --geo]**|check client real ip geo location (may be slow)|`None`|
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
Example usage with Zabbix agent:  
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
```bash
 | 
					 | 
				
			||||||
# install dependencies
 | 
					 | 
				
			||||||
sudo pip install requests
 | 
					 | 
				
			||||||
# download
 | 
					 | 
				
			||||||
sudo wget https://git.hmp.today/pavel.muhortov/wireguard-management/raw/branch/master/wg_status.py -O /etc/wireguard/wg_status.py
 | 
					 | 
				
			||||||
sudo chmod +x /etc/wireguard/wg_status.py
 | 
					 | 
				
			||||||
```
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
```bash
 | 
					 | 
				
			||||||
# edit sudoers
 | 
					 | 
				
			||||||
sudo sh -c "echo '
 | 
					 | 
				
			||||||
zabbix  ALL=(ALL) NOPASSWD:/etc/wireguard/wg_status.py
 | 
					 | 
				
			||||||
' > /etc/sudoers.d/zabbix_agentd"
 | 
					 | 
				
			||||||
# check permission
 | 
					 | 
				
			||||||
sudo -u zabbix sudo /etc/wireguard/wg_status.py
 | 
					 | 
				
			||||||
```
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
```bash
 | 
					 | 
				
			||||||
# add UserParameter to Zabbix agent
 | 
					 | 
				
			||||||
sudo sh -c "echo '
 | 
					 | 
				
			||||||
Timeout=30
 | 
					 | 
				
			||||||
AllowRoot=0
 | 
					 | 
				
			||||||
UserParameter=discovery.wg, sudo /etc/wireguard/wg_status.py
 | 
					 | 
				
			||||||
' >> /etc/zabbix/zabbix_agentd.conf"
 | 
					 | 
				
			||||||
sudo systemctl restart zabbix-agent
 | 
					 | 
				
			||||||
```
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
Download [Wireguard_by_Zabbix_agent.yaml](https://git.hmp.today/pavel.muhortov/wireguard-management/raw/branch/master/Wireguard_by_Zabbix_agent.yaml) template  
 | 
					 | 
				
			||||||
Zabbix Server -> Configuration -> Templates -> Import template
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
____
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
## `wg-client-management`.sh
 | 
					## `wg-client-management`.sh
 | 
				
			||||||
 | 
					
 | 
				
			||||||
**Description:**  
 | 
					**Description:**  
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1,944 +0,0 @@
 | 
				
			||||||
zabbix_export:
 | 
					 | 
				
			||||||
  version: '6.0'
 | 
					 | 
				
			||||||
  date: '2023-08-16T11:10:34Z'
 | 
					 | 
				
			||||||
  groups:
 | 
					 | 
				
			||||||
    -
 | 
					 | 
				
			||||||
      uuid: a571c0d144b14fd4a87a9d9b2aa9fcd6
 | 
					 | 
				
			||||||
      name: Templates/Applications
 | 
					 | 
				
			||||||
  templates:
 | 
					 | 
				
			||||||
    -
 | 
					 | 
				
			||||||
      uuid: c3272861e3ff46e2b3daa302066c53c7
 | 
					 | 
				
			||||||
      template: 'OpenVPN by Zabbix agent'
 | 
					 | 
				
			||||||
      name: 'OpenVPN by Zabbix agent'
 | 
					 | 
				
			||||||
      description: 'OpenVPN by Zabbix agent'
 | 
					 | 
				
			||||||
      groups:
 | 
					 | 
				
			||||||
        -
 | 
					 | 
				
			||||||
          name: Templates/Applications
 | 
					 | 
				
			||||||
      items:
 | 
					 | 
				
			||||||
        -
 | 
					 | 
				
			||||||
          uuid: 51151af0bb704668a1bb3b390cee2039
 | 
					 | 
				
			||||||
          name: 'OpenVPN stats'
 | 
					 | 
				
			||||||
          key: discovery.ovpn
 | 
					 | 
				
			||||||
          history: 14d
 | 
					 | 
				
			||||||
          trends: '0'
 | 
					 | 
				
			||||||
          value_type: TEXT
 | 
					 | 
				
			||||||
          tags:
 | 
					 | 
				
			||||||
            -
 | 
					 | 
				
			||||||
              tag: Application
 | 
					 | 
				
			||||||
              value: OpenVPN
 | 
					 | 
				
			||||||
            -
 | 
					 | 
				
			||||||
              tag: 'OpenVPN stats'
 | 
					 | 
				
			||||||
              value: raw
 | 
					 | 
				
			||||||
        -
 | 
					 | 
				
			||||||
          uuid: 877b2f94cd4645fcaae13543f42d79be
 | 
					 | 
				
			||||||
          name: 'OpenVPN clients limit'
 | 
					 | 
				
			||||||
          type: DEPENDENT
 | 
					 | 
				
			||||||
          key: ovpn.clients.limit
 | 
					 | 
				
			||||||
          delay: '0'
 | 
					 | 
				
			||||||
          history: 14d
 | 
					 | 
				
			||||||
          units: client
 | 
					 | 
				
			||||||
          preprocessing:
 | 
					 | 
				
			||||||
            -
 | 
					 | 
				
			||||||
              type: JSONPATH
 | 
					 | 
				
			||||||
              parameters:
 | 
					 | 
				
			||||||
                - $.clients_limit
 | 
					 | 
				
			||||||
          master_item:
 | 
					 | 
				
			||||||
            key: discovery.ovpn
 | 
					 | 
				
			||||||
          tags:
 | 
					 | 
				
			||||||
            -
 | 
					 | 
				
			||||||
              tag: Application
 | 
					 | 
				
			||||||
              value: OpenVPN
 | 
					 | 
				
			||||||
            -
 | 
					 | 
				
			||||||
              tag: 'OpenVPN server'
 | 
					 | 
				
			||||||
              value: 'clients limit'
 | 
					 | 
				
			||||||
        -
 | 
					 | 
				
			||||||
          uuid: 00c5526a838e4f7791b4edafc20bb094
 | 
					 | 
				
			||||||
          name: 'OpenVPN expiration ca'
 | 
					 | 
				
			||||||
          type: DEPENDENT
 | 
					 | 
				
			||||||
          key: ovpn.expiration.ca
 | 
					 | 
				
			||||||
          delay: '0'
 | 
					 | 
				
			||||||
          history: 14d
 | 
					 | 
				
			||||||
          units: s
 | 
					 | 
				
			||||||
          preprocessing:
 | 
					 | 
				
			||||||
            -
 | 
					 | 
				
			||||||
              type: JSONPATH
 | 
					 | 
				
			||||||
              parameters:
 | 
					 | 
				
			||||||
                - $.ca_expiration
 | 
					 | 
				
			||||||
          master_item:
 | 
					 | 
				
			||||||
            key: discovery.ovpn
 | 
					 | 
				
			||||||
          tags:
 | 
					 | 
				
			||||||
            -
 | 
					 | 
				
			||||||
              tag: Application
 | 
					 | 
				
			||||||
              value: OpenVPN
 | 
					 | 
				
			||||||
            -
 | 
					 | 
				
			||||||
              tag: 'OpenVPN server'
 | 
					 | 
				
			||||||
              value: expiration
 | 
					 | 
				
			||||||
          triggers:
 | 
					 | 
				
			||||||
            -
 | 
					 | 
				
			||||||
              uuid: 34fbc5a346d0458c8e529b92f0aa39c5
 | 
					 | 
				
			||||||
              expression: 'last(/OpenVPN by Zabbix agent/ovpn.expiration.ca,#1)<86400'
 | 
					 | 
				
			||||||
              name: 'OpenVPN ca certificate expires in 1 day'
 | 
					 | 
				
			||||||
              priority: DISASTER
 | 
					 | 
				
			||||||
              tags:
 | 
					 | 
				
			||||||
                -
 | 
					 | 
				
			||||||
                  tag: Application
 | 
					 | 
				
			||||||
                  value: OpenVPN
 | 
					 | 
				
			||||||
                -
 | 
					 | 
				
			||||||
                  tag: 'OpenVPN stats'
 | 
					 | 
				
			||||||
                  value: expiration
 | 
					 | 
				
			||||||
            -
 | 
					 | 
				
			||||||
              uuid: 016c7d7c40b342c883ff81d0a5817b75
 | 
					 | 
				
			||||||
              expression: 'last(/OpenVPN by Zabbix agent/ovpn.expiration.ca,#1)<604800'
 | 
					 | 
				
			||||||
              name: 'OpenVPN ca certificate expires in 7 days'
 | 
					 | 
				
			||||||
              priority: HIGH
 | 
					 | 
				
			||||||
              tags:
 | 
					 | 
				
			||||||
                -
 | 
					 | 
				
			||||||
                  tag: Application
 | 
					 | 
				
			||||||
                  value: OpenVPN
 | 
					 | 
				
			||||||
                -
 | 
					 | 
				
			||||||
                  tag: 'OpenVPN stats'
 | 
					 | 
				
			||||||
                  value: expiration
 | 
					 | 
				
			||||||
            -
 | 
					 | 
				
			||||||
              uuid: 2d9f9da08348499ab9b7584a9386abfc
 | 
					 | 
				
			||||||
              expression: 'last(/OpenVPN by Zabbix agent/ovpn.expiration.ca,#1)<2592000'
 | 
					 | 
				
			||||||
              name: 'OpenVPN ca certificate expires in 30 days'
 | 
					 | 
				
			||||||
              priority: AVERAGE
 | 
					 | 
				
			||||||
              tags:
 | 
					 | 
				
			||||||
                -
 | 
					 | 
				
			||||||
                  tag: Application
 | 
					 | 
				
			||||||
                  value: OpenVPN
 | 
					 | 
				
			||||||
                -
 | 
					 | 
				
			||||||
                  tag: 'OpenVPN stats'
 | 
					 | 
				
			||||||
                  value: expiration
 | 
					 | 
				
			||||||
            -
 | 
					 | 
				
			||||||
              uuid: 65912ffeb36a4b2c8bae996c0b865f69
 | 
					 | 
				
			||||||
              expression: 'last(/OpenVPN by Zabbix agent/ovpn.expiration.ca,#1)<7776000'
 | 
					 | 
				
			||||||
              name: 'OpenVPN ca certificate expires in 90 days'
 | 
					 | 
				
			||||||
              priority: WARNING
 | 
					 | 
				
			||||||
              tags:
 | 
					 | 
				
			||||||
                -
 | 
					 | 
				
			||||||
                  tag: Application
 | 
					 | 
				
			||||||
                  value: OpenVPN
 | 
					 | 
				
			||||||
                -
 | 
					 | 
				
			||||||
                  tag: 'OpenVPN stats'
 | 
					 | 
				
			||||||
                  value: expiration
 | 
					 | 
				
			||||||
        -
 | 
					 | 
				
			||||||
          uuid: 591d03b0553645788c5b178670cb8bc9
 | 
					 | 
				
			||||||
          name: 'OpenVPN expiration cert'
 | 
					 | 
				
			||||||
          type: DEPENDENT
 | 
					 | 
				
			||||||
          key: ovpn.expiration.cert
 | 
					 | 
				
			||||||
          delay: '0'
 | 
					 | 
				
			||||||
          history: 14d
 | 
					 | 
				
			||||||
          units: s
 | 
					 | 
				
			||||||
          preprocessing:
 | 
					 | 
				
			||||||
            -
 | 
					 | 
				
			||||||
              type: JSONPATH
 | 
					 | 
				
			||||||
              parameters:
 | 
					 | 
				
			||||||
                - $.ce_expiration
 | 
					 | 
				
			||||||
          master_item:
 | 
					 | 
				
			||||||
            key: discovery.ovpn
 | 
					 | 
				
			||||||
          tags:
 | 
					 | 
				
			||||||
            -
 | 
					 | 
				
			||||||
              tag: Application
 | 
					 | 
				
			||||||
              value: OpenVPN
 | 
					 | 
				
			||||||
            -
 | 
					 | 
				
			||||||
              tag: 'OpenVPN server'
 | 
					 | 
				
			||||||
              value: expiration
 | 
					 | 
				
			||||||
          triggers:
 | 
					 | 
				
			||||||
            -
 | 
					 | 
				
			||||||
              uuid: 6a2bc06ed9944e95bfdec45af330bd53
 | 
					 | 
				
			||||||
              expression: 'last(/OpenVPN by Zabbix agent/ovpn.expiration.cert,#1)<86400'
 | 
					 | 
				
			||||||
              name: 'OpenVPN cert certificate expires in 1 day'
 | 
					 | 
				
			||||||
              priority: DISASTER
 | 
					 | 
				
			||||||
              tags:
 | 
					 | 
				
			||||||
                -
 | 
					 | 
				
			||||||
                  tag: Application
 | 
					 | 
				
			||||||
                  value: OpenVPN
 | 
					 | 
				
			||||||
                -
 | 
					 | 
				
			||||||
                  tag: 'OpenVPN stats'
 | 
					 | 
				
			||||||
                  value: expiration
 | 
					 | 
				
			||||||
            -
 | 
					 | 
				
			||||||
              uuid: da6ae766472541e8addb2712584289c7
 | 
					 | 
				
			||||||
              expression: 'last(/OpenVPN by Zabbix agent/ovpn.expiration.cert,#1)<604800'
 | 
					 | 
				
			||||||
              name: 'OpenVPN cert certificate expires in 7 days'
 | 
					 | 
				
			||||||
              priority: HIGH
 | 
					 | 
				
			||||||
              tags:
 | 
					 | 
				
			||||||
                -
 | 
					 | 
				
			||||||
                  tag: Application
 | 
					 | 
				
			||||||
                  value: OpenVPN
 | 
					 | 
				
			||||||
                -
 | 
					 | 
				
			||||||
                  tag: 'OpenVPN stats'
 | 
					 | 
				
			||||||
                  value: expiration
 | 
					 | 
				
			||||||
            -
 | 
					 | 
				
			||||||
              uuid: 5571d2aa00a2479889bdd853b37d7160
 | 
					 | 
				
			||||||
              expression: 'last(/OpenVPN by Zabbix agent/ovpn.expiration.cert,#1)<2592000'
 | 
					 | 
				
			||||||
              name: 'OpenVPN cert certificate expires in 30 days'
 | 
					 | 
				
			||||||
              priority: AVERAGE
 | 
					 | 
				
			||||||
              tags:
 | 
					 | 
				
			||||||
                -
 | 
					 | 
				
			||||||
                  tag: Application
 | 
					 | 
				
			||||||
                  value: OpenVPN
 | 
					 | 
				
			||||||
                -
 | 
					 | 
				
			||||||
                  tag: 'OpenVPN stats'
 | 
					 | 
				
			||||||
                  value: expiration
 | 
					 | 
				
			||||||
            -
 | 
					 | 
				
			||||||
              uuid: 083b3ed043db4d209b093056c04605c3
 | 
					 | 
				
			||||||
              expression: 'last(/OpenVPN by Zabbix agent/ovpn.expiration.cert,#1)<7776000'
 | 
					 | 
				
			||||||
              name: 'OpenVPN cert certificate expires in 90 days'
 | 
					 | 
				
			||||||
              priority: WARNING
 | 
					 | 
				
			||||||
              tags:
 | 
					 | 
				
			||||||
                -
 | 
					 | 
				
			||||||
                  tag: Application
 | 
					 | 
				
			||||||
                  value: OpenVPN
 | 
					 | 
				
			||||||
                -
 | 
					 | 
				
			||||||
                  tag: 'OpenVPN stats'
 | 
					 | 
				
			||||||
                  value: expiration
 | 
					 | 
				
			||||||
        -
 | 
					 | 
				
			||||||
          uuid: 5ba0b1d455444ec8851c4cdda408ed24
 | 
					 | 
				
			||||||
          name: 'OpenVPN clients count'
 | 
					 | 
				
			||||||
          type: DEPENDENT
 | 
					 | 
				
			||||||
          key: ovpn.stats.clients_count
 | 
					 | 
				
			||||||
          delay: '0'
 | 
					 | 
				
			||||||
          history: 14d
 | 
					 | 
				
			||||||
          units: clients
 | 
					 | 
				
			||||||
          preprocessing:
 | 
					 | 
				
			||||||
            -
 | 
					 | 
				
			||||||
              type: JSONPATH
 | 
					 | 
				
			||||||
              parameters:
 | 
					 | 
				
			||||||
                - $.clients_count
 | 
					 | 
				
			||||||
          master_item:
 | 
					 | 
				
			||||||
            key: discovery.ovpn
 | 
					 | 
				
			||||||
          tags:
 | 
					 | 
				
			||||||
            -
 | 
					 | 
				
			||||||
              tag: Application
 | 
					 | 
				
			||||||
              value: OpenVPN
 | 
					 | 
				
			||||||
            -
 | 
					 | 
				
			||||||
              tag: 'OpenVPN stats'
 | 
					 | 
				
			||||||
              value: 'clients count'
 | 
					 | 
				
			||||||
        -
 | 
					 | 
				
			||||||
          uuid: 731f61d192f944769aaf82c2fb05676b
 | 
					 | 
				
			||||||
          name: 'OpenVPN clients found'
 | 
					 | 
				
			||||||
          type: DEPENDENT
 | 
					 | 
				
			||||||
          key: ovpn.stats.clients_found
 | 
					 | 
				
			||||||
          delay: '0'
 | 
					 | 
				
			||||||
          history: 14d
 | 
					 | 
				
			||||||
          units: clients
 | 
					 | 
				
			||||||
          preprocessing:
 | 
					 | 
				
			||||||
            -
 | 
					 | 
				
			||||||
              type: JSONPATH
 | 
					 | 
				
			||||||
              parameters:
 | 
					 | 
				
			||||||
                - $.clients_found
 | 
					 | 
				
			||||||
          master_item:
 | 
					 | 
				
			||||||
            key: discovery.ovpn
 | 
					 | 
				
			||||||
          tags:
 | 
					 | 
				
			||||||
            -
 | 
					 | 
				
			||||||
              tag: Application
 | 
					 | 
				
			||||||
              value: OpenVPN
 | 
					 | 
				
			||||||
            -
 | 
					 | 
				
			||||||
              tag: 'OpenVPN stats'
 | 
					 | 
				
			||||||
              value: 'clients found'
 | 
					 | 
				
			||||||
        -
 | 
					 | 
				
			||||||
          uuid: f38e82ba64f14385bd60a1397eda278c
 | 
					 | 
				
			||||||
          name: 'OpenVPN stats updated'
 | 
					 | 
				
			||||||
          type: DEPENDENT
 | 
					 | 
				
			||||||
          key: ovpn.stats.updated
 | 
					 | 
				
			||||||
          delay: '0'
 | 
					 | 
				
			||||||
          history: 14d
 | 
					 | 
				
			||||||
          trends: '0'
 | 
					 | 
				
			||||||
          value_type: TEXT
 | 
					 | 
				
			||||||
          preprocessing:
 | 
					 | 
				
			||||||
            -
 | 
					 | 
				
			||||||
              type: JSONPATH
 | 
					 | 
				
			||||||
              parameters:
 | 
					 | 
				
			||||||
                - $.stats_updated
 | 
					 | 
				
			||||||
          master_item:
 | 
					 | 
				
			||||||
            key: discovery.ovpn
 | 
					 | 
				
			||||||
          tags:
 | 
					 | 
				
			||||||
            -
 | 
					 | 
				
			||||||
              tag: Application
 | 
					 | 
				
			||||||
              value: OpenVPN
 | 
					 | 
				
			||||||
            -
 | 
					 | 
				
			||||||
              tag: 'OpenVPN stats'
 | 
					 | 
				
			||||||
              value: updated
 | 
					 | 
				
			||||||
      discovery_rules:
 | 
					 | 
				
			||||||
        -
 | 
					 | 
				
			||||||
          uuid: f6b3ac3373544c1f820c207234177816
 | 
					 | 
				
			||||||
          name: 'Discovery openvpn clients'
 | 
					 | 
				
			||||||
          type: DEPENDENT
 | 
					 | 
				
			||||||
          key: get.ovpn.stats
 | 
					 | 
				
			||||||
          delay: '0'
 | 
					 | 
				
			||||||
          item_prototypes:
 | 
					 | 
				
			||||||
            -
 | 
					 | 
				
			||||||
              uuid: fc55509717fc4ee7bef6f684932ee01a
 | 
					 | 
				
			||||||
              name: 'OpenVPN client "{#OVPN_CLIENT_NAME}" bytes recieved'
 | 
					 | 
				
			||||||
              type: DEPENDENT
 | 
					 | 
				
			||||||
              key: 'ovpn.client.b_rx.name[{#OVPN_CLIENT_NAME}]'
 | 
					 | 
				
			||||||
              delay: '0'
 | 
					 | 
				
			||||||
              history: 14d
 | 
					 | 
				
			||||||
              units: B
 | 
					 | 
				
			||||||
              preprocessing:
 | 
					 | 
				
			||||||
                -
 | 
					 | 
				
			||||||
                  type: JSONPATH
 | 
					 | 
				
			||||||
                  parameters:
 | 
					 | 
				
			||||||
                    - '$.data.[?(@.name=="{#OVPN_CLIENT_NAME}")].b_rx.first()'
 | 
					 | 
				
			||||||
              master_item:
 | 
					 | 
				
			||||||
                key: discovery.ovpn
 | 
					 | 
				
			||||||
              tags:
 | 
					 | 
				
			||||||
                -
 | 
					 | 
				
			||||||
                  tag: Application
 | 
					 | 
				
			||||||
                  value: OpenVPN
 | 
					 | 
				
			||||||
                -
 | 
					 | 
				
			||||||
                  tag: 'OpenVPN client'
 | 
					 | 
				
			||||||
                  value: '{#OVPN_CLIENT_NAME}'
 | 
					 | 
				
			||||||
            -
 | 
					 | 
				
			||||||
              uuid: e75ed01ce6cd45e0822e021f6733b115
 | 
					 | 
				
			||||||
              name: 'OpenVPN client "{#OVPN_CLIENT_NAME}" bytes transmitted'
 | 
					 | 
				
			||||||
              type: DEPENDENT
 | 
					 | 
				
			||||||
              key: 'ovpn.client.b_tx.name[{#OVPN_CLIENT_NAME}]'
 | 
					 | 
				
			||||||
              delay: '0'
 | 
					 | 
				
			||||||
              history: 14d
 | 
					 | 
				
			||||||
              units: B
 | 
					 | 
				
			||||||
              preprocessing:
 | 
					 | 
				
			||||||
                -
 | 
					 | 
				
			||||||
                  type: JSONPATH
 | 
					 | 
				
			||||||
                  parameters:
 | 
					 | 
				
			||||||
                    - '$.data.[?(@.name=="{#OVPN_CLIENT_NAME}")].b_tx.first()'
 | 
					 | 
				
			||||||
              master_item:
 | 
					 | 
				
			||||||
                key: discovery.ovpn
 | 
					 | 
				
			||||||
              tags:
 | 
					 | 
				
			||||||
                -
 | 
					 | 
				
			||||||
                  tag: Application
 | 
					 | 
				
			||||||
                  value: OpenVPN
 | 
					 | 
				
			||||||
                -
 | 
					 | 
				
			||||||
                  tag: 'OpenVPN client'
 | 
					 | 
				
			||||||
                  value: '{#OVPN_CLIENT_NAME}'
 | 
					 | 
				
			||||||
            -
 | 
					 | 
				
			||||||
              uuid: 332feedbbd314a479ba27d43c7bb7523
 | 
					 | 
				
			||||||
              name: 'OpenVPN client "{#OVPN_CLIENT_NAME}" real ip'
 | 
					 | 
				
			||||||
              type: DEPENDENT
 | 
					 | 
				
			||||||
              key: 'ovpn.client.r_ip.name[{#OVPN_CLIENT_NAME}]'
 | 
					 | 
				
			||||||
              delay: '0'
 | 
					 | 
				
			||||||
              history: 14d
 | 
					 | 
				
			||||||
              trends: '0'
 | 
					 | 
				
			||||||
              value_type: TEXT
 | 
					 | 
				
			||||||
              preprocessing:
 | 
					 | 
				
			||||||
                -
 | 
					 | 
				
			||||||
                  type: JSONPATH
 | 
					 | 
				
			||||||
                  parameters:
 | 
					 | 
				
			||||||
                    - '$.data.[?(@.name=="{#OVPN_CLIENT_NAME}")].r_ip.first()'
 | 
					 | 
				
			||||||
              master_item:
 | 
					 | 
				
			||||||
                key: discovery.ovpn
 | 
					 | 
				
			||||||
              tags:
 | 
					 | 
				
			||||||
                -
 | 
					 | 
				
			||||||
                  tag: Application
 | 
					 | 
				
			||||||
                  value: OpenVPN
 | 
					 | 
				
			||||||
                -
 | 
					 | 
				
			||||||
                  tag: 'OpenVPN client'
 | 
					 | 
				
			||||||
                  value: '{#OVPN_CLIENT_NAME}'
 | 
					 | 
				
			||||||
                -
 | 
					 | 
				
			||||||
                  tag: 'OpenVPN stats'
 | 
					 | 
				
			||||||
                  value: 'real ip'
 | 
					 | 
				
			||||||
            -
 | 
					 | 
				
			||||||
              uuid: 0dc7671cdc9b47c6a7c06b47a8de25ca
 | 
					 | 
				
			||||||
              name: 'OpenVPN client "{#OVPN_CLIENT_NAME}" connect duration'
 | 
					 | 
				
			||||||
              type: DEPENDENT
 | 
					 | 
				
			||||||
              key: 'ovpn.client.t_cd.name[{#OVPN_CLIENT_NAME}]'
 | 
					 | 
				
			||||||
              delay: '0'
 | 
					 | 
				
			||||||
              history: 14d
 | 
					 | 
				
			||||||
              units: s
 | 
					 | 
				
			||||||
              preprocessing:
 | 
					 | 
				
			||||||
                -
 | 
					 | 
				
			||||||
                  type: JSONPATH
 | 
					 | 
				
			||||||
                  parameters:
 | 
					 | 
				
			||||||
                    - '$.data.[?(@.name=="{#OVPN_CLIENT_NAME}")].t_cd.first()'
 | 
					 | 
				
			||||||
              master_item:
 | 
					 | 
				
			||||||
                key: discovery.ovpn
 | 
					 | 
				
			||||||
              tags:
 | 
					 | 
				
			||||||
                -
 | 
					 | 
				
			||||||
                  tag: Application
 | 
					 | 
				
			||||||
                  value: OpenVPN
 | 
					 | 
				
			||||||
                -
 | 
					 | 
				
			||||||
                  tag: 'OpenVPN client'
 | 
					 | 
				
			||||||
                  value: '{#OVPN_CLIENT_NAME}'
 | 
					 | 
				
			||||||
            -
 | 
					 | 
				
			||||||
              uuid: 127fd46950194d9ba5325f183cb6e940
 | 
					 | 
				
			||||||
              name: 'OpenVPN client "{#OVPN_CLIENT_NAME}" connect time'
 | 
					 | 
				
			||||||
              type: DEPENDENT
 | 
					 | 
				
			||||||
              key: 'ovpn.client.t_cs.name[{#OVPN_CLIENT_NAME}]'
 | 
					 | 
				
			||||||
              delay: '0'
 | 
					 | 
				
			||||||
              history: 14d
 | 
					 | 
				
			||||||
              trends: '0'
 | 
					 | 
				
			||||||
              value_type: TEXT
 | 
					 | 
				
			||||||
              preprocessing:
 | 
					 | 
				
			||||||
                -
 | 
					 | 
				
			||||||
                  type: JSONPATH
 | 
					 | 
				
			||||||
                  parameters:
 | 
					 | 
				
			||||||
                    - '$.data.[?(@.name=="{#OVPN_CLIENT_NAME}")].t_cs.first()'
 | 
					 | 
				
			||||||
              master_item:
 | 
					 | 
				
			||||||
                key: discovery.ovpn
 | 
					 | 
				
			||||||
              tags:
 | 
					 | 
				
			||||||
                -
 | 
					 | 
				
			||||||
                  tag: Application
 | 
					 | 
				
			||||||
                  value: OpenVPN
 | 
					 | 
				
			||||||
                -
 | 
					 | 
				
			||||||
                  tag: 'OpenVPN client'
 | 
					 | 
				
			||||||
                  value: '{#OVPN_CLIENT_NAME}'
 | 
					 | 
				
			||||||
            -
 | 
					 | 
				
			||||||
              uuid: 2bb9be1dd4a041b09e68f7e9022676d4
 | 
					 | 
				
			||||||
              name: 'OpenVPN client "{#OVPN_CLIENT_NAME}" virtual ip'
 | 
					 | 
				
			||||||
              type: DEPENDENT
 | 
					 | 
				
			||||||
              key: 'ovpn.client.v_ip.name[{#OVPN_CLIENT_NAME}]'
 | 
					 | 
				
			||||||
              delay: '0'
 | 
					 | 
				
			||||||
              history: 14d
 | 
					 | 
				
			||||||
              trends: '0'
 | 
					 | 
				
			||||||
              value_type: TEXT
 | 
					 | 
				
			||||||
              preprocessing:
 | 
					 | 
				
			||||||
                -
 | 
					 | 
				
			||||||
                  type: JSONPATH
 | 
					 | 
				
			||||||
                  parameters:
 | 
					 | 
				
			||||||
                    - '$.data.[?(@.name=="{#OVPN_CLIENT_NAME}")].v_ip.first()'
 | 
					 | 
				
			||||||
              master_item:
 | 
					 | 
				
			||||||
                key: discovery.ovpn
 | 
					 | 
				
			||||||
              tags:
 | 
					 | 
				
			||||||
                -
 | 
					 | 
				
			||||||
                  tag: Application
 | 
					 | 
				
			||||||
                  value: OpenVPN
 | 
					 | 
				
			||||||
                -
 | 
					 | 
				
			||||||
                  tag: 'OpenVPN client'
 | 
					 | 
				
			||||||
                  value: '{#OVPN_CLIENT_NAME}'
 | 
					 | 
				
			||||||
                -
 | 
					 | 
				
			||||||
                  tag: 'OpenVPN stats'
 | 
					 | 
				
			||||||
                  value: 'virtual ip'
 | 
					 | 
				
			||||||
          graph_prototypes:
 | 
					 | 
				
			||||||
            -
 | 
					 | 
				
			||||||
              uuid: 0e740374d0d7435990fba99d19211947
 | 
					 | 
				
			||||||
              name: 'OpenVPN client "{#OVPN_CLIENT_NAME}" connect duration'
 | 
					 | 
				
			||||||
              show_work_period: 'NO'
 | 
					 | 
				
			||||||
              show_triggers: 'NO'
 | 
					 | 
				
			||||||
              graph_items:
 | 
					 | 
				
			||||||
                -
 | 
					 | 
				
			||||||
                  color: FFBF00
 | 
					 | 
				
			||||||
                  item:
 | 
					 | 
				
			||||||
                    host: 'OpenVPN by Zabbix agent'
 | 
					 | 
				
			||||||
                    key: 'ovpn.client.t_cd.name[{#OVPN_CLIENT_NAME}]'
 | 
					 | 
				
			||||||
            -
 | 
					 | 
				
			||||||
              uuid: 48b62a9621c64082919a6e041defc546
 | 
					 | 
				
			||||||
              name: 'OpenVPN client "{#OVPN_CLIENT_NAME}" traffic'
 | 
					 | 
				
			||||||
              graph_items:
 | 
					 | 
				
			||||||
                -
 | 
					 | 
				
			||||||
                  drawtype: GRADIENT_LINE
 | 
					 | 
				
			||||||
                  color: 00FF00
 | 
					 | 
				
			||||||
                  item:
 | 
					 | 
				
			||||||
                    host: 'OpenVPN by Zabbix agent'
 | 
					 | 
				
			||||||
                    key: 'ovpn.client.b_rx.name[{#OVPN_CLIENT_NAME}]'
 | 
					 | 
				
			||||||
                -
 | 
					 | 
				
			||||||
                  sortorder: '1'
 | 
					 | 
				
			||||||
                  drawtype: BOLD_LINE
 | 
					 | 
				
			||||||
                  color: 0080FF
 | 
					 | 
				
			||||||
                  item:
 | 
					 | 
				
			||||||
                    host: 'OpenVPN by Zabbix agent'
 | 
					 | 
				
			||||||
                    key: 'ovpn.client.b_tx.name[{#OVPN_CLIENT_NAME}]'
 | 
					 | 
				
			||||||
          master_item:
 | 
					 | 
				
			||||||
            key: discovery.ovpn
 | 
					 | 
				
			||||||
          lld_macro_paths:
 | 
					 | 
				
			||||||
            -
 | 
					 | 
				
			||||||
              lld_macro: '{#OVPN_CLIENT_NAME}'
 | 
					 | 
				
			||||||
              path: $..name.first()
 | 
					 | 
				
			||||||
            -
 | 
					 | 
				
			||||||
              lld_macro: '{#OVPN_CLIENT_R_IP}'
 | 
					 | 
				
			||||||
              path: $..r_ip.first()
 | 
					 | 
				
			||||||
            -
 | 
					 | 
				
			||||||
              lld_macro: '{#OVPN_CLIENT_V_IP}'
 | 
					 | 
				
			||||||
              path: $..v_ip.first()
 | 
					 | 
				
			||||||
            -
 | 
					 | 
				
			||||||
              lld_macro: '{#OVPN_CLIENT_B_RX}'
 | 
					 | 
				
			||||||
              path: $..b_rx.first()
 | 
					 | 
				
			||||||
            -
 | 
					 | 
				
			||||||
              lld_macro: '{#OVPN_CLIENT_B_TX}'
 | 
					 | 
				
			||||||
              path: $..b_tx.first()
 | 
					 | 
				
			||||||
            -
 | 
					 | 
				
			||||||
              lld_macro: '{#OVPN_CLIENT_T_CS}'
 | 
					 | 
				
			||||||
              path: $..t_cs.first()
 | 
					 | 
				
			||||||
            -
 | 
					 | 
				
			||||||
              lld_macro: '{#OVPN_CLIENT_T_CD}'
 | 
					 | 
				
			||||||
              path: $..t_cd.first()
 | 
					 | 
				
			||||||
      dashboards:
 | 
					 | 
				
			||||||
        -
 | 
					 | 
				
			||||||
          uuid: d25222f632c74c83ac80c8cbce480db0
 | 
					 | 
				
			||||||
          name: OpenVPN
 | 
					 | 
				
			||||||
          auto_start: 'NO'
 | 
					 | 
				
			||||||
          pages:
 | 
					 | 
				
			||||||
            -
 | 
					 | 
				
			||||||
              name: Server
 | 
					 | 
				
			||||||
              widgets:
 | 
					 | 
				
			||||||
                -
 | 
					 | 
				
			||||||
                  type: ITEM
 | 
					 | 
				
			||||||
                  width: '5'
 | 
					 | 
				
			||||||
                  hide_header: 'YES'
 | 
					 | 
				
			||||||
                  fields:
 | 
					 | 
				
			||||||
                    -
 | 
					 | 
				
			||||||
                      type: ITEM
 | 
					 | 
				
			||||||
                      name: itemid
 | 
					 | 
				
			||||||
                      value:
 | 
					 | 
				
			||||||
                        host: 'OpenVPN by Zabbix agent'
 | 
					 | 
				
			||||||
                        key: ovpn.expiration.ca
 | 
					 | 
				
			||||||
                -
 | 
					 | 
				
			||||||
                  type: ITEM
 | 
					 | 
				
			||||||
                  x: '6'
 | 
					 | 
				
			||||||
                  width: '5'
 | 
					 | 
				
			||||||
                  hide_header: 'YES'
 | 
					 | 
				
			||||||
                  fields:
 | 
					 | 
				
			||||||
                    -
 | 
					 | 
				
			||||||
                      type: ITEM
 | 
					 | 
				
			||||||
                      name: itemid
 | 
					 | 
				
			||||||
                      value:
 | 
					 | 
				
			||||||
                        host: 'OpenVPN by Zabbix agent'
 | 
					 | 
				
			||||||
                        key: ovpn.expiration.cert
 | 
					 | 
				
			||||||
                -
 | 
					 | 
				
			||||||
                  type: GRAPH_CLASSIC
 | 
					 | 
				
			||||||
                  'y': '2'
 | 
					 | 
				
			||||||
                  width: '11'
 | 
					 | 
				
			||||||
                  height: '5'
 | 
					 | 
				
			||||||
                  hide_header: 'YES'
 | 
					 | 
				
			||||||
                  fields:
 | 
					 | 
				
			||||||
                    -
 | 
					 | 
				
			||||||
                      type: GRAPH
 | 
					 | 
				
			||||||
                      name: graphid
 | 
					 | 
				
			||||||
                      value:
 | 
					 | 
				
			||||||
                        host: 'OpenVPN by Zabbix agent'
 | 
					 | 
				
			||||||
                        name: 'OpenVPN certificates expiration'
 | 
					 | 
				
			||||||
            -
 | 
					 | 
				
			||||||
              name: Clients
 | 
					 | 
				
			||||||
              widgets:
 | 
					 | 
				
			||||||
                -
 | 
					 | 
				
			||||||
                  type: ITEM
 | 
					 | 
				
			||||||
                  width: '5'
 | 
					 | 
				
			||||||
                  hide_header: 'YES'
 | 
					 | 
				
			||||||
                  fields:
 | 
					 | 
				
			||||||
                    -
 | 
					 | 
				
			||||||
                      type: ITEM
 | 
					 | 
				
			||||||
                      name: itemid
 | 
					 | 
				
			||||||
                      value:
 | 
					 | 
				
			||||||
                        host: 'OpenVPN by Zabbix agent'
 | 
					 | 
				
			||||||
                        key: ovpn.stats.clients_count
 | 
					 | 
				
			||||||
                -
 | 
					 | 
				
			||||||
                  type: ITEM
 | 
					 | 
				
			||||||
                  x: '6'
 | 
					 | 
				
			||||||
                  width: '5'
 | 
					 | 
				
			||||||
                  hide_header: 'YES'
 | 
					 | 
				
			||||||
                  fields:
 | 
					 | 
				
			||||||
                    -
 | 
					 | 
				
			||||||
                      type: ITEM
 | 
					 | 
				
			||||||
                      name: itemid
 | 
					 | 
				
			||||||
                      value:
 | 
					 | 
				
			||||||
                        host: 'OpenVPN by Zabbix agent'
 | 
					 | 
				
			||||||
                        key: ovpn.stats.clients_found
 | 
					 | 
				
			||||||
                -
 | 
					 | 
				
			||||||
                  type: GRAPH_PROTOTYPE
 | 
					 | 
				
			||||||
                  'y': '7'
 | 
					 | 
				
			||||||
                  width: '11'
 | 
					 | 
				
			||||||
                  height: '5'
 | 
					 | 
				
			||||||
                  fields:
 | 
					 | 
				
			||||||
                    -
 | 
					 | 
				
			||||||
                      type: INTEGER
 | 
					 | 
				
			||||||
                      name: columns
 | 
					 | 
				
			||||||
                      value: '1'
 | 
					 | 
				
			||||||
                    -
 | 
					 | 
				
			||||||
                      type: GRAPH_PROTOTYPE
 | 
					 | 
				
			||||||
                      name: graphid
 | 
					 | 
				
			||||||
                      value:
 | 
					 | 
				
			||||||
                        host: 'OpenVPN by Zabbix agent'
 | 
					 | 
				
			||||||
                        name: 'OpenVPN client "{#OVPN_CLIENT_NAME}" traffic'
 | 
					 | 
				
			||||||
                -
 | 
					 | 
				
			||||||
                  type: GRAPH_CLASSIC
 | 
					 | 
				
			||||||
                  'y': '2'
 | 
					 | 
				
			||||||
                  width: '11'
 | 
					 | 
				
			||||||
                  height: '5'
 | 
					 | 
				
			||||||
                  hide_header: 'YES'
 | 
					 | 
				
			||||||
                  fields:
 | 
					 | 
				
			||||||
                    -
 | 
					 | 
				
			||||||
                      type: GRAPH
 | 
					 | 
				
			||||||
                      name: graphid
 | 
					 | 
				
			||||||
                      value:
 | 
					 | 
				
			||||||
                        host: 'OpenVPN by Zabbix agent'
 | 
					 | 
				
			||||||
                        name: 'OpenVPN clients sum'
 | 
					 | 
				
			||||||
    -
 | 
					 | 
				
			||||||
      uuid: 3face906272745a7963b5b4e29eaaadc
 | 
					 | 
				
			||||||
      template: 'Wireguard by Zabbix agent'
 | 
					 | 
				
			||||||
      name: 'Wireguard by Zabbix agent'
 | 
					 | 
				
			||||||
      description: 'Wireguard by Zabbix agent'
 | 
					 | 
				
			||||||
      groups:
 | 
					 | 
				
			||||||
        -
 | 
					 | 
				
			||||||
          name: Templates/Applications
 | 
					 | 
				
			||||||
      items:
 | 
					 | 
				
			||||||
        -
 | 
					 | 
				
			||||||
          uuid: 0c599346296b401cb7eaffa1c78978ed
 | 
					 | 
				
			||||||
          name: 'Wireguard stats'
 | 
					 | 
				
			||||||
          key: discovery.wg
 | 
					 | 
				
			||||||
          history: 14d
 | 
					 | 
				
			||||||
          trends: '0'
 | 
					 | 
				
			||||||
          value_type: TEXT
 | 
					 | 
				
			||||||
          tags:
 | 
					 | 
				
			||||||
            -
 | 
					 | 
				
			||||||
              tag: Application
 | 
					 | 
				
			||||||
              value: Wireguard
 | 
					 | 
				
			||||||
            -
 | 
					 | 
				
			||||||
              tag: 'Wireguard stats'
 | 
					 | 
				
			||||||
              value: raw
 | 
					 | 
				
			||||||
        -
 | 
					 | 
				
			||||||
          uuid: 0bbe3c2e64cc4dbd88c6c7722a3f929e
 | 
					 | 
				
			||||||
          name: 'Wireguard clients count'
 | 
					 | 
				
			||||||
          type: DEPENDENT
 | 
					 | 
				
			||||||
          key: wg.stats.clients_count
 | 
					 | 
				
			||||||
          delay: '0'
 | 
					 | 
				
			||||||
          history: 14d
 | 
					 | 
				
			||||||
          units: clients
 | 
					 | 
				
			||||||
          preprocessing:
 | 
					 | 
				
			||||||
            -
 | 
					 | 
				
			||||||
              type: JSONPATH
 | 
					 | 
				
			||||||
              parameters:
 | 
					 | 
				
			||||||
                - $.clients_count
 | 
					 | 
				
			||||||
          master_item:
 | 
					 | 
				
			||||||
            key: discovery.wg
 | 
					 | 
				
			||||||
          tags:
 | 
					 | 
				
			||||||
            -
 | 
					 | 
				
			||||||
              tag: Application
 | 
					 | 
				
			||||||
              value: Wireguard
 | 
					 | 
				
			||||||
            -
 | 
					 | 
				
			||||||
              tag: 'Wireguard stats'
 | 
					 | 
				
			||||||
              value: 'clients count'
 | 
					 | 
				
			||||||
        -
 | 
					 | 
				
			||||||
          uuid: ee3c34a9ae024592b869f27841e6006f
 | 
					 | 
				
			||||||
          name: 'Wireguard clients found'
 | 
					 | 
				
			||||||
          type: DEPENDENT
 | 
					 | 
				
			||||||
          key: wg.stats.clients_found
 | 
					 | 
				
			||||||
          delay: '0'
 | 
					 | 
				
			||||||
          history: 14d
 | 
					 | 
				
			||||||
          units: clients
 | 
					 | 
				
			||||||
          preprocessing:
 | 
					 | 
				
			||||||
            -
 | 
					 | 
				
			||||||
              type: JSONPATH
 | 
					 | 
				
			||||||
              parameters:
 | 
					 | 
				
			||||||
                - $.clients_found
 | 
					 | 
				
			||||||
          master_item:
 | 
					 | 
				
			||||||
            key: discovery.wg
 | 
					 | 
				
			||||||
          tags:
 | 
					 | 
				
			||||||
            -
 | 
					 | 
				
			||||||
              tag: Application
 | 
					 | 
				
			||||||
              value: Wireguard
 | 
					 | 
				
			||||||
            -
 | 
					 | 
				
			||||||
              tag: 'Wireguard stats'
 | 
					 | 
				
			||||||
              value: 'clients found'
 | 
					 | 
				
			||||||
        -
 | 
					 | 
				
			||||||
          uuid: 7893f7024c4d45df9ee2774006efe175
 | 
					 | 
				
			||||||
          name: 'Wireguard stats updated'
 | 
					 | 
				
			||||||
          type: DEPENDENT
 | 
					 | 
				
			||||||
          key: wg.stats.updated
 | 
					 | 
				
			||||||
          delay: '0'
 | 
					 | 
				
			||||||
          history: 14d
 | 
					 | 
				
			||||||
          trends: '0'
 | 
					 | 
				
			||||||
          value_type: TEXT
 | 
					 | 
				
			||||||
          preprocessing:
 | 
					 | 
				
			||||||
            -
 | 
					 | 
				
			||||||
              type: JSONPATH
 | 
					 | 
				
			||||||
              parameters:
 | 
					 | 
				
			||||||
                - $.stats_updated
 | 
					 | 
				
			||||||
          master_item:
 | 
					 | 
				
			||||||
            key: discovery.wg
 | 
					 | 
				
			||||||
          tags:
 | 
					 | 
				
			||||||
            -
 | 
					 | 
				
			||||||
              tag: Application
 | 
					 | 
				
			||||||
              value: Wireguard
 | 
					 | 
				
			||||||
            -
 | 
					 | 
				
			||||||
              tag: 'Wireguard stats'
 | 
					 | 
				
			||||||
              value: updated
 | 
					 | 
				
			||||||
      discovery_rules:
 | 
					 | 
				
			||||||
        -
 | 
					 | 
				
			||||||
          uuid: 8b3ade0f42f84419947638024d2b4d13
 | 
					 | 
				
			||||||
          name: 'Discovery wireguard clients'
 | 
					 | 
				
			||||||
          type: DEPENDENT
 | 
					 | 
				
			||||||
          key: get.wg.stats
 | 
					 | 
				
			||||||
          delay: '0'
 | 
					 | 
				
			||||||
          item_prototypes:
 | 
					 | 
				
			||||||
            -
 | 
					 | 
				
			||||||
              uuid: 5f1215ede2b14a9496ab3e3f6bd3e741
 | 
					 | 
				
			||||||
              name: 'Wireguard client "{#WG_CLIENT_NAME}" bytes recieved'
 | 
					 | 
				
			||||||
              type: DEPENDENT
 | 
					 | 
				
			||||||
              key: 'wg.client.b_rx.name[{#WG_CLIENT_NAME}]'
 | 
					 | 
				
			||||||
              delay: '0'
 | 
					 | 
				
			||||||
              history: 14d
 | 
					 | 
				
			||||||
              units: B
 | 
					 | 
				
			||||||
              preprocessing:
 | 
					 | 
				
			||||||
                -
 | 
					 | 
				
			||||||
                  type: JSONPATH
 | 
					 | 
				
			||||||
                  parameters:
 | 
					 | 
				
			||||||
                    - '$.data.[?(@.name=="{#WG_CLIENT_NAME}")].b_rx.first()'
 | 
					 | 
				
			||||||
              master_item:
 | 
					 | 
				
			||||||
                key: discovery.wg
 | 
					 | 
				
			||||||
              tags:
 | 
					 | 
				
			||||||
                -
 | 
					 | 
				
			||||||
                  tag: Application
 | 
					 | 
				
			||||||
                  value: Wireguard
 | 
					 | 
				
			||||||
                -
 | 
					 | 
				
			||||||
                  tag: 'Wireguard client'
 | 
					 | 
				
			||||||
                  value: '{#WG_CLIENT_NAME}'
 | 
					 | 
				
			||||||
            -
 | 
					 | 
				
			||||||
              uuid: 93378d553fd34f9bb99f747024a1a32a
 | 
					 | 
				
			||||||
              name: 'Wireguard client "{#WG_CLIENT_NAME}" bytes transmitted'
 | 
					 | 
				
			||||||
              type: DEPENDENT
 | 
					 | 
				
			||||||
              key: 'wg.client.b_tx.name[{#WG_CLIENT_NAME}]'
 | 
					 | 
				
			||||||
              delay: '0'
 | 
					 | 
				
			||||||
              history: 14d
 | 
					 | 
				
			||||||
              units: B
 | 
					 | 
				
			||||||
              preprocessing:
 | 
					 | 
				
			||||||
                -
 | 
					 | 
				
			||||||
                  type: JSONPATH
 | 
					 | 
				
			||||||
                  parameters:
 | 
					 | 
				
			||||||
                    - '$.data.[?(@.name=="{#WG_CLIENT_NAME}")].b_tx.first()'
 | 
					 | 
				
			||||||
              master_item:
 | 
					 | 
				
			||||||
                key: discovery.wg
 | 
					 | 
				
			||||||
              tags:
 | 
					 | 
				
			||||||
                -
 | 
					 | 
				
			||||||
                  tag: Application
 | 
					 | 
				
			||||||
                  value: Wireguard
 | 
					 | 
				
			||||||
                -
 | 
					 | 
				
			||||||
                  tag: 'Wireguard client'
 | 
					 | 
				
			||||||
                  value: '{#WG_CLIENT_NAME}'
 | 
					 | 
				
			||||||
            -
 | 
					 | 
				
			||||||
              uuid: 9a206a744cdb4c8a86ceadc20b2602d4
 | 
					 | 
				
			||||||
              name: 'Wireguard client "{#WG_CLIENT_NAME}" real ip'
 | 
					 | 
				
			||||||
              type: DEPENDENT
 | 
					 | 
				
			||||||
              key: 'wg.client.r_ip.name[{#WG_CLIENT_NAME}]'
 | 
					 | 
				
			||||||
              delay: '0'
 | 
					 | 
				
			||||||
              history: 14d
 | 
					 | 
				
			||||||
              trends: '0'
 | 
					 | 
				
			||||||
              value_type: TEXT
 | 
					 | 
				
			||||||
              preprocessing:
 | 
					 | 
				
			||||||
                -
 | 
					 | 
				
			||||||
                  type: JSONPATH
 | 
					 | 
				
			||||||
                  parameters:
 | 
					 | 
				
			||||||
                    - '$.data.[?(@.name=="{#WG_CLIENT_NAME}")].r_ip.first()'
 | 
					 | 
				
			||||||
              master_item:
 | 
					 | 
				
			||||||
                key: discovery.wg
 | 
					 | 
				
			||||||
              tags:
 | 
					 | 
				
			||||||
                -
 | 
					 | 
				
			||||||
                  tag: Application
 | 
					 | 
				
			||||||
                  value: OpenVPN
 | 
					 | 
				
			||||||
                -
 | 
					 | 
				
			||||||
                  tag: 'Wireguard client'
 | 
					 | 
				
			||||||
                  value: '{#WG_CLIENT_NAME}'
 | 
					 | 
				
			||||||
                -
 | 
					 | 
				
			||||||
                  tag: 'Wireguard stats'
 | 
					 | 
				
			||||||
                  value: 'real ip'
 | 
					 | 
				
			||||||
            -
 | 
					 | 
				
			||||||
              uuid: 7a1b854401714952aaa86e4769dcdcfa
 | 
					 | 
				
			||||||
              name: 'Wireguard client "{#WG_CLIENT_NAME}" latest handshake'
 | 
					 | 
				
			||||||
              type: DEPENDENT
 | 
					 | 
				
			||||||
              key: 'wg.client.t_lh.name[{#WG_CLIENT_NAME}]'
 | 
					 | 
				
			||||||
              delay: '0'
 | 
					 | 
				
			||||||
              history: 14d
 | 
					 | 
				
			||||||
              trends: '0'
 | 
					 | 
				
			||||||
              value_type: TEXT
 | 
					 | 
				
			||||||
              preprocessing:
 | 
					 | 
				
			||||||
                -
 | 
					 | 
				
			||||||
                  type: JSONPATH
 | 
					 | 
				
			||||||
                  parameters:
 | 
					 | 
				
			||||||
                    - '$.data.[?(@.name=="{#WG_CLIENT_NAME}")].t_lh.first()'
 | 
					 | 
				
			||||||
              master_item:
 | 
					 | 
				
			||||||
                key: discovery.wg
 | 
					 | 
				
			||||||
              tags:
 | 
					 | 
				
			||||||
                -
 | 
					 | 
				
			||||||
                  tag: Application
 | 
					 | 
				
			||||||
                  value: Wireguard
 | 
					 | 
				
			||||||
                -
 | 
					 | 
				
			||||||
                  tag: 'Wireguard client'
 | 
					 | 
				
			||||||
                  value: '{#WG_CLIENT_NAME}'
 | 
					 | 
				
			||||||
            -
 | 
					 | 
				
			||||||
              uuid: 257ade43285748baa5e2c826028a411a
 | 
					 | 
				
			||||||
              name: 'Wireguard client "{#WG_CLIENT_NAME}" virtual ip'
 | 
					 | 
				
			||||||
              type: DEPENDENT
 | 
					 | 
				
			||||||
              key: 'wg.client.v_ip.name[{#WG_CLIENT_NAME}]'
 | 
					 | 
				
			||||||
              delay: '0'
 | 
					 | 
				
			||||||
              history: 14d
 | 
					 | 
				
			||||||
              trends: '0'
 | 
					 | 
				
			||||||
              value_type: TEXT
 | 
					 | 
				
			||||||
              preprocessing:
 | 
					 | 
				
			||||||
                -
 | 
					 | 
				
			||||||
                  type: JSONPATH
 | 
					 | 
				
			||||||
                  parameters:
 | 
					 | 
				
			||||||
                    - '$.data.[?(@.name=="{#WG_CLIENT_NAME}")].v_ip.first()'
 | 
					 | 
				
			||||||
              master_item:
 | 
					 | 
				
			||||||
                key: discovery.wg
 | 
					 | 
				
			||||||
              tags:
 | 
					 | 
				
			||||||
                -
 | 
					 | 
				
			||||||
                  tag: Application
 | 
					 | 
				
			||||||
                  value: OpenVPN
 | 
					 | 
				
			||||||
                -
 | 
					 | 
				
			||||||
                  tag: 'Wireguard client'
 | 
					 | 
				
			||||||
                  value: '{#WG_CLIENT_NAME}'
 | 
					 | 
				
			||||||
                -
 | 
					 | 
				
			||||||
                  tag: 'Wireguard stats'
 | 
					 | 
				
			||||||
                  value: 'virtual ip'
 | 
					 | 
				
			||||||
          graph_prototypes:
 | 
					 | 
				
			||||||
            -
 | 
					 | 
				
			||||||
              uuid: aa1bb73c2276432b96c7d0ee3fc4b292
 | 
					 | 
				
			||||||
              name: 'Wireguard client "{#WG_CLIENT_NAME}" traffic'
 | 
					 | 
				
			||||||
              graph_items:
 | 
					 | 
				
			||||||
                -
 | 
					 | 
				
			||||||
                  drawtype: GRADIENT_LINE
 | 
					 | 
				
			||||||
                  color: 00FF00
 | 
					 | 
				
			||||||
                  item:
 | 
					 | 
				
			||||||
                    host: 'Wireguard by Zabbix agent'
 | 
					 | 
				
			||||||
                    key: 'wg.client.b_rx.name[{#WG_CLIENT_NAME}]'
 | 
					 | 
				
			||||||
                -
 | 
					 | 
				
			||||||
                  sortorder: '1'
 | 
					 | 
				
			||||||
                  drawtype: BOLD_LINE
 | 
					 | 
				
			||||||
                  color: 0080FF
 | 
					 | 
				
			||||||
                  item:
 | 
					 | 
				
			||||||
                    host: 'Wireguard by Zabbix agent'
 | 
					 | 
				
			||||||
                    key: 'wg.client.b_tx.name[{#WG_CLIENT_NAME}]'
 | 
					 | 
				
			||||||
          master_item:
 | 
					 | 
				
			||||||
            key: discovery.wg
 | 
					 | 
				
			||||||
          lld_macro_paths:
 | 
					 | 
				
			||||||
            -
 | 
					 | 
				
			||||||
              lld_macro: '{#WG_CLIENT_B_RX}'
 | 
					 | 
				
			||||||
              path: $..b_rx.first()
 | 
					 | 
				
			||||||
            -
 | 
					 | 
				
			||||||
              lld_macro: '{#WG_CLIENT_B_TX}'
 | 
					 | 
				
			||||||
              path: $..b_tx.first()
 | 
					 | 
				
			||||||
            -
 | 
					 | 
				
			||||||
              lld_macro: '{#WG_CLIENT_NAME}'
 | 
					 | 
				
			||||||
              path: $..name.first()
 | 
					 | 
				
			||||||
            -
 | 
					 | 
				
			||||||
              lld_macro: '{#WG_CLIENT_R_IP}'
 | 
					 | 
				
			||||||
              path: $..r_ip.first()
 | 
					 | 
				
			||||||
            -
 | 
					 | 
				
			||||||
              lld_macro: '{#WG_CLIENT_T_LH}'
 | 
					 | 
				
			||||||
              path: $..t_lh.first()
 | 
					 | 
				
			||||||
            -
 | 
					 | 
				
			||||||
              lld_macro: '{#WG_CLIENT_V_IP}'
 | 
					 | 
				
			||||||
              path: $..v_ip.first()
 | 
					 | 
				
			||||||
      dashboards:
 | 
					 | 
				
			||||||
        -
 | 
					 | 
				
			||||||
          uuid: 282c5db5bd1a4e7a84b856060beafb51
 | 
					 | 
				
			||||||
          name: Wireguard
 | 
					 | 
				
			||||||
          auto_start: 'NO'
 | 
					 | 
				
			||||||
          pages:
 | 
					 | 
				
			||||||
            -
 | 
					 | 
				
			||||||
              name: Server
 | 
					 | 
				
			||||||
            -
 | 
					 | 
				
			||||||
              name: Clients
 | 
					 | 
				
			||||||
              widgets:
 | 
					 | 
				
			||||||
                -
 | 
					 | 
				
			||||||
                  type: ITEM
 | 
					 | 
				
			||||||
                  width: '5'
 | 
					 | 
				
			||||||
                  hide_header: 'YES'
 | 
					 | 
				
			||||||
                  fields:
 | 
					 | 
				
			||||||
                    -
 | 
					 | 
				
			||||||
                      type: ITEM
 | 
					 | 
				
			||||||
                      name: itemid
 | 
					 | 
				
			||||||
                      value:
 | 
					 | 
				
			||||||
                        host: 'Wireguard by Zabbix agent'
 | 
					 | 
				
			||||||
                        key: wg.stats.clients_count
 | 
					 | 
				
			||||||
                -
 | 
					 | 
				
			||||||
                  type: ITEM
 | 
					 | 
				
			||||||
                  x: '6'
 | 
					 | 
				
			||||||
                  width: '5'
 | 
					 | 
				
			||||||
                  hide_header: 'YES'
 | 
					 | 
				
			||||||
                  fields:
 | 
					 | 
				
			||||||
                    -
 | 
					 | 
				
			||||||
                      type: ITEM
 | 
					 | 
				
			||||||
                      name: itemid
 | 
					 | 
				
			||||||
                      value:
 | 
					 | 
				
			||||||
                        host: 'Wireguard by Zabbix agent'
 | 
					 | 
				
			||||||
                        key: wg.stats.clients_found
 | 
					 | 
				
			||||||
                -
 | 
					 | 
				
			||||||
                  type: GRAPH_PROTOTYPE
 | 
					 | 
				
			||||||
                  'y': '7'
 | 
					 | 
				
			||||||
                  width: '11'
 | 
					 | 
				
			||||||
                  height: '5'
 | 
					 | 
				
			||||||
                  fields:
 | 
					 | 
				
			||||||
                    -
 | 
					 | 
				
			||||||
                      type: INTEGER
 | 
					 | 
				
			||||||
                      name: columns
 | 
					 | 
				
			||||||
                      value: '1'
 | 
					 | 
				
			||||||
                    -
 | 
					 | 
				
			||||||
                      type: GRAPH_PROTOTYPE
 | 
					 | 
				
			||||||
                      name: graphid
 | 
					 | 
				
			||||||
                      value:
 | 
					 | 
				
			||||||
                        host: 'Wireguard by Zabbix agent'
 | 
					 | 
				
			||||||
                        name: 'Wireguard client "{#WG_CLIENT_NAME}" traffic'
 | 
					 | 
				
			||||||
                -
 | 
					 | 
				
			||||||
                  type: GRAPH_CLASSIC
 | 
					 | 
				
			||||||
                  'y': '2'
 | 
					 | 
				
			||||||
                  width: '11'
 | 
					 | 
				
			||||||
                  height: '5'
 | 
					 | 
				
			||||||
                  hide_header: 'YES'
 | 
					 | 
				
			||||||
                  fields:
 | 
					 | 
				
			||||||
                    -
 | 
					 | 
				
			||||||
                      type: GRAPH
 | 
					 | 
				
			||||||
                      name: graphid
 | 
					 | 
				
			||||||
                      value:
 | 
					 | 
				
			||||||
                        host: 'Wireguard by Zabbix agent'
 | 
					 | 
				
			||||||
                        name: 'Wireguard clients sum'
 | 
					 | 
				
			||||||
  triggers:
 | 
					 | 
				
			||||||
    -
 | 
					 | 
				
			||||||
      uuid: 022e1211349c48a4be951588cda2dba0
 | 
					 | 
				
			||||||
      expression: 'max(/OpenVPN by Zabbix agent/ovpn.stats.clients_count,#1)>=max(/OpenVPN by Zabbix agent/ovpn.clients.limit,#1)'
 | 
					 | 
				
			||||||
      name: 'Maximum number of OpenVPN clients reached'
 | 
					 | 
				
			||||||
      priority: AVERAGE
 | 
					 | 
				
			||||||
      tags:
 | 
					 | 
				
			||||||
        -
 | 
					 | 
				
			||||||
          tag: Application
 | 
					 | 
				
			||||||
          value: OpenVPN
 | 
					 | 
				
			||||||
        -
 | 
					 | 
				
			||||||
          tag: 'OpenVPN server'
 | 
					 | 
				
			||||||
          value: 'clients limit'
 | 
					 | 
				
			||||||
  graphs:
 | 
					 | 
				
			||||||
    -
 | 
					 | 
				
			||||||
      uuid: a23bdc304f5d49e1b42597f9cbd4e840
 | 
					 | 
				
			||||||
      name: 'OpenVPN certificates expiration'
 | 
					 | 
				
			||||||
      graph_items:
 | 
					 | 
				
			||||||
        -
 | 
					 | 
				
			||||||
          drawtype: GRADIENT_LINE
 | 
					 | 
				
			||||||
          color: FFBF00
 | 
					 | 
				
			||||||
          item:
 | 
					 | 
				
			||||||
            host: 'OpenVPN by Zabbix agent'
 | 
					 | 
				
			||||||
            key: ovpn.expiration.ca
 | 
					 | 
				
			||||||
        -
 | 
					 | 
				
			||||||
          sortorder: '1'
 | 
					 | 
				
			||||||
          drawtype: BOLD_LINE
 | 
					 | 
				
			||||||
          color: FF8000
 | 
					 | 
				
			||||||
          item:
 | 
					 | 
				
			||||||
            host: 'OpenVPN by Zabbix agent'
 | 
					 | 
				
			||||||
            key: ovpn.expiration.cert
 | 
					 | 
				
			||||||
    -
 | 
					 | 
				
			||||||
      uuid: 94d1e1cc40424214a291067790d3db89
 | 
					 | 
				
			||||||
      name: 'OpenVPN clients sum'
 | 
					 | 
				
			||||||
      graph_items:
 | 
					 | 
				
			||||||
        -
 | 
					 | 
				
			||||||
          color: FF8000
 | 
					 | 
				
			||||||
          item:
 | 
					 | 
				
			||||||
            host: 'OpenVPN by Zabbix agent'
 | 
					 | 
				
			||||||
            key: ovpn.stats.clients_count
 | 
					 | 
				
			||||||
        -
 | 
					 | 
				
			||||||
          sortorder: '1'
 | 
					 | 
				
			||||||
          color: FFBF00
 | 
					 | 
				
			||||||
          item:
 | 
					 | 
				
			||||||
            host: 'OpenVPN by Zabbix agent'
 | 
					 | 
				
			||||||
            key: ovpn.stats.clients_found
 | 
					 | 
				
			||||||
    -
 | 
					 | 
				
			||||||
      uuid: 644326c90dac454a94b6b98136d1efaf
 | 
					 | 
				
			||||||
      name: 'Wireguard clients sum'
 | 
					 | 
				
			||||||
      graph_items:
 | 
					 | 
				
			||||||
        -
 | 
					 | 
				
			||||||
          color: BF00FF
 | 
					 | 
				
			||||||
          item:
 | 
					 | 
				
			||||||
            host: 'Wireguard by Zabbix agent'
 | 
					 | 
				
			||||||
            key: wg.stats.clients_count
 | 
					 | 
				
			||||||
        -
 | 
					 | 
				
			||||||
          sortorder: '1'
 | 
					 | 
				
			||||||
          color: FFBF00
 | 
					 | 
				
			||||||
          item:
 | 
					 | 
				
			||||||
            host: 'Wireguard by Zabbix agent'
 | 
					 | 
				
			||||||
            key: wg.stats.clients_found
 | 
					 | 
				
			||||||
| 
						 | 
					@ -113,14 +113,11 @@ createcert() {
 | 
				
			||||||
  wg genkey | tee "/etc/wireguard/pki/${clientname}-private.key" | wg pubkey > "/etc/wireguard/pki/${clientname}-public.key"
 | 
					  wg genkey | tee "/etc/wireguard/pki/${clientname}-private.key" | wg pubkey > "/etc/wireguard/pki/${clientname}-public.key"
 | 
				
			||||||
  clientpublkey=$(cat "/etc/wireguard/pki/${clientname}-public.key")
 | 
					  clientpublkey=$(cat "/etc/wireguard/pki/${clientname}-public.key")
 | 
				
			||||||
  clientprivkey=$(cat "/etc/wireguard/pki/${clientname}-private.key")
 | 
					  clientprivkey=$(cat "/etc/wireguard/pki/${clientname}-private.key")
 | 
				
			||||||
  wg set wg0 peer "${clientpublkey}" \
 | 
					  wg set wg0 peer "${clientpublkey}" allowed-ips "${clientaddr}/32"
 | 
				
			||||||
             allowed-ips "${clientaddr}/32" \
 | 
					 | 
				
			||||||
             persistent-keepalive 5
 | 
					 | 
				
			||||||
  {
 | 
					  {
 | 
				
			||||||
    echo -e "[Peer]"
 | 
					    echo -e "[Peer]"
 | 
				
			||||||
    echo -e "  PublicKey = ${clientpublkey}"
 | 
					    echo -e "  PublicKey = ${clientpublkey}"
 | 
				
			||||||
    echo -e "  AllowedIPs = ${clientaddr}/32"
 | 
					    echo -e "  AllowedIPs = ${clientaddr}/32"
 | 
				
			||||||
    echo -e "  PersistentKeepalive = 5"
 | 
					 | 
				
			||||||
  } >> ${servercfgname}
 | 
					  } >> ${servercfgname}
 | 
				
			||||||
  ip -4 route add "${clientaddr}/32" dev wg0
 | 
					  ip -4 route add "${clientaddr}/32" dev wg0
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					@ -176,15 +173,10 @@ deletecert() {
 | 
				
			||||||
  wg set wg0 peer "${clientpublkey}" remove
 | 
					  wg set wg0 peer "${clientpublkey}" remove
 | 
				
			||||||
  rm -f "/etc/wireguard/pki/${clientname}-public.key"
 | 
					  rm -f "/etc/wireguard/pki/${clientname}-public.key"
 | 
				
			||||||
  rm -f "/etc/wireguard/pki/${clientname}-private.key"
 | 
					  rm -f "/etc/wireguard/pki/${clientname}-private.key"
 | 
				
			||||||
  # PublicKey =
 | 
					 | 
				
			||||||
  s2=$(grep -n "${clientpublkey}" ${servercfgname} | cut -d":" -f1)
 | 
					  s2=$(grep -n "${clientpublkey}" ${servercfgname} | cut -d":" -f1)
 | 
				
			||||||
  # [Peer]
 | 
					 | 
				
			||||||
  s1=$(( s2 - 1 ))
 | 
					  s1=$(( s2 - 1 ))
 | 
				
			||||||
  # AllowedIPs =
 | 
					 | 
				
			||||||
  s3=$(( s2 + 1 ))
 | 
					  s3=$(( s2 + 1 ))
 | 
				
			||||||
  # PersistentKeepalive = 
 | 
					  sed -i "${s1}d;${s2}d;${s3}d" ${servercfgname}
 | 
				
			||||||
  s4=$(( s2 + 2 ))
 | 
					 | 
				
			||||||
  sed -i "${s1}d;${s2}d;${s3}d;${s4}d" ${servercfgname}
 | 
					 | 
				
			||||||
  ip -4 route del "${clientaddr}/32" dev wg0
 | 
					  ip -4 route del "${clientaddr}/32" dev wg0
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
							
								
								
									
										208
									
								
								wg-connect-handling.sh
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										208
									
								
								wg-connect-handling.sh
									
									
									
									
									
										Normal file
									
								
							| 
						 | 
					@ -0,0 +1,208 @@
 | 
				
			||||||
 | 
					#!/usr/bin/env bash
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# DESCRIPTION:
 | 
				
			||||||
 | 
					#   handling client connection
 | 
				
			||||||
 | 
					#   and
 | 
				
			||||||
 | 
					#   preparing stats for monitoring
 | 
				
			||||||
 | 
					#
 | 
				
			||||||
 | 
					# DEPENDENCIES:
 | 
				
			||||||
 | 
					#   - privileged rights
 | 
				
			||||||
 | 
					#   - jq
 | 
				
			||||||
 | 
					#   - grepcidr
 | 
				
			||||||
 | 
					#   - Python 3
 | 
				
			||||||
 | 
					#   - existing /usr/local/bin/sendmail.py
 | 
				
			||||||
 | 
					#
 | 
				
			||||||
 | 
					# PARAMETERS:
 | 
				
			||||||
 | 
					#   1: root path for counter, names, log
 | 
				
			||||||
 | 
					#   2: "mail" - send email notification
 | 
				
			||||||
 | 
					#   3: "geo" - check client address geolocation
 | 
				
			||||||
 | 
					#
 | 
				
			||||||
 | 
					# FUNCTIONS:
 | 
				
			||||||
 | 
					#
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#######################################
 | 
				
			||||||
 | 
					# Print message and add to log.
 | 
				
			||||||
 | 
					# Globals:
 | 
				
			||||||
 | 
					#   logs
 | 
				
			||||||
 | 
					# Arguments:
 | 
				
			||||||
 | 
					#   1: message to print and logging
 | 
				
			||||||
 | 
					#######################################
 | 
				
			||||||
 | 
					addtologs() {
 | 
				
			||||||
 | 
					  echo "$(date +'%Y.%m.%d-%H:%M:%S') $1" | tee -a "${logs}"
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#######################################
 | 
				
			||||||
 | 
					# Exit procedure.
 | 
				
			||||||
 | 
					# Globals:
 | 
				
			||||||
 | 
					#   show
 | 
				
			||||||
 | 
					# Arguments:
 | 
				
			||||||
 | 
					#   None
 | 
				
			||||||
 | 
					#######################################
 | 
				
			||||||
 | 
					execquite() {
 | 
				
			||||||
 | 
					  addtologs "execution time is $(($(date +%s)-time)) seconds, exit"
 | 
				
			||||||
 | 
					  exit
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#######################################
 | 
				
			||||||
 | 
					# Error exit procedure
 | 
				
			||||||
 | 
					# Globals:
 | 
				
			||||||
 | 
					#   None
 | 
				
			||||||
 | 
					# Arguments:
 | 
				
			||||||
 | 
					#   1: message to print and logging
 | 
				
			||||||
 | 
					#######################################
 | 
				
			||||||
 | 
					execerror() {
 | 
				
			||||||
 | 
					  addtologs "error: $1"
 | 
				
			||||||
 | 
					  execquite
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#######################################
 | 
				
			||||||
 | 
					# Checking user rights.
 | 
				
			||||||
 | 
					# Globals:
 | 
				
			||||||
 | 
					#   None
 | 
				
			||||||
 | 
					# Arguments:
 | 
				
			||||||
 | 
					#   None
 | 
				
			||||||
 | 
					# return:
 | 
				
			||||||
 | 
					#   0 - if privileged rights, 1 - if not privileged rights
 | 
				
			||||||
 | 
					#######################################
 | 
				
			||||||
 | 
					checkroot() {
 | 
				
			||||||
 | 
					  if [ "${EUID}" -ne 0 ]; then
 | 
				
			||||||
 | 
					    return 1 # false
 | 
				
			||||||
 | 
					  else
 | 
				
			||||||
 | 
					    return 0 # true
 | 
				
			||||||
 | 
					  fi
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#######################################
 | 
				
			||||||
 | 
					# Get information about client address
 | 
				
			||||||
 | 
					# Globals:
 | 
				
			||||||
 | 
					#   flaggeol
 | 
				
			||||||
 | 
					#   show_from_addr
 | 
				
			||||||
 | 
					#   conf_client_nm
 | 
				
			||||||
 | 
					# Arguments:
 | 
				
			||||||
 | 
					#   None
 | 
				
			||||||
 | 
					#######################################
 | 
				
			||||||
 | 
					# shellcheck disable=SC2154
 | 
				
			||||||
 | 
					expandaddress() {
 | 
				
			||||||
 | 
					  ipinfo="Source address is ${show_from_addr}"
 | 
				
			||||||
 | 
					  localnetworks="10.0.0.0/8
 | 
				
			||||||
 | 
					                 100.64.0.0/10
 | 
				
			||||||
 | 
					                 127.0.0.1/8
 | 
				
			||||||
 | 
					                 172.16.0.0/12
 | 
				
			||||||
 | 
					                 192.168.0.0/16
 | 
				
			||||||
 | 
					                "
 | 
				
			||||||
 | 
					  if ! grepcidr "${localnetworks}" <(echo "${show_from_addr}") >/dev/null; then
 | 
				
			||||||
 | 
					    if [ "${flaggeol}" == "geo" ]; then
 | 
				
			||||||
 | 
					      ipinfo=$(curl "https://api.ipbase.com/v1/json/${show_from_addr}")
 | 
				
			||||||
 | 
					      if [ "$(jq -r '.country_name' <<< "$ipinfo")" != "" ]; then
 | 
				
			||||||
 | 
					        z=$(jq -r '.zip_code' <<< "$ipinfo")
 | 
				
			||||||
 | 
					        c=$(jq -r '.country_name' <<< "$ipinfo")
 | 
				
			||||||
 | 
					        r=$(jq -r '.region_name' <<< "$ipinfo")
 | 
				
			||||||
 | 
					        t=$(jq -r '.city' <<< "$ipinfo")
 | 
				
			||||||
 | 
					        ipinfo="Source address ${show_from_addr} is from ${z}, ${c}, ${r}, ${t}"
 | 
				
			||||||
 | 
					      fi
 | 
				
			||||||
 | 
					    fi
 | 
				
			||||||
 | 
					  fi
 | 
				
			||||||
 | 
					  addtologs "client ${conf_client_nm} checked. ${ipinfo}"
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#######################################
 | 
				
			||||||
 | 
					# Send email notification about client connect
 | 
				
			||||||
 | 
					# Globals:
 | 
				
			||||||
 | 
					#   ipinfo
 | 
				
			||||||
 | 
					#   conf_client_nm
 | 
				
			||||||
 | 
					#   conf_ipaddress
 | 
				
			||||||
 | 
					# Arguments:
 | 
				
			||||||
 | 
					#   None
 | 
				
			||||||
 | 
					#######################################
 | 
				
			||||||
 | 
					startsendmail() {
 | 
				
			||||||
 | 
					  subj="[VPN Connected] $(cat /etc/hostname): ${conf_client_nm} connect to ${conf_ipaddress}"
 | 
				
			||||||
 | 
					  (
 | 
				
			||||||
 | 
					    python3 /usr/local/bin/sendmail.py \
 | 
				
			||||||
 | 
					    -u "$(grep "from=" /usr/local/bin/sendmail.config | cut -d= -f2)" \
 | 
				
			||||||
 | 
					    -p "$(grep "pass=" /usr/local/bin/sendmail.config | cut -d= -f2)" \
 | 
				
			||||||
 | 
					    -d "$(grep "dest=" /usr/local/bin/sendmail.config | cut -d= -f2)" \
 | 
				
			||||||
 | 
					    --smtp "$(grep "smtp=" /usr/local/bin/sendmail.config | cut -d= -f2)" \
 | 
				
			||||||
 | 
					    --port "$(grep "port=" /usr/local/bin/sendmail.config | cut -d= -f2)" \
 | 
				
			||||||
 | 
					    --stls "True" \
 | 
				
			||||||
 | 
					    --subj "${subj}" \
 | 
				
			||||||
 | 
					    --text "${ipinfo}" \
 | 
				
			||||||
 | 
					    >> /dev/null 2>&1 &
 | 
				
			||||||
 | 
					  )
 | 
				
			||||||
 | 
					  addtologs "sent mail with subject '${subj}'"
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#
 | 
				
			||||||
 | 
					# VARIABLES:
 | 
				
			||||||
 | 
					#
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					pathroot=$1
 | 
				
			||||||
 | 
					flagmail=$2
 | 
				
			||||||
 | 
					flaggeol=$3
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					time=$(date +%s)
 | 
				
			||||||
 | 
					logs="${pathroot}/$(basename -s .sh "$0").log"
 | 
				
			||||||
 | 
					counts_file="${pathroot}/wg-counts.log"
 | 
				
			||||||
 | 
					counts_temp=$(cat "${counts_file}")
 | 
				
			||||||
 | 
					if [ -z "${pathroot}" ]; then
 | 
				
			||||||
 | 
					  logs=/dev/null
 | 
				
			||||||
 | 
					  execerror "Usage example: $0 '/var/log/wireguard' '-' '-'"
 | 
				
			||||||
 | 
					elif [ ! -e "${logs}" ]; then
 | 
				
			||||||
 | 
					  touch "${logs}"
 | 
				
			||||||
 | 
					fi
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					if ! command -v curl &> /dev/null || \
 | 
				
			||||||
 | 
					  ! command -v /usr/local/bin/sendmail.py &> /dev/null || \
 | 
				
			||||||
 | 
					  ! command -v python3 &> /dev/null || \
 | 
				
			||||||
 | 
					  ! command -v grepcidr &> /dev/null || \
 | 
				
			||||||
 | 
					  ! command -v jq &> /dev/null; then
 | 
				
			||||||
 | 
					  execerror "Not found dependencies"
 | 
				
			||||||
 | 
					fi
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#
 | 
				
			||||||
 | 
					# MAIN:
 | 
				
			||||||
 | 
					#
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					if checkroot; then
 | 
				
			||||||
 | 
					  allowed_cfg=$(find /etc/wireguard/ -name "*.conf" | grep -v "wg0.conf")
 | 
				
			||||||
 | 
					  counter_now=0
 | 
				
			||||||
 | 
					  clients_now=""
 | 
				
			||||||
 | 
					  while read -r file; do
 | 
				
			||||||
 | 
					    conf_keepalive=$(grep "PersistentKeepalive" "${file}" |cut -d"=" -f2 |tr -d " ")
 | 
				
			||||||
 | 
					    conf_ipaddress=$(grep "Address" "${file}" |cut -d"=" -f2  |cut -d"/" -f1 |tr -d " ")
 | 
				
			||||||
 | 
					    conf_client_nm=$(basename -s .conf "${file}")
 | 
				
			||||||
 | 
					    show_handshake=$(wg show all dump |grep "${conf_ipaddress}" |cut -f6)
 | 
				
			||||||
 | 
					    show_from_addr=$(wg show all dump |grep "${conf_ipaddress}" |cut -f4 |cut -d":" -f1)
 | 
				
			||||||
 | 
					    if [ "${show_handshake}" -ne 0 ]; then
 | 
				
			||||||
 | 
					      calc_handshake="$(date -d "-${conf_keepalive} min" +"%s")"
 | 
				
			||||||
 | 
					      if [ "${show_handshake}" -ge "${calc_handshake}" ]; then
 | 
				
			||||||
 | 
						      (( counter_now ++))
 | 
				
			||||||
 | 
					        connect_status="connected"
 | 
				
			||||||
 | 
					        if ping -q -c 1 -W 1 "${conf_ipaddress}" > /dev/null; then
 | 
				
			||||||
 | 
					          connect_status="connected, ping responded"
 | 
				
			||||||
 | 
					        else
 | 
				
			||||||
 | 
					          connect_status="connected, ping loss"
 | 
				
			||||||
 | 
					        fi
 | 
				
			||||||
 | 
					        clients_now+=$(printf "%s\n\r" "${conf_client_nm}_${conf_ipaddress}")
 | 
				
			||||||
 | 
					        if ! grep -q "${conf_client_nm}_${conf_ipaddress}" <<< "${counts_temp}"; then
 | 
				
			||||||
 | 
					          addtologs "client ${conf_client_nm} ${connect_status}"
 | 
				
			||||||
 | 
					          expandaddress
 | 
				
			||||||
 | 
					          if [ "${flagmail}" == "mail" ]; then
 | 
				
			||||||
 | 
					            startsendmail
 | 
				
			||||||
 | 
					          fi
 | 
				
			||||||
 | 
					        fi
 | 
				
			||||||
 | 
					      else
 | 
				
			||||||
 | 
					        connect_status="disconnected"
 | 
				
			||||||
 | 
					        if grep -q "${conf_client_nm}_${conf_ipaddress}" <<< "${counts_temp}"; then
 | 
				
			||||||
 | 
					          addtologs "client ${conf_client_nm} ${connect_status}"
 | 
				
			||||||
 | 
					        fi
 | 
				
			||||||
 | 
					      fi
 | 
				
			||||||
 | 
					    else
 | 
				
			||||||
 | 
					      connect_status="never connected"
 | 
				
			||||||
 | 
					    fi
 | 
				
			||||||
 | 
					  done <<< "$allowed_cfg"
 | 
				
			||||||
 | 
					  printf "%s\n" "total=${counter_now}=" > "${counts_file}"
 | 
				
			||||||
 | 
					  printf "%s\n" "${clients_now}" >> "${counts_file}"
 | 
				
			||||||
 | 
					else
 | 
				
			||||||
 | 
					  execerror "Restart this as root!"
 | 
				
			||||||
 | 
					fi
 | 
				
			||||||
 | 
					execquite
 | 
				
			||||||
							
								
								
									
										191
									
								
								wg_status.py
									
									
									
									
									
								
							
							
						
						
									
										191
									
								
								wg_status.py
									
									
									
									
									
								
							| 
						 | 
					@ -1,191 +0,0 @@
 | 
				
			||||||
#!/usr/bin/env python3
 | 
					 | 
				
			||||||
# pylint: disable=W0612
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
"""It's the Wireguard server status parser.
 | 
					 | 
				
			||||||
"""
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
import json
 | 
					 | 
				
			||||||
import re
 | 
					 | 
				
			||||||
import time
 | 
					 | 
				
			||||||
from argparse import ArgumentParser
 | 
					 | 
				
			||||||
from os import path, walk
 | 
					 | 
				
			||||||
from subprocess import Popen, PIPE, STDOUT
 | 
					 | 
				
			||||||
import requests
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
def status(configs_root: str, client_filter: str = '.*', client_geo: bool = False) -> dict:
 | 
					 | 
				
			||||||
    """Wireguard server's peers status parser.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    Args:
 | 
					 | 
				
			||||||
        configs_root (str): root path to peers configs.
 | 
					 | 
				
			||||||
        client_filter (str, optional): client names filter by regex. Defaults to '.*'.
 | 
					 | 
				
			||||||
        client_geo (bool, optional): check client real ip geo location. Defaults to False.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    Returns:
 | 
					 | 
				
			||||||
        dict: {
 | 
					 | 
				
			||||||
            'stats_updated': timestamp,
 | 
					 | 
				
			||||||
            'clients_count': int,
 | 
					 | 
				
			||||||
            'clients_found': int,
 | 
					 | 
				
			||||||
            'data': [
 | 
					 | 
				
			||||||
                {
 | 
					 | 
				
			||||||
                    "name": str,
 | 
					 | 
				
			||||||
                    "r_ip": str,
 | 
					 | 
				
			||||||
                    "r_cc": str,
 | 
					 | 
				
			||||||
                    "v_ip": str,
 | 
					 | 
				
			||||||
                    "b_rx": int,
 | 
					 | 
				
			||||||
                    "b_tx": int,
 | 
					 | 
				
			||||||
                    "t_lh": timestamp,
 | 
					 | 
				
			||||||
                    },
 | 
					 | 
				
			||||||
                ]
 | 
					 | 
				
			||||||
            }
 | 
					 | 
				
			||||||
    """
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    clients_dump = wg_dmp()
 | 
					 | 
				
			||||||
    clients_array = []
 | 
					 | 
				
			||||||
    clients_count = len(clients_dump)
 | 
					 | 
				
			||||||
    clients_found = 0
 | 
					 | 
				
			||||||
    stats_updated = time.strftime("%Y-%m-%d %H:%M:%S")
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    if clients_count > 0:
 | 
					 | 
				
			||||||
        configs_dump = []
 | 
					 | 
				
			||||||
        for root, dirs, files in walk(configs_root, topdown=False):
 | 
					 | 
				
			||||||
            for file_name in files:
 | 
					 | 
				
			||||||
                file_path = path.join(path.realpath(root), file_name)
 | 
					 | 
				
			||||||
                with open(file_path, mode='r', encoding='utf-8') as file:
 | 
					 | 
				
			||||||
                    try:
 | 
					 | 
				
			||||||
                        file_data = file.read()
 | 
					 | 
				
			||||||
                        configs_dump.append(
 | 
					 | 
				
			||||||
                            {
 | 
					 | 
				
			||||||
                                'file_name': file_name,
 | 
					 | 
				
			||||||
                                'file_path': file_path,
 | 
					 | 
				
			||||||
                                'file_data': file_data
 | 
					 | 
				
			||||||
                                }
 | 
					 | 
				
			||||||
                            )
 | 
					 | 
				
			||||||
                    except UnicodeDecodeError:
 | 
					 | 
				
			||||||
                        pass
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        for client in clients_dump:
 | 
					 | 
				
			||||||
            client_name = client['name']
 | 
					 | 
				
			||||||
            for config in configs_dump:
 | 
					 | 
				
			||||||
                if client_name in config['file_data'] and not client['w_if'] in config['file_name']:
 | 
					 | 
				
			||||||
                    client_name = config['file_name'].replace('.key', '').replace('.conf', '')
 | 
					 | 
				
			||||||
                    break
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            if re.findall(client_filter, client_name) or re.findall(client_filter, client['name']):
 | 
					 | 
				
			||||||
                reject_after_time = 180
 | 
					 | 
				
			||||||
                client_dl = int(time.mktime(time.strptime(stats_updated, "%Y-%m-%d %H:%M:%S")))
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                if client['p_lh'] + reject_after_time >= client_dl:
 | 
					 | 
				
			||||||
                    client_r_ip = client['r_ip']
 | 
					 | 
				
			||||||
                    client_r_cc = '--'
 | 
					 | 
				
			||||||
                    if client_geo and re.match(r'\d{1,3}.\d{1,3}.\d{1,3}.\d{1,3}', client_r_ip):
 | 
					 | 
				
			||||||
                        client_r_cc = ip_geo(addr=client_r_ip)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    client_t_lh = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime(client['p_lh']))
 | 
					 | 
				
			||||||
                    clients_array.append(
 | 
					 | 
				
			||||||
                        {
 | 
					 | 
				
			||||||
                            'name': client_name,
 | 
					 | 
				
			||||||
                            'r_ip': client_r_ip,
 | 
					 | 
				
			||||||
                            'r_cc': client_r_cc,
 | 
					 | 
				
			||||||
                            'v_ip': client['v_ip'],
 | 
					 | 
				
			||||||
                            'b_rx': client['b_rx'],
 | 
					 | 
				
			||||||
                            'b_tx': client['b_tx'],
 | 
					 | 
				
			||||||
                            't_lh': client_t_lh
 | 
					 | 
				
			||||||
                            }
 | 
					 | 
				
			||||||
                        )
 | 
					 | 
				
			||||||
                    clients_found += 1
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    clients_stats = {
 | 
					 | 
				
			||||||
        'stats_updated': stats_updated,
 | 
					 | 
				
			||||||
        'clients_count': clients_count,
 | 
					 | 
				
			||||||
        'clients_found': clients_found,
 | 
					 | 
				
			||||||
        'data': clients_array,
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
    return clients_stats
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
def wg_dmp() -> list:
 | 
					 | 
				
			||||||
    """Parse 'wg show all dump' result.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    Returns:
 | 
					 | 
				
			||||||
        list: [
 | 
					 | 
				
			||||||
            {
 | 
					 | 
				
			||||||
                "name": str,
 | 
					 | 
				
			||||||
                "r_ip": str,
 | 
					 | 
				
			||||||
                "v_ip": str,
 | 
					 | 
				
			||||||
                "b_rx": int,
 | 
					 | 
				
			||||||
                "b_tx": int,
 | 
					 | 
				
			||||||
                "p_lh": int,
 | 
					 | 
				
			||||||
                "i_ka": int,
 | 
					 | 
				
			||||||
                "w_if": str
 | 
					 | 
				
			||||||
                },
 | 
					 | 
				
			||||||
            ]
 | 
					 | 
				
			||||||
    """
 | 
					 | 
				
			||||||
    process = ['wg', 'show', 'all', 'dump']
 | 
					 | 
				
			||||||
    with Popen(process, stdout=PIPE, stderr=STDOUT) as proc:
 | 
					 | 
				
			||||||
        dlm = '\t'
 | 
					 | 
				
			||||||
        dump_text = proc.stdout.read().decode('utf-8')
 | 
					 | 
				
			||||||
        peer_list = []
 | 
					 | 
				
			||||||
        for dump_line in dump_text.splitlines():
 | 
					 | 
				
			||||||
            line_list = dump_line.split(dlm)
 | 
					 | 
				
			||||||
            w_if = line_list[0]
 | 
					 | 
				
			||||||
            if len(line_list) == 5:
 | 
					 | 
				
			||||||
                pass
 | 
					 | 
				
			||||||
            if len(line_list) == 9:
 | 
					 | 
				
			||||||
                peer_list.append(
 | 
					 | 
				
			||||||
                    {
 | 
					 | 
				
			||||||
                        "name": line_list[1],
 | 
					 | 
				
			||||||
                        "r_ip": line_list[3].split(':')[0],
 | 
					 | 
				
			||||||
                        "v_ip": line_list[4],
 | 
					 | 
				
			||||||
                        "b_rx": int(line_list[6]),
 | 
					 | 
				
			||||||
                        "b_tx": int(line_list[7]),
 | 
					 | 
				
			||||||
                        "p_lh": int(line_list[5]),
 | 
					 | 
				
			||||||
                        "i_ka": int(line_list[8]),
 | 
					 | 
				
			||||||
                        "w_if": w_if
 | 
					 | 
				
			||||||
                        }
 | 
					 | 
				
			||||||
                    )
 | 
					 | 
				
			||||||
        return peer_list
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
def ip_geo(addr: str) -> str:
 | 
					 | 
				
			||||||
    """Get ip address geo location.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    Args:
 | 
					 | 
				
			||||||
        addr (str): ip address.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    Returns:
 | 
					 | 
				
			||||||
        str: country code.
 | 
					 | 
				
			||||||
    """
 | 
					 | 
				
			||||||
    try:
 | 
					 | 
				
			||||||
        request = 'https://geolocation-db.com/json/' + addr
 | 
					 | 
				
			||||||
        response = requests.get(request, timeout=5)
 | 
					 | 
				
			||||||
        result = json.loads(response.content.decode())
 | 
					 | 
				
			||||||
        return result['country_code']
 | 
					 | 
				
			||||||
    except requests.exceptions.RequestException:
 | 
					 | 
				
			||||||
        return '--'
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
if __name__ == "__main__":
 | 
					 | 
				
			||||||
    args = ArgumentParser(
 | 
					 | 
				
			||||||
        prog='wg_status',
 | 
					 | 
				
			||||||
        description='Wireguard server status parser',
 | 
					 | 
				
			||||||
        epilog='Dependencies: '
 | 
					 | 
				
			||||||
            '- Python 3 (tested version 3.9.5), '
 | 
					 | 
				
			||||||
            '- Python 3 modules: requests '
 | 
					 | 
				
			||||||
        )
 | 
					 | 
				
			||||||
    args.add_argument('-p', '--peers_root', type=str, default='/etc/wireguard/pki', required=False,
 | 
					 | 
				
			||||||
                    help='root path to peers configs or public keys')
 | 
					 | 
				
			||||||
    args.add_argument('-f', '--filter', type=str, default='.*', required=False,
 | 
					 | 
				
			||||||
                    help='client names filter by regex')
 | 
					 | 
				
			||||||
    args.add_argument('-g', '--geo', action='store_true', required=False,
 | 
					 | 
				
			||||||
                    help='check client real ip geo location (may be slow)')
 | 
					 | 
				
			||||||
    args = vars(args.parse_args())
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    json_data = status(
 | 
					 | 
				
			||||||
        configs_root=args['peers_root'],
 | 
					 | 
				
			||||||
        client_filter=args['filter'],
 | 
					 | 
				
			||||||
        client_geo=args['geo']
 | 
					 | 
				
			||||||
        )
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    print(json.dumps(json_data, indent=2))
 | 
					 | 
				
			||||||
		Loading…
	
		Reference in New Issue
	
	Block a user