The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

Сервер удаленного доступа с callback на FreeBSD (dialin dialup ppp freebsd callback getty)


<< Предыдущая ИНДЕКС Поиск в статьях src Установить закладку Перейти на закладку Следующая >>
Ключевые слова: dialin, dialup, ppp, freebsd, callback, getty,  (найти похожие документы)
From: Pavel Khandetsky <email не указан> Newsgroups: email Date: Mon, 1 Apr 2004 14:31:37 +0000 (UTC) Subject: Сервер удаленного доступа с callback на FreeBSD Сервер удаленного доступа + callback на FreeBSD Сразу сделаю оговорку - статья не претендует на пособие или руководство. В данном случае, я просто хочу поделиться своим личным опытом и опытом людей, которые мне помогали разобраться во всех тонкостях. Задача возникла следующего характера: необходимо создать аналог виндового Remote Access Server под FreeBSD. В качестве оборудования использовалась машинка PIII-300/ 64/ 4.3G + PCI Serial card на 2 com-порта на чипе NETMOS NM9835 (http://www.ivmm.com/eio/products_pci_fast_serial.html ). Дистрибутив взял FreeBSD 5.2.1 - на данный момент (март 2004) самый свежий. Не буду описывать установку и пост установочный процесс, ибо этой информации вполне достаточно везде и на всех языках. Ставил по минимуму - только то что необходимо: mc, sshd, порты. Хочу обратить внимание лишь на поддержку в ядре сом-портовой карты на NM9835. Необходимо добавить или убрать комментарий для следующей строки: device puc Более подробно про поддержку разного железа можно почитать тут http://www.freebsd.org/relnotes/CURRENT/hardware/i386/support.html. Никаких дополнительных опций в ядре больше не выставлял, разве что добавил firewall: options IPFIREWALL options IPFIREWALL_VERBOSE options IPDIVERT options DUMMYNET После перекомпиляции и подстановки нового ядра, при загрузке системы (или после с помощь dmesg) видим такую строку: puc0: <NetMos NM9835 Dual UART and 1284 Printer port> Это наша карточка. После загрузки в /dev появятся cuaa4 и cuaa5 (помимо стандартных системных сом-портов cuaa0 и cuaa1). Можно цеплять к портам модемы. На следующем этапе нужно решить, на чем делать сервер доступа. В начале я попробовал стандартную связку pppd + mgetty. В портах FreeBSD 5.2.1 есть pppd version 2.3 patch level 5, достаточно древняя, но более чем работоспособная и надежная. Также был установлен пакет /usr/ports/comms/mgetty+sendfax. Если есть необходимость построить просто сервер доступа без callback, я бы рекомендовал строить именно на связке pppd + mgetty, хотя есть еще варианты с mpd и ppp. Именно pppd (kernel ppp) работает очень надежно и быстро. Но в моем варианте нужен callback. Попытки найти подходящие патчи с поддержкой callback для pppd не увенчались успехом, а последняя версия pppd вообще не работает на FreeBSD ? т.е. разработчики не поддерживают данную операционную систему в новых версиях. Остались варианты с ppp(user ppp) и mpd(Multi-link PPP daemon). Я выбрал ppp. Наверно потому что ничего доустанавливать не нужно. Далее идет описание настройки связки ppp + mgetty. 1) правим /etc/rc.conf: gateway_enable="YES" Для клиентов, которые будут дозваниваться, именно эта машина будет шлюзом, поэтому включаем эту опцию. Если необходима поддержка firewall-а, включаем еще и firewall_enable="YES" firewall_script="etc/firewall" 2) После установки mgetty+sendfax все конфиги лежат в /usr/local/etc/mgetty+sendfax/. Нас интересуют файлы login.config и mgetty.config. Приводим mgetty.config к следующему виду (хотя вполне возможны и другие варианты): debug 4 fax-id 00 00 000000 speed 57600 direct NO blocking NO port-owner uucp port-group uucp port-mode 0660 toggle-dtr YES toggle-dtr-waittime 500 data-only NO fax-only NO modem-type auto init-chat "" ATS0=0Q0&D3&C1 OK modem-check-time 3600 rings 1 answer-chat "" ATA CONNECT \c \r answer-chat-timeout 80 autobauding NO ringback NO ringback-time 30 ignore-carrier false issue-file /etc/issue prompt-waittime 500 login-prompt @!login: login-time 240 diskspace 1024 notify faxadmin fax-owner uucp fax-group modem fax-mode 0660 Добавляем в login.config следующую строку и закомментируем строку по умолчанию: #/AutoPPP/ - a_ppp /usr/sbin/pppd auth -chap +pap login debug /AutoPPP/ - - /usr/local/bin/ppplogin.sh 3) Создаем в /usr/local/bin файл ppplogin.sh следующего вида и делаем его исполняемым: #!/bin/sh exec /usr/sbin/ppp -direct callback Данную информацию по связке ppp + mgetty удалось найти только здесь: 4) Добавляем в /etc/ttys наших порты чтобы они прослушивались mgetty на наличие входящих звонков: ## COM's for Mgetty cuaa0 "/usr/local/sbin/mgetty" unknown on insecure cuaa1 "/usr/local/sbin/mgetty" unknown on insecure cuaa4 "/usr/local/sbin/mgetty" unknown on insecure cuaa5 "/usr/local/sbin/mgetty" unknown on insecure Делаем kill -1 1 и смотрим результат: 561 ?? I 0:00.07 /usr/local/sbin/mgetty cuaa1 592 ?? I 0:00.07 /usr/local/sbin/mgetty cuaa4 5517 ?? S 0:00.02 /usr/local/sbin/mgetty cuaa0 5518 ?? S 0:00.02 /usr/local/sbin/mgetty cuaa5 Должно быть так как приведено выше. Так же следует посмотреть файлы /var/log/mgetty.cuaa0 (1,4,5) на наличие работоспособных модемов. Если все в порядке с модемами (на модеме должна гореть DTR), то должно быть что-то типа: 03/11 09:49:53 aa1 mgetty: experimental test release 1.1.30-Dec16 03/11 09:49:53 aa1 check for lockfiles 03/11 09:49:53 aa1 locking the line 03/11 09:49:56 aa1 lowering DTR to reset Modem 03/11 09:49:57 aa1 send: ATS0=0Q0&D3&C1[0d] 03/11 09:49:57 aa1 waiting for ``OK'' ** found ** 03/11 09:49:57 aa1 mdm_send: 'ATI' 03/11 09:49:57 aa1 Generic Rockwell modem (56000) 03/11 09:49:57 aa1 mdm_send: 'ATI3' 03/11 09:49:57 aa1 mdm_send: 'ATI4' 03/11 09:49:57 aa1 additional info: 'SIC Vector +380 572 431680' 03/11 09:49:57 aa1 modem quirks: 0004 03/11 09:49:57 aa1 mdm_send: 'AT+FCLASS=2' -> OK 03/11 09:49:57 aa1 mdm_send: 'AT+FCLASS=0' -> OK 03/11 09:49:57 aa1 mdm_send: 'AT+FAA=1;+FCR=1' -> OK 03/11 09:49:57 aa1 mdm_send: 'AT+FBOR=0' -> OK 03/11 09:49:58 aa1 mdm_send: 'AT+FLID="00 00 000000"' -> OK 03/11 09:49:58 aa1 mdm_send: 'AT+FDCC=1,5,0,2,0,0,0,0' -> OK 03/11 09:49:58 aa1 waiting... Если же не все нормально, тока в логе будет что-то типа: 03/11 09:53:52 aa0 mgetty: experimental test release 1.1.30-Dec16 03/11 09:53:52 aa0 check for lockfiles 03/11 09:53:52 aa0 locking the line 03/11 09:53:55 aa0 WARNING: DSR is off - modem turned off or bad cable? 03/11 09:53:55 aa0 lowering DTR to reset Modem 03/11 09:53:56 aa0 send: ATS0=0Q0&D3&C1[0d] 03/11 09:53:56 aa0 waiting for ``OK'' 03/11 09:54:16 aa0 timeout in chat script, waiting for `OK' 5) Создаем пользователя, логин/пароль которого будет использоваться для аутентификации клиента. На самом деле, аутентификацию можно сделать (а может быть и лучше ? при наличии уже существующей ААА системы) на Radius или Tacacs, особенно если планируется большое число удаленщиков. В моем случае пользователей много не планировалось, поэтому остановился на стандартной Unix-аутентификации. Перед созданием пользователя, лучше добавить в /etc/shells путь к ppplogin.sh, который будет шеллом для пользователей на дозвоне: /bin/sh /bin/csh /bin/tcsh /usr/local/bin/ppplogin.sh Если не добавлять последнюю строку, то при создании пользователя (adduser) система не даст выставить ему в качестве шелла ppplogin.sh, и будет выставлен шелл по умолчанию ? sh. А потом придется менять руками шелл каждому пользователю. Создаем пользователя. В итоге у нас получается: manager1:*:1004:1004:PPP user:/home/ppp:/usr/local/bin/ppplogin.sh 6) Идем в /usr/share/examples/ppp и оттуда копируем в /etc/ppp файлы: ppp.conf.sample -> ppp.conf login-auth -> login-auth ppp.secret.sample -> ppp.secret Мне хватило этих 3-х файлов, т.е. я минимизировал все под свою задачу. Файл login-auth я вообще не трогал. Из огромного количества примеров в ppp.conf оствляем только то, что нужно в нашем случае: default: set log Phase Chat LCP IPCP CCP tun command callback: enable pap passwdauth enable proxy set ifaddr 192.168.1.3 192.168.1.241-192.168.1.244 accept dns set callback cbcp set cbcp set log +cbcp set redial 3 1 set device /dev/cuaa0 /dev/cuaa1 /dev/cuaa4 /dev/cuaa5 set speed 115200 set dial "TIMEOUT 30 \"\" AT OK-AT-OK ATDT9w\\T CONNECT" Более подробно по некоторым строкам: строка "set ifaddr" отвечает за выдачу адресов. Первый адрес - это адрес сервера (можно указать адрес сетевой карты), второй параметр - диапазон адресов которые будут выдаваться клиентам; строка "set device..." указывает устройства, которые задействованы в обратном звонке - в моем случае все 4 порта. В строке "set dial" я изменил таймаут с 10 на 30, и вместо ATDT поставил ATDT9w, т.к. у меня выход с мини-АТС на город через 9-ку. Далее правим файл ppp.secret: # Authname Authkey Peer's IP address Label Callback manager1 * 192.168.1.251 * 222444 manager2 * 192.168.1.252 * * lawer * * lawer * * В данном примере, пользователь manager1 имеет возможность использовать callback на фиксированный номер телефона, manager2 может указать номер телефона, на который ему перезвонить. У обоих эти пользователей статические адреса. У пользователей lawer1 и 2 не установлена возможность callback-а и им выдаются динамические адреса из пула адресов, указанных в ppp.conf в параметре set ifaddr. Выдаваемые им адреса будут зависить от того, на какой порт они падают при дозвоне. Клиентом у меня были Windows 2000 Priofessional, хотя я думаю, другие, более старшие товарищи, тоже будут работать. Настройки удаленного соединения стандартные, т.е. ничего настраивать не нужно вообще, все по умолчанию. Задается только номер телефона, логин и пароль. Звоним и смотрим лог /var/log/ppp.log (приведу только часть): Mar 11 14:47:39 ras-server-server ppp[1494]: tun0: Phase: Pap Input: REQUEST (manager1) Mar 11 14:47:39 ras-server-server ppp[1494]: tun0: Phase: Pap Output: SUCCESS Mar 11 14:47:39 ras-server-server ppp[1494]: tun0: Phase: deflink: lcp -> cbcp Mar 11 14:47:39 ras-server-server ppp[1494]: tun0: CBCP: deflink: SendReq(0) state = closed Mar 11 14:47:39 ras-server-server ppp[1494]: tun0: CBCP: TYPE Server-spec Mar 11 14:47:39 ras-server-server ppp[1494]: tun0: CBCP: DELAY 0 Mar 11 14:47:39 ras-server ppp[1494]: tun0: CBCP: deflink: State change closed --> req-sent Mar 11 14:47:39 ras-server ppp[1494]: tun0: CBCP: deflink: RecvResponse(0) state = req-sent ... Mar 11 14:47:39 ras-server ppp[1494]: tun0: CBCP: deflink: State change req-sent --> ack-sent Mar 11 14:47:39 ras-server ppp[1494]: tun0: LCP: deflink: RecvTerminateReq(6) state = Opened Mar 11 14:47:39 ras-server ppp[1494]: tun0: LCP: deflink: LayerDown Mar 11 14:47:39 ras-server ppp[1494]: tun0: Phase: deflink: CBCP: Will dial back on 222444 Mar 11 14:47:41 ras-server ppp[1511]: tun0: Phase: Call peer back on 222444 Mar 11 14:47:53 ras-server ppp[1511]: tun0: Chat: deflink: Redial timer expired. Mar 11 14:47:53 ras-server ppp[1511]: tun0: Phase: deflink: Connected! Mar 11 14:47:53 ras-server ppp[1511]: tun0: Phase: deflink: opening -> dial Mar 11 14:47:53 ras-server ppp[1511]: tun0: Chat: Phone: 222444 Mar 11 14:47:53 ras-server ppp[1511]: tun0: Chat: deflink: Dial attempt 1 of 1 Mar 11 14:47:53 ras-server ppp[1511]: tun0: Chat: Send: AT^M Mar 11 14:47:53 ras-server ppp[1511]: tun0: Chat: Expect(30): OK Mar 11 14:47:53 ras-server ppp[1511]: tun0: Chat: Received: AT^M^M Mar 11 14:47:53 ras-server ppp[1511]: tun0: Chat: Received: OK^M Mar 11 14:47:53 ras-server ppp[1511]: tun0: Chat: Send: ATDT9w222444^M Mar 11 14:47:53 ras-server ppp[1511]: tun0: Chat: Expect(30): CONNECT Mar 11 14:48:24 ras-server ppp[1511]: tun0: IPCP: IPADDR[6] 192.168.1.241 Mar 11 14:48:24 ras-server ppp[1511]: tun0: IPCP: PRIDNS[6] 192.168.1.2 Mar 11 14:48:24 ras-server ppp[1511]: tun0: IPCP: SECDNS[6] 255.255.255.255 Дозвон по кругу организуется средствами АТС - при наличии 4-х номеров настраивается переадресация звонка по сигналу занято с одного номера на другой и т.д. по кругу, а пользователям выдается один номер (скажем наиболее легко запоминаемый). При дозвоне, если одна линии занята, звонок перебросится на следующую линию, и т.д. пока не будет найдена свободная линия. P.S. Надеюсь данная статья кому-нибудь поможет, если не разобраться, то быстро построить сервер удаленного доступа с минимальными усилиями. Все поправки и замечания принимаются.

<< Предыдущая ИНДЕКС Поиск в статьях src Установить закладку Перейти на закладку Следующая >>

Обсуждение [ Линейный режим | Показать все | RSS ]
  • 1.1, Q (ok), 12:07, 02/04/2004 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    А нет примерчика еще и плюс выделенка ?
    Ну типа если вдруг Ваш клиент захотел протянуть еще и выделенку ?
     
  • 1.2, Sib (?), 15:30, 02/04/2004 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Все хорошо. Но только как потом у клиента время учитывать, так как в wtmp она пишет dialout и не логин клиента.
     
  • 1.3, Hak (?), 23:09, 02/04/2004 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    вопрос а можно сюда прикрутить usb модемы ???
    что то типа Zyxel UNO
     
  • 1.4, Pavel (??), 11:32, 05/04/2004 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Про выделенку - чесно говоря не пробовал не было нужды. Когда-то делал, но без сallback-а. Просто на mgetty+pppd.
    Время учитавыть можно по ppp.log, там все пишется.
    USB-можно, тока надо их включить и увидеть кем они в системе смотрятся - посмотреть что dmesg пишет после загрузки. Может надо в ядро включить - почитать поддержку девайсов - я давал ссылку в начале статьи.
     
  • 1.6, vemod (?), 09:09, 23/07/2004 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    a mojno skinut' link ili opisat' kak sdelat' sviazku ne s unix-accountingom a s radiusom tem bolee udolennim?
     
  • 1.7, Fred (??), 03:53, 08/08/2004 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Это вот хорошо для провайдера а со стороны клиента
    очень плохо особено если поминутка на линии и шеф се время угрожает: "все последний месяц"(вот су..):). Не могли бы вы примерчик показать или дать сылку как настроить ее что бы звонила и переводила мопед в режим ожидания звонка (ну и ебстествено был после обмена рукопожатиями конект) :) Спасибо !
     
  • 1.8, Maikl (??), 14:47, 09/08/2004 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    http://mavhome.dp.ua/docs/CallBack.htm смотри тут
     
  • 1.9, alexkid (??), 10:52, 10/08/2004 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Вопрос по Netmos NM9835 после прописывания в ядре
    device        puc
    dmesg выдает:
    Aug 10 10:28:41 unix1 /kernel: puc0: <NetMos NM9835 Dual UART and 1284 Printer port> port 0x7c00-0x7c0f,0x7800-0x7807,0x7400-0x7407,0x7000-0x7007,0x6c00-0x6c07,0x6800-0x6807 irq 11 at device 11.0 on pci0
    Aug 10 10:28:41 unix1 /kernel: sio4: type 16550A
    Aug 10 10:28:41 unix1 /kernel: sio5: type 16550A
    Но устройства cuaa4 cuaa5 почему-то не появляются. Может быть sio4 sio5 вручную в ядро добавлять надо?
     
  • 1.10, Anatoly (??), 22:58, 30/08/2004 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    А может кто-то знает как прикрутить корректно мультипортовую плату vscom pci-800h?
     
  • 1.11, storm (??), 22:29, 21/09/2004 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Никак не пойму в чем дело...
    В ppp.log пишется:
    Warning: Label callback rejected -direct connection: Configuration label not found
     
     
  • 2.16, BuZZ (??), 12:06, 05/02/2006 [^] [^^] [^^^] [ответить]  
  • +/
    Посмотри стиль и написание в файле ppp.conf ....
    Он тебе говорит что не нашел функцию в этом файле ака callback ...
    у ppp.conf определенный стиль написания ... callback подвинь к краю в ppp.conf
     

  • 1.12, DeD (??), 17:36, 27/09/2004 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    у меня не большая трабла:
    все окей, только вот скорость максимум 9600,
    почему так? Линия не мультиплексированная, все чисто, но меодембольше чем на 9600 не вяжется...
    Вот лог:
    09/24 22:57:20 ##### data dev=cuaa0, pid=6359,caller='none', conn='9600/ARQ/V34/LAPM/V42BIS'
     
  • 1.13, Evgeny Vorobyov (?), 19:49, 15/02/2005 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Что то не пойму в чем у меня проблема.
    Что у меня имеется: СОМ1 и СОМ2 (висят два внешних Курьера).
    Сделал все как тут написано, звоню с вин200, винХР, все нормально. Если звоню с линух или фряхи - облом.
    Собрал логи в архив (что б тут не флудить), посмотреть их можно тут :
    http://www.shtu4ki.ru/err.tar.gz [3.6 kb].
    Нпрод, гляньте, что у меня не так?
    Помогите плиз.
     
  • 1.14, SergZ (ok), 20:10, 30/03/2005 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    А как себя поведет такой сервер, если входящий звонок пришел, а свободных линий для исходящего звонка нет (если ограничить кол-во линий для обратного звонка)?
     
  • 1.15, omni (??), 17:30, 13/09/2005 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Ребята нифигане выходит все сделал дословно как написано везде прописал все как сказано но нифига не работате!!! если делать доступ полmpjdfntkm без callback то все гуд и пускает и все нормально а вот если с callback то болт ничего не выходит!!!win 2000 висит говорит жду ответа а фря ничего не перезванивает и соединение отваливается по таймауту!!! подскажите хоть где искать и что рыть?
     
     
  • 2.17, BuZZ (??), 12:15, 05/02/2006 [^] [^^] [^^^] [ответить]  
  • +/
    Капай в сторону chat script
     

  • 1.18, Phreak (?), 21:19, 06/02/2006 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    не компилится мгетти последней версии под бздей 4.11 с параметром -DAUTO_PPP, как быть?
     
     
  • 2.19, BuZZukin (?), 07:01, 07/02/2006 [^] [^^] [^^^] [ответить]  
  • +/
    >не компилится мгетти последней версии под бздей 4.11 с параметром -DAUTO_PPP, как
    >быть?

    Что пишет .... ?

     

  • 1.20, gray_wings (ok), 09:41, 07/03/2008 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    а у меня при обратном дозвоне срывается с таким логом:
    Mar 4 16:22:05 info2 ppp[2195]: tun0: Chat: Expect(10): CONNECT
    Mar 4 16:22:15 info2 ppp[2195]: tun0: Chat: Expect timeout
    Mar 4 16:22:15 info2 ppp[2195]: tun0: Warning: Chat script failed

    причем скрипты перепробовал разные. не подскажете, что это может быть?

     

    игнорирование участников | лог модерирования

     Добавить комментарий
    Имя:
    E-Mail:
    Заголовок:
    Текст:




    Партнёры:
    PostgresPro
    Inferno Solutions
    Hosting by Hoster.ru
    Хостинг:

    Закладки на сайте
    Проследить за страницей
    Created 1996-2024 by Maxim Chirkov
    Добавить, Поддержать, Вебмастеру