Мы — долго запрягаем, быстро ездим, и сильно тормозим.
www.lissyara.su —> статьи —> FreeBSD —> Мелочи —> pppd

Настраиваем ppp сервер для раздачи дайлапа клиентам

Автор: lissyara.


    Телеком, в котором я щас работаю (не совсем в нём - у нас группа компаний, но серваки ихние админю я), по слухам дошедшим из давних времён, когда-то начинался с модемного пула на 16 внешних модемов, типа Hayes Accura 336 EXT и второго пня с WinNT4. Модемы были подключены через какие-то мультипортовые платы висевшие на шине ISA - размеру огроменного, сами COM-порты подключались отдельной платой и шлейфом типа IDE-шного на 40 жил.... Дожить-то до наших дней это всё дожило, винда обновилась до 2000, мултипортовые платы стали PCI, но к текущему моменту это было практически неработоспособно - в среднем модемный пул работал по часу, после чего намертво вис - что и не странно - столько лет винда в инете торчала.
   Было принято волевое решение - пора менять на никсы. Для этого был найден старый стоечный корпус, под маму AT. Маму же подобрали ATX - с одим горелым встроенным COM-портом, одним горелым каналом IDE-контроллера, горелым AGP-слотом и никак не влезающую в этот корпус :))) Проц - третий пень на 500MHz - других не было. Корпус пришлось доводить молотком и кусачками до нужной кондиции, как итог - взади дыра 10 на 10 сантиметров - оставлена для лучшего обдува :) В него были воткнуты видяха S3 в PCI, какая-то PCI сетевуха на неизвестном чипе, две мультипортовые платы (про них есть отдельная история) и ещё одна сетевуха - ISA 3com509b (две - потому что он одним интерфейсом (100Mb) смотрит в локалку, другим (10Mb) в инет). Блок питания оставили родной, от корпуса - просто более древнего было не найти. Хард - MAXTOR на 40гиг. Ну, и попробовали о всем этим взлететь. :)))
   Разумеется, фряха нормально встала, нормально подцепила все железки. Пришлось попрыгать с мультипортовой платой - но это нестрашно. Дальше было интересней - согласно хандбуку всё просто, вот тока не описывалось главное - что делать, если у модема нет перемычек отвечающих за автоответ и самостоятельную инициализацию... Если я руками инициализировал модем, то фря прекрасно снимала трубку и чё-то там в неё свистела. А вот если нет - не снимала... Помучавшись, и даже начав писать стартовый мегаскрипт для инициализации всех модемов, вспомнил про яндекс. Он и дал ключевое слово:
/usr/home/lissyara/>cd /usr/ports/
/usr/ports/>make search name='mgetty'
Port:   mgetty-1.1.35_1
Path:   /usr/ports/comms/mgetty+sendfax
Info:   Handle external logins, send and receive faxes
Maint:  jmz@FreeBSD.org
B-deps: perl-5.8.8
R-deps: perl-5.8.8
WWW:    http://www.webforum.de/mgetty-faq.html

/usr/ports/>

   Ставим:
/usr/home/lissyara/>cd /usr/ports/comms/mgetty+sendfax
/usr/ports/comms/mgetty+sendfax/>make && make install && make clean

   В конце установки будет несколько вопросов о настройке модема - можно везде соглашаться на дефолт - всё равно конфиги будут свои. После установки рисуем конфиги - для начала правим файл /etc/ttys - добавляем в его конец такие строки:
ttyd4   "/usr/local/sbin/mgetty"        unknown on insecure
ttyd5   "/usr/local/sbin/mgetty"        unknown on insecure
ttyd6   "/usr/local/sbin/mgetty"        unknown on insecure
ttyd7   "/usr/local/sbin/mgetty"        unknown on insecure
ttyd8   "/usr/local/sbin/mgetty"        unknown on insecure
ttyd9   "/usr/local/sbin/mgetty"        unknown on insecure
ttyda   "/usr/local/sbin/mgetty"        unknown on insecure
ttydb   "/usr/local/sbin/mgetty"        unknown on insecure
ttydc   "/usr/local/sbin/mgetty"        unknown on insecure
ttydd   "/usr/local/sbin/mgetty"        unknown on insecure
ttyde   "/usr/local/sbin/mgetty"        unknown on insecure
ttydf   "/usr/local/sbin/mgetty"        unknown on insecure

Чтобы было понятно, откуда это, привожу листинг своих портов:
/usr/home/lissyara/>dmesg | grep sio
sio6: type 16550A
sio7: <NetMos NM9845/MSC9845CV Quad/Hexa UART> on puc0
sio7: type 16550A
sio8: <NetMos NM9845/MSC9845CV Quad/Hexa UART> on puc0
sio8: type 16550A
sio9: <NetMos NM9845/MSC9845CV Quad/Hexa UART> on puc0
sio9: type 16550A
sio10: <NetMos NM9845/MSC9845CV Quad/Hexa UART> on puc1
sio10: type 16550A
sio11: <NetMos NM9845/MSC9845CV Quad/Hexa UART> on puc1
sio11: type 16550A
sio12: <NetMos NM9845/MSC9845CV Quad/Hexa UART> on puc1
sio12: type 16550A
sio13: <NetMos NM9845/MSC9845CV Quad/Hexa UART> on puc1
sio13: type 16550A
sio14: <NetMos NM9845/MSC9845CV Quad/Hexa UART> on puc1
sio14: type 16550A
sio15: <NetMos NM9845/MSC9845CV Quad/Hexa UART> on puc1
sio15: type 16550A
sio0: <16550A-compatible COM port> port 0x3f8-0x3ff irq 4 flags 0x10 on acpi0
sio0: type 16550A
sio1: configured irq 3 not in bitmap of probed irqs 0
sio1: port may not be enabled
sio13: 1 more silo overflow (total 1)
sio13: 1 more silo overflow (total 2)

   Думаю, понятно, что устройства для работы с портами считаются иначе - после ttyd9 идёт ttyda и по алфавиту :)
   Затем конфиги mgetty
/usr/local/etc/mgetty+sendfax/mgetty.config
# Конфиг mgetty
# Большинство опций ампутировано как ненужные.

# Уровень отладки
debug 4
# Скорость порта для работы с момедом (на 115200 у меня были глюки,
# даже фря зависла намертво - видать модемы или мультипортовеы
# платы шибко глючные)
#speed 115200
speed 57600
# Принимаем только данные (факсы не нужны)
data-only YES
# Тип модема - автоопределение
modem-type auto
# Строка инициализации модема - у меня стандартная подошла
init-chat "" ATS0=0Q0&D3&C1 OK
# Периодичность проверки модема
modem-check-time 600
# С какого звонка снимать трубку
rings 1
# Строка ответа на звонок
answer-chat "" ATA CONNECT \c \r
# сколько вреемни ждать ответа
answer-chat-timeout 80

/usr/local/etc/mgetty+sendfax/login.config
/AutoPPP/ -  -  /usr/sbin/pppd file /etc/ppp/options.ppp.pool debug

   Также надо подготовить конфиги pppd:
/etc/ppp/options.ppp.pool
# Файл опция для pppd

# Дефолтовая опция. С ней, pppd ждёт от модема сигнал CD (Carrier Detect)
# после чего открывает порт (если не задан скрипт соединения).
modem

# Отключить дефолтовое поведение, когда не задан локальный IP-адрес.
# C этой опцией предоставляется локальный IP-адрес.
noipdefault
# Не отключаться от контрольного терминала. Без этой опции, если устройство
# на последовательном порту не терминал, pppd работает в фоновом режиме.
nodetach
# Включение средств отладки соединения. Если эта опция задана, pppd
# логгирует содержимое всех контрольных пакетов в "читабельной" форме.
debug
# Отключаем протокол CCP (Compression Control  Protocol) - из за
# кривых клиентов
noccp
# Добавлять поключившийся хост в таблицу ARP [Address Resolution Protocol]
# c выданным ему IP адресом. Нужно для работы в локальной сети.
proxyarp
# Использовать аппаратный контроль несущей (т.е. RTS/CTS)
crtscts
# Сервера DNS для виндовых клиентов
ms-dns 100.100.63.5
# Имя домена добавляемое при аутентифкации клиентов
domain lissyara.su
# Задаёт разрыв соединения после заданного времени простоя соединения,
# время задаётся в секундах
idle 1000
# Протокол аутентификации
require-pap
# Отклонять попытки аутентификации по протоколу CHAP
refuse-chap

/etc/ppp/pap-secrets

# 100.100.62.48-100.100.62.57
# Локальный адрес, всегда - 100.100.62.46
# Использована статическая адресация по причине, что клиентов у нас меньше чем 
# адресов - дополнительная выгода - по одному логину не подконнектятся двое.

# имя_пользователя      имя_сервера     пароль        локальный_адрес:удалённый_адрес
lissyara                *               12345678      100.100.62.46:100.100.62.48
client_name             *               87654321      100.100.62.46:100.100.62.49

   Также, неплохо бы настроить логгирование pppd. Для этого, ближе к концу файла /etc/syslog.conf добавляем такие строки:
!pppd
*.*                                             /var/log/pppd.log

   Не забываем создать сам файл:
/usr/home/lissyara/>touch /var/log/pppd.log
/usr/home/lissyara/>

   После чего, для надёжности перезагружаемся. После загрузки смотрим процессы:
/usr/home/lissyara/>ps -axjwww | grep mgetty
root       634     1     1    1    0 I     ??    0:00,02 /usr/local/sbin/mgetty ttyd4
root       635     1     1    1    0 I     ??    0:00,02 /usr/local/sbin/mgetty ttyd5
root       638     1     1    1    0 I     ??    0:00,02 /usr/local/sbin/mgetty ttyd8
root       639     1     1    1    0 I     ??    0:00,02 /usr/local/sbin/mgetty ttyd9
root       640     1     1    1    0 I     ??    0:00,02 /usr/local/sbin/mgetty ttyda
root       641     1     1    1    0 I     ??    0:00,02 /usr/local/sbin/mgetty ttydb
root       642     1     1    1    0 I     ??    0:00,02 /usr/local/sbin/mgetty ttydc
root       644     1     1    1    0 I     ??    0:00,02 /usr/local/sbin/mgetty ttyde
root       645     1     1    1    0 I     ??    0:00,02 /usr/local/sbin/mgetty ttydf
root     10678     1     1    1    0 I     ??    0:00,02 /usr/local/sbin/mgetty ttydd
root     31213     1     1    1    0 S     ??    0:00,01 /usr/local/sbin/mgetty ttyd6
root     31214     1     1    1    0 S     ??    0:00,01 /usr/local/sbin/mgetty ttyd7
root     31236 11479 31235 11246    2 R+    p4    0:00,00 grep mgetty
/usr/home/lissyara/>

   Звоним, и смотрим логи mgetty:
/usr/home/lissyara/>tail -f /var/log/mgetty.ttydd
--
11/29 14:42:26 ydd mgetty: interim release 1.1.35-Feb22
11/29 14:42:26 ydd check for lockfiles
11/29 14:42:26 ydd locking the line
11/29 14:42:26 ydd lowering DTR to reset Modem
11/29 14:42:27 ydd send: ATS0=0Q0&D3&C1[0d]
11/29 14:42:27 ydd waiting for ``OK'' ** found **
11/29 14:42:27 ydd waiting...
11/29 14:43:02 ydd wfr: waiting for ``RING''
11/29 14:43:02 ydd send: ATA[0d]
11/29 14:43:02 ydd waiting for ``CONNECT'' ** found **
11/29 14:43:21 ydd send:
11/29 14:43:21 ydd waiting for ``_'' ** found **
11/29 14:43:24 ##### data dev=ttydd, pid=3985, caller='none', conn='57600', name='', cmd='/usr/sbin/pppd', user='/AutoPPP/'

и логи pppd
Nov 29 14:43:24 ppp pppd[3985]: pppd 2.3.5 started by root, uid 0
Nov 29 14:43:24 ppp pppd[3985]: Using interface ppp1
Nov 29 14:43:24 ppp pppd[3985]: Connect: ppp1 <--> /dev/ttydd
Nov 29 14:43:24 ppp pppd[3985]: sent [LCP ConfReq id=0x1 <auth pap> <magic 0x833a459> <pcomp> <accomp>]
Nov 29 14:43:24 ppp pppd[3985]: rcvd [LCP ConfAck id=0x1 <auth pap> <magic 0x833a459> <pcomp> <accomp>]
Nov 29 14:43:26 ppp pppd[3985]: rcvd [LCP ConfReq id=0x2 <asyncmap 0x0> <magic 0x29df3909> <pcomp> <accomp> <callback 0x600>]
Nov 29 14:43:26 ppp pppd[3985]: sent [LCP ConfRej id=0x2 <callback 0x623>]
Nov 29 14:43:27 ppp pppd[3985]: sent [LCP ConfReq id=0x1 <auth pap> <magic 0x833a459> <pcomp> <accomp>]
Nov 29 14:43:27 ppp pppd[3985]: rcvd [LCP ConfReq id=0x3 <asyncmap 0x0> <magic 0x29df3909> <pcomp> <accomp>]
Nov 29 14:43:27 ppp pppd[3985]: sent [LCP ConfAck id=0x3 <asyncmap 0x0> <magic 0x29df3909> <pcomp> <accomp>]
Nov 29 14:43:27 ppp pppd[3985]: rcvd [LCP ConfAck id=0x1 <auth pap> <magic 0x833a459> <pcomp> <accomp>]
Nov 29 14:43:27 ppp pppd[3985]: rcvd [LCP code=0xc id=0x4 29 df 39 09 4d 53 52 41 53 56 35 2e 31 30]
Nov 29 14:43:27 ppp pppd[3985]: sent [LCP CodeRej id=0x2 0c 04 00 12 29 df 39 09 4d 53 52 41 53 56 35 2e 31 30]
Nov 29 14:43:27 ppp pppd[3985]: rcvd [LCP code=0xc id=0x5 29 df 39 09 4d 53 52 41 53 2d 30 2d 45 34 34 33 35 32 35 45 45 41 34 42 34 45 44]
Nov 29 14:43:27 ppp pppd[3985]: sent [LCP CodeRej id=0x3 0c 05 00 1f 29 df 39 09 4d 53 52 41 53 2d 30 2d 45 34 34 33 35 32 35 45 45 41 34 42 34 45 44]
Nov 29 14:43:27 ppp pppd[3985]: rcvd [PAP AuthReq id=0x1 user="lissyara" password="55555555555"]
Nov 29 14:43:27 ppp pppd[3985]: sent [PAP AuthNak id=0x1 "Login incorrect"]
Nov 29 14:43:27 ppp pppd[3985]: sent [LCP TermReq id=0x4 "Authentication failed"]
Nov 29 14:43:27 ppp pppd[3985]: rcvd [LCP ProtRej id=0x6 70 70 70 64 3a 20]
Nov 29 14:43:27 ppp pppd[3985]: rcvd [LCP ProtRej id=0x7 50 41 50 20 61 75 74 68 65 6e 74 69 63 61 74 69 6f 6e 20 66 61 69 6c 75 72 65 20 66 6f 72 20 41 47 41 54 33]
Nov 29 14:43:27 ppp pppd[3985]: rcvd [LCP TermReq id=0x8 ")\377777777379\t\000<\37777777715t\000\000\002\37777777663"]
Nov 29 14:43:27 ppp pppd[3985]: sent [LCP TermAck id=0x8]
Nov 29 14:43:27 ppp pppd[3985]: rcvd [LCP TermAck id=0x4 "Authentication failed"]
Nov 29 14:43:27 ppp pppd[3985]: Connection terminated, connected for 1 minutes
Nov 29 14:43:28 ppp pppd[3985]: Hangup (SIGHUP)
Nov 29 14:43:28 ppp pppd[3985]: Exit.

в данном примере я не авторизовался, но тем не менее - пример показателен :))) Собтвенно, на этом настройка закончена - всё должно работать. Если нет - смотрим логи.

P.S. Когда сервер собрали, настроили, то надо было его ставить в стойку и подключать вместо одного модема, все 10 (заметим, когда-то пул был из 16 модемов - но время, и китайские детали убили несколько модемов), его воткнули не до конца, и когда я подключал первый, это чудо упало. С двух метров на пол - ладно хоть никого не задел... Блок питания, что лежал на полу, расплющило всмятку. Ничё, подняли, вставили в стойку - пашет :)))

P.S.2 Учёт траффика идёт централизовано - по IP (Клиентов, как я писал мало, да и анлим у нас давно уже).



размещено: 2006-11-29,
последнее обновление: 2006-11-30,
автор: lissyara


HOSTER, 2007-07-16 в 21:13:03

Круто !)))

HOSTER, 2007-07-17 в 0:28:12

А как скорость резать ...???? гггг :)

f0b0s, 2007-09-03 в 1:18:39

Незабываем (как я=) что если у нас ядро не GENERIC, то должны присутствовать 2 строки
device sio #COM PORT
device ppp #kernel ppp

(если нада несколько то, например,
device ppp 4)

Melkiades, 2007-09-09 в 19:18:52

Очень понравилось, от настройки мультикарты
Для пользы дела еще собираюсь прикрутить радиус аутентификацию

eGuru, 2007-11-20 в 17:57:48

Странно, почему не использовали User Level PPP.
pppd во фри очень старый, радиус надо патчами прикручивать.

Hight, 2007-12-12 в 22:55:43

Жжошь!

ADvise, 2008-04-13 в 18:12:12

Да, не забываем еще в /etc/rc.firewall правило разрешающее.
если что.

у меня это
# --PPTP
${FwCMD} add allow tcp from any to me 1723
${FwCMD} add allow gre from any to any
${FwCMD} add allow ip from any to any via tun0

# --PPP доступ по модему
${FwCMD} add allow ip from any to any via ppp0

www2, 2008-09-04 в 13:49:09

Вот это
>у меня это
># --PPTP
>${FwCMD} add allow tcp from any to me 1723
>${FwCMD} add allow gre from any to any
>${FwCMD} add allow ip from any to any via tun0
совершенно не в тему PPP!=PPTP.

lissyara, 2008-09-04 в 14:30:33

Верно. Но через него и я пару раз подключался - обнаружив что туннели не пашут - разрешил данный протокол.

Salimk, 2008-09-25 в 12:55:53

Кейс прикольный :)

осколок совести, 2009-08-03 в 17:25:43

оо давно искал такую стаейку, но уже не нужно :-( жаль не попробую, нет модемов, хотя такими модемами борыговал, очень давно и когда был полным чайником, думал фуфловые модемы, что за бренд.



 

  Этот информационный блок появился по той простой причине, что многие считают нормальным, брать чужую информацию не уведомляя автора (что не так страшно), и не оставляя линк на оригинал и автора — что более существенно. Я не против распространения информации — только за. Только условие простое — извольте подписывать автора, и оставлять линк на оригинальную страницу в виде прямой, активной, нескриптовой, незакрытой от индексирования, и не запрещенной для следования роботов ссылки.
  Если соизволите поставить автора в известность — то вообще почёт вам и уважение.

© lissyara 2006-10-24 08:47 MSK

Время генерации страницы 0.0442 секунд
Из них PHP: 36%; SQL: 64%; Число SQL-запросов: 78 шт.
Исходный размер: 48291; Сжатая: 11766