Авторские статьи Настройка USB ADSL модема на чипе Conexant AccessRunner в ОС Linux

Discussion in 'Статьи' started by L0rd_Ha0S, 21 Jan 2007.

  1. L0rd_Ha0S

    L0rd_Ha0S Elder - Старейшина

    Joined:
    25 Jan 2006
    Messages:
    148
    Likes Received:
    102
    Reputations:
    64
    Настройка USB ADSL модема на чипе Conexant AccessRunner в ОС Linux

    Intro.​

    В данной статье будет описана настройка USB ADSL модема в ОС Linux на чипе Conexant AccessRunner, а также настройка PPPoE соединения с провайдером. Все что здесь будет описано проверялось на модеме Acorp ADSL@Sprinter USB за 28$, которым я пользуюсь сам.
    Эта статья написана на основании информации с форумов, найденых заметок + немного моего опыта.

    Начнем.

    ЗаTARиваемся...​

    Хотя на сайте Acorp(http://acorp.ru) в мане настройке модема под Линуксом требуется установить целую кучу пакетов, на практике нам понадобятся только 4:

    1) linux-2.6.x.tar.bz2 - исходники ядра – взять их можно тут
    Именно из ветки 2.6, потому что, насколько я знаю, в предыдущих ветках драйвер Conexant AccessRunner не был включен в ядро, и его нужно скачивать отдельно. (Если я не прав – поправьте меня). В моем случае версия ядра была 2.6.18.
    Но на всякий случай вот ссылка на проект AccessRunner:
    http://accessrunner.sourceforge.net/
    Если у вас уже есть «ядерные сорцы», тогда используйте их.

    2) ppp-2.4.x.tar.gz
    Слить архив можно тут - ftp://ftp.samba.org/pub/ppp/
    Также у меня на ppp установлен патч для поддержки MPPC(поддержка сжатия для Microsoft PPTP VPN), но устанавливать его необязательно(это так – отступление от темы :)) Если он таки нужен, то для ppp-2.4.4 его можно слить отсюда
    http://dimez.findall.ru/docs/mppe_mppc/ppp-2.4.4-mppe-mppc-1.1.patch.gz

    3) rp-pppoe-3.8.tar.gz
    На момент написания статьи последней была версия 3.8
    Сливаем отсюда:
    http://www.roaringpenguin.com/penguin/openSourceProducts/rpPppoe

    4) br2684ctl
    Если в вашей системе нет этой программы, тогда идем по
    ссылке
    и выбираем то что нужно :)

    Больше никаких исходников и пакетов не потребуется.
    Также потребуются параметры, которые вам должен выдать ваш провайдер(логин,пароль,адреса DNS-серверов,VPI,VCI)

    Настройка ядра (linux-2.6.18.tar.bz2)

    Распаковываем архив в /usr/src:
    Code:
    tar jxf linux-2.6.18.tar.bz2
    Запускаем конфигуратор ядра:
    Code:
    cd linux-2.6.18/
    make menuconfig
    Далее ставим все как описано ниже:

    Code:
    Networking  --->
    	Networking options  --->
    		...
    		<M> Asynchronous Transfer Mode (ATM) (EXPERIMENTAL)	## обязательно(M or y)
    		<M>    Classical IP over ATM (EXPERIMENTAL)		## для PPPoE это необязательно
    									# этот вид сейчас редко
    									# используется провайдерами
    		...
    		<M>   	 RFC1483/2684 Bridged protocols			## обязательно (можно 
    									# ставить модулем(желательно),
    									# а можете
    									# включить в ядро, т.е.
    									# соответственно M or y)
    
    Device Drivers  --->
    	Network device support  --->
    		...
    		<M> PPP (point-to-point protocol) support		#включаем поддержку PPP
    		...
    		<M>   PPP over Ethernet (EXPERIMENTAL)			#включаем поддержку PPPoE
    		<M>   PPP over ATM					#включаем поддержку PPPoA
     									# (для PPPoE необязательна, но у меня
     									# установлена, на всякий пожарный :))
    
    	USB support  --->
    		USB DSL modem support  --->
    			 <M> USB DSL modem support			# только модулем, иначе просто не
     									# получится :)
    			 <M>   Conexant AccessRunner USB support 	# собственно вот и поддержка модемов
    				  					# на чипах AccessRunner
    Вот и все, настройка ядра для поддержки CxAcRu-модемов завершена.
    Теперь пересоберем ядро:
    Code:
    make clean		# очищаем директорию с сорцами ядра от временных файлов,
    			# оставшихся после прошлой сборки		
    make bzImage		# собираем ядро
    make modules		# собираем модули
    make modules_install	# устанавливаем модули
    Переносим в /boot bzImage и System.map, и если нужно, то обновляем конфиг загрузчика. За подробностями по сборке ядра обращайтесь в Kernel-HOWTO.
    Все, с ядром, я думаю разобрались. :)

    Теперь добавим в конец /etc/modules следующие строки:
    Code:
    cxacru
    br2684
    В этом файле задаются модули, которые ядро загрузит при загрузке системы.

    Установка ppp (ppp-2.4.4.tar.gz)​

    Как и полагается, разархивируем его в /usr/src:
    Code:
    tar zxf ppp-2.4.4.tar.gz
    cd ppp-2.4.4/
    Здесь я вернусь к тому патчу для поддержки MPPC(опять же повторюсь, что его не обязательно ставить),если он вам нужен, установить его можно так:
    Code:
    zcat -f /путь/к/патчу/ppp-2.4.4-mppe-mppc-1.1.patch.gz |patch -p1
    Далее выполняем:
    Code:
    ./configure --prefix=/usr/local/ppp
    make && make install
    Установка rp-pppoe-3.8 (rp-pppoe-3.8.tar.gz)​

    Разархивируем:
    Code:
    tar zxf rp-pppoe-3.8.tar.gz
    cd rp-pppoe-3.8/
    Конфигурирование и сборка:
    Code:
    ./go --prefix=/usr/local/ppp --enable-plugin=/usr/src/ppp-2.4.4
    После запуска go, он(go) установит все сам, и сразу же запустит pppoe-setup для настройки pppoe-соединения. С этим уже сами разберетесь, там только на вопросы отвечать и все. :)
    Единственное, что хотел бы отметить, когда pppoe-setup задаст вопрос:
    Code:
    Enter the Ethernet interface connected to the DSL modem
    For Solaris, this is likely to be something like /dev/hme0.
    For Linux, it will be ethn, where 'n' is a number.
    (default eth0):
    То нужно ввести интерфейс nas0. Его создание будет описано ниже.

    Небольшая настройка

    Теперь немного поковыряемся в конфигах
    Открываем файл /etc/ppp/pppoe.conf
    Ищем в нем строку LINUX_PLUGIN=, если она закомментирована, раскомментируйте ее, и вписываем туда следующее:
    Code:
    LINUX_PLUGIN=/usr/local/ppp/lib/pppd/2.4.4/rp-pppoe.so
    Все, в этом файле больше ничего менять не нужно

    Подключение​

    Перед подключением необходимо создать и сконфигурировать сетевой интерфейс. Для этой цели и существует программа br2684ctl. Тут вам и понадобятся значения VPI и VCI. Допустим, что провайдер выдал вам такие значения – VPI=0,VCI=33, тогда вводим от рута следующую команду и в ответ видим следующее:
    Code:
    root@LServ(22:23:55)/etc # br2684ctl -b -c 0 -a 0.0.33
    RFC1483/2684 bridge: Interface "nas0" created sucessfully
    RFC1483/2684 bridge: Communicating over ATM 0.0.33, encapsulation: LLC
    RFC1483/2684 bridge: Interface configured
    Теперь поясню, что означают эти параметры:
    -b Процесс запускается в бэкграунде
    -c n Номер интерфейса, где n=число(например, если n=0, то интерфейс будет nas0, если n=1, то nas1)
    -a [itf].vpi.vci
    [itf] необязательный параметр,обычно равен 0, можно вообще не указывать
    vpi значение VPI
    vci значение VCI
    Есть еще два необязательных параметра
    -e 0|1 Тип инкапсуляции 0=LLC,1=VC mux. Чаще всего провайдерами используется именно LLC, поэтому можно не указывать. Если не указан явно, то используется LLC(т.е. 0)
    -s sndbuf Размер буфера отправки, по умолчанию 8192. Нам этот параметр вовсе не нужен.
    Если нужны подробности, то читаем man br2684ctl.
    Эта команда выполняется только один раз(для поднятия интерфейса nas0).

    FINISH​

    Вот и все, настройка окончена, и теперь можно ввести финальную команду:
    Code:
    pppoe-start
    После ввода этой команды, будут появлятся точки, и когда соединится то все будет выглядеть так:
    Code:
    root@LServ(22:43:42)/etc # pppoe-start
    ........... Connected!
    Закрыть подключение:
    Code:
    root@LServ(22:46:00)/etc # pppoe-stop
    Killing pppd (10804)
    Killing pppoe-connect (10787)
    Посмотреть статус соединения:
    Code:
    root@LServ(22:56:05)/etc # pppoe-status
    pppoe-status: Link is up and running on interface ppp0
    ppp0      Link encap:Point-to-Point Protocol
              inet addr:1.1.1.1  P-t-P:1.1.1.2  Mask:255.255.255.255
              UP POINTOPOINT RUNNING NOARP MULTICAST  MTU:1492  Metric:1
              RX packets:10 errors:0 dropped:0 overruns:0 frame:0
              TX packets:11 errors:0 dropped:0 overruns:0 carrier:0
              collisions:0 txqueuelen:3
              RX bytes:1638 (1.5 KiB)  TX bytes:1194 (1.1 KiB)
    Какие могут быть проблемы​

    Возможен и другой вариант после выполнения pppoe-start:
    Code:
    root@LServ(22:43:42)/etc # pppoe-start
    ........... TIMED OUT
    Это значит, что соединение не удалось установить. У меня такое бывает довольно часто, после каждого такого сообщения советую выполнить ifconfig -a, и посмотреть не появился ли интерфейс ppp0, часто бывает так, что выдается TIMED OUT, но интерфейс создается, то есть подключение есть , но pppoe-start думает, что его нет, в этом случае им можно пользоваться, но чтобы его закрыть, нужно просто прибить процесс pppd, и все. Если же интерфейс не появился, то тогда снова выполнить pppoe-start.

    И еще. Такую же надпись (TIMED OUT) можно увидеть еще в двух случаях:
    1) Когда pppd пытается авторизоваться с неверными логином/паролем, и сервер, естественно, шлет его нах.
    2) Когда строка LINUX_PLUGIN в файле /etc/ppp/pppoe.conf либо не задана, либо закоментирована, либо неверно задана(например, неверный путь, или указывает на плагин от другой версии pppd)
    Как определить в чем именно проблема? Во время ковыряний со своим модемом, я определил, что если pppd не может загрузить свой плагин(случай 2, т.е. не может загрузить rp-pppoe.so), то лампочка, показывающая, что идет передача данных(у меня она подписана как Rx на модеме) НЕ ГОРИТ/НЕ МОРГАЕТ вообще.(имеется в виду во время попытки установки соединения pppoe-start, т.е. пока появляются точки, до момента появления TIMED OUT). Если же эта лампочка периодически моргает(во время работы pppoe-start), тогда плагин загружен, и проблема либо в перегруженном сервере, либо в правильности передаваемых логина/пароля.

    Упрощаем себе жизнь​

    Для того чтобы каждый раз не логиниться под рутом, чтобы установить соединение с инетом, можно(и даже нужно – поговорку линуксоида - «Не тусуйся под рутом» - никто не отменял :)) проводить все действия с помощью sudo. Для этого в файл /etc/sudoers вписываем следующие строки:
    Code:
    # user – имя твоей учетной записи
    Host_Alias      HOME = 127.0.0.1, localhost
    Cmnd_Alias      ADSL = /usr/sbin/pppoe-start, /usr/sbin/pppoe-stop, /usr/sbin/br2684ctl
    user            HOME = NOPASSWD: ADSL
    Этим самым мы разрешаем пользователю с логином user запускать на локалхосте pppoe-start,pppoe-stop,br2684ctl от рута без запроса пароля.
    За подробностями по формату /etc/sudoers -> man sudoers
    Теперь добавим алиасы в свой .bashrc:
    Code:
    alias pppoe-start='sudo /usr/sbin/pppoe-start'
    alias pppoe-stop='sudo /usr/sbin/pppoe-stop'
    alias br2684ctl='sudo /usr/sbin/br2684ctl'
    Теперь при выполнении пользователем user команды pppoe-start, она будет выполнена от рута.

    Но если тебе совсем лень выполнять целых две команды(br2684ctl -b -c 0 -a 0.vpi.vci;pppoe-start), то можешь записать первую команду в какой-нибудь из стартовых скриптов, и выполнять только pppoe-start/pppoe-stop.

    Все, приехали.

    Вот собственно и все что я хотел бы сказать по поводу настройки USB ADSL модемов на основе микросхем Conexant AccessRunner. Если у кого-то есть какие-либо дополнения, замечания - выкладывайте их здесь.

    (с) L0rd_Ha0S
     
    #1 L0rd_Ha0S, 21 Jan 2007
    Last edited: 5 Nov 2007
    9 people like this.
  2. Mega_Zidar

    Mega_Zidar New Member

    Joined:
    15 Jun 2006
    Messages:
    3
    Likes Received:
    2
    Reputations:
    5
    Cпасибо HaOS, у миня тоже ADSL USB Conexant, система Debian GNU
    если по твоему совету всё получится и заработает выложу на форуме чо и как...
     
    2 people like this.
  3. Фдучун

    Фдучун New Member

    Joined:
    10 Nov 2007
    Messages:
    1
    Likes Received:
    0
    Reputations:
    0
    как начет модели sprinter@ADSL USB+

    У меня эта модель sprinter@ADSL USB+,подойдут ли твои настройки для нее?Я также плохо понимаю те объяснения ,где не говорится "нажми то-получишь это",не хватает знаний и опыта в Линуксе.Ты бы мог помочь разобраться с этим ? :confused:
     
  4. L0rd_Ha0S

    L0rd_Ha0S Elder - Старейшина

    Joined:
    25 Jan 2006
    Messages:
    148
    Likes Received:
    102
    Reputations:
    64
    Мог бы. Отписался в ПМ.
     
  5. bul.666

    bul.666 булка

    Joined:
    6 Jun 2006
    Messages:
    719
    Likes Received:
    425
    Reputations:
    140
    Бля не поверите... Но сеня весь день щанимлся сексом с настройкой интернета в ебунте =\\\ У мя Avangard DSL... D-link DSL-200 Gen ll ... Омг... Воть недавно вышел в винду чтобы скачать долбаный пакет rp-pppoe... Наткнулси на это =) Спасибо =)))))
     
    1 person likes this.
  6. L0rd_Ha0S

    L0rd_Ha0S Elder - Старейшина

    Joined:
    25 Jan 2006
    Messages:
    148
    Likes Received:
    102
    Reputations:
    64
    Значит, не зря я старался =)))))
     
    1 person likes this.
  7. bul.666

    bul.666 булка

    Joined:
    6 Jun 2006
    Messages:
    719
    Likes Received:
    425
    Reputations:
    140
    сцуко pppoe-setup не пишет pppoe.conf =\\\\
    Дай файл настройки... (Содержание pppoe.conf)

    Гребаный gcc не компилит =\ Гребаная ебунта! Гребаный интернет!

    ХЕЛП МИ! Айм нуб! Айм факин нуб!
     
    2 people like this.
  8. L0rd_Ha0S

    L0rd_Ha0S Elder - Старейшина

    Joined:
    25 Jan 2006
    Messages:
    148
    Likes Received:
    102
    Reputations:
    64
    а ты от рута запускаешь? Нужно от рута.
    /etc/ppp/pppoe.conf:
    Code:
    #***********************************************************************
    #
    # pppoe.conf
    #
    # Configuration file for rp-pppoe.  Edit as appropriate and install in
    # /etc/ppp/pppoe.conf
    #
    # NOTE: This file is used by the pppoe-start, pppoe-stop, pppoe-connect and
    #       pppoe-status shell scripts.  It is *not* used in any way by the
    #       "pppoe" executable.
    #
    # Copyright (C) 2000 Roaring Penguin Software Inc.
    #
    # This file may be distributed under the terms of the GNU General
    # Public License.
    #
    # LIC: GPL
    # $Id: pppoe.conf,v 1.11 2005/08/09 02:49:12 dfs Exp $
    #***********************************************************************
    
    # When you configure a variable, DO NOT leave spaces around the "=" sign.
    
    # Ethernet card connected to DSL modem
    ETH='nas0'
    
    # PPPoE user name.  You may have to supply "@provider.com"  Sympatico
    # users in Canada do need to include "@sympatico.ca"
    # Sympatico uses PAP authentication.  Make sure /etc/ppp/pap-secrets
    # contains the right username/password combination.
    # For Magma, use [email protected]
    USER='YourLogin'
    
    # Bring link up on demand?  Default is to leave link up all the time.
    # If you want the link to come up on demand, set DEMAND to a number indicating
    # the idle time after which the link is brought down.
    DEMAND=no
    #DEMAND=300
    
    # DNS type: SERVER=obtain from server; SPECIFY=use DNS1 and DNS2;
    # NOCHANGE=do not adjust.
    DNSTYPE=SPECIFY
    
    # Obtain DNS server addresses from the peer (recent versions of pppd only)
    # In old config files, this used to be called USEPEERDNS.  Changed to
    # PEERDNS for better Red Hat compatibility
    PEERDNS=no
    
    DNS1=62.212.64.122
    DNS2=62.212.65.123
    
    
    # Make the PPPoE connection your default route.  Set to
    # DEFAULTROUTE=no if you don't want this.
    DEFAULTROUTE=yes
    
    ### ONLY TOUCH THE FOLLOWING SETTINGS IF YOU'RE AN EXPERT
    
    # How long pppoe-start waits for a new PPP interface to appear before
    # concluding something went wrong.  If you use 0, then pppoe-start
    # exits immediately with a successful status and does not wait for the
    # link to come up.  Time is in seconds.
    #
    # WARNING WARNING WARNING:
    #
    # If you are using rp-pppoe on a physically-inaccessible host, set
    # CONNECT_TIMEOUT to 0.  This makes SURE that the machine keeps trying
    # to connect forever after pppoe-start is called.  Otherwise, it will
    # give out after CONNECT_TIMEOUT seconds and will not attempt to
    # connect again, making it impossible to reach.
    CONNECT_TIMEOUT=30
    
    # How often in seconds pppoe-start polls to check if link is up
    CONNECT_POLL=2
    
    # Specific desired AC Name
    ACNAME=
    
    # Specific desired service name
    SERVICENAME=
    
    # Character to echo at each poll.  Use PING="" if you don't want
    # anything echoed
    PING="."
    
    # File where the pppoe-connect script writes its process-ID.
    # Three files are actually used:
    #   $PIDFILE       contains PID of pppoe-connect script
    #   $PIDFILE.pppoe contains PID of pppoe process
    #   $PIDFILE.pppd  contains PID of pppd process
    CF_BASE=`basename $CONFIG`
    PIDFILE="/var/run/$CF_BASE-pppoe.pid"
    
    # Do you want to use synchronous PPP?  "yes" or "no".  "yes" is much
    # easier on CPU usage, but may not work for you.  It is safer to use
    # "no", but you may want to experiment with "yes".  "yes" is generally
    # safe on Linux machines with the n_hdlc line discipline; unsafe on others.
    SYNCHRONOUS=no
    
    # Do you want to clamp the MSS?  Here's how to decide:
    # - If you have only a SINGLE computer connected to the DSL modem, choose
    #   "no".
    # - If you have a computer acting as a gateway for a LAN, choose "1412".
    #   The setting of 1412 is safe for either setup, but uses slightly more
    #   CPU power.
    CLAMPMSS=1412
    #CLAMPMSS=no
    
    # LCP echo interval and failure count.
    LCP_INTERVAL=20
    LCP_FAILURE=3
    
    # PPPOE_TIMEOUT should be about 4*LCP_INTERVAL
    #PPPOE_TIMEOUT=80
    PPPOE_TIMEOUT=100
    
    # Firewalling: One of NONE, STANDALONE or MASQUERADE
    FIREWALL=NONE
    
    # Linux kernel-mode plugin for pppd.  If you want to try the kernel-mode
    # plugin, use LINUX_PLUGIN=/etc/ppp/plugins/rp-pppoe.so
    LINUX_PLUGIN=/usr/local/ppp/lib/pppd/2.4.4/rp-pppoe.so
    
    # Any extra arguments to pass to pppoe.  Normally, use a blank string
    # like this:
    PPPOE_EXTRA=""
    
    # Rumour has it that "Citizen's Communications" with a 3Com
    # HomeConnect DSL Modem DualLink requires these extra options:
    # PPPOE_EXTRA="-f 3c12:3c13 -S ISP"
    
    # Any extra arguments to pass to pppd.  Normally, use a blank string
    # like this:
    PPPD_EXTRA=""
    
    ########## DON'T CHANGE BELOW UNLESS YOU KNOW WHAT YOU ARE DOING
    # If you wish to COMPLETELY overrride the pppd invocation:
    # Example:
    # OVERRIDE_PPPD_COMMAND="pppd call adsl"
    
    # If you want pppoe-connect to exit when connection drops:
    # RETRY_ON_FAILURE=no
     
  9. fucker"ok

    fucker"ok Elder - Старейшина

    Joined:
    21 Nov 2004
    Messages:
    580
    Likes Received:
    279
    Reputations:
    91
    Лучше сразу выбирать ethernet модем. Воткнул в хаб и нет проблем :)
     
  10. bul.666

    bul.666 булка

    Joined:
    6 Jun 2006
    Messages:
    719
    Likes Received:
    425
    Reputations:
    140
    Ясен хрен от рута... gcc пишет, что "Can't create executable"....
     
  11. Ch3ck

    Ch3ck Elder - Старейшина

    Joined:
    9 Jun 2006
    Messages:
    1,363
    Likes Received:
    1,192
    Reputations:
    430
    Всё-таки с Windows никаких проблем...
     
  12. te$t

    te$t Elder - Старейшина

    Joined:
    8 Aug 2007
    Messages:
    38
    Likes Received:
    35
    Reputations:
    5
    Не парь мозги, тут ман. по настройке D-Link
    http://www.demon.ru/d-linkdsl-200andlinux
    У меня такой-же модем только я ставил на Ubuntu, Гномик рулит! ;)
    А вообще, по мне, то как гостевую линуху удобней ставить !