СообщениеДобавлено: Чт 19 Июн, 2014 15:14 Заголовок сообщения: Управление соединениями VPN IPSEC Добавить пользователя в список игнора Ответить с цитатой Изменить/удалить это сообщение Удалить сообщение
Всем привет! У меня проблемка, делаю все по книге Крорниенко 2013 года. Хочу чтобы интерфейсы поднимались сами:
Напишем скрипт, который будет читать настройки из
текстового файла и поднимать наши туннельные соединения по
требованию. Для начала, создадим файл с настройками
# vi /home/raph/scrpts/vpn.conf
66.66.66.66:192.168.0:1
77.77.77.77:10.77.77:10
88.88.88.88:10.0.88:100
То есть, мы находимся в центральном офисе. Удаленный
офис №1 имеет внешний IP-адрес 66.66.66.66, внутреннюю
локальную сеть 192.168.0.0/24 и шлюз 192.168.0.1;
удаленный офис №2 – внешний IP 77.77.77.77, локальная сеть
10.77.77.0/24 и шлюз 10.77.77.10; удаленный офис №3 –
внешний IP 88.88.88.88, локальная сеть 10.0.88.0/24 и
шлюз 10.0.88.100. Теперь напишем сам скрипт:
# vi /home/raph/scrpts/vpn.sh
#!/bin/sh
# присваиваем начальное значение счетчику
i=0
# создаем переменные с параметрами нашей сети
# o=наш, e=внеш, i=внутр, n=сеть, a=адрес.
oea="22.22.22.22"
oin="10.0.0"
oia="1"
# сохраняем данные об уже построенных туннелях
ifconfig | grep tunnel | cut -f5 –d' ' > /tmp/ifcfg.txt
# начинаем читать конфигурационный файл
exec < $1
# начинаем перебирать строки конфигурационного файла
while read str
do
# создаем переменные с параметрами удаленной сети
# r=удален, e=внеш, i=внутр, n=сеть, a=адрес.
rea=`echo $str | cut –f1 -d':'`
rin=`echo $str | cut –f2 -d':'`
ria=`echo $str | cut –f3 -d':'`
# ищем эту сеть в уже построенных туннелях
s1=`grep $rea /tmp/ifcfg.txt`
# номер правила для фаерволла (3010, 3020..)
nn=`expr $i \* 10 + 3000`
# проверяем значение второго параметра
if [ $2 –eq "up" ]
then
# если up, то проверяем не поднят ли уже этот туннель
if [ -z $s1 ]
then
# если не поднят, то поднимаем gif, route, ipfw
ifconfig gif$i create
ifconfig gif$i tunnel $oea $rea
ifconfig gif$i inet $oin.$oia $rin.$ria netmask 255.255.255.0
route add $rin.0/24 $rin.$ria
ipfw add $nn allow ip from any to any via gif$i
fi
# проверяем значение второго параметра еще раз
elif [ $2 –eq "down" ]
then
# если down, то удаляем gif, route, ipfw
ifconfig gif$i destroy
route delete $rin.0/24 $rin.$ria
ipfw delete $nn
else
# если не up и не down, просим уточнить действие
echo 'Use "up" or "down" parameter...'
fi
i=`expr $i + 1`
done
rm /tmp/ifcfg.txt
# завершаем выполнени
exit 0
Далее,
# chmod ugo+x /home/raph/scrpts/vpn.sh
# /home/raph/scrpts/vpn.sh /home/raph/scrpts/vpn.conf up
При этом, в начале мы определяем счетчик i и параметры
нашей сети, затем командой ifconfig проверяем какие туннели
у нас уже построены и сохраняем эту информацию в текстовый
файл. Далее начинаем считывать построчно из нашего vpn.conf
параметры удаленных сетей. Если вторым параметром скрипта
идет слово up, то мы проверяем, не построен ли уже этот туннель
– если нет, то строим. Если же вторым параметром идет слово
down, то мы уничтожаем текущий интерфейс и все его настройки.
Когда запускаю, выходит ошибка:
[: up: bad number
[: up: bad number
Use "up" or "down" parametr...
[: up: bad number
[: up: bad number
Use "up" or "down" parametr...
[: up: bad number
[: up: bad number
Use "up" or "down" parametr...
[: up: bad number
[: up: bad number
Выручайте ребята
Если попробовать запустить в режиме компиляции, то везде все нормально кроме строчек где:
# sh -x /home/dima/scrpts/vpn.sh /home/dima/scrpts/vpn.conf up
+ i=0
+ oea=188.168.62.45
+ oin=10.1.1
+ oia=21
+ grep tunnel
+ ifconfig
+ cut -f5 '-d '
+ exec
+ read str
+ echo 62.33.105.29:172.16.0:1
+ cut -f1 -d:
+ rea=62.33.105.29
+ echo 62.33.105.29:172.16.0:1
+ cut -f2 -d:
+ rin=172.16.0
+ echo 62.33.105.29:172.16.0:1
+ cut -f3 -d:
+ ria=1
+ grep 62.33.105.29 /tmp/ifcfg.txt
+ s1=62.33.105.29
+ expr 0 '*' 10 + 3000
+ nn=3000
+ [ up -eq up ]
[: up: bad number
+ [ up -eq down ]
[: up: bad number
+ echo 'Use "up" or "down" parametr...'
Use "up" or "down" parametr...
+ expr 0 + 1
+ i=1
+ read str
+ echo 77.77.77.77:10.77.77:10
+ cut -f1 -d:
+ rea=77.77.77.77
+ echo 77.77.77.77:10.77.77:10
+ cut -f2 -d:
+ rin=10.77.77
+ echo 77.77.77.77:10.77.77:10
+ cut -f3 -d:
+ ria=10
+ grep 77.77.77.77 /tmp/ifcfg.txt
+ s1=''
+ expr 1 '*' 10 + 3000
+ nn=3010
+ [ up -eq up ]
[: up: bad number
+ [ up -eq down ]
[: up: bad number
+ echo 'Use "up" or "down" parametr...'
Use "up" or "down" parametr...
+ expr 1 + 1
+ i=2
+ read str
+ echo 88.88.88.88:10.0.88:100
+ cut -f1 -d:
+ rea=88.88.88.88
+ echo 88.88.88.88:10.0.88:100
+ cut -f2 -d:
+ rin=10.0.88
+ echo 88.88.88.88:10.0.88:100
+ cut -f3 -d:
+ ria=100
+ grep 88.88.88.88 /tmp/ifcfg.txt
+ s1=''
+ expr 2 '*' 10 + 3000
+ nn=3020
+ [ up -eq up ]
[: up: bad number
+ [ up -eq down ]
[: up: bad number
+ echo 'Use "up" or "down" parametr...'
Use "up" or "down" parametr...
+ expr 2 + 1
+ i=3
+ read str
+ echo
+ cut -f1 -d:
+ rea=''
+ echo
+ cut -f2 -d:
+ rin=''
+ echo
+ cut -f3 -d:
+ ria=''
+ grep /tmp/ifcfg.txt
+ s1=''
+ expr 3 '*' 10 + 3000
+ nn=3030
+ [ up -eq up ]
[: up: bad number
+ [ up -eq down ]
[: up: bad number
+ echo 'Use "up" or "down" parametr...'
Use "up" or "down" parametr...
+ expr 3 + 1
+ i=4
+ read str
+ rm /tmp/ifcfg.txt
+ exit 0
Голова аж кругом