4
4
# Generate OpenVPN configs
5
5
#
6
6
7
+ USE_DEFAULT_ROUTE=true
8
+
9
+ TMP_PUSH_CONFIGFILE=$( mktemp -t vpn_push.XXXXXXX)
10
+ TMP_ROUTE_CONFIGFILE=$( mktemp -t vpn_route.XXXXXXX)
7
11
TMP_EXTRA_CONFIGFILE=$( mktemp -t vpn_extra.XXXXXXX)
8
12
9
13
# Traceback on Error and Exit come from https://docwhat.org/tracebacks-in-bash/
@@ -40,6 +44,8 @@ trap on_error ERR
40
44
41
45
on_exit () {
42
46
echo " Cleaning up before Exit ..."
47
+ rm -f $TMP_PUSH_CONFIGFILE
48
+ rm -f $TMP_ROUTE_CONFIGFILE
43
49
rm -f $TMP_EXTRA_CONFIGFILE
44
50
local _ec=" $? "
45
51
if [[ $_ec != 0 && " ${_showed_traceback} " != t ]]; then
@@ -99,11 +105,27 @@ usage() {
99
105
echo " -z Enable comp-lzo compression."
100
106
}
101
107
108
+ process_route_config () {
109
+ local ovpn_route_config=' '
110
+ ovpn_route_config=" $1 "
111
+ # If user passed "0" skip this, assume no extra routes
112
+ [[ " $ovpn_route_config " == " 0" ]] && break ;
113
+ echo " Processing Route Config: '${ovpn_route_config} '"
114
+ [[ -n " $ovpn_route_config " ]] && echo " route $( getroute $ovpn_route_config ) " >> " $TMP_ROUTE_CONFIGFILE "
115
+ }
116
+
117
+ process_push_config () {
118
+ local ovpn_push_config=' '
119
+ ovpn_push_config=" $1 "
120
+ echo " Processing PUSH Config: '${ovpn_push_config} '"
121
+ [[ -n " $ovpn_push_config " ]] && echo " push $ovpn_push_config " >> " $TMP_PUSH_CONFIGFILE "
122
+ }
123
+
102
124
process_extra_config () {
103
125
local ovpn_extra_config=' '
104
126
ovpn_extra_config=" $1 "
105
127
echo " Processing Extra Config: '${ovpn_extra_config} '"
106
- [ -n " $ovpn_extra_config " ] && echo " $ovpn_extra_config " >> " $TMP_EXTRA_CONFIGFILE "
128
+ [[ -n " $ovpn_extra_config " ] ] && echo " $ovpn_extra_config " >> " $TMP_EXTRA_CONFIGFILE "
107
129
108
130
}
109
131
@@ -127,10 +149,6 @@ OVPN_NAT=0
127
149
OVPN_DNS=1
128
150
OVPN_DEVICE=" tun"
129
151
OVPN_DEVICEN=0
130
- OVPN_ROUTES=()
131
- TMP_ROUTES=()
132
- OVPN_PUSH=()
133
- TMP_PUSH=()
134
152
OVPN_DNS_SERVERS=(" 8.8.8.8" " 8.8.4.4" )
135
153
TMP_DNS_SERVERS=()
136
154
OVPN_TLS_CIPHER=' '
@@ -157,7 +175,8 @@ while getopts ":a:e:C:T:r:s:du:cp:n:DNmf:tz2" opt; do
157
175
OVPN_TLS_CIPHER=" $OPTARG "
158
176
;;
159
177
r)
160
- TMP_ROUTES+=(" $OPTARG " )
178
+ USE_DEFAULT_ROUTE=false
179
+ process_route_config " $OPTARG "
161
180
;;
162
181
s)
163
182
OVPN_SERVER=$OPTARG
@@ -172,7 +191,7 @@ while getopts ":a:e:C:T:r:s:du:cp:n:DNmf:tz2" opt; do
172
191
OVPN_CLIENT_TO_CLIENT=1
173
192
;;
174
193
p)
175
- TMP_PUSH+=( " $OPTARG " )
194
+ process_push_config " $OPTARG "
176
195
;;
177
196
n)
178
197
TMP_DNS_SERVERS+=(" $OPTARG " )
@@ -216,12 +235,6 @@ done
216
235
# Create ccd directory for static routes
217
236
[ ! -d " ${OPENVPN:- } /ccd" ] && mkdir -p ${OPENVPN:- } /ccd
218
237
219
- # if new routes were not defined with -r, use default
220
- [ ${# TMP_ROUTES[@]} -gt 0 ] && OVPN_ROUTES=(" ${TMP_ROUTES[@]} " )
221
-
222
- # if new push directives were not defined with -p, use default
223
- [ ${# TMP_PUSH[@]} -gt 0 ] && OVPN_PUSH=(" ${TMP_PUSH[@]} " )
224
-
225
238
# if dns servers were not defined with -n, use google nameservers
226
239
[ ${# TMP_DNS_SERVERS[@]} -gt 0 ] && OVPN_DNS_SERVERS=(" ${TMP_DNS_SERVERS[@]} " )
227
240
240
253
# Apply defaults
241
254
[ -z " $OVPN_PROTO " ] && OVPN_PROTO=udp
242
255
[ -z " $OVPN_PORT " ] && OVPN_PORT=1194
243
- [ ${ # OVPN_ROUTES[@]} -eq 0 ] && OVPN_ROUTES=( " 192.168.254.0/24" )
256
+ [ $USE_DEFAULT_ROUTE ] && process_route_config " 192.168.254.0/24"
244
257
245
258
export OVPN_SERVER OVPN_ROUTES OVPN_DEFROUTE
246
259
export OVPN_SERVER_URL OVPN_ENV OVPN_PROTO OVPN_CN OVPN_PORT
@@ -277,7 +290,6 @@ key-direction 0
277
290
keepalive 10 60
278
291
persist-key
279
292
persist-tun
280
- push block-outside-dns
281
293
282
294
proto $OVPN_PROTO
283
295
# Rely on Docker to do port mapping, internally always 1194
@@ -289,6 +301,9 @@ user nobody
289
301
group nogroup
290
302
EOF
291
303
304
+ # This was in the heredoc, we use the new function instead
305
+ process_push_config " block-outside-dns"
306
+
292
307
[ -n " $OVPN_TLS_CIPHER " ] && echo " tls-cipher $OVPN_TLS_CIPHER " >> " $conf "
293
308
[ -n " $OVPN_CIPHER " ] && echo " cipher $OVPN_CIPHER " >> " $conf "
294
309
[ -n " $OVPN_AUTH " ] && echo " auth $OVPN_AUTH " >> " $conf "
@@ -299,22 +314,17 @@ EOF
299
314
[ -n " ${OVPN_FRAGMENT:- } " ] && echo " fragment $OVPN_FRAGMENT " >> " $conf "
300
315
301
316
[ " $OVPN_DNS " == " 1" ] && for i in " ${OVPN_DNS_SERVERS[@]} " ; do
302
- echo " push dhcp-option DNS $i " >> " $conf "
303
- done
304
- # Append Routes
305
- for i in " ${OVPN_ROUTES[@]} " ; do
306
- # If user passed "0" skip this, assume no extra routes
307
- [ " $i " = " 0" ] && break ;
308
- echo route $( getroute " $i " ) >> " $conf "
317
+ process_push_config " dhcp-option DNS $i "
309
318
done
310
319
320
+ # Append route commands
321
+ echo -e " \n### Route Configurations Below" >> " $conf "
322
+ cat $TMP_ROUTE_CONFIGFILE >> " $conf "
323
+
311
324
# Append push commands
312
- if [ ! -z ${OVPN_PUSH[@]:- } ]; then
313
- echo " ${OVPN_PUSH} "
314
- for i in " ${OVPN_PUSH[@]} " ; do
315
- echo push \" $i \" >> " $conf "
316
- done
317
- fi
325
+ echo -e " \n### Push Configurations Below" >> " $conf "
326
+ cat $TMP_PUSH_CONFIGFILE >> " $conf "
327
+
318
328
# Optional OTP authentication support
319
329
if [ -n " ${OVPN_OTP_AUTH:- } " ]; then
320
330
echo -e " \n\n# Enable OTP+PAM for user authentication" >> " $conf "
0 commit comments