UMGUM.COM (лучше) 

PPPd + Linux client + PAP + CHAP ( Подключение Linux клиента к провайдеру Dial-Up. )

21 июня 2010  (обновлено 31 января 2015)

Эта публикация отнесена в архив. Она неактуальна.

OS: Debian Lenny.

Настроим подключение к Dial-Up провайдеру, например к казахстанскому Nursat в Павлодаре, в Debian Lenny GNU/Linux.

Предположим, мы уже имеем настроенный виртуальный или физический интерфейс связи нашего компьютера с модемом.

Будем отталкиваться от того, что виртуальный или физический интерфейс связи с нашим модемом имеет имя /dev/ttyS*.

# aptitude install ppp

Озаботимся созданием конфигурации PPP подключения.

В каталоге /etc/ppp/peers/ создаем файл с настройками соединения: nursat.ppp:


# mkdir -p /etc/ppp/peers/
# touch /etc/ppp/peers/nursat.ppp

# Указываем на тип используемого оборудования для адаптации к применяемому набору сигналов
modem
# Указываем на используемый интерфейс и скорость его работы
/dev/ttyS* 115200
# Указываем на применение аппаратного контроля чётности передаваемых данных
crtscts
# Указываем на применение программного режима контроля чётности передаваемых данных (думаю, что это вариант для "софт" модемов)
# xonxoff
# Указываем на необходимость блокировки порта во время его использования
lock
# Отключаем установленные по умолчанию методы авторизации (далее укажем те, что нам необходимы)
noauth
# Указываем имя, для которого будет осуществляться авторизация на сервере провайдера
name nursat
# Указываем PPPD пере подключаться через пять секунд после потери или безуспешного соединения
persist holdoff 5
# Указываем количество попыток пере подключения до отказа
maxfail 7
# Указываем на скрипт обработки логики соединения с провайдером
connect '/usr/sbin/chat -v -f /etc/ppp/peers/nursat.ppp.chat'
# Указываем на полностью автоматическое получение сетевых настроек
noipdefault
usepeerdns
defaultroute
# Указываем PPPD не отрывать свою сессию от терминала для мониторинга состояния
nodetach
debug

В каталоге /etc/ppp/peers/ создаем диалоговый файл nursat.ppp.chat:

# touch /etc/ppp/peers/nursat.ppp.chat

ABORT      "ERROR"
ABORT      "NO DIALTONE"
ABORT      "BUSY"
ABORT      "NO ANSWER"
ABORT      "NO CARRIER"
ABORT      "failed"
ABORT      "incorrect"
TIMEOUT    5
""         "AT"
"OK"       "ATZ"
"OK"       "ATDT390039"
TIMEOUT    80
"CONNECT"  "\c"
""         "\c"

В каталоге /etc/ppp/ в файлах "chap-secrets" и "pap-secrets" вносим строки с реквизитами учётных записей для авторизации на сервере провайдера (записи одинаковые для обеих форматов авторизации):

# cat /etc/ppp/chap-secrets
# cat /etc/ppp/pap-secrets

....
# Secrets for authentication for OUTBOUND connections
# client    server  secret    IP addresses
nursat      *       nursat    *
....

Устанавливаем PPP соединение:

# /usr/sbin/pppd call nursat.ppp

Если желательно установить соединение с использованием только метода PAP:

# /usr/sbin/pppd +pap -chap call nursat.ppp

Если желательно установить соединение с использованием только метода CHAP:

# /usr/sbin/pppd -pap +chap call nursat.ppp

Вывод, сопутствующий соединению и указывающий на его успешное осуществление примерно следующий:

Serial connection established.
using channel 24
Using interface ppp0
Connect: ppp0 <--> /dev/ttyS0
....
sent [PAP AuthReq id=0x1 user="nursat" password="nursat"]
....
rcvd [PAP AuthAck id=0x2 ""]
PAP authentication succeeded
sent [CCP ConfReq id=0x1 <deflate 15> <deflate(old#) 15> <bsd v1 15>]
sent [IPCP ConfReq id=0x1 <compress VJ 0f 01> <addr 0.0.0.0> <ms-dns1 0.0.0.0> <ms-dns3 0.0.0.0>]
rcvd [IPCP ConfReq id=0x4 <compress VJ 0f 00> <addr 195.82.29.70>]
sent [IPCP ConfAck id=0x4 <compress VJ 0f 00> <addr 195.82.29.70>]
rcvd [proto=0x8207] 01 cf 00 04
....
local  IP address 192.168.178.108
remote IP address 195.82.29.70
primary   DNS address 195.82.0.1
Script /etc/ppp/ip-up started (pid 26784)
Script /etc/ppp/ip-up finished (pid 26784), status = 0x0
....

Вывод команды ifconfig укажет на наличие работающего сетевого интерфейса:

ppp0  Link encap:Point-to-Point Protocol
      inet addr:192.168.178.108  P-t-P:195.82.29.70  Mask:255.255.255.255
      UP POINTOPOINT RUNNING NOARP MULTICAST  MTU:1500  Metric:1
      RX packets:5 errors:2 dropped:0 overruns:0 frame:0
      TX packets:5 errors:0 dropped:0 overruns:0 carrier:0
      collisions:0 txqueuelen:3
      RX bytes:68 (68.0 B)  TX bytes:103 (103.0 B)

Вывод команды "netstat -r" покажет активные правила маршрутизации:

Destination     Gateway         Genmask         Flags   MSS Window  irtt Iface
Loopback0.gw2.p *               255.255.255.255 UH        0 0          0 ppp0
default         *               0.0.0.0         U         0 0          0 ppp0

Видим, что Dial-Up соединение ppp0 является в данный момент для системы основным и рабочим.

Вот и все, доступ к ресурсам через Dial-Up провайдера настроен. Можно пройти на сайт http://nursat.kz/, единственно доступный для тестового пользователя.

Разорвать соединение можно элементарно:

# killall pppd

Вывод pppd, сопровождающий разрыв соединения:

....
^CTerminating on signal 2
Connect time 0.9 minutes.
Sent 0 bytes, received 0 bytes.
Script /etc/ppp/ip-down started (pid 26956)
sent [LCP TermReq id=0x4 "User request"]
Script /etc/ppp/ip-down finished (pid 26956), status = 0x0
rcvd [LCP TermAck id=0x4]
Connection terminated.

Нужно иметь в виду то, что некоторые модемы не отрабатывают в полной мере функционал завершения сессии, то есть не "опускают трубку" и не осуществляют "сброс параметров" по требованию перед началом соединения (особенно это относится к "софт" модемам). В связи с этим повторное соединение не всегда может быть корректно осуществлено, так как линия "занята"; да и "снятую трубку" в течении длительного времени АТС провайдеров телефонной связи воспринимает как повод к отключению линии.


Заметки и комментарии к публикации:


Оставьте свой комментарий ( выразите мнение относительно публикации, поделитесь дополнительными сведениями или укажите на ошибку )