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

Наш баннер
Вы можете установить наш баннер на своем сайте или блоге, скопировав этот код:
RSS новости