В наше время, когда в каждой квартире интернет «течет» буквально из розетки, из порта роутера или прилетает по WiFi — никто не вспоминает о таком анахронизме как аналоговый модем.
А когда‑то интернет добывали из модемов: обычные пользователи, они же ламеры, перебирали различные варианты программ‑звонилок и «драйверов», а настоящие айтишники настраивали PPP вручную.
Как это работало и зачем может пригодиться сегодня (а оно может).
Для начала, что такое вообще модем? Если не вникать глубоко в детали — всегда используется пара модемов: на вход одного из них подаются какие‑то данные, модем преобразует их в некий аналоговый сигнал для передачи по проводам, а второй модем декодирует их обратно в данные.
В пределе можно вообще представить эту пару как кусок провода: подаём данные на вход с одной стороны — читаем с другой. И в самом деле, компьютеры можно было соединить через COM — порты обычным проводом, точнее тремя — Rx, Tx, Gnd.
Например, если использовать программу терминал — можно вот так подключиться к консоли устройства, читать‑писать команды. Но сейчас речь не об этом.
А вот как превратить такой кусок провода в сетевой интерфейс и передавать через нее IP‑пакеты? Для этого и использовался протокол PPP (используется и сейчас, например при работе с сотовыми модемами, только уже никто не настраивает его ручками).
Если на пальцах — создается виртуальный сетевой интерфейс, и проходящие через него IP‑пакеты преобразуются в фреймы LCP, которые в свою очередь передаются через модем (или через наш кусок провода), просто как набор символов. Их можно увидеть глазами на экране терминала как кучу скобочек типа }}}}{}}}
В процессе этого обмена происходит установление IP‑соединения, стороны получают свои IP‑адреса и между ними начинает ходить IP‑трафик.
Ещё раз напомню, для этого достаточно обычного куска провода, никакой особой магии там нет, нужны только две точки — вход и выход. Потому и протокол Point‑to‑Point Protocol, PPP.
А вот какой именно там провод, медный между компортами, или линия связи через модем Zyxel на 19 200, или оптический кабель через адаптеры, или радиоканал — разницы по сути никакой. Главное — возможность двухстороннего обмена данными.
Если понять эту простую вещь — то легко придти к пониманию того, что в принципе можно настроить IP‑канал между двумя точками через что угодно, лишь бы обеспечивалась двухсторонняя связь, хоть голубями с записочками.
Голубей мы использовать не будем, задержки большие, а вот какие‑то иные каналы вполне можно. Например, в недавней статье при помощи i2p было показано, как создать виртуальный канал между двумя портами, один на локальной машине, а другой черт его знает где. И вот там как раз тот самый случай двухсторонней связи: все что записано на одной стороне будет получено на другой.
А это значит, что с помощью PPP можно поднять сеть между этими двумя точками, причем трафик в ней окажется зашифрован где‑то внутри сети i2p.
Например, таким способом можно достучаться до своего домашнего сервера из внешнего мира, даже не зная каким именно путем через какого провайдера и с какими белыми адресами эта сеть подключена к интернету.
Как это настроить? Для начала допустим, что на обоих сторонах туннель выведен на порт 127.0.0.1:5005, для простоты.
То есть, записывая данные в 127.0.0.1:5005 на ноутбуке — можем прочитать их в 127.0.0.1:5005 на сервере.
Также допустим, что на обоих сторонах установлены пакеты ppp и netcat, а файл /etc/ppp/options на обоих машинах обнулен, чтобы ничем ничему не мешать.
Запускаем на сервере:
pppd nodetach persist 192.168.50.1:192.168.50.2 pty “nc ‑l 5005”
Что мы сделали: запустили демон PPP в интерактивном режиме, ожидающим подключения, назначили локальный и удаленный адреса, используем псевдотерминал который создаётся командой nc (netcat) слушающей 5005 порт. Этот порт будет соединен с точкой входа/выхода туннеля на сервере.
На клиенте запускаем так:
pppd nodetach persist pty “nc 127.0.0.1 5005”
Что мы сделали: запустили демон PPP в интерактивном режиме, с ожиданием когда он сможет подключиться к псевдотерминал, созданному командой nc, подключающийся к 127.0.0.1:5005 на локальной машине.
Поскольку локальный порт 5005 связан с удаленным портом 5005 — демоны соединятся, установят PPP линк, обменяются адресами и между ними заработает IP ‑сеть.
На локальной стороне демон сообщит о полученных адресах и установлении соединения.
Всё, остальное — вопрос настройки маршрутизации трафика, все что будет маршрутизировано через эту сеть — пройдет между локальной машиной и сервером.
Остаётся привести это все в порядок: практически всю строку запуска кроме самой команды pppd можно записать в файлы /etc/ppp/options, nodetach можно убрать, и установить максимальное количество попыток в 0, в бесконечность. Тогда файл будет выглядеть примерно так:
# server
persist
maxfail 0
192.168.50.1:192.168.50.2
pty "/usr/bin/nc -l 127.0.0.1 5005"
Клиентский файл будет отличаться только отсутствием строки с IP‑ адресами и параметра ‑l при запуске nc
И запускаем из‑под рута на обоих машинах
pppd
Через некоторое время должна установиться связь. В случае отказа одной из стороны или обрыва соединения параметры persist и maxfail 0 заставят другую сторону пробовать снова и снова.
Вообще у netcat есть разные интересные параметры, можно использовать tcp, udp, разные адреса, к которым подключаться, даже возможность работать через файлы unix‑socket на диске (сеть через /tmp/.xfile — не очень понятно зачем, но можно даже так).
Ну и в целом, принцип сохраняется — соединение между двумя точками, и netcat в данном случае только один из вариантов подключения, подходящий как раз к туннелям i2p.
Комментарии (51)
meer
01.01.2025 20:13Несколько лет назад (типа лет пять) возникла задача разослать сотне контрагентов факсовое сообщение одинаковое. Не буду углубляться в подробности, суть в том, что важно было сделать именно так. Уже звучит олдскульно, но история тут куда глубже. По старой памяти, решил ради этой цели купить диалапный модем, дабы автоматизировать процесс - там же все просто потом делается (хотя проще конечно было онлайн сервис арендовать для этого, но я же сильно раньше до этого делал подобное сам, так что действовал по наитию). И тут случился незабываемый квест! Привычно зашел в ближайшие Мвидео/Днс/Эльдорадо с нормальным, вроде бы, вопросом: есть ли в продаже нужная железка... Вы бы знали, как это сложно объяснить консультанту, что модем с дозвоном по простой телефонной линии серьезно отличается от 3G/4G модема и совсем это даже не DSL. Ну то есть прямо директор магазина к тебе выходит, спрашиваешь его, а понимания с его стороны нет от слова совсем. По итогу на авито взял и задача была быстро решена. Но сам факт до сих пор вспоминаю с умилением!
vorphalack
01.01.2025 20:13так там небось некоторые продаваны в школу пошли уже после перехода на дсл...
Ergistael
01.01.2025 20:13Эх, не про железо, но: настраивали мы как-то виртуальный факс на макинтоше (том самом моноблоке). Ну никак не понять, куда сохраняется файл. А потом руководитель допер, что этот факс "печатается" на виртуальном принтере и так может быть отправлен...
event1
01.01.2025 20:13Для вас уже не актуально, но существует протокол ITU T.37 для передачи факсов через электронную почту, а так же сервисы в интернете, поддерживающие этот протокол. За деньги, естественно. Но может быть проще и дешевле, чем искать факс-модем
enamchuk
01.01.2025 20:13Если вам или кому-либо ещё понадобится отправить факс, есть прекрасное российское ПО "Вента Факс". В последней версии (а обновлялся он давно) поддерживает не только аналоговые и старые GSM-модемы, но и современный SIP.
До сих пор им пользуюсь, в основном, как SIP-клиент, но иногда и по прямому назначению.
Считаю, что это лучший "виртуальный" факс для Windows.
http://www.ventafax.ru/
ValdikSS
01.01.2025 20:13Как-то сканировал PPP over TCP, нашел вот этот ПЛК Campbell CR1000.
NSFW. Ваши предположения?
LuchS-lynx
01.01.2025 20:13Для начала, что такое вообще модем? Если не вникать глубоко в детали — всегда используется пара модемов: на вход одного из них подаются какие‑то данные, модем преобразует их в некий аналоговый сигнал для передачи по проводам, а второй модем декодирует их обратно в данные.
модем, нас учили, это модулятор/демодулятор, т.е. преобразователь сигнала
Wesha
01.01.2025 20:13Ну так и есть: цифрового — в аналоговый и аналогового — в цифровой.
vadimk91
01.01.2025 20:13Были ещё в природе цифровые ISDN модемы (ну по крайней мере в те времена их называли именно так, а не роутерами и не терминалами). Технология ISDN - это цифровая телефония по медной линии, из аналогового там только электропитание для оконечного клиентского устройства. В настоящее время практически уже ушла в историю.
kuzzdra
01.01.2025 20:13цифровая телефония по медной линии, из аналогового там только электропитание
Сигналы в длинной линии вполне аналоговые.
ValdikSS
01.01.2025 20:13В Linux шифрование MPPE в режиме stateful — единственном совместимом с Windows PPP, сломано как минимум с 2011 года.
https://lkml.iu.edu/hypermail/linux/kernel/1103.0/02528.html
ValdikSS
01.01.2025 20:13Неплохой исторический экскурс и дополнительная информация по теме:
https://gekk.info/articles/ppp.htmlИнструкция по настройке Windows 2003 на приём входящих соединений по модему:
https://gekk.info/articles/ras_2k3.htmlМои размышления на тему использования ppp как базис для туннелирования в прокси-протоколах
https://github.com/shadowsocks/shadowsocks-org/discussions/244
checkpoint
01.01.2025 20:13PPP это для ламеров, настоящие мастера использовали Serial Line Internet Protocol (SLIP).
PPP это достаточно сложный протокол с неколькими уровнями инкапсуляции и набором "подпротоколов". SLIP же простой как топор - берется сырой IP пакет из сетевого интерфейса, эскейпятся все байты которые имеют непечатный вид (точнее, управляющие ASCII коды которые могут повлиять на режим работы терминальной линии) и полученный результат отправляется в последовательную терминальную линию. На другом конце терминальной линии процесс обратный. Все настройки интерфейса (IP, маска, MTU), таблица маршрутизации и адреса DNS серверов задаются пользователем отдельно (обычно скриптом) и находятся за рамками протокола SLIP.
SLIP один из самых примитивнейших, быстрых и надежнейших протокоров связи в Интернет. На заре становления сети Интернет, SLIP-ом использовались поголовно как пользователи, так и интернет-провайдеры для связи узлов. Поднять SLIP можно как через последовательную линию связи, так и через заготовленную пару сокетов, через TCP или UDP, а так же через SSH. SLIP можно распечатать на листах бумаги и передавать вручную или голубями (с PPP кстати такой фокус не пройдет). SLIP может работать по симплексной линии связи, а PPP - нет.
Wesha
01.01.2025 20:13эскейпятся управляющие ASCII коды которые могут повлиять на режим работы терминальной линии)
Что самое прикольное —
+++
, могущие повлиять на режим работы модема, не эскейпились!netch80
01.01.2025 20:13не эскейпились!
А для SLIP и PPP это не нужно было. По крайней мере для нормальных модемов.
"Аллюр три креста", переводящий модем в режим приёма команд, был определён как: не менее секунды паузы, затем три '+' (причём обычно был регистр для замены этого символа) с интервалами между ними менее секунды, затем снова не менее секунды паузы, и только тогда оно воспринималось. (Да, по вашей ссылке это сказано, но недостаточно отчётливо. Тайминги тут критичны.)
Ни в SLIP, ни в PPP, ни в X/Y/Zmodem, ни в Hydra, ни в FTS-1, вообще нигде такая ситуация не могла возникнуть - везде был какой-то фрейминг. Могло при ручном общении в терминале, но люди обычно знали о проблеме.
А вот что было (мне не попадались, но слышал) - "левые" модемы, которые не соблюдали правило с задержками, потому что оно было запатентовано Hayes, Inc. и надо было ей платить за пакет правил для модема. Вот с ними могли быть проблемы... но, повторюсь, ни разу такие не попались.
Wesha
01.01.2025 20:13Так это для нормальных модемов. А дешманские на это забивали.
netch80
01.01.2025 20:13Мне ни разу не попадались. Вы помните какие-нибудь модели?
Wesha
01.01.2025 20:13Так они ж дешманские — вот и не были у всех на слуху, как «Спортстеры». У меня был, на 2400, всего $40 стоил (по сравнению со средней ценой приличного в $100) — визуально его помню, чёрный, как обмылок выглядел — а названия никогда даже и не знал и не интересовался, модем и модем.
checkpoint
01.01.2025 20:13Что самое прикольное —
+++
, могущие повлиять на режим работы модема, не эскейпились!Выход в коммандный режим по трем плюсам это фича Hayes-совместимых модемов и она отключалась AT-командами. И на сколько я помню, по-умолчанию она у всех модемов была отключена.
event1
01.01.2025 20:13Во-первых, к сожалению, технология ещё не забыта. Может, в России и забыта, но в других местах полно DSLа, который работает через PPPoE или даже PPPoA. Это не говоря про более экзотические системы, как-то сеть на субпротоколе BCP или ppp-ssh vpn. Во-вторых, текст содержит ряд (мягко выражаясь) неточностей:
Для начала, что такое вообще модем? Если не вникать глубоко в детали — всегда используется пара модемов
Зачем ставить вопрос, ответ на который вы не собираетесь давать? МоДем — это модулятор/демодулятор.
И в самом деле, компьютеры можно было соединить через COM — порты обычным проводом, точнее тремя — Rx, Tx, Gnd.
В смысле один проводом состоящим из трёх жил? Точнее из 9и. Там ещё есть RNG, DCD, DTR, и т.д.
используется и сейчас, например при работе с сотовыми модемами, только уже никто не настраивает его ручками
Сотовые модемы сейчас предоставляют виртуальный интерфейс эфирнета, наряду с виртуальным ком-портом. Иногда и вместо него. Если только это не что-то очень старое или, поддерживающее только GSM. Что редкость, ибо GSM отключают по всему миру.
Если на пальцах — создается виртуальный сетевой интерфейс, и проходящие через него IP‑пакеты преобразуются в фреймы LCP
LCP = Link Control Protocol. Субпротокол PPP предназначенный для установления параметров соединения, как-то шифрование, сжатие и т.п. Данные передаются непосредственно во фреймах PPP, без дополнительных субпротоколов
В процессе этого обмена происходит установление IP‑соединения
Не происходит. Во-первых, потому что "установление IP-соединения" — это нечто из другой вселенной. В нашей, протокол IP не предусматривает никаких соединений. Во-вторых, потому что протокол PPP является протоколом уровня 2/3 и данные там могут ходить без заголовков IP
стороны получают свои IP‑адреса
Могут получать, а можно отключить IPCP и посылать данные так.
Ещё раз напомню, для этого достаточно обычного куска провода, никакой особой магии там нет,
Нужен либо телефонные провод и модемы, либо ком-порты тех или иных стандартов (RS-232, RS-485, RS-422)
Для начала допустим, что на обоих сторонах туннель выведен на порт 127.0.0.1:5005, для простоты
Для начала допустим, что из "127.0.0.1:5005", порт это только 5005.
То есть, записывая данные в 127.0.0.1:5005 на ноутбуке — можем прочитать их в 127.0.0.1:5005 на сервере.
Только если сервер работает на том же ноутбуке. Вообще, стоило бы более явно обозначить, что этот ваш пример работает только если и сервер и клиент запущены на одной и той же машине. Если машины разные, то 127.0.0.1 надо поменять на адрес сервера.
используем псевдотерминал который создаётся командой nc (netcat) слушающей 5005 порт
nc гоняет данные между сетью и своим stdin/stdout. Никаких псевдотерминалов он создавать не умеет. Псевдотерминал (для связи nc stdin/stdout и pppd) создаёт сам pppd, когда вы указываете опцию pty
И стоит упомянуть, что у такого канала связи вне лабораторных условий обязательно должны быть шифрование и аутентификация. 2025-ый год всё-таки.
JBFW Автор
01.01.2025 20:13Это вы все пишете потому что читаете невнимательно.
Начнем с того, что в тексте явно идёт отсылка к статье про i2p, если бы вы ее потрудились прочитать то поняли бы, почему именно 127.0.0.1:5005, и почему это не на одной машине. Но вы же не читали, правда? )
Именно поэтому не нужно тут шифрование, именно поэтому вся сложность работы реальных модемов сводится к "куску провода"
А закончим тем, что для соединению по компорту трёх проводов достаточно. И снова, если бы вы попробовали - то знали бы, но вы же не пробовали, правда? )
Обычных трёх проводов, например даже трехфазного силового электрокабеля, если необходимость требует. Там ограничение разве что по длине, потому что завал фронтов импульсов и как следствие необходимость снижения скорости обмена. Просто в данном случае это несущественно.
Wesha
01.01.2025 20:13у такого канала связи вне лабораторных условий обязательно должны быть шифрование и аутентификация. 2025-ый год всё-таки.
Если предполагать наличие злоумышленника, способного впендюриться в канал между приёмной и передающей точками — то да. Но с учётом того, что этот канал есть телефонная линия (коммутируемая или выделенная), то в тащмаёра (а тем более злобных хацкеров) с крокодильчиками и чемоданом аппаратуры верится слабо.
JBFW Автор
01.01.2025 20:13А вот тут не соглашусь, коммутируемая линия на АТС сегодня наверняка пишется "по пакету Яровой", а к выделенной интересного фигуранта можно и чемодан аппаратуры подключить, потому что она только в плане коммутации выделена, физически это вполне себе обычная пара в кросс-боксе, вон на улицах стоят и на столбах висят. Надень спецовку да работай спокойно.
Но "для целей данной статьи" - канал передачи данных скрыт в облаке i2p, и как именно он там идет - считается, что никто не знает заранее
Wesha
01.01.2025 20:13Так ведь вопрос не столько о прослушке, сколько о MITM. Слушать линию не так трудно — а вот отрубить обоих участников и вклиниться в разрыв — уже на порядки сложнее.
enamchuk
01.01.2025 20:13Пусть слушают.
Сомневаюсь, что из телефонной записи такого "разговора" двух модемов удастся восстановить потоки информации. Для надёжности можно передавать шифрованные файлы.
firehacker
01.01.2025 20:13И в самом деле, компьютеры можно было соединить через COM — порты обычным проводом, точнее тремя — Rx, Tx, Gnd.
Вы ведь знаете, чем отличается UART от RS-232?
Тем, что второе, помимо аппаратно других электрических уровней, это ещё и сигналы квитирования, flow control.
netch80
01.01.2025 20:13Это в каком определении UART нет управления потоком?
UART только асинхронный. RS-232 позволяет и синхронную передачу. Вот это - существенное отличие (как минимум одно из). А вы явно вспомнили что-то не то.
firehacker
01.01.2025 20:13А упоминание сигналов квитирования вы целенаправленно проигнорировали?
Flow control может быть аппаратным, когда сигнал «попридержи коней, я не успеваю переваривать приходящие данные так быстро» идёт по отдельной сигнальной линии, а может быть программным с помощью символов XON/XOFF.
Сама возможность передавать такие спецсимволы через UART абсолютно не означает, что по ту сторону софт (или, иногда «хард») будет интерпретировать эти символы именно как сигналы управления потоком.
XON/XOFF это не то, что подразумевается в UART по умолчанию и из коробки.
Вот декларируется для какой-то МК, например для AVR8, что она аппаратно поддерживает UART. И действительно поддерживает: есть специальный регистр, биты, специальные прерывания — положил байтик, а чип сшифтит в соотв. пин, сгенерирует старт-стоп-парити. А пошлёт ли МК самостоятельно XON/XOFF если код прошивки не забирает данные их приёмного буфера, а новые данные всё прут и прут? Конечно же нет.
JBFW Автор
01.01.2025 20:13А вы знаете, что на старых компьютерах можно было играть в Doom вдвоем с соседом, подключая их нульмодемным кабелем по компортам? У нас не было нульмодемного кабеля на 15 метров, зато был электрический силовой и знание аппаратной части.
3 физических проводника. Всё. Ну а позже я так внешний модем подключал, тоже провода не хватало по длине.
Про то, как подключить современные через USB-ttl адаптеры пояснять тем более незачем, там часто других выводов и нет, ну кроме +5, +3.3в
Там проблема с расстоянием - портится сигнал, заваливаются фронты, собственно поэтому модемы и придумали, чтобы проблему решить
garus_ru
01.01.2025 20:13У нас не было нульмодемного кабеля на 15 метров, зато был электрический силовой и знание
Не зная про ограничения интерфейса, сделали линию на 50 метров из подъезда в подъезд, взяв одножильный провод и сложив его втрое. Поиграли на 9600, пока кто-то из дворовых пацанов не прознал и не срезал себе кусок с участка на чердаке.
P.S. При этом сейчас понимаю, что у обоих не были заземлены системники и не было абсолютно никакой уверенности, что мы с одной и той же фазы запитаны. Но порты не сгорели.
JBFW Автор
01.01.2025 20:13Ну там вообще-то развязка гальваническая от сети, по питанию, иначе током било бы.
Hamletghost
Из заголовка и статьи складывается впечатление, что это какая-то древняя технология, про которую все забыли.
Вот только реальность такова, что абонентские устройства в большинстве случаев до сих пор подключаются к интернет, используя протокол pppoe, мобильные устройства через свой модем (совсем как во времена dial-up), а роутеры проводных провайдеров часто используют ppp поверх ethernet (PPPoE)
JBFW Автор
Да, но давно вы конфигурировали pppd руками?
roswell
После замены материнки наименования интерфейсов сбились; пришлось немножко руками поправить...
13werwolf13
домру aka эртелеком aka дурдом позволяет в ЛК перейти с pppoe на ipoe, латенси до их же GW падает в полтора раза (но почему-то пропадает IPv6).
brotchen
Страшную вещь скажу, но я никогда его не конфигурировал: в Windows 95 уже всё делалось автоматически с настройками по умолчанию.
JBFW Автор
Повезло )
Во времена Windows95 бывали такие телефонные линии, что на них приходилось сначала конфигурировать AT-командами максимальную скорость, а уже потом - дозваниваться.
Иначе коннект мог пойти на высокой скорости (33600, что ли? не помню), а потом глухое зависание, потому что линия шумная, трескучая, и выше 19200 ну никак.
Вот и ограничивали.
LuchS-lynx
конфигурация была нужна в случае необходимости выжать максимум или заставить работать соединение в случае если у провайдера были проблемы с оборудованием/проводами. Сам баловался этим когда-то
netch80
Ну в нормальных звонилках можно было задавать инициализационную строку модему. Я уже в упор не помню названий, но добыть такие не было проблем - диски на барахолках. Может, и в родной звонилке было?
ahdenchik
Собственно, автоконфигурирование это была одна из фишек подключения по PPP (супротив SLIP)
Frankenstine
Никогда не конфигурировал. Во времена FIDO которые я застал, уже были сконфигурированные пакеты софта, где всё настраивалось автоматически, скриптами.
vorphalack
с мобильными устройствами там несколько, кхм, чудесатее, и зависит от стека (2G/3G/4G)
а pppoe и pptp давно пора закопать и засыпать известью.
JBFW Автор
скорее зависит от GSM-чипа, если правильно помню на стороне сотовой сети и без того идет пакетная передача данных, там своё, а вот переход от этих пакетов к внешнему по отношению к чипу интерфейсу может идти по-разному.
Довольно часто - AT-команды (включение, выключение, выбор сети, каналов, скорости, аттач/деаттач) + "дозвон до номера 99" + PPP.
И уже потом это может обрабатываться микропроцессором самого девайса чтобы выдавать канал в каком-то виде - а может просто через usb-serial, тогда за PPP отвечает драйвер модема в роутере.
Ну или ручками, если воткнуть такой модем непосредственно в комп.
Как-то так
Harwest
Внутри LTE ipv4-6 работает нативно, без всяких прокладок в виде РРР, взаимодействие между модемом и хостом тоже давно мигрировало на mbim/qmi/xmm/mhi. Легаси режим с РРР через ttyX оставляют для обратной совместимости (наверное).