настройка_pppoe-соединения_в_debian_squeeze — Зейское сообщество пользователей Linux и Unix

mts huawei e Новости

Автозагрузка

А теперь — автозагрузка, с ней посложнее. Я сразу опишу создание скрипта автозагрузки, в который можно будет запихнуть всё, что угодно. Он будет стартовать вместе с системой, нооо…

Нельзя просто так взять и создать файл автозагрузки. Есть одна проблема — Debian с какого-то времени пересмотрел свои требования к файлам автозагрузки. Файл мало просто создать, его нужно ещё по-особому отформатировать:

  1. Первая проблема — это LSB headers. Это заголовок файла автозагрузки. Нужен он потому, что компоненты автозагрузки должны выполняться в определённом порядке, поскольку часть из них зависят друг от друга. Предположим, у вас есть два скрипта в автозагрузке — один из них должен будет монтировать сетевую папку, а второй — делать в неё резервную копию файлов. Естественно, что сначала нужно выполнить первый, а потом — второй, поскольку второй зависит от первого. Для указания таких зависимостей и используются заголовки загрузочного файла. Впрочем, будет достаточно того заголовка, который я выложу в образце файла автозагрузки.
  2. Вторая проблема — любой скрипт в автозагрузке при запуске системы вызывается командой /etc/init.d/script start, а при выключении компьютера — командой /etc/init.d/script stop. Нужно добавить условия для обработки этих случаев.

Я сделал просто — взял за основу скрипт из имеющихся в /etc/init.d/ — уж они-то должны быть созданы по правилам, потом изучил этот скрипт и вырезал из него всё ненужное. Осталось два места, которые нужно изменить — место для команд, которые выполняются при запуске системы, и место для команд, которые выполняются при выключении компьютера. Впрочем, сейчас всё увидите:

Дополнительно

Тонкости, которые могут пригодиться в работе.

Задачи:

  1. Принимать первый аргумент командной строки в качестве названия внешнего интерфейса, проверяя подлинность имени, используя команду ifconfig;
  2. Добавить сохранение выбранного интерфейса в какой-нибудь файл в /etc и сделать ключ выбора последнего интерфейса, а лучше — при отсутствии имени интерфейса как аргумента.
  3. Запихнуть это всё красиво в автозагрузку и в $PATH.

Найденный скрипт

Хм-хм. Этот скрипт уже староват — iptables ругается на одну из команд и не хочет выполнять, да и тот путь, которым в статье скрипт пытаются поместить в автозагрузку, тоже работает не всегда на моей практике. Более того, есть проблема — этот скрипт отлично подходит для ситуации, когда ничего не собирается меняться.

Если бы так и было, я бы поставил iptables-persistent и на этом закончил бы статью. А вот я собираюсь иногда получать интернет по интерфейсу ppp0, иногда — по eth0, а иногда — вообще по wlan1, причём менять интерфейс хочу одной консольной командой. Так, eth1 в примере — внешний интерфейс, а eth0 — внутренний.

Настройка 3g-модема в linux • — huawei devices

Ранее я уже упоминал про трудности выбора “хорошего” LTE-модема под Linux. Сейчас продолжу тему.

Но сперва немного истории. По модели абстракции Linux (HAL=Hardware Abstraction Level) все устройства делятся на символьные и блочные. Блочные – это такие, для которых возможно позиционирование путём указания номера блока. Например, жёсткий диск. Символьные устройства позиционироваться не умеют, но в них можно записывать поток данных и/или читать что-нибудь оттуда. При этом, когда мы читаем, мы не можем выбирать что читать, а что – нет. Вот вам выхлоп, а дальше сами разбирайтесь что с ним делать.

Модемы с точки зрения Linux относятся к символьным устройствам, расцениваются как как “телетайпы” (TTY = TeleTYpe), они же “псевдотерминалы”, и обозначаются как-нибудь вроде /dev/ttyS0 (в случае RS232) или /dev/ttyUSB0 (USB). Для управления модемом в своё время были разработаны наборы AT-команд, а для передачи данных – протокол PPP (Point-to-Point Protocol).

Давным давно, когда компьютеры были большими, а программы – маленькими, для выхода в интернет применялись DialUP-модемы. Они представлялись в системе как serial terminal (ttyS0), посредством AT-команд получали информацию о том, какой номер набирать. После успешной установки соединения управление передавалось PPP-демону, который отсылал аутентификационную информацию, после чего устанавливал канал передачи данных. То есть PPP записывал в /dev/ttyS0, читал оттуда же и через виртуальный сетевой интерфейс ppp0 отдавал ядру пакетики, которые наполучал с той стороны.

Производители первых 3G модемов решили не заморачиваться с изобретением велосипеда и пошли по тому же пути. Хоть сотовый оператор связи в 99% случаев и не требует аутентификации по логину-паролю (что логично), но вот название точки доступа (APN) должно быть известно модему ещё до начала установления соединения. Как же его передать модему? AT-командой. А там, где AT-команды, там и PPP. И это несмотря на то, что PPP-сессия в реальности дальше модема не уходит. Сам модем её же и терминирует (декапсулирует), после чего шлёт данные оператору в виде обычного IP-трафика.

Но с появлением стандарта LTE возник затык. Максимальная скорость PPP-соединения в Windows ограничена пределом в 25 МБит/c. А сеть умеет и больше. Хоть и не хотелось, а велосипед изобретать таки пришлось. И наизобретали их даже больше, чем могли бы.

Qualcomm для своих чипов придумала интерфейс “QMI”. В Linux-е их поддерживает драйвер “qmi_wwan.ko”, они представляются в виде беспроводной сетевой карты “wwan0”. ЧСХ, в bridge запихнуть такую чудо-псевдосетевуху нельзя. Производитель “Sierra Wireless”, который выпускает довольно популярные в народе LTE-терминалы, продаваемые под десятком различных брендов, придумал собственный режим “Direct IP”. В Linux-е он поддерживается драйвером “sierra_net.ko”, интерфейс может быть виден как “usb0” либо как тот же самый “wwan0”. ЧСХ, внутри Sierra как правило находится всё тот же самый Qualcomm. И иногда одно и то же устройство (например, Sierra M7710) может работать как в одном (QMI), так и в дргугом (Direct IP) режимах.

Некоторые производители “мопедов” эмулируют виртуальную сетевую карту по протоколу NDIS. Им это удобно, потому что не нужно колхозить собственные драйвера: и Windows, и Linux понимают NDIS “из коробки”. Другое дело, что модемом в таком случае всё равно нужно как-то управлять. Если оный жёстко привязан к какому-либо оператору, то проблем скорее всего не будет. А если нет, то ему надо всё равно как-то сообщить название точки доступа (APN). Об этом чуть ниже.

Некоторые производители делают из модема а-ля “полноценный роутер” с блэкджеком и шлюхами NAT-ом и веб-мордой. Это, например, какой-нибудь Yota-самец или Huawei в режиме “HiLink”. Тут понятно: NAT он и в Африке NAT. При большом количестве соединений вычислительные мощности модема не справляются, “честное” IPSEC-соединение установить не удастся. В-общем, в газенваген сразу.

Дык как же осуществляется управление модемом? А очень просто. Модем теперь вообще не модем, а целый USB-хаб. Который при подключении в систему анонсирует сразу большую пачку USB-терминалов: для управления, для статистики, для передачи данных, для GPS (если есть) и так далее. В Linux они видны как “/dev/ttyUSB0”, “/dev/ttyUSB1”, “/dev/ttyUSB2” и т.п. Который из них для чего служит, выясняется либо опытным путём, либо раскуриванием документации к устройству.

И напоследок про основное отличие интерфейса QMI от всех остальных способов взаимодействия с модемом. В QMI передача данных и управление модемом (AT-команды) осуществляются через один и тот же псевдотерминал. Соответственно, чтобы отделять зёрна от плевел одно от другого во входящем потоке данных, требуется специально обученная софтина. В Linux-е этим занимается всё тот же “qmi_wwan.ko”, но он как бе внезапно kernel-space. Стало быть, где-то рядом обязательно должна валяться userspace-утилита, которая говорит драйверу что делать и куда идти.

Для не-QMI и не-PPP интерфейсов ситуация несколько проще. Там каналы управления и канал данных разнесены по разным псевдотерминалам (например, управление по /dev/ttyUSB0, а данные идут через /dev/ttyUSB1). В этом случае командовать модемом можно напрямую через псевдотерминал (“echo давай_уже_звони > /dev/ttyUSB0”). А драйвер только эмулирует сетевой интерфейс и пересылает данные оператору связи.

Как-то вот так всё непросто. Если повезёт, напишу вторую часть, практическую.

Шаг 2. настройка сетевого адаптера

Если сетевой адаптер, который подключается к модему, ранее уже был настроен — пропускаем этот шаг.

Настроим сетевой адаптер, чтобы можно было заходить на модем и администрировать его посредством телнета или браузера. Ещё пользователю надо определиться, будет ли подключение стартовать при включении машины или только вручную.
Для начала определим, видит ли ядро сетевой адаптер, для чего вводим:

 # dmesg|grep eth0 [[| 1.120454]] eth0: VIA Rhine III at 0x1e400, 01:a6:40:14:1f:a6, IRQ 17. [[| 1.121176]] eth0: MII PHY found at address 1, status 0x786d advertising 05e1 Link 45e1. [[| 9.113313]] via-rhine 0000:03:01.0: eth0: link up, 100Mbps, full-duplex, lpa 0x45E1 [[| 19.968028]] eth0: no IPv6 routers present

Если в ответ появились подобные строки (достаточно первых двух), значит ядро определило адаптер и загрузило соответствующие модули для поддержки его работы. Если подобных строк вообще не появилось в ответ на ввод команды, значит либо адаптер отключен в БИОС`е (справедливо для сетевых карт, встроенных в материнскую плату) или ядро его не распознало. Проверьте включен ли адаптер в БИОС`е. Если ядро не распознаёт адаптер, придётся приобрести и вставить в PCI или PCI-X слот сетевую карту.

Когда вопрос с адаптером решён, останавливаем работу сети на машине:

 # /etc/init.d/networking stop

В текстовом редакторе, из под учётной записи root`а открываем файл /etc/network/interfaces и добавляем такие строки:

interfaces
 auto lo # строка уже должна присутствовать  iface lo inet loopback # строка уже должна присутствовать   # Настройка адаптера ppp0 allow-hotplug eth0 iface eth0 inet static	address 192.168.1.2	netmask 255.255.255.0	network 192.168.1.0	broadcast 192.168.1.255 auto eth0

Строки в секции ppp0 конфигурируют сетевую карту: дают ей адрес 192.168.1.2 и устанавливают режим автоинициализации при подключении кабеля (включении модема).

После внесения изменений сохраняем файл. Далее подключаем сетевой кабель, даём питание модему, убеждаемся что на адаптере и на модеме загорелись лампочки, индицирующие связь между устройствами. Теперь запускаем сеть:

 # /etc/init.d/networking start

Если всё прошло успешно, введя команду ifconfig должно быть что-то подобное:

# ifconfig eth0 Link encap:Ethernet HWaddr 01:a6:40:14:1f:a6 inet addr:192.168.1.2 Bcast:192.168.51.255 Mask:255.255.255.0 inet6 addr: fe80::16d6:01a6:4014:1fa6/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:5363933 errors:0 dropped:3858 overruns:0 frame:0 TX packets:9890505 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:416 (416 B) TX bytes:192 (192 B) Interrupt:16 Base address:0xe800 lo Link encap:Local Loopback inet addr:127.0.0.1 Mask:255.0.0.0 inet6 addr: ::1/128 Scope:Host UP LOOPBACK RUNNING MTU:16436 Metric:1 RX packets:12886 errors:0 dropped:0 overruns:0 frame:0 TX packets:12886 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0 RX bytes:875393 (854.8 KiB) TX bytes:875393 (854.8 KiB)

Если в секции eth0 есть нечто подобное, значит адаптер работает. Дополнительно это можно проверить пингуя модем. В данном случае, модем имеет адрес 192.168.1.1:

 $ ping 192.168.1.1 PING 192.168.1.1 (192.168.1.1) 56(84) bytes of data. 64 bytes from 192.168.1.1: icmp_req=1 ttl=64 time=4.84 ms 64 bytes from 192.168.1.1: icmp_req=2 ttl=64 time=3.37 ms 64 bytes from 192.168.1.1: icmp_req=3 ttl=64 time=3.03 ms 64 bytes from 192.168.1.1: icmp_req=4 ttl=64 time=2.88 ms ^C --- 192.168.1.1 ping statistics --- 4 packets transmitted, 4 received, 0% packet loss, time 3004ms rtt min/avg/max/mdev = 2.888/3.536/4.849/0.779 ms

Для остановки процесса жмём Ctrl C
Если присутствуют подобные строки, значит обмен между модемом и компьютером работает — можно продолжать дальнейшую настройку.

Шаг 3. настройка pppoe-соединения

Настройку непосредственно PPPoE-соединения можно выполнить через правку конфигурационных файлов или через программы с графическим интерфейсом, такие как Network Manager или KVpnc. Далее, в статье пойдёт речь о настройке соединения посредством правки конфигурационных файлов, как универсальный метод, не требующий доустановки кучи программ.

В каталоге /etc/ppp/peers создаём конфигурационный файл параметров соединения и назовём его для примера dsl-provider :

dsl-provider
user UserName
pty "/usr/sbin/pppoe -I eth0 -T 80 -m 1452" 
noipdefault
usepeerdns
defaultroute
 
holdoff 15maxfail 0 
hide-password
lcp-echo-interval 20lcp-echo-failure 3 
connect /bin/truenoauth
persist
mtu 1412 
noaccomp
 
default-asyncmap
 
unit 0

Пояснения к параметрам:

user UserNameуказывает на логин, пароль к которому необходимо взять из файла /etc/ppp/chap-secrets
pty «/usr/sbin/pppoe -I eth0 -T 80 -m 1452»строка инициализации, вместо eth0 нужно указать адаптер, через который будет работать pppoe
noipdefaultуказывает, что ip-адрес выдаётся провайдером.
usepeerdnsпереключить параметры DNS-сервера с глобальных (/etc/resolv.conf) на те, что выдаёт провайдер при установке соединения. При завершении соединения, глобальные параметры возвращаются обратно.
defaultrouteуказывает устанавливать для компьютера основной маршрут, выдаваемый провайдером для PPPoE-соединения
holdoff 15пауза между попытками (требуется для завершения всех процессов на стороне провайдера, если разрыв произошёл аварийно
maxfail 0количество попыток восстановить соединение, 0 — пробовать бесконечно
hide-passwordскрывать пароль из записей лога
lcp-echo-interval 20интервал между тестами канала на работоспособность, секунд
lcp-echo-failure 3это количество попыток проверки работоспособности канала, после которого соединение отключается, в случае, если проверка оказалась неуспешной
connect /bin/trueразрешить соединение
noauthстрока запрещает использовать обратную аутентификацию
persistпосле аварийного разрыва канала, всё-равно пытаться создать соединение
mtu 1412уменьшать размеры передаваемых в Интернет сетевых пакетов до 1412 байт.
noaccompне сжимать адреса в канале
default-asyncmap
unit 0порядковый номер идентификатора соединения (циферка после ppp, например ppp0)

Если провайдер использует другой тип аутентификации нежели CHAPMS-CHAP — почитайте man pppd на предмет опций: require-mschap, require-chap, require-pap.

Теперь открываем и редактируем файл паролей /etc/ppp/chap-secrets и вводим в него логин и пароль для соединения:

chap-secrets
# Secrets for authentication using CHAP# client server secret IP addresses"UserName"*"user-007"

Не помешает дать права на чтение файлу /etc/ppp/chap-secrets только для root`а, если таковые ещё не установлены:

 # chmod 600 /etc/ppp/chap-secrets

Оцените статью
Huawei Devices