Всем привет! У меня проблемка, делаю все по книге Крорниенко 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Выручайте ребята
Да откройте для себя величайший из ключей для отладки скриптов (в книге про это не написано???)-x
sh -x scriptname.sh
bash -x scriptname.shс этим ключём будет видно где косяк.
разбирать этот велосипед лень,
вместо кранчбанга #!/bin/sh попробуйте #!/bin/bash
Решил проблему заменой eq на =