Skip to content

Instantly share code, notes, and snippets.

@VitaliiTsilnyk
Last active October 12, 2019 15:13
Show Gist options
  • Save VitaliiTsilnyk/e23ff3660266cf81e2e8 to your computer and use it in GitHub Desktop.
Save VitaliiTsilnyk/e23ff3660266cf81e2e8 to your computer and use it in GitHub Desktop.
#!/bin/bash
#REPO_PATH=/etc/openvpn/zapret-info
CUSTOM_DOMAINS_FILE=/etc/openvpn/custom_domains.txt
OPENVPN_CONFIG_FILE=/etc/openvpn/server.conf
#echo "Updating git repo..."
#git -C "$REPO_PATH" pull
echo "Parsing the dump..."
TMP_ADDR_FILE=$(mktemp)
echo -n "" > "$TMP_ADDR_FILE"
#tail -n +2 "$REPO_PATH/dump.csv" | while IFS=";" read col1 col2; do
# while IFS=' | ' read -ra addr; do
# for i in "${addr[@]}"; do
# echo "$i" >> "$TMP_ADDR_FILE"
# done
# done <<< "$col1"
#done
echo "Adding custom addresses..."
while read domain; do
if [[ -n "${domain}" && "${domain:0:1}" != "#" ]]; then
dig "$domain" A -4 +short | grep -o '[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}' >> "$TMP_ADDR_FILE"
fi
done < "$CUSTOM_DOMAINS_FILE"
echo "Filtering address database..."
TMP_ADDR_U_FILE=$(mktemp)
cat "$TMP_ADDR_FILE" | sort | uniq > "$TMP_ADDR_U_FILE"
rm "$TMP_ADDR_FILE"
echo "Creating route file..."
TMP_ROUTES_FILE=$(mktemp)
echo -n "" > "$TMP_ROUTES_FILE"
while read addr; do
echo "push \"route $addr 255.255.255.255\"" >> "$TMP_ROUTES_FILE"
done < "$TMP_ADDR_U_FILE"
rm "$TMP_ADDR_U_FILE"
echo "Writing config file..."
lead='### BEGIN GENERATED ROUTES ###'
tail='### END GENERATED ROUTES ###'
if grep -q "$lead" "$OPENVPN_CONFIG_FILE"; then
echo " Removing old generated routes..."
TMP_CONF_FILE=$(mktemp)
sed -e "/^$lead\$/,/^$tail\$/d" "$OPENVPN_CONFIG_FILE" > "$TMP_CONF_FILE"
mv "$TMP_CONF_FILE" "$OPENVPN_CONFIG_FILE"
fi
echo " Writing generated routes..."
echo "$lead" >> "$OPENVPN_CONFIG_FILE"
cat "$TMP_ROUTES_FILE" >> "$OPENVPN_CONFIG_FILE"
echo "$tail" >> "$OPENVPN_CONFIG_FILE"
rm "$TMP_ROUTES_FILE"
echo "Restarting OpenVPN service..."
service openvpn stop
service openvpn start
echo "Done."
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment