Как только связь 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.
Если вы связываете две LAN, вы будете должны установить специфические маршруты к 'посторонним' LAN. Это легко выполняется, используя скрипт /etc/ppp/ip-up. Единственая трудность возникает, если ваша машина работает с несколькими PPP соединениями.
Это потому, что /etc/ppp/ip-up выполняется для КАЖДОГО ppp соединения, которое устанавливается, так что вы должны тщательно выполнить правильные команды маршрутизации для определенного устанавливаемого соединения - и не выполнять их, когда устанавливается любое другое соединение!
Когда появляется связь между двумя LAN, вы можете захотеть удостовериться, что почта, которая поставлена в очередь на обоих концах соединения, отправлена адресату. Это выполняется добавлением соответствующего вызова sendmail.
Для этого используется выражения bash 'case' для соответствующего параметра, передаваемого скрипту, запукающему pppd. Например вот скрипт /etc/ppp/ip-up, который я использую, чтобы обработать наши WAN соединения и связь с моей LAN ethernet (также обрабатывемую на том же самом ppp сервере).
Пример ниже обеспечивает ряд примеров использования.
______________________________________________________________________ #!/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 ______________________________________________________________________
Предыдущий раздел показывает, как обработать исходящую почту - просто, очисткой (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 связи.