ppp (Русский)

Состояние перевода:
На этой странице представлен перевод статьи
ppp
. Дата последней синхронизации: 23 июля 2025. Вы можете
помочь
синхронизировать перевод, если в английской версии произошли
изменения
.
ppp
(
Paul's PPP Package
) — пакет с открытым исходным кодом, который реализует
протокол соединения точка-точка
(PPP) для систем Linux и Solaris. Пакет предоставляет демон
pppd
, который может быть использован вместе с
xl2tpd
,
pptpd
и
netctl
.
Протоколы
3G
,
L2TP
и
PPPoE
работают на основе PPP, поэтому они также могут контролироваться ppp.
Установка
Установите
пакет
ppp
.
Настройка
PPPoE
Создайте файл настроек соединения:
/etc/ppp/peers/
имя_соединения
plugin pppoe.so

# pppoe-ac "
имя концентратора доступа
"
# pppoe-service "
имя службы PPPoE
"

# сетевой интерфейс
eth0
# ваш логин
name "
имя_пользователя
"
usepeerdns
persist
# раскомментируйте, если вам нужен автодозвон "по требованию"
#demand
#idle 180
defaultroute
hide-password
noauth
Если задана опция
usepeerdns
, при соединении
pppd
создаст файл
/etc/ppp/resolv.conf
с полученными адресами DNS-серверов. По умолчанию скрипт
/etc/ppp/ip-up.d/00-dns.sh
перемещает этот файл в
/etc/resolv.conf
, чтобы система могла использовать эти DNS-серверы. Если это поведение является нежелательным (например, установлен локальный кэширующий DNS), отредактируйте
/etc/ppp/ip-up.d/00-dns.sh
под ваши нужды.
Добавьте запись с паролем соединения в
/etc/ppp/pap-secrets
или
/etc/ppp/chap-secrets
, в зависимости от типа аутентификации, используемого вашим провайдером.
По возможности используйте chap, так как он безопаснее (
здесь
можно почитать о том, как работает chap). Однако, если вы не уверены, можно добавить запись в оба файла,
pppd
выберет нужный самостоятельно. Запись выглядит следующим образом:
имя_пользователя
*
пароль
Имя пользователя должно совпадать с именем, указанным в опции
name
. Оно также используется для аутентификации, если не переопределено другим значением с помощью опции
user
.
Теперь вы можете попробовать установить соединение командой:
# pppd call
имя_соединения
или
# pon
имя_соединения
где
имя_соединения
— имя файла настроек, созданного в
/etc/ppp/peers
.
Чтобы убедиться, что соединение PPPoE установлено, проверьте вывод
pppd
в системном логе:
# journalctl -b /usr/bin/pppd
При успешном соединении вы увидите что-то наподобие следующих строк:
Jul 09 22:42:33 localhost pppd[239]: Plugin pppoe.so loaded.
Jul 09 22:42:33 localhost pppd[239]: PPPoE plugin from pppd 2.5.2
Jul 09 22:42:33 localhost pppd[239]: pppd 2.5.2 started by root, uid 0
Jul 09 22:42:39 localhost pppd[239]: PPP session is 292
Jul 09 22:42:39 localhost pppd[239]: Connected to a0:f3:e4:4f:e3:b0 via interface enp4s0
Jul 09 22:42:39 localhost pppd[239]: Using interface ppp0
Jul 09 22:42:39 localhost pppd[239]: Connect: ppp0 <--> enp4s0
Jul 09 22:42:39 localhost pppd[239]: CHAP authentication succeeded: CHAP authentication success
Jul 09 22:42:39 localhost pppd[239]: CHAP authentication succeeded
Jul 09 22:42:39 localhost pppd[239]: peer from calling number A0:F3:E4:4F:E3:B0 authorized
Jul 09 22:42:39 localhost pppd[239]: Cannot determine ethernet address for proxy ARP
Jul 09 22:42:39 localhost pppd[239]: local  IP address 10.6.2.137
Jul 09 22:42:39 localhost pppd[239]: remote IP address 10.6.1.1
Jul 09 22:42:39 localhost pppd[239]: primary   DNS address 10.6.1.1
Jul 09 22:42:39 localhost pppd[239]: secondary DNS address 210.21.196.6
Файл настроек
/etc/ppp/peers/provider
используется по умолчанию, если при вызове
pppd
не было указано имя файла. Вместо явного указания имени файла настроек программе
pppd
вы также можете просто добавить символическую ссылку на свой файл:
# ln -s /etc/ppp/peers/
имя_соединения
/etc/ppp/peers/provider
Теперь можно устанавливать соединение одной командой
# pon
Чтобы разорвать соединение, выполните
# poff
имя_соединения
Использование NetworkManager (nmcli)
В системах, использующих
NetworkManager
, вы можете использовать
nmcli
для настройки PPoE-соединения:
nmcli con edit type pppoe con-name "<Название подключения>"
nmcli> set pppoe.username <username>
nmcli> set pppoe.password <password>
nmcli> set connection.autoconnect <yes/no>
nmcli> save
nmcli> quit
Tip
In
GNOME
, it is no longer possible to create a new PPPoE connection from the graphical settings, but it can be edited after having been created via
nmcli
.
Простой мастер настройки
pppconfig
AUR
предоставляет текстовый интерфейс, основанный на
dialog
, для лёгкой конфигурации pppd. Для использования просто запустите команду
pppconfig
от имени root и следуйте дальнейшим инструкциям.
# pppconfig --dialog
Полученную конфигурацию можно подключать и отключать с помощью команд
pon
и
poff
как описано выше.
Запуск pppd при старте системы
Настройте модуль
ppp_generic
для загрузки во время запуска. Инструкции можно найти на странице
Модуль ядра#systemd
.
Включите
службу
ppp@
имя_соединения
.service
.
Советы и рекомендации
Автодозвон
Если
pppd
запущен, вы можете выполнить сброс соединения, отправив процессу сигнал
SIGHUP
:
# export PPPD_PID=$(pidof pppd)
# kill -s HUP $PPPD_PID
После разрыва соединение будет вновь установлено.
Примечание
Убедитесь, что опция
persist
включена в ваш файл конфигурации
/etc/ppp/peers/provider
. Также вы можете добавить параметр
holdoff 0
для переподключения без тайм-аута.
Используя cron
Примечание
Есть много разных реализаций
cron
, но ни одна из них не установлена по умолчанию; вместо него базовая система использует
таймеры systemd
.
Выполните следующие шаги от имени суперпользователя.
Создайте файл скрипта (например,
pppd_redial.sh
) со следующим содержимым:
#!/bin/bash

message="Restarting the PPP connection @:" $(date)
pppd_id=$(pidof pppd)

kill -s HUP $pppd_id
echo $message
Сохраните файл и сделайте его
исполняемым
.
Теперь создайте задачу для
cron
, используя команду
crontab -e
. Если появляется ошибка, убедитесь, что установлена
переменная окружения
EDITOR
. По команде откроется редактор — добавьте в него строку, указав правильный путь до вашего скрипта перезапуска соединения:
0 4 * * * /bin/bash /root/pppd_redial.sh
Сохраните файл и убедитесь, что служба
cronie
работает. Если это не так,
включите
и
запустите
службу
cronie
.
Теперь ваше соединение будет перезапускаться каждый день в 4 утра.
Используя таймер systemd
Также вы можете настроить таймер
systemd
для выполнения ежедневного перезапуска соединения. Просто создайте файлы
.service
и
.timer
с одинаковыми именами:
ppp-redial.timer
[Unit]
Description=Reconnect PPP connections daily

[Timer]
OnCalendar=*-*-* 05:00:00

[Install]
WantedBy=multi-user.target
ppp-redial.service
[Unit]
Description=Reconnect PPP connections

[Service]
Type=simple
ExecStart=/usr/bin/poff -r
Теперь просто
включите
и
запустите
таймер, и systemd будет выполнять сброс соединения каждый день в указанное время.
Решение проблем
Маршрут по умолчанию
При запуске
pppd
пытается добавить свой системный маршрут по умолчанию (
default route
). Если перед запуском уже был установлен такой маршрут,
pppd
не станет его обновлять, и новые соединения во внешнюю сеть направляться не будут. При этом в
/var/log/errors.log
вы увидите что-то наподобие:
pppd[nnnn]: not replacing existing default route via
xxx.xxx.xxx.xxx
Если это поведение нежелательно, и
xxx.xxx.xxx.xxx
— совсем не то, что вам нужно, вы можете создать простой скрипт в
/etc/ppp/ip-pre-up.d/
с таким содержимым (не забудьте сделать его
исполняемым
):
/etc/ppp/ip-pre-up.d/10-route-del-default.sh
#!/bin/sh
/usr/bin/route del default
Примечание
Также убедитесь, что есть скрипт с названием 'ip-pre-up', который запускает *.sh файлы из каталога 'ip-pre-up.d'.
Перезапустите
службу
pppd
.
Маскарадинг работает, но некоторые сайты не открываются
Проблема выражается в том, что соединение есть, но часть сайтов и сервисов не работают, если вы используете ваш компьютер в роли маршрутизатора для других компьютеров. Дело в том, что размер MTU (
Maximum Transmission Unit
— максимальное количество байт данных в одном пакете) в PPPoE равен 1492 байтам, что меньше, чем используют большинство сайтов (1500). Ваш маршрутизатор отправляет серверу специальный пакет ICMP 3:4 (сообщение о том, что нужно переразбиение данных), запрашивая меньший MTU, но сетевые экраны многих сайтов блокируют это сообщение.
Проблема решается добавлением правила с PMTU clamping в
iptables
:
# iptables -I FORWARD -o ppp0 -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu
Однако, по некоторой причине, это правило может не попадать в вывод
iptables-save
.
Если у вас тот случай, когда
iptables-restore
не восстанавливает правило после перезапуска, попробуйте следующее решение.
Создайте файл службы
systemd
:
pmtu-clamping.service
[Unit]
Description=PMTU clamping for pppoe
Requires=iptables.service
After=iptables.service

[Service]
Type=oneshot
ExecStart=/usr/bin/iptables -I FORWARD -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu

[Install]
WantedBy=multi-user.target
И
включите
эту службу.
Не удаётся загрузить модуль ядра ppp_generic
Проблема выражается в том, что при запуске процесс
pppd
не может найти соответствующий модуль:
Couldn't open the /dev/ppp device: No such device or address
Please load the ppp_generic kernel module.
Для решения создайте файл
/etc/modprobe.d/ppp.conf
, содержащий строку:
alias char-major-108 ppp_generic
После перезагрузки проблема должна решиться.