ADSL HOWTO (D-link DSL-200) [HOWTO]

HOWTO DLink DSL 200 rev.B1 + PPPoE bridged mode + Gentoo Linux 2005.0

Автор: Ash
Mail:

Intro: Этот документ написан по материалам howto, представленного JD вот здесь:
- [url]http://users.tpg.com.au/johnd/dsl200.html[/irl]. Большое ему за это спасибо.
Соратники по Fedora Core могут смело отправляться туда.

Подразумевается, что у вас используется:
1) ядро linux >= 2.6.11 (gentoo-sources поставляемые вместе с Gentoo
Installation CD 2005.0 вполне подойдут). Если же нет, отправляйтесь на сайт
http://eciadsl.flashtux.org за патчами для ядра или, что ГОРАЗДО лучше, -
достаньте свежую версию ядра.
2) дистрибутив Gentoo Linux 2005.0. Возможно, подойдет и 2004.3.

Необходимые опции ядра

Usb support->
 <M> - Support for USB
 <*> - Preliminary device filesystem
 <M> - UHCI (Intel PIIX4, VIA,...) support
 <M> - UHCI Alternate Driver (JE) support
 <M> - OHCI (Compaq, iMacs, OPTi, SiS, ALi, ...) support
- Usb Multimedia devices
 < > - Dabusb driver (пожалуйста выключите эту опцию, это важно!!!)
Character devices ->
 <*> Non-standard serial port support
 <M> HDLC line discipline support
Network device support ->
 <M> Universal TUN/TAP device driver support (именно модулем!!!)
 <M> PPP support
 [ ] PPP multilink support
 < > PPP filtering
 <M> PPP Support for async serial ports
 <M> PPP Support for sync tty ports
 <M> PPP Deflate compression
 <M> PPP BSD-Compress compression
 < > PPP over Ethernet (EXPERIMENTAL)
 <M> PPP over ATM (EXPERIMENTAL)

Перекомпилируйте ядро как показано выше, если у вас нет некоторых опций.
Попробуйте утилиту eciadsl-doctor (см. ниже пакет утилит eciadsl),
возможно он поможет вам определиться.

Ну что же, начнем!

Драйверы для adsl под linux выпускаются проектом eciadsl, если вы хотите
узнать больше об этом проекте или почитать документацию, то пожалуйста
вот сюда: http://eciadsl.flashtux.org.

Пожалуйста, вытащите usb кабель модема из порта, если вы уже его вставили.
Он понадобится нам позже.
Сперва определим что модем DLink DSL 200 rev.B1 использует чипсет GS7470,
а это означает что нам не подойдут стандартные драйвера eciadsl и придется
использовать ветку nortek. Сразу оговорюсь, что это тестовая версия и она
считается нестабильной, но для наших целей подходит превосходно.
Сначала нужно установить rp-pppoe, да-да, вы угадали нужны права root:

# emerge rp-ppoe

Установка драйвера eciadsl-nortek

После того как установка завершилась, нужно скачать ebuild для ветки
драйверов nortek, а также архив с драйверами tar.bz2 (413 Kb).
Вот их адреса:
http://eciadsl.flashtux.org/download/nortek-2021/eciadsl-usermode-nortek-0.10_alpha.ebuild
http://eciadsl.flashtux.org/download/nortek-2021/eciadsl-usermode-0.10-nortek-alpha.tar.bz2
Далее, создаем директории и устанавливаем драйвер в /usr/local. Это необходимо
для того, чтобы наш ebuild не затерся при вызове команды emerge --sync.
Внимание! Структура папок должна быть идентичной дереву портежей, иначе
emerge не сможет найти нужный ebuild. Поэтому менять название папок не
рекомендуется (все еще root):

# cd /usr/local
# mkdir -vp portage/net-misc/eciadsl-usermode-nortek

Далее копируем ebuild в свежесозданную директорию eciadsl, а архив -
в /usr/portage/distfiles:

# cd <где лежит ваш ebuild и архив>
# cp eciadsl-usermode-nortek-0.10_alpha.ebuild /usr/local/portage/net-misc/eciadsl/
# cp eciadsl-usermode-0.10-nortek-alpha.tar.bz2 /usr/portage/distfiles/

Также необходимо прописать в файл /etc/make.conf строчку

PORTDIR_OVERLAY="/usr/local/portage"

Если в вашем make.conf уже есть эта
переменная, то нужно просто добавить директорию /usr/local/portage к списку уже
существующих. Если же нет (по умолчанию) это можно сделать следующей командой:

# echo PORTDIR_OVERLAY="/usr/local/portage" >> /etc/make.conf

Ну и, наконец, сама установка (вы помните про права root не так ли?):

# emerge -vD eciadsl-usermode-nortek

Поздравляю! Вы установили драйвер. Теперь

Настройка драйвера eciadsl-nortek

Весь пакет программ eciadsl установился в папку /usr/local/bin. Для настройки драйвера
вам необходимо запустить eciadsl-config-tk (графический режим) или же
eciadsl-config-text (консольный режим). Мы рассмотрим здесь консольный режим, потому
как нет никакой разницы - в графике все то же самое :). Итак:

# eciadsl-config-text

Выбираем 1 - Configure all settings.
1) введите логин, выданный провайдером.
2) введите пароль, выданный желательно тем же провайдером.
3) выбор провайдера, здесь он у всех один - Other.
4) ввод dns1 и dns2, оставьте пустым, т.е. Enter.
5) ввод VPI и VCI. Введите "умолчальные" значения: VPI=8, VCI=35
6) выбор модема - DLink DSL 200 rev B1 (пункт 16).
7) выбор VID1 и VID2, VID1=VID2=2001.
8) выбор PID1 и PID2, PID1=PID2=5100.
9) выбор чипсета, как вы помните это - GS7470, пункт 3.
10) выбор альтернативного интерфейса usb для синхронизации
USB ALT INTERFACE for SYNCH process = 5.
11) выбор альтернативного интерфейса usb для PPPoECI
USB ALT INTERFACE for PPPOECI = 1.
12) выбор synch файла. У меня сработал synch06 и synch14, т.е.
ВНИМАНИЕ пункты 7 или 15. Впрочем вы можете протестировать файлы сами
и исправить настройку позже.
13) выбор режима PPP, выберите самое длинное название
LLC_SNAP_RFC1483_BRIDGED_ETH_NO_FCS.
14) на вопрос об использовании DHCP ответить No.
15) на вопрос об исполоьзовании статического IP адреса ответить No.
Ну вот и все! Уф... Проверьте свою конфигурацию и если что-то не так нажмите
Ctrl+C и пройдите все сначала. Если все верно - то смело жмите Enter.
Далее, для работы PPPoE нам нужна

Настройка rp-pppoe

Настроить adsl соединение можно (и нужно) следующей командой:

# adsl-setup

1) введите логин, выданный провайдером, к-ый вы писали в предыдущей секции.
2) здесь нужно ввести ethernet интерфейс, введите tap0.
3) выбор типа соединения, введите no (on demand по умолчанию).
4) далее запросят информацию о DNS, введите server (в нижнем регистре).
5) введите пароль, можете подсмотреть в предыдущей секции :)
6) подтвердите пароль (забыли, нет?)
7) выбор файрволла - выбираем 0, т.е. NONE.
Поздравляем! Проверьте свои настройки и, если все нормально, подтвердите их.

Настройка соединения

Вот теперь можно подсоединить модем. Запомните это движение.
Вероятно вам придется повторить его не один раз в процессе установки :)
Вставьте кабель модема в usb порт. Должен загореться нижний зеленый огонек
(питание). Запустите команду lsusb:

# lsusb

Должно появиться что-то вроде:

Bus 002 Device 002: ID 2001:5100 D-Link Corp. [hex]
Bus 002 Device 001: ID 0000:0000
Bus 001 Device 001: ID 0000:0000

Далее, для работы нам нужно определиться какие synch-файлы нам нужны.
Вам понадобится утилита eciadsl-synch (для тестирования одного файла) или
eciadsl-probe-synch (для тестирования многих файлов).
Перейдите в директорию /etc/eciadsl (там находятся synch-файлы).

# cd /etc/eciadsl

ВНИМАНИЕ! Помните, что после каждой попытки вам нужно переподключить модем.
Процесс синхронизации выглядит примерно так:

- верхний зеленый огонек (adsl) начинает мигать через несколько секунд;
- проходит 1 или более циклов мигания по 10 секунд каждый (или около того);
- если синхронизация достигнута, верхний огонек остается гореть.

Синхронизация провалилась в одном из 3-х случаев:
1. Программа сообщает, что синхронизация не удалась.
2. Программа сообщает (очень быстро) что синхронизация достигнута, при этом
зеленый огонек adsl не горит. Врет она - синхронизация не прошла.
3. Программа уходит в страну gcc и не возвращается. Если это произошло,
откройте еще одну консоль как root и наберите:

# killall eciadsl-synch

Я предлагаю попробовать эти файлы первыми, т.к. у меня сработали именно они:

* gs7470_synch06.bin
* gs7470_synch14.bin

Запускаем:

# eciadsl-synch gs7470_synch06.bin
...

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

Программа должна сообщить вам об успешной синхронизации и оба зеленых огонька
на модеме должны гореть. Если это не сработало, то попробуйте проверить все файлы:

# eciadsl-probe-synch --try-all /etc/eciadsl
...
Type in a directory where to find the synch .bin
[default is /etc/eciadsl/]: /etc/eciadsl
...

Надеюсь, что все пройдет успешно.
Далее,

Запуск eciadsl

Как только вы нашли synch-файл, к-ый вам кажется работоспособным, вам нужно
включить его в /etc/eciadsl/eciadsl.conf. Это можно сделать вручную (самый
быстрый способ, только не забудьте указать полный путь) или снова с помощью
программы eciadsl-config-tk.

Теперь можно попытаться запустить модем. Еще раз заходим как root, запускаем
утилиту eciadsl-start и, надеюсь, вы получите что-то вроде этого:

# eciadsl-start# 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 указанный выше, и не ERROR вовсе, если вы используете PPPoE
(иначе зачем вам читать этот текст?), это просто напоминание о том, что нужно
сделать еще кое-что, чтобы соединиться с интернетом.
Если же у вас еще какие-то сообщения об ошибках, попробуйте следующее:
* Переподключите модем (уже который раз :)
* Убейте все запущенные процессы eciadsl*
* Убейте все запущенные процессы pppoe

Проверка соединения к концентратору доступа

На данный момент, если eciadsl-start прошло успешно, у вас должен быть
интерфейс tap0. Проверить можно командой ifconfig:

# ifconfig
...
tap0 Link encap:Ethernet HWaddr CA:48:95:53:6F:6B
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:58 errors:0 dropped:0 overruns:0 frame:0
TX packets:59 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:500
RX bytes:7116 (6.9 Kb) TX bytes:3540 (3.4 Kb)
...

Теперь, если все получилось, можно проверить соединение к концентратору. Заходим
как (старый добрый) root:

# pppoe -I tap0 -A

Access-Concentrator: pppoe2.stream.uz
Got a cookie: f4 61 60 95 bf 20 48 35 d6 9a 5f c4 be cd f5 49 d0 06 00 00
AC-Ethernet-Address: 00:08:9b:47:cd:66
--------------------------------------------------
Access-Concentrator: pppoe1.stream.uz
Got a cookie: ad 0b b1 ca b8 30 7c 78 77 8d 15 54 32 7b 1a 3b c8 06 00 00
AC-Ethernet-Address: 00:08:9b:4a:82:a6
--------------------------------------------------

Это говорит о том, что все прошло успешно. Если вместо этого вы видите сообщения о
таймаутах PADO пакетов, это значит, что вы неправильно выбрали synch-файл. Вернитесь
к секции Настройка соединения и попытайтесь снова.

Запуск PPPoE

Если вы получили ответ от концентратора доступа, то уже можно поднимать PPPoE.
Запускаем нашим любимым суперюзером:

# adsl-start

Вот теперь вы в любом случае соединились с вашим провайдером. Это обеспечит вам ppp0
интерфейс, плюс к существующему tap0. Проверка:

# ifconfig
...
ppp0 Link encap:Point-to-Point Protocol
inet addr:83.221.171.107 P-t-P:83.221.170.1 Mask:255.255.255.255
UP POINTOPOINT RUNNING NOARP MULTICAST MTU:1472 Metric:1
RX packets:115 errors:0 dropped:0 overruns:0 frame:0
TX packets:114 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:3
RX bytes:101127 (98.7 Kb) TX bytes:8838 (8.6 Kb)

tap0 Link encap:Ethernet HWaddr CA:48:95:53:6F:6B
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:241 errors:0 dropped:0 overruns:0 frame:0
TX packets:223 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:500
RX bytes:111401 (108.7 Kb) TX bytes:14700 (14.3 Kb)
...

Если это то, что вы увидели, то ПОЗДРАВЛЯЕМ!!!!! Вы, наконец-то, подключились к интернету!!!

Если у вас возникают проблемы вы можете посмотреть документацию на сайте, или локальную.
Последняя находится в папке /usr/local/doc/eciadsl

Примочки

Безопасность

Вы, наверное, заметили что ваш пароль хранится в файле /etc/eciadsl/eciadsl.conf абсолютно
нагло и открытым текстом!!! Причем доступ к этому файлу имеет любой чрезмерно любопытный
юзер за вашей машиной. Чтобы хоть как-то внести справедливость уберем опцию чтения для
файла (ну root мы ее так и быть оставим:).

# chmod go-r /etc/eciadsl/eciadsl.conf
Проверка:
# ls -l
итого 1848
-rw------- 1 root root 371 Июл 24 16:08 eciadsl.conf
-rw-r--r-- 1 root root 8081 Июл 24 16:02 firmware00.bin
-rw-r--r-- 1 root root 27748 Июл 24 16:02 gs7470_synch01a.bin
-rw-r--r-- 1 root root 45239 Июл 24 16:02 gs7470_synch01b.bin
-rw-r--r-- 1 root root 40869 Июл 24 16:02 gs7470_synch01.bin
-rw-r--r-- 1 root root 7643 Июл 24 16:02 gs7470_synch02a.bin
-rw-r--r-- 1 root root 45239 Июл 24 16:02 gs7470_synch02b.bin
-rw-r--r-- 1 root root 40379 Июл 24 16:02 gs7470_synch02.bin
-rw-r--r-- 1 root root 97051 Июл 24 16:02 gs7470_synch03.bin
-rw-r--r-- 1 root root 97360 Июл 24 16:02 gs7470_synch04.bin
-rw-r--r-- 1 root root 203798 Июл 24 16:02 gs7470_synch05.bin
-rw-r--r-- 1 root root 97322 Июл 24 16:02 gs7470_synch06.bin
-rw-r--r-- 1 root root 121865 Июл 24 16:02 gs7470_synch07.bin
-rw-r--r-- 1 root root 206422 Июл 24 16:02 gs7470_synch08.bin
-rw-r--r-- 1 root root 174555 Июл 24 16:02 gs7470_synch09.bin
-rw-r--r-- 1 root root 162064 Июл 24 16:02 gs7470_synch10.bin
-rw-r--r-- 1 root root 74225 Июл 24 16:02 gs7470_synch11.bin
-rw-r--r-- 1 root root 94953 Июл 24 16:02 gs7470_synch12.bin
-rw-r--r-- 1 root root 95937 Июл 24 16:02 gs7470_synch13.bin
-rw-r--r-- 1 root root 142069 Июл 24 16:02 gs7470_synch14.bin
-rw-r--r-- 1 root root 3114 Июл 24 16:02 modemeci.gif
-rw-r--r-- 1 root root 2944 Июл 24 16:02 modems.db
-rw-r--r-- 1 root root 2547 Июл 24 16:02 providers.db
-rw-r--r-- 1 root root 59828 Июл 24 16:02 synch01.bin

Запуск ADSL при загрузке

Я немного видоизменил скрипт, предоставленный JD, чтобы он подходил к Gentoo,
точнее получилось 2 скрипта. Напоминаю, что автор данного документа не несет
никакой ответственности за (не)использование вами или кем-либо другим данных скриптов.

Скрипт adsl:

#!/sbin/runscript
opts="${opts} check"

depend() {
use net
}

start() {
ebegin "Starting adsl"
start-stop-daemon --start --quiet --exec /usr/sbin/dlink-adsl -- start
eend $?
}

stop() {
ebegin "Stopping adsl"
start-stop-daemon --start --quiet --exec /usr/sbin/dlink-adsl -- stop
eend $?
}

check() {
ebegin "Checking adsl connection: "
start-stop-daemon --start --quiet --exec /usr/sbin/dlink-adsl -- status
}

Его нужно будет скопировать в папку /etc/init.d и добавить в автозагрузку.

А также скрипт dlink-adsl, его нужно скопировать в папку /usr/sbin

#!/bin/bash
#
# adsl Script to control adsl line, using eciadsl and rp-pppoe
#
# description: eciadsl drivers for D-Link modem, and Roaring Penguin
# PPPoE client

# *** JD ***
# Modified to include bringing up ppp0 via rp-pppoe

# BEGIN OF CONFIG_SECTION

EXEC_PREFIX="/usr/local/bin"

# *** JD ***
PPP_START=/usr/sbin/adsl-start
PPP_STOP=/usr/sbin/adsl-stop
# END OF CONFIG_SECTION

#set -xv

case "$1" in
start)
# echo -n "Starting adsl: "
# *** JD ***
PATH=$EXEC_PREFIX:/usr/bin:/usr/sbin:/bin:/sbin eciadsl-start > /dev/null 2>&1

# eciadsl-start exits with result code 6 - means we need to run pppoe
result=$?
if [ $result -eq 6 ]; then
$PPP_START
fi
exit $?
;;
stop)
# echo -n "Shutting down adsl: "
PATH=$EXEC_PREFIX:/usr/bin:/usr/sbin:/bin:/sbin eciadsl-stop
$PPP_STOP
exit $?
;;
status)
# echo -n "Checking for adsl: "
/bin/ps ax | /bin/grep $EXEC_PREFIX/eciadsl-pppoeci | /bin/grep -v grep && echo "OK" || echo "No process"
echo
;;
restart)
$0 stop && $0 start
exit $?
;;
*)
echo "Usage: adsl {start|stop|status|restart}"
exit 1
;;
esac
exit 0

Итак, вот что нужно сделать:

# cp adsl /etc/init.d
# cp dlink-adsl /usr/sbin
# rc-update add adsl default

Init скрипт запустится при следующей загрузке.
Если вы являетесь счастливым пользователем udev, то, вероятно вам следует
добавить модуль tun в список автозагружаемых модулей, иначе система может не
найти устройство tun.
# echo tun >> /etc/modules-autoload.d/kernel-2.6