---
description: 'FreeBSD поддерживает протокол Point-to-Point (PPP), который можно использовать для установки сетевого или интернет-соединения с помощью модема'
next: books/handbook/mail
params:
  path: /books/handbook/ppp-and-slip/
part: 'IV. Сетевое взаимодействие'
prev: books/handbook/serialcomms
showBookMenu: 'true'
tags: ["PPP", "PPPoE", "PPPoA", "modem"]
title: 'Глава 30. PPP'
weight: 35
---

[[ppp-and-slip]]
= PPP
:doctype: book
:toc: macro
:toclevels: 1
:icons: font
:sectnums:
:sectnumlevels: 6
:sectnumoffset: 30
:partnums:
:source-highlighter: rouge
:experimental:
:images-path: books/handbook/ppp-and-slip/

ifdef::env-beastie[]
ifdef::backend-html5[]
:imagesdir: ../../../../images/{images-path}
endif::[]
ifndef::book[]
include::shared/authors.adoc[]
include::shared/mirrors.adoc[]
include::shared/releases.adoc[]
include::shared/attributes/attributes-{{% lang %}}.adoc[]
include::shared/{{% lang %}}/teams.adoc[]
include::shared/{{% lang %}}/mailing-lists.adoc[]
include::shared/{{% lang %}}/urls.adoc[]
toc::[]
endif::[]
ifdef::backend-pdf,backend-epub3[]
include::../../../../../shared/asciidoctor.adoc[]
endif::[]
endif::[]

ifndef::env-beastie[]
toc::[]
include::../../../../../shared/asciidoctor.adoc[]
endif::[]

[[ppp-and-slip-synopsis]]
== Обзор

FreeBSD поддерживает протокол Point-to-Point (PPP), который может использоваться для установки сетевого или интернет-соединения с помощью модема. В этой главе описывается, как настроить услуги связи на основе модема в FreeBSD.

Прочтите эту главу, чтобы узнать:

* Как настроить, использовать и устранять неполадки PPP-подключения.
* Как настроить PPP over Ethernet (PPPoE).
* Как настроить PPP over ATM (PPPoA).

Прежде чем читать эту главу, необходимо:

* Знать основные термины и понятия сетевых технологий.
* Понимать основы и назначение коммутируемого соединения и PPP.

[[userppp]]
== Настройка PPP

FreeBSD предоставляет встроенную поддержку для управления коммутируемыми PPP-соединениями с помощью man:ppp[8]. Стандартное ядро FreeBSD поддерживает [.filename]#tun#, который используется для взаимодействия с модемным оборудованием. Настройка выполняется путём редактирования как минимум одного конфигурационного файла, и предоставляются примеры таких файлов. Наконец, `ppp` используется для запуска и управления соединениями.

Для использования PPP-соединения необходимы следующие компоненты:

* Учётная запись для коммутируемого доступа у поставщика интернет-услуг (Internet Service Provider — ISP).
* Модем для коммутируемого доступа.
* Номер телефона для дозвона к ISP.
* Имя пользователя и пароль, назначенные ISP.
* IP-адрес одного или нескольких DNS-серверов. Обычно эти адреса предоставляет интернет-провайдер. Если он этого не сделал, FreeBSD можно настроить на использование согласования DNS.

Если отсутствует какая-либо необходимая информация, обратитесь к интернет-провайдеру.

Следующая информация может быть предоставлена интернет-провайдером, но не является обязательной:

* IP-адрес шлюза по умолчанию. Если эта информация неизвестна, интернет-провайдер автоматически предоставит правильное значение во время настройки соединения. При настройке PPP в FreeBSD этот адрес обозначается как `HISADDR`.
* Маска подсети. Если провайдер не предоставил её, в конфигурационном файле man:ppp[8] будет использовано значение `255.255.255.255`. *
+
Если интернет-провайдер выделил статический IP-адрес и имя хоста, их следует указать в файле конфигурации. В противном случае эта информация будет автоматически предоставлена при настройке соединения.

Оставшаяся часть этого раздела демонстрирует, как настроить FreeBSD для распространённых сценариев PPP-подключения. Необходимый конфигурационный файл — это [.filename]#/etc/ppp/ppp.conf#, а дополнительные файлы и примеры доступны в [.filename]#/usr/share/examples/ppp/#.

[NOTE]
====
На протяжении всего этого раздела во многих примерах файлов указаны номера строк. Эти номера добавлены для удобства обсуждения и не предназначены для включения в фактический файл.

При редактировании конфигурационного файла важно соблюдать правильные отступы. Строки, заканчивающиеся на `:`, начинаются с первой колонки (в начале строки), тогда как все остальные строки должны иметь отступ, как показано, с использованием пробелов или табуляции.
====

[[userppp-staticIP]]
=== Базовая конфигурация

Для настройки PPP-соединения сначала отредактируйте файл [.filename]#/etc/ppp/ppp.conf#, указав данные для подключения к интернет-провайдеру. Этот файл описывается следующим образом:

[.programlisting]
....
1     default:
2       set log Phase Chat LCP IPCP CCP tun command
3       ident user-ppp VERSION
4       set device /dev/cuau0
5       set speed 115200
6       set dial "ABORT BUSY ABORT NO\\sCARRIER TIMEOUT 5 \
7                 \"\" AT OK-AT-OK ATE1Q0 OK \\dATDT\\T TIMEOUT 40 CONNECT"
8       set timeout 180
9       enable dns
10
11    provider:
12      set phone "(123) 456 7890"
13      set authname foo
14      set authkey bar
15      set timeout 300
16      set ifaddr x.x.x.x/0 y.y.y.y/0 255.255.255.255 0.0.0.0
17      add default HISADDR
....

Строка 1:::
Определяет запись `default`. Команды в этой записи (строки со 2 по 9) выполняются автоматически при запуске `ppp`.

Строка 2:::
Включает подробные параметры журналирования для тестирования соединения. Как только конфигурация начнёт работать удовлетворительно, эту строку следует сократить до:
+
[.programlisting]
....
set log phase tun
....

Строка 3:::
Отображает версию man:ppp[8] для PPP-программного обеспечения, работающего на другой стороне соединения.

Строка 4:::
Определяет устройство, к которому подключен модем, где [.filename]#COM1# соответствует [.filename]#/dev/cuau0#, а [.filename]#COM2# соответствует [.filename]#/dev/cuau1#.

Строка 5:::
Устанавливает скорость соединения. Если `115200` не работает на старом модеме, попробуйте `38400`.

Строки 6 и 7:::
Строка набора, записанная в синтаксисе expect-send. Дополнительную информацию смотрите в man:chat[8].
+
Обратите внимание, что эта команда продолжается на следующей строке для удобства чтения. Любая команда в [.filename]#ppp.conf# может быть записана таким образом, если последним символом в строке является `\`.

Строка 8:::
Устанавливает время ожидания бездействия соединения в секундах.

Строка 9:::
Указывает узлу подтвердить настройки DNS. Если в локальной сети работает собственный DNS-сервер, эту строку следует закомментировать, добавив `+#+` в начале строки, или удалить.

Строка 10:::
Пустая строка для удобочитаемости. Пустые строки игнорируются man:ppp[8].

Строка 11:::
Определяет запись с именем `provider`. Это имя можно изменить на название ISP, чтобы использовать команду `load _ISP_` для установки соединения.

Строка 12:::
Используйте номер телефона вашего ISP. Несколько номеров можно указать, используя в качестве разделителя символ двоеточия (`:`) или вертикальной черты (`|`). Для перебора номеров используйте двоеточие. Чтобы всегда сначала пытаться дозвониться по первому номеру и пробовать другие номера только в случае неудачи с первым, используйте символ вертикальной черты. Всегда заключайте весь набор номеров в кавычки (`"`), чтобы избежать сбоев при наборе.

Строки 13 и 14:::
Используйте имя пользователя и пароль для ISP.

Строка 15:::
Устанавливает таймаут неактивности по умолчанию для соединения в секундах. В данном примере соединение будет автоматически закрыто после 300 секунд бездействия. Чтобы отключить таймаут, установите значение в ноль.

Строка 16:::
Устанавливает адреса интерфейсов. Используемые значения зависят от того, получен ли статический IP-адрес от провайдера или он динамически назначается при подключении.
+
Если интернет-провайдер выделил статический IP-адрес и шлюз по умолчанию, замените _x.x.x.x_ на статический IP-адрес, а _y.y.y.y_ — на IP-адрес шлюза по умолчанию. Если провайдер предоставил только статический IP-адрес без адреса шлюза, замените _y.y.y.y_ на `10.0.0.2/0`.
+
Если IP-адрес изменяется при каждом подключении, измените эту строку на следующее значение. Это указывает man:ppp[8] использовать протокол IP Configuration Protocol (IPCP) для согласования динамического IP-адреса:
+
[.programlisting]
....
set ifaddr 10.0.0.1/0 10.0.0.2/0 255.255.255.255 0.0.0.0
....

Line 17:::
Оставьте эту строку как есть, так как она добавляет маршрут по умолчанию к шлюзу. `HISADDR` будет автоматически заменён на адрес шлюза, указанный в строке 16. Важно, чтобы эта строка располагалась после строки 16.

В зависимости от того, запускается ли man:ppp[8] вручную или автоматически, может потребоваться создать файл [.filename]#/etc/ppp/ppp.linkup# со следующим содержимым. Этот файл необходим при запуске `ppp` в режиме `-auto`. Он используется после установки соединения. На этом этапе IP-адрес уже будет назначен, и можно добавить записи в таблицу маршрутизации. При создании этого файла убедитесь, что значение _provider_ совпадает с указанным в строке 11 файла [.filename]#ppp.conf#.

[.programlisting]
....
provider:
      add default HISADDR
....

Этот файл также необходим, когда адрес шлюза по умолчанию "угадывается" в конфигурации статического IP-адреса. В этом случае удалите строку 17 из [.filename]#ppp.conf# и создайте файл [.filename]#/etc/ppp/ppp.linkup# с указанными двумя строками. Дополнительные примеры для этого файла можно найти в [.filename]#/usr/share/examples/ppp/#.

По умолчанию `ppp` должен запускаться от имени `root`. Чтобы изменить это поведение, добавьте учётную запись пользователя, который должен запускать `ppp`, в группу `network` в файле [.filename]#/etc/group#.

Затем предоставьте пользователю доступ к одной или нескольким записям в [.filename]#/etc/ppp/ppp.conf# с помощью `allow`. Например, чтобы дать `fred` и `mary` разрешение только на запись `provider:`, добавьте следующую строку в раздел `provider:`:

[.programlisting]
....
allow users fred mary
....

Чтобы предоставить указанным пользователям доступ ко всем записям, поместите эту строку в раздел `default` вместо этого.

=== Расширенная настройка

Возможно настроить PPP для предоставления адресов DNS- и NetBIOS-серверов по запросу.

Для включения этих расширений в PPP версии 1.x можно добавить следующие строки в соответствующую секцию файла [.filename]#/etc/ppp/ppp.conf#.

[.programlisting]
....
enable msext
set ns 203.14.100.1 203.14.100.2
set nbns 203.14.100.5
....

А для PPP версии 2 и выше:

[.programlisting]
....
accept dns
set dns 203.14.100.1 203.14.100.2
set nbns 203.14.100.5
....

Это сообщит клиентам адреса основного и дополнительного серверов имен, а также хост сервера имён NetBIOS.

В версии 2 и выше, если строка `set dns` опущена, PPP будет использовать значения, указанные в [.filename]#/etc/resolv.conf#.

[[userppp-PAPnCHAP]]
==== Проверка подлинности (аутентификация) PAP и CHAP

Некоторые интернет-провайдеры настраивают свои системы таким образом, что проверка подлинности пользователя при подключении выполняется с использованием механизмов PAP или CHAP. В таком случае провайдер не будет выводить приглашение `login:` при соединении, а сразу начнёт работу по протоколу PPP.

PAP менее безопасен, чем CHAP, но безопасность обычно не является проблемой, так как пароли, хотя и передаются в открытом виде с PAP, передаются только по последовательной линии. У взломщиков мало возможностей для "прослушивания".

Необходимо внести следующие изменения:

[.programlisting]
....
13      set authname MyUserName
14      set authkey MyPassword
15      set login
....

Line 13:::
Эта строка указывает имя пользователя PAP/CHAP. Вставьте правильное значение для _MyUserName_.

Line 14:::
Эта строка указывает пароль PAP/CHAP. Вставьте правильное значение вместо _MyPassword_. Дополнительная строка может быть добавлена, например:
+
[.programlisting]
....
16      accept PAP
....
+
или
+
[.programlisting]
....
16      accept CHAP
....
+
чтобы сделать это намерение очевидным, но PAP и CHAP по умолчанию принимаются оба.

Строка 15:::
Поставщик интернет-услуг обычно не требует входа на сервер при использовании PAP или CHAP. Поэтому отключите строку `set login`.

[[userppp-nat]]
==== Использование возможности трансляции сетевых адресов (NAT) в PPP

PPP обладает возможностью использовать внутренний NAT без функций перенаправления ядра. Эту функциональность можно включить следующей строкой в [.filename]#/etc/ppp/ppp.conf#:

[.programlisting]
....
nat enable yes
....

Или NAT может быть включён с помощью параметра командной строки `-nat`. Также существует параметр [.filename]#/etc/rc.conf# с именем `ppp_nat`, который включён по умолчанию.

При использовании этой функции может быть полезно включить следующие параметры в файле [.filename]#/etc/ppp/ppp.conf# для переадресации входящих соединений:

[.programlisting]
....
nat port tcp 10.0.0.2:ftp ftp
nat port tcp 10.0.0.2:http http
....

или вообще не доверять внешнему миру

[.programlisting]
....
nat deny_incoming yes
....

[[userppp-final]]
=== Окончательная конфигурация системы

В то время как `ppp` уже настроен, некоторые изменения всё ещё необходимо внести в [.filename]#/etc/rc.conf#.

Посмотрев файл с начала до конца, убедитесь, что строка `hostname=` установлена:

[.programlisting]
....
hostname="foo.example.com"
....

Если интернет-провайдер предоставил статический IP-адрес и имя, используйте это имя в качестве имени хоста.

Проверьте переменную `network_interfaces`. Чтобы настроить систему для дозвона к интернет-провайдеру по требованию, убедитесь, что устройство [.filename]#tun0# добавлено в список, в противном случае удалите его.

[.programlisting]
....
network_interfaces="lo0 tun0"
ifconfig_tun0=
....

[NOTE]
====
Переменная `ifconfig_tun0` должна быть пустой, а файл с именем [.filename]#/etc/start_if.tun0# должен быть создан. Этот файл должен содержать строку:

[.programlisting]
....
ppp -auto mysystem
....

Этот скрипт выполняется во время настройки сети, запуская демон ppp в автоматическом режиме. Если данный компьютер выступает в качестве шлюза, рекомендуется включить опцию `-alias`. Дополнительные сведения см. на соответствующей странице Справочника.
====

Убедитесь, что программа маршрутизатора отключена, проверив, что в [.filename]#/etc/rc.conf# следующая строка установлена в `NO`:

[.programlisting]
....
router_enable="NO"
....

Важно, чтобы демон `routed` не запускался, так как `routed` имеет тенденцию удалять записи по умолчанию из таблицы маршрутизации , созданные `ppp`.

Вероятно, стоит убедиться, что строка `sendmail_flags` не содержит опцию `-q`, иначе `sendmail` будет периодически пытаться выполнить сетевой запрос, что может привести к нежелательному дозвону. Можно попробовать:

[.programlisting]
....
sendmail_flags="-bd"
....

Недостаток в том, что `sendmail` вынужден повторно проверять очередь почты каждый раз при установке ppp-соединения. Для автоматизации этого процесса добавьте `!bg` в файл [.filename]#ppp.linkup#:

[.programlisting]
....
1     provider:
2       delete ALL
3       add 0 0 HISADDR
4       !bg sendmail -bd -q30m
....

Альтернативный вариант — настроить "dfilter" для блокировки SMTP-трафика. Дополнительные сведения см. в примерных файлах.

=== Использование `ppp`

Осталось только перезагрузить машину. После перезагрузки введите:

[source, shell]
....
# ppp
....

затем `dial provider` для запуска сеанса PPP или, чтобы настроить `ppp` для автоматического установления сеансов при наличии исходящего трафика и отсутствии файла [.filename]#start_if.tun0#, введите:

[source, shell]
....
# ppp -auto provider
....

Возможно общаться с программой `ppp`, пока она работает в фоновом режиме, но только если настроен соответствующий диагностический порт. Для этого добавьте следующую строку в конфигурацию:

[.programlisting]
....
set server /var/run/ppp-tun%d DiagnosticPassword 0177
....

Это заставит PPP прослушивать указанный сокет домена UNIX(R), запрашивая у клиентов указанный пароль перед предоставлением доступа. Символ `%d` в имени заменяется на номер устройства [.filename]#tun#, который используется.

После настройки сокета программа man:pppctl[8] может использоваться в скриптах для управления работающим приложением.

[[userppp-mgetty]]
=== Настройка сервисов для входящих звонков

crossref:serialcomms[dialup,"Входящие соединения по модему"] предоставляет хорошее описание настройки услуг дозвона с использованием man:getty[8].

Альтернативой `getty` является порт package:comms/mgetty+sendfax[], более интеллектуальная версия `getty`, разработанная для работы с коммутируемыми линиями.

Преимущество использования `mgetty` заключается в том, что он активно _общается_ с модемами, то есть если порт выключен в [.filename]#/etc/ttys#, то модем не будет отвечать на звонки.

Поздние версии `mgetty` (начиная с 0.99beta) также поддерживают автоматическое определение PPP-потоков, что позволяет клиентам получать доступ к серверу без использования скриптов.

См. http://mgetty.greenie.net/doc/mgetty_toc.html[http://mgetty.greenie.net/doc/mgetty_toc.html] для получения дополнительной информации о `mgetty`.

По умолчанию порт package:comms/mgetty+sendfax[] поставляется с включённой опцией `AUTO_PPP`, которая позволяет `mgetty` обнаруживать фазу LCP PPP-соединений и автоматически запускать оболочку ppp. Однако, поскольку стандартная последовательность ввода логина и пароля не выполняется, необходимо аутентифицировать пользователей с помощью PAP или CHAP.

Этот раздел предполагает, что пользователь успешно скомпилировал и установил порт package:comms/mgetty+sendfax[] в своей системе.

Убедитесь, что в файле [.filename]#/usr/local/etc/mgetty+sendfax/login.config# присутствует следующее:

[.programlisting]
....
/AutoPPP/ -     - /etc/ppp/ppp-pap-dialup
....

Это указывает `mgetty` запускать [.filename]#ppp-pap-dialup# для обнаруженных PPP-соединений.

Создайте исполняемый файл с именем [.filename]#/etc/ppp/ppp-pap-dialup#, содержащий следующее:

[.programlisting]
....
#!/bin/sh
exec /usr/sbin/ppp -direct pap$IDENT
....

Для каждой включенной коммутируемой линии в [.filename]#/etc/ttys# создайте соответствующую запись в [.filename]#/etc/ppp/ppp.conf#. Это будет прекрасно сосуществовать с определениями, созданными ранее.

[.programlisting]
....
pap:
  enable pap
  set ifaddr 203.14.100.1 203.14.100.20-203.14.100.40
  enable proxy
....

Каждый пользователь, входящий в систему этим методом, должен иметь имя пользователя и пароль в [.filename]#/etc/ppp/ppp.secret#. Или можно добавить следующую опцию для аутентификации пользователей через PAP из [.filename]#/etc/passwd#.

[.programlisting]
....
enable passwdauth
....

Для назначения статического IP-адреса некоторым пользователям укажите этот адрес в качестве третьего аргумента в [.filename]#/etc/ppp/ppp.secret#. Примеры можно найти в [.filename]#/usr/share/examples/ppp/ppp.secret.sample#.

[[ppp-troubleshoot]]
== Устранение неполадок PPP-подключений

В этом разделе рассматриваются некоторые проблемы, которые могут возникнуть при использовании PPP через модемное соединение. Некоторые интернет-провайдеры выводят приглашение `ssword`, тогда как другие используют `password`. Если скрипт `ppp` не настроен соответствующим образом, попытка входа завершится неудачей. Наиболее распространённый способ отладки соединений `ppp` — это ручное подключение, как описано в данном разделе.

=== Проверьте файлы устройств

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

[.programlisting]
....
device   uart
....

Устройство [.filename]#uart# уже включено в ядро `GENERIC`, поэтому в этом случае дополнительные действия не требуются. Просто проверьте вывод `dmesg` на наличие модема с помощью:

[source, shell]
....
# dmesg | grep uart
....

Это должно вывести некоторую важную информацию об устройствах [.filename]#uart#. Это COM-порты, которые нам нужны. Если модем работает как стандартный последовательный порт, он должен быть указан как [.filename]#uart1# или [.filename]#COM2#. Если это так, пересборка ядра не требуется. При сопоставлении, если модем находится на [.filename]#uart1#, устройство модема будет [.filename]#/dev/cuau1#.

=== Подключение вручную

Подключение к Интернету с ручным управлением `ppp` выполняется быстро, просто и является отличным способом для отладки соединения или получения информации о том, как ISP взаимодействует с клиентами `ppp`. Давайте запустим PPP из командной строки. Обратите внимание, что во всех наших примерах мы будем использовать _example_ в качестве имени хоста машины, на которой работает PPP. Для запуска `ppp`:

[source, shell]
....
# ppp
....

[source, shell]
....
ppp ON example> set device /dev/cuau1
....

Эта вторая команда устанавливает модемное устройство в [.filename]#cuau1#.

[source, shell]
....
ppp ON example> set speed 115200
....

Это устанавливает скорость соединения на 115 200 Кбит/с.

[source, shell]
....
ppp ON example> enable dns
....

Это указывает `ppp` настроить резолвер и добавить строки nameserver в [.filename]#/etc/resolv.conf#. Если `ppp` не может определить имя хоста, его можно задать вручную позже.

[source, shell]
....
ppp ON example> term
....

Это переключает в "терминальный" режим для ручного управления модемом.

[.programlisting]
....
deflink: Entering terminal mode on /dev/cuau1
type '~h' for help
....

[source, shell]
....
at
OK
atdt123456789
....

Используйте `at` для инициализации модема, затем используйте `atdt` и номер провайдера для начала процесса дозвона.

[source, shell]
....
CONNECT
....

Подтверждение подключения: если у нас возникнут проблемы с соединением, не связанные с оборудованием, здесь мы попытаемся их устранить.

[source, shell]
....
ISP Login:myusername
....

На этом приглашении введите имя пользователя, предоставленное ISP.

[source, shell]
....
ISP Pass:mypassword
....

На этом запросе введите пароль, предоставленный интернет-провайдером. Как и при входе в FreeBSD, пароль не будет отображаться.

[source, shell]
....
Shell or PPP:ppp
....

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

[source, shell]
....
Ppp ON example>
....

Обратите внимание, что в этом примере первая буква `p` написана заглавной. Это означает, что мы успешно подключились к интернет-провайдеру.

[source, shell]
....
Ppp ON example>
....

Мы успешно прошли аутентификацию у нашего провайдера и ожидаем назначенный IP-адрес.

[source, shell]
....
PPP ON example>
....

Мы согласовали IP-адрес и успешно установили соединение.

[source, shell]
....
PPP ON example>add default HISADDR
....

Вот мы добавляем наш маршрут по умолчанию, это необходимо сделать до того, как мы сможем взаимодействовать с внешним миром, так как на данный момент единственное установленное соединение — с удаленной стороной. Если это не удаётся из-за существующих маршрутов, поставьте восклицательный знак `!` перед командой `add`. По-другому, можно установить маршрут до установки соединения, и тогда будет согласован новый маршрут соответствующим образом.

Если всё прошло хорошо, у нас теперь должно быть активное подключение к Интернету, которое можно перевести в фоновый режим с помощью kbd:[CTRL+z]. Если `PPP` возвращается к `ppp`, соединение было потеряно. Это полезно знать, так как показывает статус подключения. Заглавные буквы P обозначают подключение к ISP, а строчные p показывают, что соединение потеряно.

=== Отладка

Если соединение не может быть установлено, отключите аппаратный поток CTS/RTS с помощью `set ctsrts off`. Это в основном происходит при подключении к некоторым терминальным серверам с поддержкой PPP, где PPP зависает при попытке записи данных в линию связи и ожидает сигнала Clear To Send (CTS), который может никогда не поступить. При использовании этой опции включите `set accmap`, так как может потребоваться обойти аппаратную зависимость от передачи определённых символов от конца к концу, чаще всего XON/XOFF. Дополнительную информацию об этой опции и её использовании см. в man:ppp[8].

Старый модем может потребовать `set parity even`. По умолчанию чётность отключена, но она используется для проверки ошибок с значительным увеличением трафика на старых модемах.

PPP может не вернуться в командный режим, что обычно является ошибкой согласования, когда ISP ожидает начала процесса согласования. В этом случае использование `~p` заставит ppp начать отправку информации о конфигурации.

Если приглашение на вход никогда не появляется, скорее всего, требуется аутентификация PAP или CHAP. Чтобы использовать PAP или CHAP, добавьте следующие параметры в PPP перед переходом в терминальный режим:

[source, shell]
....
ppp ON example> set authname myusername
....

Где _myusername_ следует заменить на имя пользователя, предоставленное провайдером интернет-услуг.

[source, shell]
....
ppp ON example> set authkey mypassword
....

Где _mypassword_ следует заменить на пароль, назначенный провайдером.

Если соединение установлено, но не удается найти доменное имя, попробуйте выполнить `man:ping[8]` для IP-адреса. Если наблюдается 100% потерь пакетов, вероятно, маршрут по умолчанию не назначен. Убедитесь, что во время подключения был установлен параметр `add default HISADDR`. Если удается установить соединение с удаленным IP-адресом, возможно, в файл [.filename]#/etc/resolv.conf# не добавлен адрес резолвера. Этот файл должен выглядеть следующим образом:

[.programlisting]
....
domain example.com
nameserver x.x.x.x
nameserver y.y.y.y
....

Где _x.x.x.x_ и _y.y.y.y_ следует заменить на IP-адреса DNS-серверов провайдера.

Для настройки man:syslog[3] для ведения журнала PPP-подключения убедитесь, что следующая строка присутствует в [.filename]#/etc/syslog.conf#:

[.programlisting]
....
!ppp
*.*     /var/log/ppp.log
....

[[pppoe]]
== Использование PPP через Ethernet (PPPoE)

Этот раздел описывает, как настроить PPP через Ethernet (PPPoE).

Вот пример рабочего [.filename]#ppp.conf#:

[.programlisting]
....
default:
  set log Phase tun command # add more detailed logging when needed
  set ifaddr 10.0.0.1/0 10.0.0.2/0

name_of_service_provider:
  set device PPPoE:xl1 # replace xl1 with the Ethernet device
  set authname THELOGINNAME
  set authkey THEPASSWORD
  set dial
  set login
  add default HISADDR
....

Как `root`, выполните:

[source, shell]
....
# ppp -ddial name_of_service_provider
....

Добавьте следующее в [.filename]#/etc/rc.conf#:

[.programlisting]
....
ppp_enable="YES"
ppp_mode="ddial"
ppp_nat="YES"	# when needing to enable nat for the local network, otherwise NO
ppp_profile="name_of_service_provider"
....

=== Использование тега сервиса PPPoE

Иногда для установки соединения может потребоваться использовать тег сервиса. Теги сервиса используются для различения разных серверов PPPoE, подключённых к определённой сети.

Любая необходимая информация о теге сервиса должна быть указана в документации, предоставляемой интернет-провайдером (ISP).

В крайнем случае можно попробовать установить пакет или порт package:net/rr-pppoe[]. Однако учтите, что это может перепрограммировать ваш модем и сделать его бесполезным, поэтому хорошо подумайте перед этим. Просто установите программу, поставляемую с модемом. Затем откройте меню menu:System[] в программе. Имя профиля должно быть указано там. Обычно это _ISP_.

Имя профиля (тег сервиса) будет использоваться в записи конфигурации PPPoE в файле [.filename]#ppp.conf# как часть провайдера для `set device`. Подробности смотрите в man:ppp[8]. Это должно выглядеть так:

[.programlisting]
....
set device PPPoE:xl1:ISP
....

Не забудьте изменить _xl1_ на соответствующее имя устройства вашей Ethernet-карты.

Не забудьте изменить _ISP_ на профиль, определённый вами ранее.

Для получения дополнительной информации обратитесь к http://renaud.waldura.com/doc/freebsd/pppoe/[более дешёвому широкополосному доступу с FreeBSD через DSL] от Renaud Waldura.

[[ppp-3com]]
=== PPPoE с модемом 3Com(R) HomeConnect(TM) ADSL Modem Dual Link

Этот модем не соответствует спецификации PPPoE, определённой в http://www.faqs.org/rfcs/rfc2516.html[RFC 2516].

Чтобы FreeBSD мог взаимодействовать с этим устройством, необходимо установить sysctl. Это можно сделать автоматически при загрузке, изменив файл [.filename]#/etc/sysctl.conf#:

[.programlisting]
....
net.graph.nonstandard_pppoe=1
....

или может быть выполнено сразу с помощью команды:

[source, shell]
....
# sysctl net.graph.nonstandard_pppoe=1
....

К сожалению, поскольку это общесистемная настройка, невозможно одновременно работать с обычным клиентом или сервером PPPoE и модемом 3Com(R) HomeConnect(TM) ADSL.

[[pppoa]]
== Использование PPP через ATM (PPPoA)

Следующее описание объясняет, как настроить PPP через ATM (PPPoA). PPPoA — популярный выбор среди европейских провайдеров DSL.

=== Использование mpd

Приложение mpd можно использовать для подключения к различным сервисам, в частности к PPTP-сервисам. Его можно установить с помощью пакета package:net/mpd5[] или порта. Многие ADSL-модемы требуют создания PPTP-туннеля между модемом и компьютером.

После установки настройте mpd в соответствии с параметрами провайдера. Порт предоставляет набор примеров конфигурационных файлов, которые хорошо документированы в [.filename]#/usr/local/etc/mpd/#. Полное руководство по настройке mpd доступно в формате HTML в [.filename]#/usr/ports/shared/doc/mpd/#. Вот пример конфигурации для подключения к ADSL-сервису с помощью mpd. Конфигурация разделена на два файла, первый — [.filename]#mpd.conf#:

[NOTE]
====
Этот пример [.filename]#mpd.conf# работает только с mpd 4.x.
====

[.programlisting]
....
default:
    load adsl

adsl:
    new -i ng0 adsl adsl
    set bundle authname username <.>
    set bundle password password <.>
    set bundle disable multilink

    set link no pap acfcomp protocomp
    set link disable chap
    set link accept chap
    set link keep-alive 30 10

    set ipcp no vjcomp
    set ipcp ranges 0.0.0.0/0 0.0.0.0/0

    set iface route default
    set iface disable on-demand
    set iface enable proxy-arp
    set iface idle 0

    open
....

<.> Имя пользователя для аутентификации у вашего провайдера.
<.> Пароль, используемый для аутентификации у вашего провайдера.

Информация о соединении или соединениях, которые необходимо установить, находится в файле [.filename]#mpd.links#. Пример файла [.filename]#mpd.links#, соответствующий приведённому выше примеру, представлен ниже:

[.programlisting]
....
adsl:
    set link type pptp
    set pptp mode active
    set pptp enable originate outcall
    set pptp self 10.0.0.1 <.>
    set pptp peer 10.0.0.138 <.>
....

<.> IP-адрес компьютера FreeBSD, на котором работает mpd.
<.> IP-адрес модема ADSL. По умолчанию для Alcatel SpeedTouch(TM) Home используется `10.0.0.138`.

Возможно легко инициализировать соединение, выполнив следующую команду от имени `root`:

[source, shell]
....
# mpd -b adsl
....

Для просмотра состояния соединения:

[source, shell]
....
% ifconfig ng0
ng0: flags=88d1<UP,POINTOPOINT,RUNNING,NOARP,SIMPLEX,MULTICAST> mtu 1500
     inet 216.136.204.117 --> 204.152.186.171 netmask 0xffffffff
....

Использование `mpd` является рекомендуемым способом подключения к услуге ADSL в FreeBSD.

=== Использование pptpclient

Также возможно использовать FreeBSD для подключения к другим сервисам PPPoA с помощью package:net/pptpclient[].

Для подключения к DSL-сервису с помощью package:net/pptpclient[] установите порт или пакет, затем отредактируйте файл [.filename]#/etc/ppp/ppp.conf#. Пример раздела [.filename]#ppp.conf# приведен ниже. Дополнительные сведения о параметрах [.filename]#ppp.conf# можно найти в man:ppp[8].

[.programlisting]
....
adsl:
 set log phase chat lcp ipcp ccp tun command
 set timeout 0
 enable dns
 set authname username <.>
 set authkey password <.>
 set ifaddr 0 0
 add default HISADDR
....

<.> Имя пользователя для провайдера DSL.
<.> Пароль для вашей учётной записи.

[WARNING]
====

Поскольку пароль учётной записи добавляется в [.filename]#ppp.conf# в открытом виде, убедитесь, что никто не может прочитать содержимое этого файла:

[source, shell]
....
# chown root:wheel /etc/ppp/ppp.conf
# chmod 600 /etc/ppp/ppp.conf
....

====

Это откроет туннель для PPP-сессии к DSL-маршрутизатору. Ethernet DSL-модемы имеют предварительно настроенный LAN IP-адрес для подключения. В случае Alcatel SpeedTouch(TM) Home этот адрес `10.0.0.138`. В документации маршрутизатора должен быть указан используемый устройством адрес. Чтобы открыть туннель и начать PPP-сессию:

[source, shell]
....
# pptp address adsl
....

[TIP]
====

Если в конец этой команды добавить амперсанд ("&"), pptp вернёт приглашение командной строки.
====

Будет создано виртуальное туннельное устройство [.filename]#tun# для взаимодействия между процессами pptp и ppp. Как только вернется приглашение или процесс pptp подтвердит соединение, проверьте туннель:

[source, shell]
....
% ifconfig tun0
tun0: flags=8051<UP,POINTOPOINT,RUNNING,MULTICAST> mtu 1500
        inet 216.136.204.21 --> 204.152.186.171 netmask 0xffffff00
	Opened by PID 918
....

Если соединение не удалось, проверьте настройки маршрутизатора, который обычно доступен через веб-браузер. Также изучите вывод `pptp` и содержимое файла журнала [.filename]#/var/log/ppp.log# для поиска подсказок.
