|
- #!/bin/bash
- #
- # Copyright (c) 2020 Bubble, Inc. All rights reserved. For personal (non-commercial) use, see license: https://getbubblenow.com/bubble-license/
- #
- LOG=/tmp/bubble.wg_monitor_connections.log
-
- function die {
- echo 1>&2 "${1}"
- log "${1}"
- exit 1
- }
-
- function log {
- echo "$(date): ${1}" >> ${LOG}
- }
-
- ALGO_CONFIGS=/root/ansible/roles/algo/algo/configs
- BUBBLE_DEVICE_DIR=/home/bubble/wg_devices
- if [[ ! -d ${BUBBLE_DEVICE_DIR} ]] ; then
- mkdir -p ${BUBBLE_DEVICE_DIR} && chown -R bubble ${BUBBLE_DEVICE_DIR} && chmod 700 ${BUBBLE_DEVICE_DIR} || die "Error creating ${BUBBLE_DEVICE_DIR}"
- fi
-
- while : ; do
- peer=""
- IFS=$'\n'
- for line in $(wg show all) ; do
- if [[ ! -z "${peer}" ]] ; then
- if [[ $(echo "${line}" | tr -d ' ') == allowed* ]] ; then
- for ip in $(echo "${line}" | cut -d: -f2- | tr ',' '\n' | tr -d ' ' | cut -d/ -f1) ; do
- device_uuids="$(find $(find $(find ${ALGO_CONFIGS} -type d -name wireguard) -type d -name public) -type f | xargs grep -l ${peer} | xargs -n 1 basename)"
- if [[ $(echo "${device_uuids}" | wc -l | tr -d ' ') -gt 1 ]] ; then
- log "Multiple device UUIDs found for IP ${ip} (not recording anything): ${device_uuids}"
- continue
- fi
- device="$(echo "${device_uuids}" | head -1 | tr -d ' ')"
-
- ip_file="${BUBBLE_DEVICE_DIR}/ip_$(echo ${ip})"
- if [[ ! -f ${ip_file} ]] ; then
- touch ${ip_file} && chown bubble ${ip_file} && chmod 400 ${ip_file} || log "Error creating ${ip_file}"
- fi
- device_exists=$(grep -c "${ip}" ${ip_file})
- if [[ ${device_exists} -eq 0 ]] ; then
- log "recorded device ${device} for IP ${ip}"
- echo "${device}" > ${ip_file} || log "Error writing ${device} to ${ip_file}"
- fi
-
- device_file="${BUBBLE_DEVICE_DIR}/device_$(echo ${device})"
- if [[ ! -f ${device_file} ]] ; then
- touch ${device_file} && chown bubble ${device_file} && chmod 400 ${device_file} || log "Error creating ${ip_file}"
- fi
- ip_exists=$(grep -c "${ip}" ${device_file})
- if [[ ${ip_exists} -eq 0 ]] ; then
- log "recorded IP ${ip} for device ${device}"
- echo "${ip}" >> ${device_file} || log "Error writing ${ip} to ${device_file}"
- fi
-
- done
- peer=""
- fi
-
- elif [[ ${line} == peer* ]] ; then
- peer="$(echo "${line}" | awk '{print $NF}')"
- fi
- done
- sleep 30s
- done
|