Настройка клиента Debian pppoe

Обновлено: 18.05.2024

P PoE для Linux

Многие интернет-провайдеры используют протокол "точка-точка" через Ethernet (PPPoE) для предоставления широкополосного доступа в Интернет для домашних абонентов по цифровой абонентской линии (DSL). Большинство интернет-провайдеров не поддерживают Linux и предоставляют клиентов PPPoE только для Windows и Mac OS.

Протокол PPPoE

PPPoE — это протокол для инкапсуляции кадров PPP в кадры Ethernet. PPP — это протокол уровня канала передачи данных, обычно используемый для инкапсуляции пакетов сетевого уровня по асинхронной последовательной линии. Этот режим использования называется асинхронным.

В то время как PPP является одноранговым протоколом, PPPoE изначально является протоколом клиент-сервер. Клиент (обычно персональный компьютер) ищет сервер PPPoE (называемый концентратором доступа) и получает MAC-адрес концентратора доступа и номер сеанса. Процесс настройки сеанса PPPoE называется обнаружением.

Программа pppd и ядро ​​Linux ожидают передачи кадров PPP через устройство TTY. К счастью, UNIX (и Linux) поддерживают концепцию псевдотерминала. Это устройство, которое «выглядит» как TTY, но подключено не к физическому терминалу, а к процессу UNIX. Всякий раз, когда что-то пишет в псевдотерминал, данные появляются на стандартном вводе внутреннего процесса. Всякий раз, когда внутренний процесс записывает данные в свой стандартный вывод, данные могут быть прочитаны с псевдотерминала.

К счастью, последние версии pppd (2.3.7 и новее) поддерживают параметр pty. Эта опция автоматически запускает внутренний процесс и выполняет все рутинные операции, необходимые для его подключения к псевдотерминалу. Таким образом, чтобы запустить соединение PPPoE, вы запускаете pppd с соответствующей опцией
pty, которая запускает исполняемый файл pppoe, подключенный к псевдотерминалу.

Проблема MTU

PPPoE создает реальную и раздражающую проблему. Максимальная длина кадра Ethernet составляет 1518 байт. 14 байт используются заголовком и 4 байта последовательностью проверки кадра, оставляя 1500 байтов для полезной нагрузки. По этой причине максимальная единица передачи (MTU) интерфейса Ethernet обычно составляет 1500 байт.

Это самая большая IP-датаграмма, которую можно передать через интерфейс без фрагментации. PPPoE добавляет еще шесть байтов служебных данных, а поле протокола PPP занимает два байта, оставляя 1492 байта для дейтаграммы IP. Таким образом, MTU интерфейсов PPPoE составляет 1492 байта.

При инициации TCP-соединения каждая сторона может дополнительно указать максимальный размер сегмента (MSS). TCP разбивает поток данных на сегменты, а MSS определяет самый большой сегмент, который может принять каждая сторона. По умолчанию MSS выбирается как MTU исходящего интерфейса за вычетом обычного размера заголовков TCP и IP (40 байт), что дает MSS 1460 байт для интерфейса Ethernet.

TCP стеки стараются избегать фрагментации, поэтому они используют MSS, который не вызовет фрагментации исходящего интерфейса. К сожалению, могут быть промежуточные каналы с более низким значением MTU, что вызовет фрагментацию. Хорошие стеки TCP выполняют обнаружение MTU пути. При обнаружении MTU пути стек TCP устанавливает специальный бит Don’t Fragment (DF) в дейтаграммах IP. Маршрутизаторы, которые не могут переслать дейтаграмму без ее фрагментации, должны отбросить ее и отправить дейтаграмму ICMP «Требуется фрагментация» на исходный узел.

Исходный узел затем пытается установить меньшее значение MTU. К сожалению, многие маршрутизаторы антисоциальны и не генерируют дейтаграммы, необходимые для фрагментации. Многие брандмауэры одинаково антисоциальны и отбрасывают все дейтаграммы ICMP.

Теперь рассмотрим клиентскую рабочую станцию ​​в локальной сети Ethernet, подключенную к шлюзу PPPoE. Он открывает TCP-соединение с веб-сервером. Поскольку MTU Ethernet составляет 1500, он предлагает MSS 1460. Веб-сервер также находится в сети Ethernet и также предлагает MSS 1460. Затем клиент запрашивает веб-страницу. Этот запрос обычно небольшой и достигает веб-сервера. Сервер отвечает множеством TCP-сегментов, большинство из которых имеют длину 1460 байт.

Сегменты максимального размера приводят к получению IP-датаграмм размером 1500 байт и направляются к провайдеру DSL. Провайдер DSL не может передать дейтаграмму IP размером 1500 байт по каналу PPPoE, поэтому он отбрасывает ее (сейчас предположим, что установлен бит DF). веб-сервер.

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

Один из способов обойти это — искусственно установить MSS. для маршрута по умолчанию на всех хостах LAN за шлюзом PPPoE. Это раздражает, так как требует изменений на каждом хосте. Вместо этого rp-pppoe «подслушивает» согласование MSS и модифицирует MSS, если он слишком велик.Настройка MSS — это хак. Это нарушает концепцию сквозного транспортного уровня. Это не будет работать с IPSec, потому что IPSec не позволит вам повредить IP-пакеты (они не смогут аутентифицироваться). Тем не менее, это довольно эффективное решение уродливой реальной проблемы, и оно используется по умолчанию в rp-pppoe.

Установка и настройка PPP/PPPoE

Мы настроили машину GENTOO 2005.0 Linux с RP-PPPoE, PPP и iptables программного обеспечения брандмауэра. Внутренняя сеть 192.168.138.0 сопоставляется с динамически назначаемым IP-адресом с использованием NAT/IP-Masquerading.

<ПР>

Загрузите PPP с сайта Sambas, в GENTOO Linux используйте:

Во-первых, убедитесь, что карта Ethernet, которую вы собираетесь использовать с модемом, видна ядру Linux.

должно отображаться что-то вроде этого:

eth0 Link encap:Ethernet HWaddr 00:60:67:62:31:D4

Несколько файлов требуют редактирования. Самый простой способ сделать это — запустить следующую команду от имени пользователя root:

Файл /etc/ppp/pppoe.conf содержит информацию о конфигурации подключения ADSL.

start() ebegin "Подключение канала ADSL"
$START &>/dev/null
touch /var/lock/subsys/adsl
eend $?
>

/usr/sbin/adsl-connect
/usr/sbin/pppd pty /usr/sbin/pppoe -p /var/run/pppoe.conf-adsl.pid.pppoe \
- I eth0 -T 80 -U -m 1412 noipdefa
/usr/sbin/pppoe -p /var/run/pppoe.conf-adsl.pid.pppoe \
-I eth0 -T 80 -U -m 1412

ifconfig -a

eth0 Link encap:Ethernet HWaddr 00:30:48:28:AA:4A
UP BROADCAST RUNNING MULTICAST MTU:1500 Метрика:1
RX пакетов:23529 ошибок:0 отброшено:0 превышение: 0 кадр:0
пакетов TX:18759 ошибок:0 отброшено:0 переполнение:0 оператор:0
коллизий:0 txqueuelen:1000
байт RX:22942360 (21,8 Мб) байтов TX:1973186 (1,8 Мб)
Базовый адрес: 0x3000 Память: fc200000-fc220000

eth1 Link encap:Ethernet HWaddr 00:30:48:28:AA:4B
inet addr:192.168.138.1 Bcast:192.168.138.255 Mask:255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU: 1500 Метрика: 1
RX-пакетов: 18130 ошибок: 0 отброшено: 0 переполнение: 0 кадр: 0
пакетов TX: 25373 ошибок: 0 отброшено: 0 переполнение: 0 оператор: 0
коллизий: 0 txqueuelen:1000
RX bytes:1819853 (1,7 Mb) TX bytes:21836499 (20,8 Mb)
Базовый адрес:0x3040 Память:fc220000-fc240000

lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
UP LOOPBACK RUNNING MTU:16436 Метрика:1
RX пакетов:16 ошибок:0 отброшено: 0 переполнений: 0 кадров: 0
пакетов TX: 16 ошибок: 0 отброшено: 0 переполнений: 0 оператор: 0
коллизий: 0 txqueuelen: 0
байтов RX: 1590 (1,5 Кб) TX байт: 1590 (1,5 КБ)

ppp0 Link encap:Point-to-Point Protocol
inet addr:213.3.5.17 PtP:195.186.253.131 Mask:255.255.255.255
UP POINTOPOINT RUNNING NOARP MULTICAST MTU:1492 Метрика:1
RX-пакеты: 21685 ошибки: 0 отброшены: 0 переполнения: 0 кадр: 0
пакеты TX: 14272 ошибки: 0 отброшены: 0 переполнены: 0 оператор: 0
коллизии: 0 txqueuelen: 3
RX байт: 22260398 (21,2 Мб) TX байт: 1314858 (1,2 Мб)

netstat -nr

Использование маршрутизатора Zyxel в качестве модема (режим моста)

Подключитесь к маршрутизатору Zyxel с помощью TELNET. В Меню 1 измените Route IP = No, Bridge = Yes.

В Меню 4 измените Encapsulation на RFC 1483. Убедитесь, что VPI и VCI правильно настроены для вашего провайдера.

В Меню 11.2 измените Route = None, Bridge = Yes.

Теперь перезагрузите модем. теперь это модем, а не маршрутизатор. Все настройки игнорируются, Модем больше не может говорить по PPPoE!

Маршрутизация Linux

echo 1 > /proc/sys/net/ipv4/conf/all/log_martians
echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts
echo 0 > /proc/sys/net /ipv4/icmp_echo_ignore_all
echo 1 > /proc/sys/net/ipv4/icmp_ignore_bogus_error_responses
echo 1 > /proc/sys/net/ipv4/ip_forward

NAT (преобразование сетевых адресов)

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

Если бы одна из этих ссылок выполняла NAT, то они изменили бы источник или адресатов пакета по мере его прохождения. Как вы можете себе представить, система не предназначена для такой работы, и, следовательно, NAT — это всегда что-то вроде черепка. Обычно канал, использующий NAT, запоминает, как он исказил пакет, и когда ответный пакет проходит в обратном направлении, он выполняет обратное изменение этого ответного пакета, так что все работает.

Зачем мне использовать NAT?

Иногда вам нужно изменить, куда будут направляться пакеты, направляющиеся в вашу сеть. Часто это происходит потому, что (как указано выше) у вас есть только один IP-адрес, но вы хотите, чтобы люди могли попасть в ящики за ящиком с реальным IP-адресом. Если вы переписываете адресата входящих пакетов, вы можете управлять этим.Этот тип NAT назывался переадресацией портов в предыдущих версиях Linux.

Иногда вы хотите представить, что каждый пакет, проходящий через ваш Linux-компьютер, предназначен для программы на самом Linux-боксе. Это используется для создания прозрачных прокси: прокси — это программа, которая стоит между вашей сетью и внешним миром, перетасовывая связь между ними. Прозрачная часть заключается в том, что ваша сеть даже не будет знать, что она разговаривает с прокси-сервером, если, конечно, прокси-сервер не работает. Squid можно настроить таким образом, и в предыдущих версиях Linux это называлось перенаправлением или прозрачным проксированием.

Два типа NAT

Destination NAT — это когда вы меняете адрес назначения первого пакета: т. е. вы меняете, куда идет соединение. Destination NAT всегда выполняется перед маршрутизацией, когда пакет впервые выходит из сети. Переадресация портов, распределение нагрузки и прозрачное проксирование — все это формы DNAT.

echo "Переадресация портов ДНКАТ: 25 --> 192.168.138.28:25"
$IPTABLES -t nat -A PREROUTING -p tcp -i ppp0 --dport 25 -j DNAT --to 192.168.138.28: 25

echo "DNAT Portforwarding: 53 --> 192.168.138.20:25"
$IPTABLES -t nat -A PREROUTING -p tcp -i ppp0 --dport 53 -j DNAT - -to 192.168.138.20:53
$IPTABLES -t nat -A PREROUTING -p udp -i ppp0 --dport 53 -j DNAT --to 192.168.138.20:53

echo "Переадресация портов ДНКАТ: 80 --> 192.168.138.21:80"
$IPTABLES -t nat -A PREROUTING -p tcp -i ppp0 --dport 80 -j DNAT --to 192.168.138.21: 80

Я пытаюсь подключиться к Интернету через PPPoE на моем ноутбуке с Debian 10 с помощью командной строки. Вот что я пробовал до сих пор:

отредактируйте /etc/ppp/provider и добавьте следующее содержимое:

запустить поставщика sudo pon

Я просмотрел сетевой трафик в wireshark на этапе обнаружения и увидел, что поле пароля пусто.

Должен ли я использовать файл /etc/ppp/pap-secrets или /etc/ppp/chap-secrets для имени пользователя и пароля? В чем разница между этими двумя файлами? Что означает первая строка в файле /etc/ppp/provider? Что это за плагин? Есть ли документация по конфигурационному файлу /etc/ppp/privider?

В чем разница между ppp, pppoe и pppoeconf? Они нужны мне все или я что-то путаю?

Было бы неплохо получить практическое руководство по настройке соединения PPPoE в Debian.

Заранее спасибо.

С наилучшими пожеланиями! Леон

1 Ответ 1

Вот ссылка на Debian Wiki по настройке PPoE.
Вот ссылка на Сетевое руководство Debian.
И, наконец, вот ссылка на подробное (хотя и устаревшее) руководство Linux PPP.

Теперь ваши вопросы:

Должен ли я использовать файл /etc/ppp/pap-secrets или /etc/ppp/chap-secrets для имени пользователя и пароля? В чем разница между этими двумя файлами?

Если ваш провайдер PPP требует аутентификации, вам нужно использовать тот или иной из этих файлов, используя имя пользователя и пароль, которые они вам предоставили. Файлы /etc/ppp/pap-secrets и /etc/ppp/chap-secrets предназначены для конфигураций аутентификации по протоколу аутентификации по паролю (PAP) и протоколу аутентификации с вызовом рукопожатия (CHAP) соответственно. Этот сайт рассматривает различия. По сути, PAP работает, отправляя имя пользователя и пароль по сети, а CHAP работает, регулярно отправляя строку «вызова» для дополнительной аутентификации. Вам нужно будет правильно настроить тот, который использует ваш провайдер.

Что означает первая строка в файле /etc/ppp/provider? Что это за плагин? Есть ли документация по конфигурационному файлу /etc/ppp/provider?

плагин rp-pppoe.so enp4s0 активирует модуль ядра для PPPoE для указанного сетевого интерфейса. Это плагин ядра, необходимый для использования PPPoE. Кажется, я не могу найти документацию, в которой прямо упоминается, что должен иметь /etc/ppp/provider, но похоже, что pppoeconf должен создать файл по умолчанию, или вам, по крайней мере, нужно, но минимальное количество деталей, необходимых для PPPoE в нем. Пожалуйста, обратитесь к предоставленным ссылкам для получения дополнительной информации.

В чем разница между ppp, pppoe и pppoeconf? Мне нужны все они или я что-то путаю?

PPP — это протокол "точка-точка", который обеспечивает стандартный способ установления сетевого подключения по последовательному каналу. В Debian это демон pppd или PPP. PPPoE — это протокол точка-точка через Ethernet, поэтому кадры PPP обрабатываются внутри кадров Ethernet. pppoeconf — это предоставленный Debian инструмент для настройки соединений PPPoE.

Как указано в Debian Wiki:

Запустите pppoeconf для создания и/или изменения файлов /etc/ppp/peers/dsl-provider, /etc/ppp/*ap-secrets и /etc/network/interfaces. В большинстве случаев лучше оставить предложенные ответы.

Первые 2 — это протоколы, а последний — инструмент Debian для настройки протокола, PPPoE.

Я полагаю, что среди всех предоставленных ссылок вы сможете найти исчерпывающее руководство по PPPoE в Debian. По сути, вы запускаете сценарий установки ( pppconf или pppoeconf ) и отвечаете на следующие вопросы, чтобы включить сеть PPP для вашей системы:

Номер телефона

Имя пользователя интернет-провайдера

Пароль интернет-провайдера

Порт связи модема

Метод аутентификации

Скорее всего, вы используете PPPoE, поэтому некоторые из этих вопросов неприменимы. При необходимости обратитесь к своему интернет-провайдеру за дополнительной помощью.

Что касается подключения к Интернету в Швейцарии, вы можете столкнуться с ADSL или VDSL. В большинстве случаев вы получите маршрутизатор, предоставленный провайдером, который уже предварительно настроен с информацией о подключении. Эта настройка может подойти большинству пользователей, но если вы являетесь профессиональным пользователем или предприятием с особыми потребностями, вам нужно больше.

В нашем случае мы искали гораздо более «динамичный» способ настройки доступа в Интернет и, конечно же, хотели маршрутизировать и фильтровать трафик на компьютере с Linux. В итоге мы получили коммутируемую учетную запись (а не это дерьмовое коммутируемое соединение 56k) и модем PPPoE.

Что такое PPPoE?

PPPoE — это аббревиатура от протокола точка-точка через Ethernet. По сути, это сетевой протокол для инкапсуляции кадров PPP внутри кадров Ethernet. В Википедии есть очень хорошая статья о PPPoE:

Протокол точка-точка через Ethernet (PPPoE) — это сетевой протокол для инкапсуляции кадров PPP в кадры Ethernet. Он появился вскоре после 2000 года в контексте бума DSL как решения для туннелирования пакетов через соединение DSL в IP-сеть провайдера, а оттуда в остальную часть Интернета. В книге по сетевым технологиям 2005 года отмечалось, что «большинство провайдеров DSL используют PPPoE, который обеспечивает аутентификацию, шифрование и сжатие». Типичное использование PPPoE включает в себя использование средств PPP для аутентификации пользователя с помощью имени пользователя и пароля, преимущественно через протокол PAP и реже через CHAP.

Установите и настройте pppd для подключения PPPoE

Для использования соединений PPPoE в Linux нам потребуется дополнительное программное обеспечение. В системах на базе Debian ищем pppd и pppoeconf:

Поскольку мы установили необходимое программное обеспечение, нам нужно его настроить. Конфигурация провайдера (он же пир) хранится в каталоге /etc/ppp/peers, и там уже есть файл конфигурации провайдера по умолчанию. Просто взгляните на это:

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

С помощью этой конфигурации мы гарантируем, что соединение PPPoE всегда активно (также известное как persist ) и автоматически повторно открывается (также известное как maxfail & holdoff ) в случае неожиданного отключения. Пользователь должен совпадать с именем пользователя, которое вы получить от своего провайдера. Поскольку мы получаем наш IP-адрес динамически (DHCP), мы устанавливаем параметр noipdefault. Конечно, это наш основной интерфейс для подключения к Интернету, поэтому нам нужен маршрут по умолчанию.

Конечно, вам по-прежнему нужен пароль для соединения PPPoE, поэтому добавьте еще одну строку в файл /etc/ppp/chap-secrets:

Откройте соединение PPPoE

Теперь, когда вы все настроили, вы сможете открыть соединение PPPoE, вызвав:

Подождите несколько секунд, после чего вы должны увидеть новый интерфейс:

Чтобы разорвать соединение, вы можете выполнить:

Подсказка: команду pon также можно вызвать без аргумента узла, но тогда она будет искать провайдера по умолчанию в /etc/ppp/peers/provider . Если вы хотите, чтобы ваше соединение было провайдером по умолчанию, вы можете связать с ним свою одноранговую конфигурацию:

Автоматическое подключение PPPoE

Если вы хотите, чтобы соединение PPPoE возникало автоматически, у вас есть несколько вариантов. Старым добрым способом является запись интерфейсов, по крайней мере, в системах на базе Debian.

Это прекрасно работает, когда вы перезагружаете компьютер. Но если у вас есть система с включенным systemd, вы можете запустить/остановить подключение через systemd / systemctl вместо файла интерфейсов:

Теперь вы можете управлять подключением через systemctl :

Маршрутизация и брандмауэр

Если вы хотите использовать свой Linux-компьютер в качестве маршрутизатора и брандмауэра, вам необходимо включить переадресацию IP(v4) и добавить некоторые правила iptables.

Пересылка IP(v4) позволяет Linux пересылать пакеты с одного интерфейса (сети) на другой.

С помощью iptables нам нужно настроить маскировку IP-адресов, которая выполняется через таблицу NAT. Маскарадинг IP помогает нам «скрыть» клиента на удаленном хосте, переписав исходный адрес пакета после маршрутизации.Удаленная система будет видеть только IP-адрес нашего Linux-маршрутизатора, а не IP-адрес клиента позади него. Хотя это необходимо для соединения PPPoE, это также может быть повышением безопасности при маршрутизации частных сетей.

В этом руководстве мы узнаем, как установить pppoe в Debian 11.

Что такое pppoe

PPP через Ethernet (PPPoE) — это протокол, используемый многими интернет-провайдерами ADSL. Этот пакет позволяет подключаться к этим поставщикам услуг PPPoE.

Есть три способа установить pppoe в Debian 11. Мы можем использовать apt-get, apt и aptitude. В следующих разделах мы опишем каждый метод. Вы можете выбрать один из них.

Установка pppoe с помощью apt-get

Обновите базу данных apt с помощью apt-get, используя следующую команду.

После обновления базы данных apt мы можем установить pppoe с помощью apt-get, выполнив следующую команду:

Установить pppoe с помощью apt

Обновите базу данных apt с помощью следующей команды.

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

Установить pppoe с помощью aptitude

Если вы хотите использовать этот метод, вам может потребоваться сначала установить aptitude, так как aptitude обычно не устанавливается по умолчанию в Debian. Обновите базу данных apt с помощью aptitude с помощью следующей команды.

После обновления базы данных apt мы можем установить pppoe с помощью aptitude, выполнив следующую команду:

Как удалить pppoe в Debian 11

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

Удалить pppoe и его зависимости

Чтобы удалить pppoe и его зависимости, которые больше не нужны Debian 11, мы можем использовать следующую команду:

Удалить конфигурации и данные pppoe

Чтобы удалить конфигурацию и данные pppoe из Debian 11, мы можем использовать следующую команду:

Удаление конфигурации, данных и всех зависимостей pppoe

Мы можем использовать следующую команду для удаления конфигураций pppoe, данных и всех его зависимостей, мы можем использовать следующую команду:

Ссылки

Обзор

В этом руководстве мы узнаем, как установить pppoe в Debian 11 с помощью различных инструментов управления пакетами, таких как apt, apt-get и aptitude.

Читайте также: