dlinyj: (Default)
[personal profile] dlinyj
В системе имеется несколько wan-интерфейсов (до десятка). При чём некоторые могут быть не подключены. Существует поднятый обратный ssh, который автоматически поднимается при разрыве.
Так же есть шанс, что в любой момент wan-соединение может быт отсоединено.

На данный момент я тестирую скорость следующим образом (python+bash)



Одна из явных проблем, что каждый раз у меня отключается соединение ssh (ssh не принципиально, может быть vpn). И при частом переключении подключиться к удалённому серверу становится просто невозможно. Резервировать одно соединение только под ssh я не могу.

Прошу совета, как сделать более элегантно, не отключая интерфейсы и не теряя соединения ssh, протестировать скорости.
Привязать ssh (vpn) соединение к одному интерфейсу не могу, так как он может быть отключен.

Вопрос к админам. Может [livejournal.com profile] casamusa подскажет что хорошее.

P.S. Чтобы не удивляло однотипность адресов - тестируются модемы.

Date: 2020-05-13 09:12 am (UTC)
From: [identity profile] casamusa.livejournal.com
У меня нет понимания зачём ты дергаешь интерфейсы ( down/up ). Что бы чистить счетчики? А модуль почему из ядра не удаляешь?
Это какая-то внутренняя магия, которую ты здесь не описал или это нужно для тестирования скорости?
Если второе, то не делай так.

Есть много вариантов.
То, что ты называешь скоростью, называется иначе. Потому что скорость интерфейса - это та скорость, которая выставлена для его работы ( 10/100/1000/10000 ).
Итак, если я правильно понял, то тебе нужно измерить текущую загрузку сетевого интерфейса.

Давай сделаем это топором и двумя скриптами:

#!/bin/bash

cat /proc/net/dev | grep наш_интерфейс | awk что-там-надо > /tmp/наш_интерфейс_раз

и второй:

#!/bin/bash

oldThroughput=$( cat /tmp/наш_интерфейс_раз )
currThroughput=$( cat /proc/net/dev | grep наш_интерфейс | awk что-там-надо )
...здесь магия вычисления...


Вариант иного топора примерно такой же, только используем
ethtool -S имяИнтерфейса

Вариант третий:
sar

Это офигенный вариант.
apt-get install sysstat
echo 'ENABLED="true"' > /etc/default/sysstat
/etc/init.d/sysstat restart

sar -n DEV 1 3
ну и дальше грепаем что надо

Еще вроде бы iftop умел отдавать в неинтерактивном режиме стату. Но не уверен.


Теперь самый главный вопрос: а чё у тебя там за линупс-то и зачем класть интерфейс в даун?

Если класть интерфейс в даун является главным условием, то...
ХЗ

Попробуй ssh-демон держать вот с такими опциями:
ClientAliveCountMax 99999
ClientAliveInterval 30
TCPKeepAlive yes

Ну или screen запускать и к нему подключаться при дисконнекте. Хотя у тебя же порты взад проброшены...

UPD: как звучит задача? Собирать текущую загрузку интерфейсов? Или как-то иначе?
Edited Date: 2020-05-13 09:14 am (UTC)

Date: 2020-05-13 09:33 am (UTC)
From: [identity profile] dlinyj.livejournal.com
Так, ты не совсем понял проблему.

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

Проблема в маршрутизации, тут я лихо плаваю и нифига не понимаю. Вот представь, у нас воткнуто n-модемов. У них абсолютно одинаковый ip-адрес, и назначает из DHCP одинаковый адрес каждому интерфейсу (тут моё изнасилование мозга). Итого у нас n интерфейсов с ip-адресом 192.168.8.100 . При чём есть шанс, что на модеме, например, кончились деньги.

Есть функция тестирования скорости, она работает и мы её не трогаем. Задача:
1. На живом интерфейсе оставить "вечный" ssh. Если он отвалился, перевесить на другой.
2. Запускать спидтест на конкретном интерфейсе (он гоняет трафик тудым-сюдым с удалённым сервером и измеряет скорости и пинги).

Поскольку я не знал как разрешить проблему одинаковых ip, маршрутизации всего этого добра, то тупо гасил интерфейсы и поднимал.

Date: 2020-05-13 10:12 am (UTC)
From: [identity profile] dlinyj.livejournal.com
Спасибо, думаю как мне может помочь.

Date: 2020-05-13 10:27 am (UTC)
From: [identity profile] juunitaki.livejournal.com
Я так понял:

1. Сконфигурировать для каждого интерфейса свой namespace.
2. Запустить, как написано, тест скорости командой "ip netns exec net1 'command'". Она, видимо, для запускаемого процесса виртуализирует сетевой стек полностью. Для этого функцию SpeedTest() придется выделить в отдельный скрипт.

Я не знаю, как могут уживаться одинаковые IP на интерфейсах. Если бы адреса были разные, то можно было бы указать отдельный маршрут на ssh-сервер через конкретный интерфейс (как делают VPN'ы - устанавливают специфический маршрут на сервер, а default gateway - через VPN), а default менять при тестировании. Или перекидывать маршрут конкретно на хост для тестирования с интерфейса на интерфейс. Ещё есть такая штука как - https://www.tldp.org/HOWTO/Adv-Routing-HOWTO/lartc.rpdb.simple.html - то есть можно сделать несколько отдельных таблиц маршрутизации и загонять пакет в свою таблицу по какому-нибудь признаку, например, по src address (обычная таблица маршрутизации учитывает только dst).
Edited Date: 2020-05-13 10:27 am (UTC)

Date: 2020-05-13 10:57 am (UTC)
From: [identity profile] dlinyj.livejournal.com
Ну вот, я тут тоже голову ломаю, поэтому сделал такой вот оверкилл.

Я вечером постараюсь попробовать этот варик, отпишусь
Edited Date: 2020-05-13 11:13 am (UTC)

Date: 2020-05-13 09:59 am (UTC)
From: [identity profile] casamusa.livejournal.com
Да, нынче всё заиграло новыми красками.
Сходу - не знаю.
1. На живом интерфейсе оставить "вечный" ssh. Если он отвалился, перевесить на другой.
Попробуй так:
отключаем старый интерфейс
поднимаем новый интерфейс
sshd reload

Ну и опции не забудь
ClientAliveCountMax 99999
ClientAliveInterval 30
TCPKeepAlive yes

В целом хз.
Если я правильно понял, то в один момент времени работает только один модем и только через него мы должны запускать проверку скорости через ssh
Следовательно мы должны иметь один и тот же ip при любых раскладах.
И этот ip не должен "уезжать" с одного модема на другой для ssh.
Отсюда мысль, что модемы должны быть в некоем пуле, который для ssh выглядит одним интерфейсом, который не падает и т.д.

Выход самый простой: используем vrrp

Date: 2020-05-13 10:11 am (UTC)
From: [identity profile] dlinyj.livejournal.com
>>запускать проверку скорости через ssh
ssh только для того, чтобы мы могли с железкой что-то делать. Проверка скорости идёт просто через tcp.

Date: 2020-05-13 10:14 am (UTC)
From: [identity profile] casamusa.livejournal.com
Да, эт я понял.

В данном случае на ум кроме vrrp ничего не идёт
Про namespace ( оратор выше ) тож вариант, но никогда глубоко не копал
Там вроде как event-модель реализована, так что вполне может и рабочий вариант.

Date: 2020-05-13 09:13 am (UTC)
From: [identity profile] t-mike.livejournal.com
попробуй ssh over sctp

Date: 2020-05-13 11:25 pm (UTC)
From: [identity profile] arush-damage.livejournal.com
Я думаю что без более детального описания конфигурации сети никто помочь не сможет.
Слишком много вопросов.
Например:
1) Почему у всех модемов один адрес?
2) ссш соединение идет вроде как через впн? А впн через модем что-ли? Или чего оно рвется? Ты вообще все интерфейсы тушишь или только ван?
3) зачем тебе переменная ЦМД? Главное ж есть и без ЦМД вызов %))) Сори, не в качестве наезда, просто глаза режет %)))

Date: 2020-05-14 07:02 am (UTC)
From: [identity profile] dlinyj.livejournal.com
1. https://dlinyj.livejournal.com/806920.html?thread=10806536#t10806536
2. Забудь про vpn. Либо ssh либо vpn. Я тушу все интерфейсы по очереди, и тестирую скорость через каждый в отдельности. Покуда идёт тест ssh должно восстановиться, но не успевает.
3. Потому что я ещё логирую использованные команды. В данном примере опущено.

Date: 2020-05-14 11:46 am (UTC)
From: [identity profile] arush-damage.livejournal.com
1) Это только часть конфигурации. По хорошему надо хотя бы вывод 'ip route' и 'ip addr' смотреть что бы понять как что работает.
2) Еще раз: там что других интерфейсов кроме модемов нет? Даже локальной сети нет? Если локальная сеть есть - зачем ты ее отключаешь?
Edited Date: 2020-05-14 11:46 am (UTC)

Date: 2020-05-14 01:04 pm (UTC)
From: [identity profile] dlinyj.livejournal.com
1. Я не знаю что ты там надеешься увидеть. Есть модемы, которые по dhcp каждый пытается настроить под себя и конкурируют. Ручками назначаю их вид.
2. Считай что нет. Я отключаю только интерфейсы модема.

Date: 2020-05-14 03:02 pm (UTC)
From: [identity profile] arush-damage.livejournal.com
1) Проблема в маршрутизации, тут я лихо плаваю и нифига не понимаю. Вот представь, у нас воткнуто n-модемов. У них абсолютно одинаковый ip-адрес, и назначает из DHCP одинаковый адрес каждому интерфейсу (тут моё изнасилование мозга). Итого у нас n интерфейсов с ip-адресом 192.168.8.100 .

Ну вот и хотелось бы понять как оно работает до того как ты начинаешь отключать интерфейсы.

Что значит из дхцп назначает адрес интерфейсу? У тебя дхцп сервер на этой же машине крутится?

У тебя там что модемный пул?

А почему на всех интерфейсах один и тот же адрес?

Как оно маршрутизирует пакеты?

А может у тебя там что-то вроде "ip unnumbered" https://www.cisco.com/c/en/us/support/docs/ip/hot-standby-router-protocol-hsrp/13786-20.html ?

Date: 2020-05-14 04:02 pm (UTC)
From: [identity profile] dlinyj.livejournal.com
Тебя видать смущает слово "модемы" и от этого тьма вопросов. И ты видимо не имел дела с lte модемами (хотя, по моему устаревшее слово "модем" тут неуместно). Представь, что мы подключаем 10 ethernet кабелей от разных провайдеров. Но адреса их маршрутизаторов одинаковые и каждый провайдер выдаёт нашему соединению один и тот же адрес.

Только при физическом подключении у нас ещё и создаётся дополнительный интерфейс и тут же провайдер по dhcp фигачит настройки и так каждый провайдер одновременно, конкурируя.
Edited Date: 2020-05-14 04:03 pm (UTC)

Date: 2020-05-14 06:05 pm (UTC)
From: [identity profile] arush-damage.livejournal.com
Какая разница модемы там, впн или еще что.

Меня смущает то что у них у всех один IP адрес. Это зачем так сделано?
Как вообще сеть работает с такими настройками?

мы подключаем 10 ethernet кабелей от разных провайдеров. Но адреса их маршрутизаторов одинаковые и каждый провайдер выдаёт нашему соединению один и тот же адрес. - и ничего работать не будет. И да, странно что все выдают на один и тот же адрес. Обычно адреса разные жаде при подключении к одному и тому же провайдеру.

Только при физическом подключении у нас ещё и создаётся дополнительный интерфейс и тут же провайдер по dhcp фигачит настройки и так каждый провайдер одновременно, конкурируя.
Ага, т.е. кроме wanX интерфейсов с одинаковыми адресами есть еще дополнительные интерфейсы с разными адресами полученными по дхцп?

Date: 2020-05-14 06:47 pm (UTC)
From: [identity profile] dlinyj.livejournal.com
>>мы подключаем 10 ethernet кабелей от разных провайдеров. Но адреса их маршрутизаторов одинаковые и каждый провайдер выдаёт нашему соединению один и тот же адрес. - и ничего работать не будет. И да, странно что все выдают на один и тот же адрес. Обычно адреса разные жаде при подключении к одному и тому же провайдеру.

Дядя, купи два модема и попробуй. Надо чтобы работало!

Ладно. Не вижу смысла дальше дискутировать, ибо мне это не помогает в решении проблемы.

January 2026

S M T W T F S
    123
456 78910
11121314151617
18192021222324
25262728293031

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Jan. 22nd, 2026 11:22 am
Powered by Dreamwidth Studios