Как я USB ADSL модем заборол в линуксе
Дата публикации: 2007-01-01
Тут недавно у меня опять приключился день рождения. Точнее у нас с сыном :)
И один друг мне подарил USB ADSL модем, фирмы D-Link, марки DSL-200. Вот оно чудо китайской промышленности
Тут недавно у меня опять приключился день рождения. Точнее у нас с сыном :)И один друг мне подарил USB ADSL модем, фирмы D-Link, марки DSL-200. Вот оно чудо китайской промышленности
И один друг мне подарил USB ADSL модем, фирмы D-Link, марки DSL-200. Вот оно чудо китайской промышленности
А второй друг подарил мне бубен :)
Нет, я не шучу, совершенно серьезно - самый настоящий бубен, калибр примерно 25 сантиметров - для решения проблем соответсвующих данному калибру. Я его тут же повесил на стеночку на своем рабочем месте. Ну и воспользовавщись этими двумя приборами - и надо сказать у меня получилось! Это была вводная, теперь давайте я расскажу по порядку как лично я заставил работать этот модем в линуксе. Наверняка я много моментов упущу, но вдруг кому то покажется полезным, кому-то поможет в решении аналогичной задачи.
Итак имеем шаманский бубен, ADSL-ный USB-модем D-Link DSL 200 rev b1, тачку со Slackware 10.1 (что-то я ленивый в последнее время стал, или винты такие большие пошли - установку выбрал полную, со всеми пакетами - 2 CD)
Еще залез на сайт http://eciadsl.flashtux.org и долго долго долго его читал (но не потому что читаю плохо, а потому что внимательно). Еще я читал http://eciadsl.sourceforge.net/scripts/forum/ - это форум поддержки ECI
Со странички http://eciadsl.flashtux.org/download.php?lang=en Я скачал Patch kernel 2.4.28/29 - возможно когда вы чиатть это будет и патча то уже не будет :), но скачал я его по этой ссылке http://eciadsl.flashtux.org/download/beta/2.4.28-usb-devio.patch
Скопировал 2.4.28-usb-devio.patch в /usr/src/linux, затем
cd /usr/src/linux patch -p1 < 2.4.28-usb-devio.patchЯдро возможно вполне бы меня и устроило которое шло с дистрибутивом, но его я все же перекомпилировалю (тем более из-за того что патч наложил). Подгрузил конфиг который опять же был для дефолтно собранного ядра и выставил поддержку своего процессора, включил поддержку ATM (и еще там поковырялся - но это вы уж сами, можно по докам из ECI пункты 5.3, 5.3.1, добавил поддержку USB, ну и сетевых вещей относящихся к IP и PPP.
Данный модем построен на чипсете GS7470, поэтому все с той же странички http://eciadsl.flashtux.org/download.php?lang=en в разделе Development version я выбрал пакет EciAdsl Nortek (на момент написания его можно было скачать по адресу: http://eciadsl.flashtux.org/download/nortek-2021/eciadsl-usermode-0.10-nortek-alpha.tar.bz2) Скачал, распаковал в /usr/local/src/eciadsl-usermode-0.10-nortek-alpha, затем стандартно
cd /usr/local/src/eciadsl-usermode-0.10-nortek-alpha ./configure make make install make cfgПоотвечал на вопросы которая задает конфигуратор, старался отвечать правильно, не ошибаясь :). В результате был создан каталог /etc/eciadsl с конфигами и файлом для синхронизации модема synch01.bin. В результате файл /etc/eciadsl/eciadsl.conf выглядел у меня так:
VID1=2001 PID1=5100 VID2=2001 PID2=5100 MODE=LLC_SNAP_RFC1483_BRIDGED_ETH_NO_FCS VCI=35 VPI=0 FIRMWARE=/etc/eciadsl/firmware00.bin SYNCH=/etc/eciadsl/gs7470_synch06.bin PPPD_USER=username PPPD_PASSWD=password USE_DHCP=no USE_STATICIP=no STATICIP= GATEWAY= MODEM=D-Link DSL200 rev B1 MODEM_CHIPSET=GS7470 SYNCH_ALTIFACE=5 PPPOECI_ALTIFACE=1 PROVIDER=Other DNS1= DNS2=Вместо PPPD_USER и PPPD_PASSWD у меня конечно стоят другие логин и пароль который мне дал провайдер, но я вам его не скажу! :). Кроме того эти логин и пароль были записаны в pap-secrets и chap-secrets (Хотя для Волготелекома куда я подключен достаточно авторизации по PAP). Выглядели эти строчки одинаково
# client server secret IP addresses "username" * "password" *И еще был создан файлик /etc/ppp/peers/adsl вот такого вида
debug kdebug 1 noipdefault defaultroute pty "/usr/local/bin/eciadsl-pppoeci -vpi 0 -vci 35 -vendor 0x2001 -product 0x5100 -mode LLC_SNAP_RFC1483_BRIDGED_ETH_NO_FCS" sync user "username" default-asyncmap noaccomp nopcomp noccp novj holdoff 10 linkname eciadsl maxfail 10 usepeerdns noauth lcp-echo-interval 0 noproxyarp persist
Из каталога /usr/local/src/eciadsl-... копируем все файлы *.bin в /etc/eciadsl и прописываем первый из них в /etc/eciadsl/eciadsl.conf
synch=/etc/eciadsl/g7470_synch01.bin
Дальше все работы надо проводить со включенной ADSL линией!
Запускаем eciadsl-start.
Если на третьем шаге он очень на долго зависнет,
тут типа должны были быть скриншоты ошибок, но с тех пор уже много времени прошло, модема у меня под рукой уже нет, типы ошибок показать не могу, но вы я думаю и сами поймете что это ошибка :)или выплюнется с ошибкой - то прописываем по порядку следующий synch*.bin файл, выдергиваем усб-шнур из модема, заново его включаем в модем и снова запускаем eciadsl-start.
Не наступите на те же грабли что и я :). Во первых я запускал все без ADSL-линии - на тот момент она уже работала с другим модемом, и я хотел "поднять" модем сам по себе. Еще я не сразу заметил каталог G7470_SYNCH_BIN и использовал сначала стандартные synch.bin файлы - представьте сколько мне пришлось побегать (а чтобы передернуть усб-шнур мне приходилось пройти метра 3 до сервера где был установлен модем) - ведь стандартных файлов было около 60 (ADSL линия включена не была! :) )
Кстати для этого поддержку USB-устройств, лучше сделать через модули - тогда их можно выгружать и подгружать - бегать к серверу с модемом, для того чтобы выдернуть и снова подключить усб-шнур уже не надо.
Мне повезло, нужный synch.bin файл был 6-м по счету :).
Если же вам не повезло - то отчаиватся не стоит. Есть возможность сделать synch.bin под ваш модем и вашу систему. Но для этого нужно поработать в Windows. Надо скачать USB-sniffer и USB-драйвера ECI Хотя возможно именно ECI драйвера не нужны и нужный файл можно сгенерировать с помощью штатных виндовс-драйверов для вашего модема. Однако хочу сразу сказать - у меня так ничего и не вышло - винда в результате моих манипуляций даже впервые на этом компе у меня вылетела в синий экран :).
Надо отредактировать inf-файлы как сказано в пункте .. и установить их (вместо стандартных конечно)
Затем отключить от усб все кроме модема, запустить снифер (опять же все надо проделать при включенной ADSL-линии) и установить его на модеме.
Затем выдернуть и снова воткнуть усб-шнур, дождаться пока модем синфронизируется и деинсталировать усб-снифер. В каталоге %WinSystemRoot% будет лежать файл usbsnoop.log - его надо передать в линукс в котором вы хотите установить модем любым известным вам способом :) (кстати говоря, у меня не получалось сделать нормальный лог-файл, потому что мне не удавалось деинсталировать нормально снифер - даже при деинсталяции лог-файл продолжал расти.
Затем, когда у вас есть этот лог-файл запускаете
eciadsl-vendor.pl usbsnoop.logи получаете synch999.bin. Прописываете его в /etc/eciadsl/eciadsl.conf и пробуйте...
root@ftp2:/etc/eciadsl# eciadsl-start [EciAdsl 1/5] Setting up USB support... Preliminary USB device filesystem is OK [EciAdsl 2/5] Uploading firmware... Process skipped .. no more needed firmware loaded successfully [EciAdsl 3/5] Synchronization... OK eciadsl-synch: success Synchronization successful [EciAdsl 4/5] Connecting to provider... Connection successful [EciAdsl 5/5] Setting up route table... Waiting for tap0... ERROR: couldn't set your static IP or your external gateway If you don't use PPPoE, please check your configuration.
После этого успешного завершения скрипт хоть и поругался что мол ERROR - но в моем случае все нормально, Волготелеком использует PPPoE, поэтому скрипт eciadsl-start завершается именно так, в результате у меня создается интерфейс tap0 поверх которого и запускается затем PPPoE. Т.е. грубо говоря, eciadsl-start - создал канал, теперь нам надо чтоб он заработали и по нему побежал ip-трафик.
Для этого запускаем adsl-start - это скрипт который сделан для дистрибутивал Slackware и пакета rp-pppoe (и именно им надо воспользоватся если вы не используете slackware и хотите все поднять вручную - мое повествование так глубоко не уходит :) )
root@ftp2:/etc/eciadsl# adsl-start ......... Connected!
После этого, по крайней мере у меня - создался ppp0 который собственно и есть, наше "окно в интернет" Эксперименты я проводил на "левой" тачке, поэтому интерес здесь представляют только интерфейсы tap0 и ppp0 :)
root@ftp2:/etc/eciadsl# ifconfig bond0 Link encap:Ethernet HWaddr 00:50:BF:44:32:12 inet addr:172.20.0.4 Bcast:172.20.0.255 Mask:255.255.255.0 UP BROADCAST RUNNING MASTER MULTICAST MTU:1500 Metric:1 RX packets:24218244 errors:0 dropped:0 overruns:0 frame:0 TX packets:35814940 errors:0 dropped:0 overruns:6 carrier:0 collisions:0 txqueuelen:0 RX bytes:2130274455 (2031.5 Mb) TX bytes:1174519034 (1120.1 Mb) eth0 Link encap:Ethernet HWaddr 00:50:BF:44:32:12 UP BROADCAST RUNNING SLAVE MULTICAST MTU:1500 Metric:1 RX packets:5562532 errors:0 dropped:0 overruns:0 frame:0 TX packets:11938318 errors:0 dropped:0 overruns:2 carrier:0 collisions:0 txqueuelen:1000 RX bytes:689679672 (657.7 Mb) TX bytes:1822811492 (1738.3 Mb) Interrupt:9 Base address:0x9000 eth1 Link encap:Ethernet HWaddr 00:50:BF:44:32:12 UP BROADCAST RUNNING SLAVE MULTICAST MTU:1500 Metric:1 RX packets:8210383 errors:0 dropped:0 overruns:0 frame:0 TX packets:11938311 errors:0 dropped:0 overruns:2 carrier:0 collisions:0 txqueuelen:1000 RX bytes:661000966 (630.3 Mb) TX bytes:1824369878 (1739.8 Mb) Interrupt:5 Base address:0xb000 eth2 Link encap:Ethernet HWaddr 00:50:BF:44:32:12 UP BROADCAST RUNNING SLAVE MULTICAST MTU:1500 Metric:1 RX packets:10445329 errors:0 dropped:0 overruns:0 frame:0 TX packets:11938311 errors:0 dropped:0 overruns:2 carrier:0 collisions:0 txqueuelen:1000 RX bytes:779593817 (743.4 Mb) TX bytes:1822304960 (1737.8 Mb) Interrupt:11 Base address:0xd000 lo Link encap:Local Loopback inet addr:127.0.0.1 Mask:255.0.0.0 UP LOOPBACK RUNNING MTU:16436 Metric:1 RX packets:838 errors:0 dropped:0 overruns:0 frame:0 TX packets:838 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0 RX bytes:41900 (40.9 Kb) TX bytes:41900 (40.9 Kb) ppp0 Link encap:Point-to-Point Protocol inet addr:213.24.10x.xxx P-t-P:192.168.222.55 Mask:255.255.255.255 UP POINTOPOINT RUNNING NOARP MULTICAST MTU:1492 Metric:1 RX packets:5 errors:0 dropped:0 overruns:0 frame:0 TX packets:4 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:3 RX bytes:92 (92.0 b) TX bytes:64 (64.0 b) tap0 Link encap:Ethernet HWaddr 00:FF:56:EC:E2:9E UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:154 errors:0 dropped:0 overruns:0 frame:0 TX packets:37 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:9705 (9.4 Kb) TX bytes:1277 (1.2 Kb) root@ftp2:/etc/eciadsl# route -n Kernel IP routing table Destination Gateway Genmask Flags Metric Ref Use Iface 192.168.222.55 0.0.0.0 255.255.255.255 UH 0 0 0 ppp0 172.20.0.0 0.0.0.0 255.255.255.0 U 0 0 0 bond0 127.0.0.0 0.0.0.0 255.0.0.0 U 0 0 0 lo
Настраиваем роутинг и если надо iptables - и вуаля. Этот этап я тоже особо не расшифровываю - у каждого свои потребности - я например поверх этого соединения создавал еще VPN-туннель, и т.д. и т.п.