Персональный
сайт
Игоря
Сысоева


 
english
обо мне
 
sysoev.ru
 
nginx
 
mod_accel
mod_realip
mod_deflate
программирование
всякая всячина
windows
freebsd
apache
pppd
unix
web
 
 

Настраиваем pppd

 

24.08.1999

Итак, getty в качестве шелла вызывает /usr/sbin/pppd, поэтому мы не можем задать параметры pppd из командной строки, и зададим все необходимые параметры в файлах /etc/ppp/options и /etc/ppp/options.ttyd0. Напомню, что в первом у нас записано:

modem
crtscts
asyncmap 0

Во второй же мы поместим следующее:

passive
192.168.1.1:192.168.1.200
proxyarp
ms-dns 192.168.1.2
ms-dns 192.168.1.4
debug

Рассмотрим параметры подробнее:

  • passive
    При запуске pppd пытается несколько раз установить PPP-соединение, если же все попытки оказались неудачными, pppd завершает работу. Этот параметр указывает pppd не завершать работу, а пассивно ожидать попытки установления соединения, исходящие с удалённой стороны.

  • 192.168.1.1:192.168.1.200
    Этот параметр задаёт соответственно локальный и удалённый адреса для данного соединения, то есть, локальный адрес равен 192.168.1.1, а адрес удалённой стороны — 192.168.1.200. В принципе, адреса могут быть выбраны совершенно от балды, например, 192.168.100.1:10.0.0.1 — между нашим и удалённым компьютером будет работать PPP-соединение. Проблемы начнутся, когда удалённый компьютер будет использовать наш в качестве маршрутизатора для доступа к другим компьютерам. Тут нам придётся попотеть с таблицей маршрутизации. Но если удалённой стороне нужно выделить только один адрес без всяких сетей, то существует способ избежать этого. Для этого удалённой стороне нужно назначить адрес, входящий в нашу локальную сеть, и указать pppd параметр proxyarp, описанный чуть ниже. Кстати, адрес локальной стороны может совпадать с адресом одной из сетевых карт на этом же компьютере.

    После того, как к нам позвонят и pppd установит соединение, выполним команду

    netstat -in
    
    Мы увидим, что сетевому интерфейсу ppp1 назначен адрес 192.168.1.1:
    Name  Mtu   Network    Address     Ipkts Ierrs  Opkts Oerrs  Coll
    ...
    ppp1  1500  <Link>                     2     0      1     0     0
    ppp1  1500  192.168.1  192.168.1.1     2     0      1     0     0
    ...
    

    А выполнив команду

    netstat -rn
    
    мы удостоверимся, что удалённой стороне назначен адрес 192.168.1.200:
    Destination     Gateway      Flags    Refs    Use    Netif Expire
    ...
    192.168.1.200   192.168.1.1  UH         0     297     ppp1
    ...
    

  • proxyarp
    Каждый компьютер в сети хранит таблицу соответствия локальных IP-адресов и физических адресов, например, ethernet'овских. Исходя из этой таблицы, сетевой драйвер определяет по какому физический адресу нужно послать пакет с заданным IP-адресом. Эта таблица динамически обновляется с помощью протокола ARP.

    Если мы выбрали для удалённой стороны адреса, которые входят в нашу локальную сеть, то имеет смысл использовать параметр proxyarp. Этот параметр указывает pppd создать запись в этой таблице для адреса удалённой стороны (в нашем примере — 192.168.1.200) и поставить ему в соответствие физический адрес одной из сетевых карт, установленных на локальном компьютере. В результате все компьютеры в нашей локальной сети (кроме того, на который позвонили) будут считать, что адрес 192.168.1.200 находится на этом компьютере и, таким образом, проблемы с маршрутизацией с нашей стороны не возникает.

    После успешного соединения выполним команду

    arp -a
    
    и увидим, что pppd создал для удалённой стороны с адресом 192.168.1.200 запись в нашей таблице с физическим адресом 0:40:c7:95:38:72:
    dial.fast.ru (192.168.1.1) at 0:40:c7:95:38:72 permanent
    ...
    ppp1.fast.ru (192.168.1.200) at 0:40:c7:95:38:72 permanent
                                            published (proxy only)
    ...
    

    Выполнив на соседнем компьютере ту же команду

    arp -a
    
    мы увидим, что для него наши два адреса вообще никак не отличаются:
    ...
    dial.fast.ru (192.168.1.1) at 0:40:c7:95:38:72
    ...
    ppp1.fast.ru (192.168.1.200) at 0:40:c7:95:38:72
    ...
    

  • ms-dns 192.168.1.2 и ms-dns 192.168.1.4
    Windows 95 и NT 4.0 при установлении PPP-соединения запрашивает адреса двух DNS серверов. Первый параметр задаёт адрес первого DNS сервера, а второй, понятно, второго. Если у Вас только один DNS сервер, то укажите параметр только один раз.

    Этот параметр никак не влияет на адреса DNS клиента, если клиентом выступает pppd. В старых версиях pppd этому параметру соответствовали два других — dns1 и dns2, но, очевидно, эти названия неоднократно вводили публику в заблуждение относительно их применения и параметр переименовали.

  • debug
    Это параметр указывает pppd вести подробный протокол соединения.

В два других файла /etc/ppp/options.ttyd2 и /etc/ppp/options.ttyd3 мы запишем то же самое, за исключением адреса удалённой стороны — он будет другой — соответственно 192.168.1.1:192.168.1.201 и 192.168.1.1:192.168.1.202. Локальный же адрес во всех соединениях мы будем использовать один и тот же.

Как и все остальные параметры, адреса для соединения pppd определяет в следующем порядке:

  • Из файла /etc/ppp/options.
    Записывать что-то сюда — занятие достаточно бессмысленное. Правда, сюда можно поместить адрес локальной стороны — 192.168.1.1:, так как он у нас одинаков для всех входящих соединений. Но поскольку у нас есть одно исходящее соединение к нашему провайдеру, лучше этого не делать.

  • Из файла ~/.ppprc, находящегося в домашнем каталоге пользователя, который запустил pppd.
    От этого файла тоже мало пользы поскольку, либо нам придётся каждому пользователю выделять по отдельному адресу, либо эти адреса всё равно будут переопределены следующим файлом. Кроме того, если мы будем использовать PAP или CHAP аутентификацию, то pppd будет всегда запускаться от root'а. В этом случае лучше назначать адреса с помощью secrets-файлов.

  • Из файла /etc/ppp/options.ttyd0.
    Наиболее действенный способ, которым мы и воспользовались. Каждому порту выделяется свой адрес.

  • Из командной строки pppd.
    Для этого нам нужно записать pppd с нужными нам параметрами в файл:

    #!/bin/sh
        
    /usr/sbin/pppd 192.168.1.1:192.168.1.205
    
    назовём этот файл ppplogin.sh, поместим его в домашний каталог пользователя и установим его в качестве шелла для этого пользователя. Этот метод позволяет некоторым пользователям выделить отдельный адрес.

(C) Игорь Сысоев
http://sysoev.ru