Настраиваем 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 |