LINUX.ORG.RU

помогите сделать редирект на 4G модем)

 , ,


1

2

добрый день, уважаемые форумчане. Прошу помощи. Задача следующая, есть роутер на прошивке OpenWRT, в этот роутер вставлен модем 4G, Huawei 3372. Роутер стоит на объекте, есть необходимость удалённо в него заходить, и не только в роутер но и в модем. Поскольку объект находится на территории без проводного интернет, модем принимает сигнал 4G и соответственно я не могу достучаться в роутер используя DynamicDNS, так как у оператора закрыты порты (по крайней мере сначала попробовал это сделать а потом прочитал что бессмысленно). Решил задачу так - этот удалённый роутер стучится на мой домашний по SSH, и я при необходимости войти в него использую проброшенный порт. Таким образом могу без проблем входить в веб-админку OpenWRT. Но возникла проблема со входом в веб-интерфейс модема. Дело в том что в нём жёстко прописан адрес 192.168.8.1, и находясь в локальной сети удалённого роутера (192.168.1.1/24) я ввожу адрес 192.168.8.1 попадаю в веб-интерфейс. Поэтому решил что используя проброс смогу заходить и в модем. пробросил вот так: ssh -g -p 10000 root@localhost -L 12345:192.168.8.1:80, посчитал что теперь «вытянув» порт 12345 в локальную домашнюю сеть я зайдя браузером на этот порт попаду в админку модема. Но нет, ввожу http://192.168.1.1:12345 надеясь таким образом попасть в веб-морду модема, но через пару секунд адрес меняется автоматически на вот такой - http://192.168.8.1/index.html - и я понимаю что так происходит потому что модем на своей заглавной странице имеет ссылки только на адрес 192.168.8.1

как быть в таком случае? можно на OpenWRT организовать openvpn-сервер и подключившись к нему оказаться в локальной сети удалённого роутера, но не хочу так. Хочу методом редиректа или роутинга это сделать, подскажите пожалуйста как)

Ответ на: комментарий от mky

это прописать на удалённом роутере? моя сеть устроена так. Есть удалённый роутер на OpenWRT с адресом 192.168.2.1, в него вставлен модем 4G имеющий адрес 192.168.8.1 (OpenWRT в сети модема выступает под адресом 192.168.8.100) далее. Удалённый роутер по autossh стучится на мой домашний роутер который имеет адрес 192.168.1.1, и уже я с винды которая имеет адрес 192.168.1.200 захожу по ssh в свой домашний роутер, даю команду ssh -p 10000 root@localhost -L 12345:192.168.8.1:80

дав эту команду, я из удалённого роутера вытягиваю в домашний роутер на порт 12345 веб-админку модема, которая на удалённом роутере 192.168.8.1:80 рассчитывал что подключившись к порту 12345 по http, будет тот же эффект если бы я находился в локальной сети удалённого роутера и зашёл бы по адресу 192.168.8.1:80 но как только я захожу на виндовс по адресу 127.0.0.1:12345, этот адрес превращается в 192.168.8.1, таким образом у меня задача сделать так, чтобы я на Виндовс написал в браузере 192.168.8.1 а попал по этому адресу на удалённый роутер (притом что адрес компьютера у меня 192.168.1.200). Возможно ли такое или нет?

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

Это как бы предупреждать надо, что «уже я с винды», а то ник «corelinux» + «Русская информация об ОС Linux».

На домашнем маршрутизаторе сделайте

iptables -t nat -I PREROUTING -p tcp -d 192.168.8.1 -s 192.168.1.0/24 --dport 80 -j DNAT --to-destination 192.168.1.1:12345

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

спасибо большое! эта команда помогла) теперь на винде набираю в браузере 192.168.8.1 и попадаю на свой проброшеный в роутер порт) тогда позвольте вам задать ещё вопрос. Если бы я порт 12345 вытянул не в роутер, а в сам ПК, т.е. хотел бы подключаться на ПК таким образом - http://127.0.0.1:12345, что в таком случае надо было бы сделать? понимаю что находясь в дистрибутиве Линукс я бы дал команду маршрутизации которую вы привели выше, только вместо 192.168.1.1 написал бы либо свой текущий IP либо localhost. А вот на винде, есть способы такой маршрутизации? понимаю что вопрос тут явно не по ОС Линукс, но может есть решение) т.е. говоря простым языком - имея IP компа например 192.168.1.100 (и на порту 12345 у меня висит проброшенный 80й порт модема) хочу набрать в браузере http://192.168.8.1:80 но при этом попасть на 192.168.1.100:12345

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

Ты бы избавлялся уже от хлама то. А то пользуешься шпионосью. Нехорошо получается.

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

я бы дал команду маршрутизации которую вы привели выше

Это не маршрутизация, это DNAT, маршрутизация подразумевается такая: default через 192.168.1.1

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

Так в оффтопике есть команды:

netsh interface portproxy add v4tov4 ...

но, насколько знаю, она редиректит только входящие соединения, то есть 192.168.8.1 должен пренадлежать винде. И тогда проще назначить 192.168.8.1 вторым (дополнительным) адресом видны и на ней запускать ssh (putty?) для проброса порта (вытягивать порт 80, а не 12345. Не помню как это пишется в настройках putty, в ssh это как-то так:

ssh -g -p 10000 root@192.168.1.1 -L 192.168.8.1:80:192.168.8.1:80

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

«netsh interface portproxy add v4tov4 …» - это помогло, но было недостаточно дать эту команду, ещё пришлось добавить ещё один IP-адрес для сетевой карты, т.е. у меня текущий 192.168.1.200, а я добавил ещё один статический, 192.168.8.1 и уже тогда дав команду netsh interface portproxy add v4tov4 удалось перенаправить порт и всё заработало. Спасибо вам большое за помощь!

у меня ещё вопрос) вообщем по данной схеме я могу заходить в удалённый роутер и теперь в модем подключенный в USB-порт этого роутера. Но к сожалению заметил что сервер dropbear который в удалённом роутере по какой-то причине частенько не отвечает. Т.е. у меня настроен autossh на домашний роутер, чтобы попасть на удалённый по ssh я даю команду ssh -p 5555 root@localhost ожидая попасть на localhost:22 в удалённом роутере на котором работает dropbear. Но к сожалению dropbear отвечает через раз и чаще всего не отвечает. Даёшь команду - она висит и никаких сообщений. Иногда бывает дал команду, а в ответ remote host closed connection

вообщем почитал в интернет - у dropbear бывают такие фокусы, хотя у меня он последней версии за лето 2020 года. Приехал на объект где стоит удалённый роутер, подключился к этому роутеру по ВайФай и с телефона пытаюсь зайти в него по SSH - не выходит. Проверил открытые порты на роутере - а 22й порт оказывается закрыт. Ладно думаю, поставлю openssh-сервер на порт 2222 и буду подключаться к нему удалённо. И действительно, openssh-server работает стабильно, отвечает всегда. Но dropbear я не исключил из системы, стало интересно что же с ним происходит. В один из моментов когда dropbear на порту 22 не отвечал, я подключился к openssh-server и проверил статус dropbear (порт 22 был закрыт) - оказывается сервер остановлен, потому и порт закрыт. Запускаю вручную - работает, перезапускаю autossh чтобы он пробросил свой 22й порт в мой домашний роутер - и могу к dropbear-у подключаться удалённо. Таким образом возник вопрос. Можно ли каким нибудь образом на удалённом роутере организовать проверку открытости порта 22 и если порт закрыт - перезапускать dropbear? допустим задав условие в cron или каким нибудь другим способом?

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

cron'у условие не задать. Он может просто дёргать какой-то скрипт. Поэтому пишите простейший скрипт, который проверяет порт и перезапускает dropbear. И настраивайте крон, чтобы он постоянно (раз в пять-десять минут) дёргал этот скрипт. Сложностей вроде нет, разве что при запуске из-под cron обычно другая переменная PATH, поэтому в скрипте лучше пишите полные пути к командам.

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

спасибо большое! в принципе, я решил сделать даже проще - у меня ведь настроен autossh, если связь с роутером разрывается то перезапускается соединение ssh через 5 минут. Подумал что можно дописать команду перезапуска dropbear в скрипт autossh, т.е. я беру перезагружаю домашний роутер, удалённый при этом теряет связь по ssh и через 5 минут перезапускает соединение. Решил в команду перезапуска соединения дописать рестарт dropbear. Но посмотрел в скрипт, он не содержит команд, он содержит по сути только саму конфигурацию для бинарного файла /opt/sbin/autossh посмотрел в этот файл, он действительно бинарный размером 22Кб, туда команду не впишешь)

скажите пожалуйста, имели ли Вы опыт работы с прошивкой OpenWRT? дело в том, что на удалённый роутер я поставил прошивку Gargoyle на самом деле а не OpenWRT (хоть она и основана на OpenWRT), и поставил её потому что есть необходимость на удалённом роутере ограничивать скорость интернета для некоторых клиентов на этом объекте. У Gargoyle есть замечательная возможность - ограничить скорость при достижении квоты трафика. К примеру если для определённого IP-адреса квота в 5 Гб, то при достижении квоты можно задать скорость 2 Мбит/сек на Download и Upload. Но мне не хочется Гаргулью, хочется своими руками всё делать. И не пойму, ограничение скорости достигается установкой дополнительных пакетов или можно решить правилами iptables ?

покажу картинку вообщем, как это выглядит на Гаргулье, а Вы если можно укажите пожалуйста направление куда копать чтобы настроить это вручную в консоли) https://ibb.co/4P5GbMg

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

С openWRT практически не работал, гаргулью вобще не видел. Просто не люблю маршрутизаторы за то, что к ним нельзя подключить монитор :) Сам всегда ставил шлюзов в инет старый комп.

По man'у получается autossh, вроде как, позволяет задатать ему переменную среды AUTOSSH_PATH, и тогда он будет вызывать не системный ssh, а что-то другое. То есть можно, чтобы он вызывал ваш скрипт, скрипт-обёртку (wrapper) https://riptutorial.com/bash/example/19492/wrapper-script . В скрипте делает что угодно, в конце что-то типа:

exec /sbin/ssh «$@»

Возможно, у вас и так уже ssh вызывается через обёртку: https://lists.ucc.gu.uwa.edu.au/pipermail/dropbear/2013q4/001475.html

Что касается полосы трафика, то она ограничивается ядром и делается это командами tc https://openwrt.org/docs/guide-user/network/traffic-shaping/packet.scheduler . Но менять правила, определяющие прохождение пакета (цепочки, очереди) должен процесс в user-space. Я не знаю как это сделано в гаргулье, но, если там месяц это не 30 дней с последнего reboot'а, именно суммарный объём с первого по первое число независимо от перезагрузок системы, то точно какой-то скрипт, постоянно накапливающий счётчик и сохраняющий его на накопитель.

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

улыбнулся) у Вас сильнейшие знания по ОС Linux, но шлюзом ставите старый компьютер) да, его можно подключить к монитору, но ведь с компьютера можно подключаться к роутеру по ssh и будет тот же результат как если бы роутер подключить к монитору) но вот в отличии от старого компьютера современные роутеры достаточно мощные для всех операций маршрутизации) да что там говорить о современных, можно взять и старый роутер, поставить на него тот же OpenWRT и делать всё что угодно) вот единственное, с чем я много раз сталкивался и столкнулся даже сейчас - это проблема соответствия команд дистрибутива Линукс с командами BusyBox в роутерах либо Optware/Entware. Сейчас решил заняться скриптом проверки порта. На обычном линукс есть несколько способов для этого, а вот на OpenWRT например команда nc -zv localhost 22 (проверка доступности порта 22) уже не работает - потому как она может принять в качестве аргументов только адрес и порт) и другие команды тоже урезаны) поэтому приходится реализовывать задачи подручными средствами)

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

квоты

Вот, читай. А если нужно просто порезать кому-то скорость либо выделить гарантированный канал или просто балансировать нагрузку (что б всем хватало) -sqm нужен тебе.

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

«поставить на него тот же OpenWRT» openwrt к слову можно вкорячить и на старый комп. Впрочем тут уместнее opensense/pfsence.

anonymous ()
Ответ на: квоты от anonymous

Вот, читай.

эту штуку ставил) но она ведь только подсчитывает трафик, хотя если вручную настраивать резку скорости по достижении квоты то можно воспользоваться чтением её логов и таким образом иметь представление о затраченом трафике. Про SQM тоже читал, сделал вывод что он используется для балансировки трафика, т.е. управляет приоретизацией но не режет скорость) а у меня задача проста - дошёл счётчик трафика за сутки до 10 Гб и нужно всем подулючённым клиентам обрезать скорость до 2 Мбит/сек)

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

но ведь с компьютера можно подключаться к роутеру по ssh

Это когда всё хорошо. А когда посыпался накопитель, а когда нет логина/пароля к компам... Я за 25 лет линукса много видел. И видил одного фаната, который перешивал роутеры аsus. Они работали, но изредка зависали. Через год борьбы появилась сцепка из двух роутеров, перезагружающих друг-друга. Через полгода и она зависла :)

Когда встаёт задача — «интернет здесь и сейчас» из того что есть, старое железо мне оживить легче, чем роутер.

но вот в отличии от старого компьютера современные роутеры достаточно мощные

Шейпинг трафика тоже достаточно мощная задача. А «старый комп» это расплывчатое понятие. Когда-то это были i80486, а сейчас Core2Duo можно считать старым. ИМХО, если комп отработал 5+ лет без нареканий, он ещё 5 лет отработает.

взять и старый роутер, поставить на него тот же OpenWRT и делать всё что угодно

и можно сразу споткнуться на простейшей задачи — usb-камера+motion, чтобы видить, кто в угол с маршрутизатором лазит...

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

и можно сразу споткнуться на простейшей задачи — usb-камера+motion

почему споткнуться?) ведь к usb-порту роутера можно подключить камеру и наблюдать)

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

Сколько usb-портов у маршрутизатора? Скольо на них он даст в сумме питания? Я, допустим, сталкивался с преобразователем PAL->usb котроый не работал при напряжении на usb меньше 4.85 В. Как бы не по стандарту, но у PC блок питания обыно даёт где-то 5.05 В, и всё хорошо. А у маршрутизатора какое напряжение на usb, если нагрузить флешкой и 3g-модемом?

Сколько usb-контроллеров (хабов) у маршрутизатора? Кажется что 480 Мбит это много, но камера хочет 30 fps и забирает много от этой полосы. Камеру лучше вешать одну на контроллер. ЕМНИП, уже P4 на интеловских чипсетах имели 3 usb хаба на материнке.

Линукс — серверная ОС, имея её всё время хочется получить от маршрутизатора ещё какие-то функции сервера. Производители мыльниц-роутеров этим тоже страдают, допустим функция принт-сервера. Но лучше маршрутизатор+сервер реализовывать на нормальном компе.

mky ★★★★★ ()
Для того чтобы оставить комментарий войдите или зарегистрируйтесь.