Just another Command Line junkie blogNotes of a command line junkie
You should be using Firefox. Tue, 21 Oct 2008
pptp connection manager
Пару лет назад мне понадобилось следить за состоянием 2-х pptp соединений.
1 #!/bin/bash
2 ################################
3 ##### pptp-manager ######
4 ################################
5 #
6 ################################
7 # to check ppp connection state every 10 minutes:
8 ###
9 # create file /etc/cron.d/ppp_check:
10 # */10 * * * * root /path/to/ppp-manager params >& /dev/null
11 # send HUP to cron
12 #################################
13 # last change: 2007-08-01
14
15 LANG="POSIX"
16 PATH="/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/sbin:/usr/local/bin"
17
18 # ppp 0 server IP adress:
19 dest0=""
20
21 # ppp 1 server IP adress:
22 dest1=""
23
24 # pper 0 name (/etc/ppp/peers/peer_name)
25 peer0=""
26
27 # pper 1 name (/etc/ppp/peers/peer_name)
28 peer1=""
29
30 # pptp 0 `network` (if no defaultroute in pppd config)
31 pppnet0=""
32
33 # pptp 1 `network` (if no defaultroute in pppd config)
34 pppnet1=""
35
36 # mail flag
37 mail="0"
38
39 # mail recipient (check reports)
40 mailrecip=""
41
42 # ip-up string:
43 ipustr="echo \"${PPP_IPPARAM} at ${IFNAME}\" > /var/run/ipup-${PPP_IPPARAM}"
44
45 # ip-down-string:
46 ipdstr="echo \"${PPP_IPPARAM} at ${IFNAME}\" > /var/run/ipup-${PPP_IPPARAM"
47
48 if [ ! $UID = "0" ]
49 then
50 echo "script needs root privileges. exit"
51 exit 1;
52 fi
53
54 if [ ! -d /etc/ppp/ip-up.d/ ] && [ ! -d /etc/ppp/ip-up.d/ ]
55 then
56 if [ `tail -n 1 /etc/ppp/ip-up` -eq $ipustr ]
57 then
58 echo "firest start. your system doesn't support /etc/ppp/ip-up.d scripts"
59 echo $ipustr >> /etc/ppp/ip-up
60 echo "added $ipustr to /etc/ppp/ip-up"
61 fi
62
63 if [ `tail -n 1 /etc/ppp/ip-down` -eq $ipdstr ]
64 then
65 echo "firest start. your system doesn't support /etc/ppp/ip-down.d scripts"
66 echo $ipdstr >> /etc/ppp/ip-down
67 echo "added $ipdstr to /etc/ppp/ip-down"
68 fi
69 else
70 if [ ! -e /etc/ppp/ip-up.d/ppp-ifup ] || [ ! -x /etc/ppp/ip-up.d/ppp-ifup ]
71 then
72 echo "first start. file /etc/ppp/ip-up.d/ppp-ifup will be created"
73 echo "#!/bin/bash" > /etc/ppp/ip-up.d/ppp-ifup
74 echo $ipustr >> /etc/ppp/ip-up.d/ppp-ifup
75 chmod u+x /etc/ppp/ip-up.d/ppp-ifup
76 fi
77
78 if [ ! -e /etc/ppp/ip-down.d/ppp-ifdown ] || [ ! -x /etc/ppp/ip-down.d/ppp-ifdown ]
79 then
80 echo "first start. file /etc/ppp/ip-down.d/ppp-ifdown will be created"
81 echo "#!/bin/bash" > /etc/ppp/ip-down.d/ppp-ifdown
82 echo $ipdstr >> /etc/ppp/ip-down.d/ppp-ifdown
83 chmod u+x /etc/ppp/ip-down.d/ppp-ifdown
84 fi
85 fi
86
87 #############################################
88 #############################################
89 # start peer func, 1st arg destination, 2nd arg peer name, [3rd arg ppp network]
90 start_peer()
91 {
92 # check for another ppp connections
93 if [ ! -e /var/run/ipup-$2 ] || [ `ps ax | grep pppd | grep -v grep | awk '{print $9}' | grep -w $1 | wc -l` -eq 0 ]
94 then
95 echo "setting up ppp connection to $1 peer $2"
96 /usr/sbin/pptp $1 call $2 ipparam $2
97 sleep 10
98
99 if [ -e /var/run/ipup-$2 ]
100 then
101 dev=`cat /var/run/ipup-$2 | awk '{print $3}'`
102 fi
103
104 if [ ! $dev = "" ] && [ `cat /proc/net/dev | grep $dev | awk '{print $1}' | wc -l` -eq 1 ]
105 then
106
107 if [[ `cat \`cat /etc/ppp/peers/$2 | grep options | awk '{print $2}'\` | grep defaultroute` = "defaultroute" ]]
108 then
109 echo "defaultroute for $2 enabled (\`route del default\` before running script)"
110 else
111 if [ ! $3 = "" ]
112 then
113 echo "defaultroute for $2 disabled"
114 route add -net $3 dev $dev
115 echo "route to $3 through $dev added"
116 else
117 echo "no routes will be added. please define pppnet0 var or add "defaultroute" pppd parameter"
118 fi
119 fi
120
121 echo "connected. interface $dev"
122 else
123 echo "error trying to connect peer $2"
124 fi
125 else
126
127 echo "$2 already connected"
128 fi
129 }
130
131 ##############################################
132 ##############################################
133 ## stop peer func, 1st arg peer
134 stop_peer()
135 {
136 if [ -e /var/run/ipup-$1 ]
137 then
138 dev=`cat /var/run/ipup-$1 | awk '{print $3}'`
139 fi
140 if [ ! -e /var/run/ipup-$1 ] || [ `ps ax | grep pppd | grep -v grep | awk '{print $9}' | grep -w $1 | wc -l` -eq 0 ]
141 then
142 echo "connection $1 already down"
143 else
144 kill -9 `ps ax | grep ppp | grep -w $1 | awk '{print $1}' | head -n 1`
145 echo "$1 terminated, iface $dev down"
146 fi
147 }
148
149 ##############################################
150 ##############################################
151 ## check peer func, 1st arg peer
152 check_peer()
153 {
154 echo "checking $1 connection state"
155
156 if [ -e /var/run/ipup-$1 ]
157 then
158 dev=`cat /var/run/ipup-$1 | awk '{print $3}'`
159 fi
160 if [ ! -e /var/run/ipup-$1 ] || [ `ps ax | grep pppd | grep -v grep | awk '{print $9}' | grep -w $1 | wc -l` -eq 0 ]
161 then
162 echo "connection $1 down. trying to reconnect.."
163 $0 start $1
164 if [ $mail -eq 1 ]
165 then
166 echo "ppp connection $1 down at `date`" | mail -s "`hostname` ppp-manager report" $mailrecip
167 fi
168 else
169 echo "$1 is connected at iface $dev"
170 fi
171 }
172
173
174 ##############################################
175 ## menu
176 if [ ! -z "$1" ]
177 then
178 param0=$1
179 param1=$2
180 else
181 echo "1) start"
182 echo "2) stop"
183 echo "3) restart"
184 echo "4) check"
185 echo -n "enter: "; read param0
186 if [ $param0 -eq "1" ]
187 then
188 param0="start"
189 echo "$param0 peer:"
190 echo "1) $peer0"
191 echo "2) $peer1"
192 echo "3) all"
193 echo -n "enter: "; read param1
194 if [ $param1 -eq "1" ]
195 then
196 param1=$peer0
197 elif [ $param1 -eq "2" ]
198 then
199 param1=$peer1
200 elif [ $param1 -eq "3" ]
201 then
202 param1="all"
203 else
204 echo "bad argument, exiting.."
205 exit 1;
206 fi
207 elif [ $param0 -eq "2" ]
208 then
209 param0="stop"
210 echo "$param0 peer:"
211 echo "1) $peer0"
212 echo "2) $peer1"
213 echo "3) all"
214 echo -n "enter: "; read param1
215 if [ $param1 -eq "1" ]
216 then
217 param1=$peer0
218 elif [ $param1 -eq "2" ]
219 then
220 param1=$peer1
221 elif [ $param1 -eq "3" ]
222 then
223 param1="all"
224 else
225 echo "bad argument, exiting.."
226 exit 1;
227 fi
228 elif [ $param0 -eq "3" ]
229 then
230 param0="restart"
231 echo "$param0 peer:"
232 echo "1) $peer0"
233 echo "2) $peer1"
234 echo "3) all"
235 echo -n "enter: "; read param1
236 if [ $param1 -eq "1" ]
237 then
238 param1=$peer0
239 elif [ $param1 -eq "2" ]
240 then
241 param1=$peer1
242 elif [ $param1 -eq "3" ]
243 then
244 param1="all"
245 else
246 echo "bad argument, exiting.."
247 exit 1;
248 fi
249 elif [ $param0 -eq "4" ]
250 then
251 param0="check"
252 echo "$param0 peer:"
253 echo "1) $peer0"
254 echo "2) $peer1"
255 echo "3) all"
256 echo -n "enter: "; read param1
257 if [ $param1 -eq "1" ]
258 then
259 param1=$peer0
260 elif [ $param1 -eq "2" ]
261 then
262 param1=$peer1
263 elif [ $param1 -eq "3" ]
264 then
265 param1="all"
266 else
267 echo "bad argument, exiting.."
268 exit 1;
269 fi
270 else
271 echo "bad argument, exiting.."
272 exit 1;
273 fi
274 fi
275 #############################################
276
277
278
279 case "$param0" in
280 start)
281 case $param1 in
282 $peer0)
283 start_peer $dest0 $peer0 $pppnet0
284 ;;
285
286 $peer1)
287 start_peer $dest1 $peer1 $pppnet1
288 ;;
289
290 all)
291 start_peer $dest0 $peer0 $pppnet0
292 start_peer $dest1 $peer1 $pppnet1
293 ;;
294
295 *)
296 echo "usage: \`$0 start {$peer0 | $peer1 | all}\`"
297 esac
298 ;;
299
300 stop)
301 case $param1 in
302 $peer0)
303 stop_peer $peer0
304 ;;
305 $peer1)
306 stop_peer $peer1
307 ;;
308 all)
309 stop_peer $peer0
310 stop_peer $peer1
311 ;;
312 *)
313 echo "usage: '$0 stop {$peer0 | $peer1 | all}'"
314 esac
315 ;;
316
317 restart)
318 case $param1 in
319 $peer0)
320 stop_peer $peer0
321 sleep 2
322 start_peer $dest0 $peer0 $pppnet0
323 ;;
324 $peer1)
325 stop_peer $peer1
326 sleep 2
327 start_peer $dest1 $peer1 $pppnet1
328 ;;
329 all)
330 $0 stop all
331 sleep 2
332 $0 start all
333 ;;
334 *)
335 echo "usage: '$0 restart {$peer0 | $peer1 | all}'"
336 esac
337 ;;
338
339 check)
340 case $param1 in
341 $peer0)
342 check_peer $peer0
343 ;;
344 $peer1)
345 check_peer $peer1
346 ;;
347 all)
348 $0 check $peer0
349 $0 check $peer1
350 ;;
351 *)
352 echo "usage: '$0 check {$peer0 | $peer1 | all}'"
353 esac
354 ;;
355 *)
356 echo "usage: '$0 {start | stop | restart | check}'"
357 esac
|
Menu Links RSS 2.0 ![]() |