Форум русскоязычного сообщества Ubuntu


Следите за новостями русскоязычного сообщества Ubuntu в Twitter-ленте @ubuntu_ru_loco

Автор Тема: pppd не выполняет запуск скриптов при обрыве  (Прочитано 1220 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Вадимка

  • Автор темы
  • Любитель
  • *
  • Сообщений: 51
    • Просмотр профиля
Ubuntu Server 16.04 на OpenVZ
Задача: раздавать сервисы в удаленную сеть.
Решение: подключаемся через ppp к удаленному серверу pptp, pon remote-server,
выполняется скрипт в /etc/ppp/ip-up.d/script_name:
route add -net 192.168.0.0 netmask 255.255.255.0 gw 192.168.0.1, всё работает.
При редком обрыве связи нам помогает опция persistent. pptp переподключается нормально.

Проблемы возникают, когда pon remote-server запускаю при загрузке системы.
По какой-то неведомой мне причине ppp не выполняет скрипты в /etc/ppp/ip-up.d/, если pon remote-server выполнен из /etc/network/ip-up.d/script-name и еще пробовал /etc/rc.local.

Если выполнить pon remote-server из командной строки, то скрипты /etc/ppp/ip-up.d/* выполняются при обрыве и восстановлении связи.

Подскажите, как при загрузке системы поднять pptp, чтобы при переподключении скрипты /etc/ppp/ip-up.d/* выполнялись.
« Последнее редактирование: 25 Июль 2017, 19:02:06 от Вадимка »

Оффлайн AnrDaemon

  • Заслуженный пользователь
  • Старожил
  • *
  • Сообщений: 27434
    • Просмотр профиля
Через /etc/network/interfaces пробовали настраивать?…
Хотите получить помощь? Потрудитесь представить запрошенную информацию в полном объёме.

Прежде чем [Отправить], нажми [Просмотр] и прочти собственное сообщение. Сам-то понял, что написал?…

Оффлайн Вадимка

  • Автор темы
  • Любитель
  • *
  • Сообщений: 51
    • Просмотр профиля
Через /etc/network/interfaces пробовали настраивать?…

Попробовал.
iface ppp0 inet ppp
provider провайдер
auto ppp0

При обрыве переподключается, но скрипты не выполняются.

Пользователь добавил сообщение 25 Июль 2017, 20:23:20:
Проверил на физической машине с той же версией Ubuntu Server 16.04.2, такого поведения нет, скрипты всегда выполняются как и должно быть. На OpenVZ ядро какое-то старое (GNU/Linux 2.6.32-042stab123.3 x86_64), возможно проблема хостера. Разбираюсь дальше.
« Последнее редактирование: 25 Июль 2017, 20:23:20 от Вадимка »

Оффлайн AnrDaemon

  • Заслуженный пользователь
  • Старожил
  • *
  • Сообщений: 27434
    • Просмотр профиля
При обрыве переподключается, но скрипты не выполняются.
А вы их прописали, выполняться?
up ip route replace …не?
Хотите получить помощь? Потрудитесь представить запрошенную информацию в полном объёме.

Прежде чем [Отправить], нажми [Просмотр] и прочти собственное сообщение. Сам-то понял, что написал?…

Оффлайн Вадимка

  • Автор темы
  • Любитель
  • *
  • Сообщений: 51
    • Просмотр профиля
А вы их прописали, выполняться?
up ip route replace …не?

Нет, up, post-up не выполняются, к сожалению. Сеть не запускается, выдается ошибка на эти строки.Пробовал так:
auto ppp0
iface ppp0 inet ppp
provider провайдер
up route add -net 192.168.0.0 netmask 255.255.255.0 gw 192.168.0.1 dev ppp0

В логе появляется:
Jul 26 02:35:24 1uu ifup[978]: SIOCADDRT: Network is unreachable
Jul 26 02:35:24 1uu ifup[978]: Failed to bring up ppp0.
Jul 26 02:35:24 1uu pptp[990]: anon log[main:pptp.c:350]: The synchronous pptp option is NOT activated
Jul 26 02:35:24 1uu systemd[1]: networking.service: Main process exited, code=exited, status=1/FAILURE
Jul 26 02:35:24 1uu pppd[985]: Terminating on signal 15
Jul 26 02:35:24 1uu pppd[985]: Connection terminated.

Если up убрать, ppp0 подключается нормально.

Оффлайн AnrDaemon

  • Заслуженный пользователь
  • Старожил
  • *
  • Сообщений: 27434
    • Просмотр профиля
А не факт, что интерфейс будет ppp0…
Используйте переменные.
И не add а replace
Хотите получить помощь? Потрудитесь представить запрошенную информацию в полном объёме.

Прежде чем [Отправить], нажми [Просмотр] и прочти собственное сообщение. Сам-то понял, что написал?…

Оффлайн Вадимка

  • Автор темы
  • Любитель
  • *
  • Сообщений: 51
    • Просмотр профиля
А не факт, что интерфейс будет ppp0…
Используйте переменные.
И не add а replace

replace - нет такой команды в route у меня.

Пока временное решение - ppp0 поднимается в interfaces. Раз в минуту cron запускает скрипт, который выполняет route, если нет шлюза.

Оффлайн AnrDaemon

  • Заслуженный пользователь
  • Старожил
  • *
  • Сообщений: 27434
    • Просмотр профиля
ip route replace
$INET_IFACE
Хотите получить помощь? Потрудитесь представить запрошенную информацию в полном объёме.

Прежде чем [Отправить], нажми [Просмотр] и прочти собственное сообщение. Сам-то понял, что написал?…

Оффлайн Вадимка

  • Автор темы
  • Любитель
  • *
  • Сообщений: 51
    • Просмотр профиля
ip route replace
$INET_IFACE

Если в interfaces я пишу:
up ip route add 192.168.0.0/24 via 192.168.0.1То ppp0 поднимается, но шлюз прописывается на интерфейс venet0, а не ppp0.

Если в interfaces я пишу:
up ip route add 192.168.0.0/24 via 192.168.0.1 dev ppp0То ppp0 не поднимается, нет такого интерфейса на тот момент.

Если в interfaces я пишу:
up ip route replace 192.168.0.0/24 via 192.168.0.1То ppp0 не поднимается, нет такого правила на замену на тот момент.

Пока что у меня рабочий вариант такой, interfaces:
auto ppp0
iface ppp0 inet ppp
provider провайдер

ip-up.d/скрипт, который всё так же по неведомой причине выполняется только 1 раз на моей машине:
ip route add 192.168.0.0/24 via 192.168.0.1
В crontab прописан скрипт (раз в 1 минуту):
#!/bin/bash

ppp_up=$(/sbin/ifconfig | grep -o "ppp0")
ppp0_gw=$(/sbin/route | grep "ppp0" | grep "^192.168.0.0" | grep -o "192.168.0.1")
venet_gw=$(/sbin/route | grep "venet0" | grep "^192.168.0.0" | grep -o "192.168.0.1")

if [ "$ppp_up" = "ppp0" ]; then # если ppp0 соединение установлено
echo "ppp0 up"
if [ "$ppp0_gw" = "192.168.0.1" ]; then # если шлюз установлен правильно
echo "gw ok"
else # если шлюз установлен НЕправильно
echo "gw error"
if [ "$venet_gw" = "192.168.0.1" ]; then # если шлюз установлен НЕправильно на venet0
echo "gw wrong dev venet0"
ip route replace 192.168.0.0/24 via 192.168.0.1
else # если шлюз установлен НЕправильно
echo "gw not set"
ip route add 192.168.0.0/24 via 192.168.0.1
fi
fi
else
echo "ppp0 down"
fi


Оффлайн AnrDaemon

  • Заслуженный пользователь
  • Старожил
  • *
  • Сообщений: 27434
    • Просмотр профиля
Если в interfaces я пишу:Код: [Выделить]   up ip route replace 192.168.0.0/24 via 192.168.0.1
Напишите ПРАВИЛЬНО.
ip route replace to 192.168.0.0/24 via $IF_GATEWAY dev $IFACE


Пользователь добавил сообщение 27 Июль 2017, 12:17:19:
P.S.
http://anr-daemon.livejournal.com/2040.html
Хотите получить помощь? Потрудитесь представить запрошенную информацию в полном объёме.

Прежде чем [Отправить], нажми [Просмотр] и прочти собственное сообщение. Сам-то понял, что написал?…

Оффлайн Вадимка

  • Автор темы
  • Любитель
  • *
  • Сообщений: 51
    • Просмотр профиля
Напишите ПРАВИЛЬНО.
ip route replace to 192.168.0.0/24 via $IF_GATEWAY dev $IFACE

Если вы предлагаете это написать в /etc/ppp/ip-up.d/* или /etc/network/if-up.d/*, то при обрыве ppp0 они у меня не запускаются.

Оффлайн koshev

  • Старожил
  • *
  • Сообщений: 1705
  • חתול המדען
    • Просмотр профиля
Вообще хорошо бы поменять название с ppp0 на что-нибудь другое, pptp0 например. Вдруг поможет ;)
Далее. Если Вы хотите выполнять post-up скрипты для pppd используйте только /etc/ppp/ip-{up,down}.d/ и никакие другие.
Что касается переменных и их наименования можно подсмотреть в /etc/ppp/ip-up, там прекрасные комментарии.
« Последнее редактирование: 28 Июль 2017, 20:07:33 от koshev »
Debian GNU\Linux 7.11; ICH7; r8169; Linux 4.14.32-atomd525mv-imq-ja1 (i686)
Ubuntu GNU\Linux 18.04; MCP61; forcedeth; 4.15.0-20-generic (x86_64)

 

Страница сгенерирована за 0.324 секунд. Запросов: 24.