LINUX.ORG.RU
ФорумAdmin

Радиомодем+одноплатный комп с OpenWrt - как избавиться от лишнего NAT?

 


0

4

Есть радиомодем с интерфейсом USB. В компе может работать или с pppd или как сетевая карточка(QMI). Если втыкаем его в линуксовый комп то получаем IP от провайдера и сидим за провайдерским NAT. Сам по себе модем никакой маршрутизацией и трансляцией не занимается. Для примера вот есть Quectel EC25.

Но проблема в том,что USB плохо работает на расстояния больше полутора десятков метров. А модем бывает надо разместить и дальше и выше чтобы он хорошо принимал сигнал сотового оператора.

Возникает желание использовать ethernet,не имеющий таких проблем с дальностью. Берем любой подвернувшийся под руку одноплатный комп у которого есть usb и eth,втыкаем модем в него, соединяем витой парой с линуксовым компом,ставим на одноплатник OpenWRT и оно более-менее работоспособно. Вот только в OpenWRT образуется второй NAT,дополнительно к провайдерскому. Причем менее «умный». И это мне не нравится.

Возникает вопрос - что бы такого накрутить в OpenWRT чтобы второго NATа небыло? Судя по форумам - люди что-то мудрят с мостами (bridge) но я не нашел внятного описания как это работает. Куда какие адреса назначаются. Учитывая что провайдер выдает меняющийся адрес.

В самом OpenWRT вообще какая-то странная концепция - есть «devices» (eth0,wwan0,br-lan) и есть «interfaces»,названия которых не похожи на название интерфейсов устройств. Особенно «интерфейс модема» странно создается. В devices он виден как wwan0 и также его называет ifconfig,а в interfaces модем называется qmi-wwan0. Не получается понять идею,заложенную в это. Для чего так сделано.

Буду премного благодарен присутствующим опытным сетевикам за разъяснения и/или ссылки на какие-нибудь тексты по этой теме.



Последнее исправление: watchcat382 (всего исправлений: 1)
Ответ на: комментарий от NyXzOr

Естественно антенна внешняя. Но модем должен быть возле антенны чтобы длина кабеля с гигагерцовыми частотами была минимальна(пару десятков см.),ибо затухание на таких частотах значительное.

watchcat382
() автор топика
Ответ на: комментарий от Atlant

У меня модем это модем,а не роутер с встроенным модемом. Модем подключаем к одноплатному компу,пусть будет например RPi,но это не принципиально. На этот одноплатник ставим линукс в том или ином виде. Я вот OpenWRT поставил. Модем естественно в линуксе виден. И вот теперь основной вопрос - а как полученный с модема интернетный трафик отправить с одноплатника на основной комп,не используя NAT.

Пока что за ночь откопал несколько обсуждений на форумах про бриджи,но так ни у кого и не получилось. А еще откопал вот такую шутку https://usbip.sourceforge.net Позволяет передать usb-устройство на другую машину. Пишут что с мышами,флэшками и вебкамерами работает. Буду пробовать с модемом.

watchcat382
() автор топика

Аналогичный вопрос возникал, только я не заморачивался, но интересно послушать ответы.

Собрал я себе несколько лет назад резервную коробку вместо ADSL-модема на базе Малины 2B и модема Quectel EP06-E, поставил OpenWRT, поставил для Люси дополнения, реализующие «графический» функционал для мониторинга и управления модемом. И поставил саму коробку возле окна, напротив которого как раз расположены две «останкинские башни» в 300-х метров примерно. До кучи наколхозил импровизированное POE от 12-24В. Получилась отличная резервная «сопля» на случай отрубания основного канала. Тариф подбирал, чтобы и «есть не просил» и «мешки» с гигабайтами не пропадали. Включаю раз в три месяца и отправляю себе смс-ку, чтобы номер не пропал.

Сам модем имеет несколько режимов: MBIM, QMI, NDIS и вроде есть какая-то разница применительно к теме, но я уже не помню даже в каком режиме он работает у меня. Знаю, что создает он несколько виртуальных последовательных портов. Помню только, что зашивал IMEI от своего старого 4G аппарата и фиксировал TTL.

На ум приходят «удлинители» USB, но я с ними не работал, работал как-то с удлинителем RS232 MOXA N-Port, не знаю, есть ли подобное фирменное для USB…

yaba ★★★
()
Последнее исправление: yaba (всего исправлений: 2)
Ответ на: комментарий от VladMesh

Использовать USB-over-IP (USB/IP).

Спасибо! Использовал, модем «пропал» из OpenWRT на одноплатнике, и «появился» в настольном компе на Дебиане как будто туда и был воткнут. Minicom с портом ttyUSB общается,команды проходят. Значит как минимум в режиме PPP работать точно будет. Потом попробую еще и QMI настроить. Во всяком случае на команды qmicli модем отвечает. Не знаю зачем, потому как полтора десятка лет PPP-режимом пользуюсь,но почему бы и не попробовать…

Инструкции тут: https://openwrt.org/docs/guide-user/services/usb.iptunnel https://habr.com/ru/articles/504338/

watchcat382
() автор топика
Последнее исправление: watchcat382 (всего исправлений: 1)
Ответ на: комментарий от watchcat382

Гонять USB-фреймы по сети — большие накладные расходы. Для скоростей а-ля 5 Мбит/с, наверное, не принципиально, но не думаю, что можно сильно больше.

Я бы на вашем месте написал хуки для DHCP-клиента, чтобы он:

  1. Получал IP-адрес от провайдера
  2. Перенастраивал DHCP-сервер на выдачу этого адреса
  3. Добавлял запись в таблицу маршрутизации этого адреса на интерфейс локальной сети

Криво-косо, но нормального иного выхода на уровне маршрутизации не особо вижу.

Наверное, под линукс существуют L2TP-серверы, пробрасывающие PPP-фреймы к удалённому серверу. Если найдёте такой, можно настроить через него. Может, accel-ppp умеет.

ValdikSS ★★★★★
()
Ответ на: комментарий от anonymous

Активный usb кабель.

Работает не больше чем на полтора десятка метров при заявленных в рекламе 60м. Пробовал на 27м от дома до сарая - сыплет ошибками и устройство не работает. Хотя это был очень мало потребляющий конвертор usb-rs485.

watchcat382
() автор топика
Ответ на: комментарий от ValdikSS

Гонять USB-фреймы по сети — большие накладные расходы.

Сеть 100 мегабит, а модем подключенный локально качает не более 1100 килобайтов в секунду. Так что не думаю что накладные расходы будут мешать.

L2TP-серверы, пробрасывающие PPP-фреймы к удалённому серверу.

Так ведь тоже накладные расходы.

Добавлял запись в таблицу маршрутизации этого адреса на интерфейс локальной сети

Вот как раз это никто толком и не решил судя по прочитанным за ночь форумам. В смысле - чтобы стабильно работало. Как оказалось, тема довольно много обсуждается применительно к втыканию usb-модемов в роутеры,из-за чего тоже образуется двойной NAT. Хотя если за роутером комп только один то NAT явно лишний.

watchcat382
() автор топика

Попутно выяснилось что через usbip модем Quectel EC25 на команды qmicli отвечает нормально,а воткнутый локально Huawei E3372 выдает ошибку

qmicli --device=/dev/cdc-wdm1 --dms-get-revision
 [/dev/cdc-wdm1] Device revision retrieved:
        Revision: 'EC25EFAR02A08M4G'

qmicli --device=/dev/cdc-wdm0 --dms-get-revision
 -Warning ** [/dev/cdc-wdm0] couldn't detect transport type of 
 port: unexpected driver detected: huawei_cdc_ncm
 error: couldn't open the QmiDevice: Cannot automatically select 
 QMI/MBIM mode

watchcat382
() автор топика
Ответ на: комментарий от watchcat382

Сколько усилителей на нем было? Через сколько метров они стояли? Было ли доп питание? У меня метров на 15 есть с одним усилителем на конце, спокойно держит пассивный хаб с 2 rtl-sdr например.

anonymous
()

Проще пареной репы. Надо создать бридж и включить в него два интерфейса - модема и дальнейшего ethernet. Все.

PS

Зачем использовать убогие системы типа openwrt, которые к тому же не знаешь, отдельный вопрос. Любой orange pi zero с обычным armbian будет делать оное не хуже и проще.

usermod
()
Ответ на: комментарий от watchcat382

e3372 с ndis эмулирует тебе сетевую карту, отправляешь AT команду на подключение интернета в порт, а потом dhcp клиентом получаешь айпишник. Можно и просто модеммэнеджер использовать. qmi для квалкомов.

Merionet
()
Ответ на: комментарий от anonymous

У меня кабель был в виде двух коробочек между которыми подключается витая пара. И на дальнем конце еще гнездо для 5 вольт питания. Вот именно что метров на 15 и работает. А в рекламе заявлено 60 :)

watchcat382
() автор топика
Ответ на: комментарий от BOOBLIK

У меня модем работает на линии 20м+ от антенны.

Если усиление антенны больше чем затухание в кабеле то как-то работать будет. Вот таблица с затуханием в разных кабелях. На двадцать метров - минус примерно 5 дБ

https://kroks.ru/tests-and-reviews/comparison-of-attenuation-of-the-cable-50-and-75-ohm-for-frequency-2-28-hz/

Не очень понятно зачем сначала платить за дорогую антенну с большим усилением и потом за дорогой кабель с малым затуханием, половину этого усиления поглощающий. Как оказалось - проброс usb по эзернету вполне работает.

watchcat382
() автор топика
Ответ на: комментарий от usermod

Проще пареной репы. Надо создать бридж и включить в него два интерфейса - модема и дальнейшего ethernet. Все.

Вот этот ответ регулярно попадается на форумах но без пояснений куда какие ip-адреса назначать. И те кто пытался - регулярно терпели неудачи. Не работает это так,особенно учитывая что адрес на модеме динамический. Ну допустим что получится заставить одноплатник назначать выданный провайдером ip-адрес на свой eth0. А дальше? Как это поможет подключению компа? Какой адрес назначать на его сетевую карточку,что писать в таблице роутинга? Сотовые операторы выдают не сеть,а ОДИН ip адрес. И хочется иметь его на настольном компе,а не на одноплатнике где модем. Как оказалось - usbip как раз это и позволяет сделать.

Зачем использовать убогие системы типа openwrt

Потому что всякие халявные одноплатные компы нередко бывают на MIPS,а не на ARM. Хочется иметь возможность и их использовать. Да и не сказал бы я что openwrt чем-то «убогое». Линукс как линукс. Из командной строки конфигурируется точно также. Некоторая сложность там только если из веб-конфигуратора пытаться настраивать - ну так это дело не обязательное.

watchcat382
() автор топика
Ответ на: комментарий от watchcat382

Драйвер QMI, NCM и MBIM создаёт на линуксе интерфейс типа point-to-point, у него нет MAC адреса, и сбриджевать его с ethernet интерфейсом роутера/одноплатника невозможно. usermod поторопился с пареной репой.

usb-over-ip должен сработать. К тому же он даст возможность управлять модемом и наблюдать за ним с писюка (вводить PIN код SIM карты, смотреть AT-командами списки базовых станций и силу сигнала, передавать SMS, и т.д.)

iliyap ★★★★★
()
Ответ на: комментарий от Merionet

qmi для квалкомов.

Да, с этим разобрался, спасибо. Оказывается этих вариантов подключения больше чем я думал.

C e3372 в режиме NDIS другая проблема - плохая работа в условиях слабого сигнала. Если в варианте c PPP демон pppd сам следит за наличием связи перезапускает линк,то в режиме NDIS надо модем обвешивать скриптами который будут пинговать дальний конец линка и перезапускать если перестал идти трафик. Поэтому e3372 я уже десяток лет использую в режиме PPP. А вот у EC25 производитель обещал всякие дполнительные возможности в режиме QMI,вот и захотелось пощупать,просто из любопытства.

watchcat382
() автор топика
Ответ на: комментарий от iliyap

usermod поторопился с пареной репой.

Не он один. В точности таких советов довольно много на англоязычных форумах.

сбриджевать его с ethernet интерфейсом роутера/одноплатника невозможно.

Веб-конфигуратор openwrt позволяет написать такой конфиг. Но это не работает. Кстати, ifconfig показывать MAC для модемного wwan0 интерфейса:

wwan0: flags=4098<BROADCAST,MULTICAST>  mtu 1500
        ether 12:43:ae:4d:de:06  txqueuelen 1000  (Ethernet)
watchcat382
() автор топика
Ответ на: комментарий от iliyap

usb-over-ip должен сработать.

И таки работает. Уже попробовал. С интернетом пока через это не соединялся,но общение с самим модемом проходит,и через AT-команды и через qmicli.

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

Да. И это еще один аргумент против использования бриджа.

вводить PIN код SIM карты

Проще один раз вставить модемную симку в телефон и запрос PIN-кода отключить. Что я всегда и делаю.

списки базовых станций

А вот это умеют немногие модемы. А для базовых станций LTE - совсем очень немногие. Мне пока только один такой умеющий попадался - он был встроенный в маршрутизатор microtik причем «промышленный» и дорогущий.

передавать SMS

С смсками под линуксом весьма не очень,да и не сильно надо. Хуже что тоже «не очень» с USSD-запросами которые нужны чтобы следить за оставшимися деньгами и мегабайтами. Но у российского Мегафона то и другое можно на их сайте в «личном кабинете» смотреть,чем и пользуюсь.

watchcat382
() автор топика
Ответ на: комментарий от Merionet

С modemmanager он сам не переподключается?

Сочетание NDIS + modemmanager я не пробовал. У меня нету его на машине так как при PPP-соединении не нужен,всё и так переподключается настройками демона.

watchcat382
() автор топика
Ответ на: комментарий от usermod

Проще пареной репы. Надо создать бридж и включить в него два интерфейса - модема и дальнейшего ethernet. Все.

PPP это не Ethernet, его не добавить в бридж. У него нет L2-слоя как такового.

ValdikSS ★★★★★
()
Ответ на: комментарий от watchcat382

Так ведь тоже накладные расходы.

USB-фреймы и PPP-фреймы сильно отличаются по таймингам.

Вот как раз это никто толком и не решил судя по прочитанным за ночь форумам. В смысле - чтобы стабильно работало.

Не вижу, почему это не должно работать. NAT должен быть отключён, конечно.

ValdikSS ★★★★★
()
Ответ на: комментарий от watchcat382

Ну допустим что получится заставить одноплатник назначать выданный провайдером ip-адрес на свой eth0. А дальше? Как это поможет подключению компа? Какой адрес назначать на его сетевую карточку,что писать в таблице роутинга? Сотовые операторы выдают не сеть,а ОДИН ip адрес. И хочется иметь его на настольном компе,а не на одноплатнике где модем. Как оказалось - usbip как раз это и позволяет сделать.

Одноплатник подключён в локальную сеть, у него есть некий локальный IP-адрес.

  1. Одноплатник поднимает PPP с модемом (с провайдером)
  2. Получает IP-адрес из опций PPP-сессии
  3. Устанавливает ЛИБО маршрут по умолчанию в ppp0, ЛИБО чуть более умно, правилами ip rule, по адресу/интерфейсу
  4. Никуда этот IP-адрес себе не назначает, а добавляет его в таблицу маршрутизации, на ваш локальный ethernet-интерфейс (чтобы входящие пакеты на этот адрес маршрутизировались в локальную сеть): ip route add x.x.x.x dev eth0.
  5. Вы, на вашем компьютере, назначаете этот PPP-адрес/32, указывая шлюзом IP-адрес одноплатника в локальной сети: ip addr add x.x.x.x/32 via 192.168.1.X dev ethX; ip route add default via 192.168.1.X dev ethX

Шаг 5 можно автоматизировать, настроив DHCP-сервер на одноплатнике. Он должен выдавать этот PPP-адрес.

IP Rule настраиваются в OpenWrt штатными средствами, разными способами, но самый, пожалуй, простой — установкой номера таблицы маршрутизации и на PPP-интерфейсе, и на LAN-интерфейсе. Если у вас нет какого-либо другого подключения (а полагаю, что так оно и есть), rule’ы вам не нужны, достаточно указать PPP маршрутом по умолчанию.

Итого: все входящие пакеты от модема, предназначеные на PPP-адрес, маршрутизируются вашему компьютеру напрямую, а от вашего компьютера пересылаются напрямую в PPP-интерфейс.

ValdikSS ★★★★★
()
Последнее исправление: ValdikSS (всего исправлений: 2)
Ответ на: комментарий от ValdikSS

А на ppp под линуксом может быть динамический ip-адрес? Или он один раз при старте и править настройки dhcp-сервера можно из /etc/ppp/ip-up?

Никуда этот IP-адрес себе не назначает

Дак, pppd же сам на интерфес адрес назначает, его наоборот удалять надо.

Я бы добавил в /etc/ppp/ip-up проверку, что интерфейс называется ppp0 или переименование ppp-интерфейса, чтобы знать где сломалось, если ядро выдало имя ppp1.

DHCP, конечно, хорошо, но надо чтобы адрес локальной сети (192.168.1.x) на интерфейсе оставался, а то это чудо любит все адреса поудалять.

P.S. А так да, вариант рабочий, я такое делал, только до динамических ip-адресов и dhcp не дошёл.

mky ★★★★★
()
Последнее исправление: mky (всего исправлений: 1)
Ответ на: комментарий от Kolins

на owrt делаешь bridge между интерфейсом модема и eth портом,

И что дальше делать? Ну будет у меня провайдерский ip-адрес на eth одноплатника. А какой адрес назначать на eth настольного компа? Особенно учитывая что провайдерский адрес динамический.

watchcat382
() автор топика
Ответ на: комментарий от anonymous

Это точно был активный кабель с усилителями

Я не разбирал эти коробочки,не знаю что там внутри. Но если на дальний конец подключается питание то наверно не просто так.

watchcat382
() автор топика
Ответ на: комментарий от ValdikSS

USB-фреймы и PPP-фреймы сильно отличаются по таймингам.

В смысле что USB более критично к задержкам? Так на 100 мбит эзернете они маленькие. Пишут что даже флэшки читаются через такое подключение. А поток данных с модема явно существенно меньше.

Не вижу, почему это не должно работать.

Если в одноплатнике будет бридж то максимум что получится это получить выданные провайдером ip-адрес на eth интерфейсе. А какой адрес присваивать eth-интерфейсу настольного компа? И что писать в таблице роутинга? Учитывая что провайдер выдает не сеть,а один IP-адрес. В том-то и дело что в нескольких местах на форумах где обсуждение дошло до конкретных настроек - работающую конфигурацию так и не получили. Вот для кабельных провайдеров,раздающих интернет в виде PPPoE - да,получается. Потому что конец PPPoE линка оказывается на настольном компе,что и требуется. Так что пока оказалось что usbip проще всего настраивается и вполне работает.

watchcat382
() автор топика
Ответ на: комментарий от ValdikSS

Итого: все входящие пакеты от модема, предназначеные на PPP-адрес, маршрутизируются вашему компьютеру напрямую, а от вашего компьютера пересылаются напрямую в PPP-интерфейс.

Вот именно такой рецепт попадался на одном из форумов. Один человек говорил что должно работать, второй повторить не смог. Я тоже попробую если usbip будет работать плохо.

Вот например одна из попыток написать хитрый роутинг,безуспешная: https://forum.openwrt.org/t/bridge-mode-lte-usb-modem/35974/

А тут говорят что такое могут только модемы,поддерживающие специальную возможность IP passthrough https://forum.openwrt.org/t/lte-modem-ip-passthrough-by-mac-address/191317

watchcat382
() автор топика
Последнее исправление: watchcat382 (всего исправлений: 3)
Ответ на: комментарий от mky

А на ppp под линуксом может быть динамический ip-адрес?

Почему нет? Вот например у меня прямо сейчас такой адрес выдан оператором:

 sudo ifconfig ppp0

ppp0: flags=4305<UP,POINTOPOINT,RUNNING,NOARP,MULTICAST>  mtu 1500
        inet 10.68.49.93  netmask 255.255.255.255  destination 10.64.64.64
        ppp  txqueuelen 3  (Point-to-Point Protocol)
        RX packets 14018  bytes 12635065 (12.0 MiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 10815  bytes 1475483 (1.4 MiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

 sudo route -n     
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         10.64.64.64     0.0.0.0         UG    0      0        0 ppp0
10.64.64.64     0.0.0.0         255.255.255.255 UH    0      0        0 ppp0
192.168.15.0    0.0.0.0         255.255.255.0   U     0      0        0 enp2s0

Модем E3372,воткнут прямо в линуксовый комп через usb-удлинитель метров десять. Так вот 10м мне и не хватает. Хочу дальше и выше,благо есть куда.

watchcat382
() автор топика
Последнее исправление: watchcat382 (всего исправлений: 1)
Ответ на: комментарий от ValdikSS

USB-фреймы и PPP-фреймы сильно отличаются по таймингам.

Тем не менее среди промышленного оборудования есть концентраторы,позволяющие подключать usb устройства через ip. Вот например: https://www.distkontrol.com/catalog/usb-over-ip/usb-over-ip-4/usb-4/ Цена правда тоже промышленная :(

watchcat382
() автор топика
Ответ на: комментарий от mky

А на ppp под линуксом может быть динамический ip-адрес?

Ну было вот такое, но ЕМНИП оно дальше стороннего патча не ушло(надо в код смотреть, а мне лень).

P.S. Ссылка может не открыться, забанено с той стороны, использовать трехбуквенное лекарство, если кому интересно

Pinkbyte ★★★★★
()
Ответ на: комментарий от watchcat382

Адрес в PPP по умолчанию выдается на всё время сессии через IPCP. Сменить его в общем случае можно только разрывом сессии и подключением заново(если нет статической привязки на стороне сервера). DHCP поверх PPP не используется, это мало кому нужная экзотика - например для таких извращений, которые предлагают ТСу. Хотя в самом DHCP можно передать кучу параметров, поболее чем в IPCP, особого применения эта идея не нашла.

Pinkbyte ★★★★★
()