-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathconfiguracion_DHCP.sh
executable file
·464 lines (464 loc) · 16.2 KB
/
configuracion_DHCP.sh
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
#! /bin/bash
#Version 0.5
. funciones.sh
archivoserver="/etc/default/dhcp3-server"
#Funcion que modifica todas las caracteristicas de la red al ser cambiada la ip del servidor
function modDhcp(){
# $1 = interfaz, $2 = nueva IP, $3 = rango de red,
# $4 = rango inicio, $5 = rango fin, $6 = mascara de red, $7 = broadcast, $8 = dns
linicial=`n_linea "#Configuracion" $archivo`
#Modifica la interfaz que se esta usando
leth=`n_linea "INTERFACES=" $archivoserver`
interfaz=`str_linea $leth $archivoserver|cut -d"=" -f 2`
mod_linea $leth $interfaz "\"$1\"" $archivoserver
#Modifica la ip del servidor dhcp
let linea=$linicial+3
ipserver=`str_linea $linea $archivo |cut -c 16-`
mod_linea $linea $ipserver "$2;" $archivo
#Modifica la subnet (Rango de la red)
let linea=$linicial+5
subnetAnterior=`str_linea $linea $archivo |cut -d" " -f 2`
mod_linea $linea $subnetAnterior $3 $archivo
#Modifica la ip de broadcast de la red
let linea=$linicial+2
broadcastAnterior=`str_linea $linea $archivo |cut -d" " -f 3`
mod_linea $linea $broadcastAnterior "$7;" $archivo
#Modifica la netmask
let linea=$linicial+5
netmaskAnterior=`str_linea $linea $archivo |cut -d" " -f 4`
mod_linea $linea $netmaskAnterior $6 $archivo
#Modifica la subnet-mask
let linea=$linicial+1
subnetmaskAnterior=`str_linea $linea $archivo |cut -d" " -f 3`
mod_linea $linea $subnetmaskAnterior "$6;" $archivo
#Modifica la ip inicial del rango de direcciones
let linea=$linicial+6
inicioRango=`str_linea $linea $archivo |cut -d" " -f 2`
mod_linea $linea $inicioRango $4 $archivo
#Modifica la ip final del rango de direcciones
let linea=$linicial+6
finRango=`str_linea $linea $archivo |cut -d" " -f 3`
mod_linea $linea $finRango "$5;" $archivo
#Modifica la ip dns usada por el servidor
let linea=$linicial+7
dns=`str_linea $linea $archivo |cut -d" " -f 3`
mod_linea $linea $dns "$8;" $archivo
#Modifica la ip de la interfaz usada por el DHCP para que coincida
ifconfig $1 $2 netmask $6
/etc/init.d/dhcp3-server restart
echo "Servicio configurado correctamente"
intro
}
function nuevoDhcp(){
# $1 = interfaz, $2 = nueva IP, $3 = rango de red,
# $4 = rango inicio, $5 = rango fin, $6 = mascara de red, $7 = broadcast, $8 = dns
echo "#Configuracion" >> $archivo
echo "option subnet-mask $6;" >> $archivo
echo "option broadcast-address $7;" >> $archivo
echo "option routers $2;" >> $archivo
echo "" >> $archivo
echo "subnet $3 netmask $6 {" >> $archivo
echo "range $4 $5;" >> $archivo
echo "option domain-name-servers $8;" >> $archivo
echo "}" >> $archivo
leth=`n_linea "INTERFACES=" $archivoserver`
interfaz=`str_linea $leth $archivoserver|cut -d"=" -f 2`
mod_linea $leth $interfaz "\"$1\"" $archivoserver
ifconfig $1 $2 netmask $6
/etc/init.d/dhcp3-server restart
echo "Servicio configurado correctamente"
intro
}
function modRango(){
# $1 = Ip de inicio , $2 ip final
linicial=`n_linea "#Configuracion" $archivo`
let linea=$linicial+6
antes=`str_linea $linea $archivo`
despues="range $1 $2;"
mod_linea $linea "$antes" "$despues" "$archivo"
echo "Rango modificado correctamente"
intro
}
function modDNS(){
# $1 = ip del servidor DNS
#Modifca la ip del dns usado por el servidor DHCP
linicial=`n_linea "#Configuracion" $archivo`
let linea=$linicial+7
mod_linea $linea $dnsAnterior "$1" $archivo
echo "DNS modificado correctamente"
intro
}
function menu2(){
case $1 in
1) #Modificar ip del servidor DHCP
clear
#Le pedimos que seleccione la interfaz sobre la que ira el DHCP
echo "==========================================================="
echo "DHCP > Configuracion > desde 0"
echo
echo "Al configurar desde 0 el servidor DHCP deberas elegir la "
echo "interfaz y modificar la ip, mascara de red y broadcast del"
echo "interfaz usado por el dhcp para transmitir el servicio."
echo "Tambien deberas introducir un nuevo rango de ips que el"
echo "servicio otorgara a los clientes"
echo "==========================================================="
echo
echo "Elige el interfaz desde el que transmitra el servidor"
echo "Disponibles:"
ifconfig -s |grep eth > interfaces
cat -b interfaces |cut -d" " -f 6
echo
echo -n "Elige una opcion: "
read opcion
interfaz=`str_linea $opcion interfaces |cut -c 1-4`
echo
clear
#Le pedimos que asigne una ip para el servidor DHCP
echo "=============================================================="
echo "DHCP > Configuracion > desde 0"
echo "=============================================================="
echo "Asigna una ip a la interfaz, dicha ip sera la ip del servidor."
echo "Al elegir la ip se le asignara la mascara dependiendo de la"
echo "clase de ip que sea (A,B,C)."
echo "=============================================================="
echo " Clase C Clase A Clase B"
echo "Ejemplo: 192.168.0.1 o 10.0.0.1 o 128.1.0.1"
echo
echo -n "ip: "
read newip
#Guardamos la nueva ip en un archivo que usaremos mas adelante
echo $newip > iprouter
#Capturamos el primer octeto de bits para determinar su clase
red=`cut -d"." -f 1 iprouter`
#Comprobamos si es de clase A
if test $red -lt 128
then
#Capturamos los bits de red
red=`cut -d"." -f 1 iprouter`
#Declaramos cual sera su rango
rango=$red.0.0.0
#Declaramos cual sera su mascara
netmask=255.0.0.0
#Declaramos cual sera su broadcast
broadcast=$red.255.255.255
clear
#Le pedimos que introduzca el rango
#de ips que quiere otorgar
echo "========================================================================"
echo "DHCP > Configuracion > desde 0"
echo "========================================================================"
echo "A continuacion debe introducir una ip de inicio y una ip final para que"
echo "el servidor DHCP sepa que rango de direcciones puede repartir."
echo "========================================================================"
echo
echo "Ejemplos:"
echo "ip de inicio: 10.0.0.10"
echo "ip final: 10.0.0.100"
echo
echo "En este caso el servidor repartiria de la ip 10.0.0.10 a la 10.0.0.100"
echo
echo -n "ip de inicio?: "
read rangoInicio
echo -n "ip final?: "
read rangoFin
else
#Comprobamos si es de clase B
if test $red -gt 127 -a $red -lt 192
then
#Capturamos los bits de red
red=`cut -d"." -f 1-2 iprouter`
#Declaramos cual sera su rango
rango=$red.0.0
#Declaramos cual sera su mascara
netmask=255.255.0.0
#Declaramos cual sera su broadcast
broadcast=$red.255.255
clear
#Le pedimos que introduzca el rango
#de ips que quiere otorgar
echo "========================================================================"
echo "DHCP > Configuracion > desde 0"
echo "========================================================================"
echo "A continuacion debe introducir una ip de inicio y una ip final para que"
echo "el servidor DHCP sepa que rango de direcciones puede repartir."
echo "========================================================================"
echo
echo "Ejemplos:"
echo "ip de inicio: 128.1.0.10"
echo "ip final: 128.1.0.100"
echo
echo "En este caso el servidor repartiria de la ip 128.1.0.10 a la 128.1.0.100"
echo
echo -n "ip de inicio?: "
read rangoInicio
echo -n "ip final?: "
read rangoFin
else
#Compramos si es de clase C
if test $red -gt 191 -a $red -lt 224
then
#Capturamos los bits de red
red=`cut -d"." -f 1-3 iprouter`
#Declaramos cual sera su rango
rango=$red.0
#Declaramos cual sera su mascara
netmask=255.255.255.0
#Declaramos cual sera su broadcast
broadcast=$red.255
clear
#Le pedimos que introduzca el rango
#de ips que quiere otorgar
echo "========================================================================"
echo "DHCP > Configuracion > desde 0"
echo "======================================================================="
echo "A continuacion debe introducir una ip de inicio y una ip final para que"
echo "el servidor DHCP sepa que rango de direcciones puede repartir."
echo "========================================================================"
echo
echo "Ejemplos:"
echo "ip de inicio: 192.168.0.10"
echo "ip final: 192.168.0.100"
echo
echo "En este caso el servidor repartiria de la ip 192.168.0.10 a la 192.168.0.100"
echo
echo -n "ip de inicio?: "
read rangoInicio
echo -n "ip final?: "
read rangoFin
else
#Si la ip que introduce no es valida
#le avisara y parara el proceso de
#configuracion
echo "Direccion introducida no valida, debe ser de clase A, B o C."
intro
break;
fi
fi
fi
clear
#Le pedimos que introduzca una DNS
echo "========================================================"
echo "DHCP > Configuracion > desde 0"
echo "========================================================"
echo "A continuacion debe introducir la direccion IP de su DNS"
echo "========================================================"
echo
echo "Ejemplo: 8.8.8.8 (DNS de Google)"
echo
echo -n "ip?: "
read dns
clear
#Mostramos el resultado de la configuracion del servidor
echo "============================================="
echo "DHCP > Configuracion > desde 0"
echo "============================================="
echo "La configuracion del servidor DHCP queda asi:"
echo "============================================="
echo "Interfaz que usara el servidor: $interfaz"
echo "Direccion IP statica del servidor: $newip"
echo "Rango de la red: $rango"
echo "Ip Inicial: $rangoInicio"
echo "Ip Final: $rangoFin"
echo "Mascara de red: $netmask"
echo "Broadcast de la red: $broadcast"
echo "DNS: $dns"
echo
echo -n "Es correcta la configuracion? (s/n): "
read opcion
if test $opcion = "s"
then
if test $testnew -lt 112
then
#Lanzamos la funcion para modificar una
#configuracion nueva desde 0
nuevoDhcp $interfaz $newip $rango $rangoInicio $rangoFin $netmask $broadcast $dns
else
#Lanzamos la funcion para modificar una
#configuracion existente desde 0
modDhcp $interfaz $newip $rango $rangoInicio $rangoFin $netmask $broadcast $dns
fi
fi
rm interfaces
rm iprouter
;;
2) #Modificar rango de IPs que otorga el DHCP
clear
#Capturamos el inicio y final del rango de ips que otorga
#el servidor actualmente
linicial=`n_linea "#Configuracion" $archivo`
let linea=$linicial+6
inicioRango=`str_linea $linea $archivo |cut -d" " -f 2`
finRango=`str_linea $linea $archivo |cut -d" " -f 3`
#Le quitamos el ; del final de la linea
let length=`expr length $finRango`-1
finRango=`expr substr $finRango 1 $length`
echo "========================================================================"
echo "DHCP > Configuracion > Rango de IPs"
echo "========================================================================"
echo "A continuacion debe introducir una ip de inicio y una ip final para que"
echo "el servidor DHCP sepa que rango de direcciones puede repartir."
echo "========================================================================"
echo
echo " Rango actual"
echo " Ip de inicio: $inicioRango"
echo " Ip final: $finRango"
echo
echo -n "ip de inicio?: "
read rangoInicio
echo -n "ip final?: "
read rangoFin
modRango $rangoInicio $rangoFin
;;
3) #Modificar direccion DNS
clear
#Capturamos la DNS anterior para mostrarla en el menu
linicial=`n_linea "#Configuracion" $archivo`
let linea=$linicial+7
dnsAnterior=`str_linea $linea $archivo |cut -d" " -f 3`
#Le quitamos el ; del final de la linea
let length=`expr length $dnsAnterior`-1
dnsAnterior=`expr substr $dnsAnterior 1 $length`
echo "========================================================"
echo "DHCP > Configuracion > DNS"
echo "========================================================"
echo "A continuacion debe introducir la direccion IP de su DNS"
echo "========================================================"
echo
echo "DNS anterior: $dnsAnterior"
echo
echo -n "ip?: "
read dns
modDNS $dns
;;
4) #Mostrar Configuracion Actual
clear
linicial=`n_linea "#Configuracion" $archivo`
let linea=$linicial+3
ipserver=`str_linea 115 $archivo |cut -c 16-`
#Le quitamos el ; del final de la linea
let length=`expr length $ipserver`-1
ipserver=`expr substr $ipserver 1 $length`
let linea=$linicial+5
subnetAnterior=`str_linea $linea $archivo |cut -d" " -f 2`
netmaskAnterior=`str_linea $linea $archivo |cut -d" " -f 4`
let linea=$linicial+2
broadcastAnterior=`str_linea $linea $archivo |cut -d" " -f 3`
#Le quitamos el ; del final de la linea
let length=`expr length $broadcastAnterior`-1
broadcastAnterior=`expr substr $broadcastAnterior 1 $length`
let linea=$linicial+6
inicioRango=`str_linea $linea $archivo |cut -d" " -f 2`
finRango=`str_linea $linea $archivo |cut -d" " -f 3`
#Le quitamos el ; del final de la linea
let length=`expr length $finRango`-1
finRango=`expr substr $finRango 1 $length`
leth=`n_linea "INTERFACES=" $archivoserver`
interfaz=`str_linea $leth $archivoserver|cut -d"=" -f 2`
#Le quitamos los "" del final de la linea
let length=`expr length $interfaz`-2
interfaz=`expr substr $interfaz 2 $length`
let linea=$linicial+7
dns=`str_linea $linea $archivo |cut -d" " -f 3`
#Le quitamos el ; del final de la linea
let length=`expr length $dns`-1
dns=`expr substr $dns 1 $length`
#Mostramos el resultado de la configuracion del servidor
echo "============================================="
echo "DHCP > Configuracion > Actual"
echo "============================================="
echo "La configuracion actual del servidor DHCP es:"
echo "============================================="
echo "Interfaz que usara el servidor: $interfaz"
echo "Direccion IP statica del servidor: $ipserver"
echo "Rango de la red: $subnetAnterior"
echo "Ip Inicial: $inicioRango"
echo "Ip Final: $finRango"
echo "Mascara de red: $netmaskAnterior"
echo "Broadcast de la red: $broadcastAnterior"
echo "DNS: $dns"
echo
intro
;;
*)continue
;;
esac
}
i=-1
while test $i -ne 0
do
#Comprobamos si el servidor ha sido configurado anteriormente
testnew=`wc -l $archivo |cut -d" " -f 1`
if test $testnew -lt 112
#Menu que se lanza si el servidor no ha sido configurado nunca
then
clear
echo "========================================================"
echo "DHCP > Configuracion"
echo "========================================================"
echo "Bienvenido al menu de configuracion del servidor DHCP."
echo
echo "Es la primera vez que se ejecuta el dhcp asi que debera"
echo "configurar todos los aspectos del servidor para que este"
echo "funcione correctamente."
echo "========================================================"
echo
echo "0. Volver"
echo "1. Configurar servidor"
echo
echo -n "Elige una opcion:"
read i
#Lanzamos la opcion elegida
menu2 $i
else
#Menu que se lanza si el servidor ya tiene una configuracion
while test $i -ne 0
do
clear
echo "========================================================"
echo "DHCP > Configuracion"
echo "========================================================"
echo "Bienvenido al menu de configuracion del servidor DHCP."
echo "======================================================"
echo
echo "0. Volver"
echo "1. Configurar servidor desde 0"
echo "2. Modificar rango de IPs que otorga el DHCP"
echo "3. Modificar direccion DNS"
echo "4. Mostrar configuracion actual"
echo
echo -n "Elige una opcion: "
read i
#Lanzamos la opcion elegida
menu2 $i
done
fi
done
#Vaciamos variables
i=
testnew=
dns=
dnsAnterior=
rangoInicio=
rangoFin=
inicioRango=
finRango=
interfaz=
newip=
rango=
rangoInicio=
rangoFin=
netmask=
broadcast=
opcion=
red=
ipserver=
subnetAnterior=
netmaskAnterior=
broadcastAnterior=
subnetmaskAnterior=
antes=
despues=
length=
leth=
linea=
linicial=