>Заработало? А конфиги выложить?) А ну это без проблем. Впринципе, все круги ада которые я прошел описаны в моих сообщениях выше. Одна из следующих проблем была синхронизация времен обмена ключами. На Cisco стояли значения по умолчанию - Dead Peer Detect обрывал связь через 30 минут, в случае отсутствия траффика из удаленных сетей. Пришлось совершать принудительный (со стороны клиента) обмен ключами каждые 20 минут. На данный момент устойство работает - замечаний нет. На прошлой недели совершили некоторые модификации в скриптах и теперь есть другая версия работающая через любые подключения к Инет - АДСЛ-рутер (NAT-TRAVERSAL), АДСЛ-модем, Кабель-Модем. Следующий шаг - автоматизация смены типа подключения - если падает канал АДСЛ - должен произойти перезапуск процессов но уже через мобильную связь и обратно, в случае поднятия приоритетного канала.
Как сделано:
Создан пользователь для конфигурации, которому при входе (консоль или telnet-ssh) сразу же запускается config.sh - примитивный диалог-скрипт спрашивающий все необходимые для подключения данные (ip, netmask, внутренние сети, сети за туннелем, cisco-public-ip's_main/backup, preshared-key, приоритет между main/backup). Все это пишется в файл с правами 700 в таком виде.
IPADDR 10.100.70.2/24
NETWORK 10.100.70.0/24
HOSTNAME shop_666
DOMAIN consumer.net
IPSEC_GW1 aaa.bbb.ccc.ddd
PSK1 XXXXXXXXXX
IPSEC_GW2 eee.fff.ggg.hhh
PSK2 XXXXXXXXXX
PRIORITY 4
IPSEC_NET1 10.0.0.0/8
IPSEC_NET2 192.168.10.0/24
IPSEC_NET3 192.168.15.0/24
После сохранения данных, устройство перезагружается - пытаясь определить присутсвие модема USB (тут заслуга SLAX). При обнаружении одного из используемых в нашей местности модема (Huawei, Novatel или Sierra) - посылаем ПИН код (всегда один и тот же) в /dev/ttyUSB0. Поднимаем eth0 c параметрами $IPADDR/$NETWORK, прописываем $HOSTNAME/$DOMAIN в /etc/hostaname /etc/resolve. Вызываем ppp-go, скрипт присутсвующий в SLAX (заранее изменяем параметры конфигурации под используемого провайдера), убеждаемся что связь установлена, выдергиваем полученый публичный ИП через ifconfig ppp0 | grep ..., генерируем setkey.conf и racoon.conf, psk.txt - утсанавливаем права на эти файлы 700 (иначе не работает). Выполняем echo 1 > /proc/sys/net/ipv4/ip_forwarding, setkey -f /etc/racoon/setkey.conf, racoon -f /etc/racoon/racoon.conf
Проверяем пиды процессов, наличие интерфейса ppp0, делаем одинарный пинг в $IPSEC_NET1, $IPSEC_NET2, $IPSEC_NET3 для поднятия туннелей со всеми предполагаемыми сетями. Каждые 30 секунд проверяем, что процесс racoon жив, что мобильная связь не упала, что в /var/log/racoon.log - нет записей ERROR. В любом из этих случаев перезапускаем скрипт подсчитывая количество попыток установить успешную связь с $IPSEC_GW1. Делим количество попыток на $PRIORITY - если дает результат с остатком - пытаемся снова подключиться к $IPSEC_GW1. Если остаток "ноль" - подключаемся к $IPSEC_GW2. Т.е. в случае $PRIORITY=4 - каждый 4-ый раз будем подключаться к Cisco-Backup. Также в скрипт внедрены элементанрые "echo /a" для подачи звука через системный динамик, чтобы без подключения монитора можно было сообразить что происходит с системой ("пи" - один раз - успешное подключение, два раза - проблема модем USB, три раза - не могу подключиться к провайдеру,...)
Желающим могу прояснить подробности. Скрипты выкладывать не буду, так как я не программист и даже близко не стоял - все сделал на основе своей собственной логики и чтения манов. Потому стыдно это показывать.