4
4
# Generate OpenVPN configs
5
5
#
6
6
7
+ TMP_EXTRA_CONFIGFILE=$( mktemp -t vpn_extra.XXXXXXX)
8
+
9
+ # Traceback on Error and Exit come from https://docwhat.org/tracebacks-in-bash/
10
+ set -eu
11
+
12
+ _showed_traceback=f
13
+
14
+ traceback () {
15
+ # Hide the traceback() call.
16
+ local -i start=$(( ${1:- 0} + 1 ))
17
+ local -i end=${# BASH_SOURCE[@]}
18
+ local -i i=0
19
+ local -i j=0
20
+
21
+ echo " Traceback (last called is first):" 1>&2
22
+ for (( i= ${start} ; i < ${end} ; i++ )) ; do
23
+ j=$(( $i - 1 ))
24
+ local function=" ${FUNCNAME[$i]} "
25
+ local file=" ${BASH_SOURCE[$i]} "
26
+ local line=" ${BASH_LINENO[$j]} "
27
+ echo " ${function} () in ${file} :${line} " 1>&2
28
+ done
29
+ }
30
+
31
+ on_error () {
32
+ local _ec=" $? "
33
+ local _cmd=" ${BASH_COMMAND:- unknown} "
34
+ traceback 1
35
+ _showed_traceback=t
36
+ echo " The command ${_cmd} exited with exit code ${_ec} ." 1>&2
37
+ }
38
+ trap on_error ERR
39
+
40
+
41
+ on_exit () {
42
+ echo " Cleaning up before Exit ..."
43
+ rm -f $TMP_EXTRA_CONFIGFILE
44
+ local _ec=" $? "
45
+ if [[ $_ec != 0 && " ${_showed_traceback} " != t ]]; then
46
+ traceback 1
47
+ fi
48
+ }
49
+ trap on_exit EXIT
50
+
7
51
# Convert 1.2.3.4/24 -> 255.255.255.0
8
52
cidr2mask ()
9
53
{
@@ -55,13 +99,28 @@ usage() {
55
99
echo " -z Enable comp-lzo compression."
56
100
}
57
101
58
- if [ " $DEBUG " == " 1" ]; then
102
+ process_extra_config () {
103
+ local ovpn_extra_config=' '
104
+ ovpn_extra_config=" $1 "
105
+ echo " Processing Extra Config: '${ovpn_extra_config} '"
106
+ [ -n " $ovpn_extra_config " ] && echo " $ovpn_extra_config " >> " $TMP_EXTRA_CONFIGFILE "
107
+
108
+ }
109
+
110
+ if [ " ${DEBUG:- } " == " 1" ]; then
59
111
set -x
60
112
fi
61
113
62
114
set -e
63
115
64
- OVPN_ENV=$OPENVPN /ovpn_env.sh
116
+ if [ -z " ${OPENVPN:- } " ]; then
117
+ export OPENVPN=" $PWD "
118
+ fi
119
+ if [ -z " ${EASYRSA_PKI:- } " ]; then
120
+ export EASYRSA_PKI=" $OPENVPN /pki"
121
+ fi
122
+
123
+ OVPN_ENV=${OPENVPN} /ovpn_env.sh
65
124
OVPN_SERVER=192.168.255.0/24
66
125
OVPN_DEFROUTE=1
67
126
OVPN_NAT=0
@@ -89,7 +148,7 @@ while getopts ":a:e:C:T:r:s:du:cp:n:DNmf:tz2" opt; do
89
148
OVPN_AUTH=" $OPTARG "
90
149
;;
91
150
e)
92
- OVPN_EXTRA_CONFIG= " $OPTARG "
151
+ process_extra_config " $OPTARG "
93
152
;;
94
153
C)
95
154
OVPN_CIPHER=" $OPTARG "
@@ -155,7 +214,7 @@ while getopts ":a:e:C:T:r:s:du:cp:n:DNmf:tz2" opt; do
155
214
done
156
215
157
216
# Create ccd directory for static routes
158
- [ ! -d " $OPENVPN /ccd" ] && mkdir -p $OPENVPN /ccd
217
+ [ ! -d " ${ OPENVPN:- } /ccd" ] && mkdir -p ${ OPENVPN:- } /ccd
159
218
160
219
# if new routes were not defined with -r, use default
161
220
[ ${# TMP_ROUTES[@]} -gt 0 ] && OVPN_ROUTES=(" ${TMP_ROUTES[@]} " )
@@ -199,7 +258,7 @@ if [ -f "$OVPN_ENV" ]; then
199
258
fi
200
259
export | grep OVPN_ > " $OVPN_ENV "
201
260
202
- conf=$OPENVPN /openvpn.conf
261
+ conf=${ OPENVPN:- } /openvpn.conf
203
262
if [ -f " $conf " ]; then
204
263
bak=$conf .$( date +%s) .bak
205
264
echo " Backing up $conf -> $bak "
@@ -234,12 +293,10 @@ EOF
234
293
[ -n " $OVPN_CIPHER " ] && echo " cipher $OVPN_CIPHER " >> " $conf "
235
294
[ -n " $OVPN_AUTH " ] && echo " auth $OVPN_AUTH " >> " $conf "
236
295
237
- [ -n " $OVPN_CLIENT_TO_CLIENT " ] && echo " client-to-client" >> " $conf "
238
- [ -n " $OVPN_COMP_LZO " ] && echo " comp-lzo" >> " $conf "
239
-
240
- [ -n " $OVPN_FRAGMENT " ] && echo " fragment $OVPN_FRAGMENT " >> " $conf "
296
+ [ -n " ${OVPN_CLIENT_TO_CLIENT:- } " ] && echo " client-to-client" >> " $conf "
297
+ [ -n " ${OVPN_COMP_LZO:- } " ] && echo " comp-lzo" >> " $conf "
241
298
242
- [ -n " $OVPN_EXTRA_CONFIG " ] && echo " $OVPN_EXTRA_CONFIG " >> " $conf "
299
+ [ -n " ${OVPN_FRAGMENT :- } " ] && echo " fragment $OVPN_FRAGMENT " >> " $conf "
243
300
244
301
[ " $OVPN_DNS " == " 1" ] && for i in " ${OVPN_DNS_SERVERS[@]} " ; do
245
302
echo " push dhcp-option DNS $i " >> " $conf "
@@ -252,24 +309,29 @@ for i in "${OVPN_ROUTES[@]}"; do
252
309
done
253
310
254
311
# Append push commands
255
- for i in " ${OVPN_PUSH[@]} " ; do
312
+ if [ ! -z ${OVPN_PUSH[@]:- } ]; then
313
+ echo " ${OVPN_PUSH} "
314
+ for i in " ${OVPN_PUSH[@]} " ; do
256
315
echo push \" $i \" >> " $conf "
257
- done
258
-
316
+ done
317
+ fi
259
318
# Optional OTP authentication support
260
- if [ -n " $OVPN_OTP_AUTH " ]; then
319
+ if [ -n " ${ OVPN_OTP_AUTH:- } " ]; then
261
320
echo -e " \n\n# Enable OTP+PAM for user authentication" >> " $conf "
262
321
echo " plugin /usr/lib/openvpn/plugins/openvpn-plugin-auth-pam.so openvpn" >> " $conf "
263
322
fi
264
323
324
+ echo -e " \n### Extra Configurations Below" >> " $conf "
325
+ cat $TMP_EXTRA_CONFIGFILE >> " $conf "
326
+
265
327
set +e
266
328
267
329
# Clean-up duplicate configs
268
- if diff -q " $bak_env " " $OVPN_ENV " 2> /dev/null; then
330
+ if diff -q " ${ bak_env:- } " " $OVPN_ENV " 2> /dev/null; then
269
331
echo " Removing duplicate back-up: $bak_env "
270
332
rm -fv " $bak_env "
271
333
fi
272
- if diff -q " $bak " " $conf " 2> /dev/null; then
334
+ if diff -q " ${ bak:- } " " $conf " 2> /dev/null; then
273
335
echo " Removing duplicate back-up: $bak "
274
336
rm -fv " $bak "
275
337
fi
0 commit comments