PPP HOWTO: После того, как связь установлена - скрипт /etc/ppp/ip-up

Next Previous Contents

23. После того, как связь установлена - скрипт /etc/ppp/ip-up

Как только связь PPP установлена, pppd ищет /etc/ppp/ip-up. Если этот сценарий существует и может выполняться, PPP демон выполняет скрипт. Он позволяет вам автоматизировать любые специальные команды маршрутизации, которые могут вам понадобиться, и любые другие действия, которые вы хотите выполнить при активизации PPP соединения.

Это только скрипт shell, и он может делать все, что может делать скрипт shell (то есть фактически все что вы хотите).

Например, вы можете заставить sendmail послать исходящую почту, стоящую в очереди.

Точно так же вы можете вставить команды в ip-up для забора почты (используя POP), ждущий вас на вашем ISP.

Имеются ограничения на /etc/ppp/ip-up:

Он выполняется в преднамеренно ограниченном окружении, чтобы усилить защиту. Это означает, что вы должны указыва полный путь к запускаемым файлам и т.д.

Технически /etc/ppp/ip-up - это программа, а не скрипт. Это означает, что он может быть непосредственно выполнен - и следовательно требуется стандартный магический файл (#!/bin/bash) в начале первой строки скрипта и он должен быть читаем и выполним пользователем root.

23.1 Специальная маршрутизация

Если вы связываете две LAN, вы будете должны установить специфические маршруты к 'посторонним' LAN. Это легко выполняется, используя скрипт /etc/ppp/ip-up. Единственая трудность возникает, если ваша машина работает с несколькими PPP соединениями.

Это потому, что /etc/ppp/ip-up выполняется для КАЖДОГО ppp соединения, которое устанавливается, так что вы должны тщательно выполнить правильные команды маршрутизации для определенного устанавливаемого соединения - и не выполнять их, когда устанавливается любое другое соединение!

23.2 Обработка почтовой очереди

Когда появляется связь между двумя LAN, вы можете захотеть удостовериться, что почта, которая поставлена в очередь на обоих концах соединения, отправлена адресату. Это выполняется добавлением соответствующего вызова sendmail.

Для этого используется выражения bash 'case' для соответствующего параметра, передаваемого скрипту, запукающему pppd. Например вот скрипт /etc/ppp/ip-up, который я использую, чтобы обработать наши WAN соединения и связь с моей LAN ethernet (также обрабатывемую на том же самом ppp сервере).

23.3 Пример скрипта /etc/ppp/ip-up

Пример ниже обеспечивает ряд примеров использования.

  ______________________________________________________________________
  #!/bin/bash
  #
  # Скрипт, выполняющий при необходимости задачи маршрутизации для pppd
  # Только связь с Newman требует такой обработки.
  #
  # Когда ppp связь установлена, этот скрипт вызывается со следующими 
  # параметрами
  #       $1      имя интерфейса, используемое pppd (напр. ppp3)
  #       $2      имя устройства tty
  #       $3      скорость устройства tty
  #       $4      локальный IP адрес  для интерфейса
  #       $5      удаленный IP адрес
  #       $6      параметр, указанный опцией 'ipparam' в pppd
  #
  case "$5" in
  # Обработка маршрутизации для сервера Newman Campus
          202.12.126.1)
                  /sbin/route add -net 202.12.126.0 gw 202.12.126.1
  # and flush the mail queue to get their email there asap!
                  /usr/sbin/sendmail -q &
                  ;;
          139.130.177.2)
  # Наше Internet соединение
  # когда вязь будет установлена, запустить сервер времни и синхронизировать с
  # миром. Предполагается, что он еще не запущен 
                  if [ ! -f /var/lock/subsys/xntpd ]; then
                          /etc/rc.d/init.d/xntpd.init start &
                  fi
  # Запуск сервера новостей (если еще не запущен)
                  if [ ! -f /var/lock/subsys/news ]; then
                          /etc/rc.d/init.d/news start &
                  fi
                  ;;
          203.18.8.104)
  # Скачать почту на мою домашнюю машину при установлении связи
  # Маршрутизция не требуется, так как мой домашний Ethernet обрабатывается IP
  # masquerade и proxyarp маршрутизацией.
                  /usr/sbin/sendmail -q &
                  ;;
          *)
  esac
  exit 0
  ______________________________________________________________________

В результате поднятия ppp линка с нашим университетским городком Newman и выполнения этого сценария, мы получаем таблицы маршрутизации со следующими записями (эта машина явялется также нашим общим PPP сервером, и обрабатывает нашу связь с Интернет). Я разнообразил комментарии в выводе, чтобы помочь объяснить, чем является каждая запись):

  ______________________________________________________________________
  [root@kepler /root]# route -n
  Kernel routing table
  Destination     Gateway         Genmask         Flags MSS    Window Use Iface
  # HOST маршрут на наш удаленный шлюз в Интернет
  139.130.177.2   *               255.255.255.255 UH    1500   0      134 ppp4
  # HOST маршрут на наш Newman сервер студенческого городка
  202.12.126.1    *               255.255.255.255 UH    1500   0       82 ppp5
  # HOST маршрут на мой домашний ethernet
  203.18.8.104    *               255.255.255.255 UH    1500   0       74 ppp3
  # две наши основные коммутируемые PPP линии
  203.18.8.64     *               255.255.255.255 UH    552    0        0 ppp2
  203.18.8.62     *               255.255.255.255 UH    552    0        1 ppp1
  # специальный сетевой маршрут в Newman LAN студенческого городка
  202.12.126.0    202.12.126.1    255.255.255.0   UG    1500   0        0 ppp5
  # маршрут в наш локальный Ethernet (суперсеть из двух сетей класса C)
  203.18.8.0      *               255.255.254.0   U     1500   0     1683 eth0
  # маршрут в устройство loop back
  127.0.0.0       *               255.0.0.0       U     3584   0      483 lo
  # маршрут по умолчанию в Internet
  default         139.130.177.2   *               UG    1500   0     3633 ppp4
  ______________________________________________________________________

23.4 Обработка email

Предыдущий раздел показывает, как обработать исходящую почту - просто, очисткой (flushing) почтовой очереди, если связь установлена.

Если вы делаете WAN связь, то вы можете договориться с сетевым администратором удаленной LAN, чтобы cделать то же самое. Например, настройка нашей стороны WAN связи с Университетским городком Newman в файле /etc/ppp/ip-up выглядит так:

______________________________________________________________________

#!/bin/bash
#
# Скрипт, который занимается проблемами маршрутизации по мере 
# необходимости для pppd
# Только связь с Hedland требует этой обработки.
#

# Когда связь ppp появляется, этот скрипт вызывается со следующими параметрами
#       $1      имя интерфейса, используемого pppd (например ppp3)
#       $2      имя устройства tty
#       $3      скорость устройства tty
#       $4      локальный IP адрес  для интерфейса
#       $5      удаленный IP адрес
#       $6      параметр, указанный опцией 'ipparam' в pppd
#
case "$5" in
        203.18.8.4)
                /usr/sbin/sendmail -q
                ;;
        *)
esac
exit 0
______________________________________________________________________

Если однако вы имеете с вашим ISP только динамический IP адрес по PPP связи, вы должны получать ваш email с аккаунта на машине вашего ISP. Это обычно делается с использованием POP (Протокол Почтового отделения). Этот процесс может быть выполнен, используя программу 'popclient', - а ip-up скрипт может автоматизировать этот процесс!

Просто создайте сценарий /etc/ppp/ip-up, который содержит соответствующий вызов popclient. Для моей портативной ЭВМ, на которой работает Red Hat Linux (которую я беру в любые путешествия), это

______________________________________________________________________

popclient -3 -c -u hartr -p <password> kepler.hedland.edu.au |formail -s procmail
______________________________________________________________________

Вы могли бы использовать slurp или что-то еще, чтобы сделать это же самое для новостей и т.д. Помните, скрипт - это только стандартный скрипт bash и может использоваться так, чтобы автоматизировать ЛЮБУЮ функцию, которую нужно выполнять каждый раз при установлении соответствующей PPP связи.


Next Previous Contents