В системе имеется несколько wan-интерфейсов (до десятка). При чём некоторые могут быть не подключены. Существует поднятый обратный ssh, который автоматически поднимается при разрыве.
Так же есть шанс, что в любой момент wan-соединение может быт отсоединено.
На данный момент я тестирую скорость следующим образом (python+bash)

Одна из явных проблем, что каждый раз у меня отключается соединение ssh (ssh не принципиально, может быть vpn). И при частом переключении подключиться к удалённому серверу становится просто невозможно. Резервировать одно соединение только под ssh я не могу.
Прошу совета, как сделать более элегантно, не отключая интерфейсы и не теряя соединения ssh, протестировать скорости.
Привязать ssh (vpn) соединение к одному интерфейсу не могу, так как он может быть отключен.
Вопрос к админам. Может
casamusa подскажет что хорошее.
P.S. Чтобы не удивляло однотипность адресов - тестируются модемы.
Так же есть шанс, что в любой момент wan-соединение может быт отсоединено.
На данный момент я тестирую скорость следующим образом (python+bash)

Одна из явных проблем, что каждый раз у меня отключается соединение ssh (ssh не принципиально, может быть vpn). И при частом переключении подключиться к удалённому серверу становится просто невозможно. Резервировать одно соединение только под ssh я не могу.
Прошу совета, как сделать более элегантно, не отключая интерфейсы и не теряя соединения ssh, протестировать скорости.
Привязать ssh (vpn) соединение к одному интерфейсу не могу, так как он может быть отключен.
Вопрос к админам. Может
P.S. Чтобы не удивляло однотипность адресов - тестируются модемы.
no subject
Date: 2020-05-13 09:12 am (UTC)Это какая-то внутренняя магия, которую ты здесь не описал или это нужно для тестирования скорости?
Если второе, то не делай так.
Есть много вариантов.
То, что ты называешь скоростью, называется иначе. Потому что скорость интерфейса - это та скорость, которая выставлена для его работы ( 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-демон держать вот с такими опциями:
Ну или screen запускать и к нему подключаться при дисконнекте. Хотя у тебя же порты взад проброшены...
UPD: как звучит задача? Собирать текущую загрузку интерфейсов? Или как-то иначе?
no subject
Date: 2020-05-13 09:13 am (UTC)no subject
Date: 2020-05-13 09:33 am (UTC)Смотри, скорости передачи данных корректно измеряются, сюда можно не лезть. Списки сетевых карточек я получаю и тут проблем нет.
Проблема в маршрутизации, тут я лихо плаваю и нифига не понимаю. Вот представь, у нас воткнуто n-модемов. У них абсолютно одинаковый ip-адрес, и назначает из DHCP одинаковый адрес каждому интерфейсу (тут моё изнасилование мозга). Итого у нас n интерфейсов с ip-адресом 192.168.8.100 . При чём есть шанс, что на модеме, например, кончились деньги.
Есть функция тестирования скорости, она работает и мы её не трогаем. Задача:
1. На живом интерфейсе оставить "вечный" ssh. Если он отвалился, перевесить на другой.
2. Запускать спидтест на конкретном интерфейсе (он гоняет трафик тудым-сюдым с удалённым сервером и измеряет скорости и пинги).
Поскольку я не знал как разрешить проблему одинаковых ip, маршрутизации всего этого добра, то тупо гасил интерфейсы и поднимал.
no subject
Date: 2020-05-13 09:44 am (UTC)https://serverfault.com/questions/705919/the-same-ip-on-multiple-interfaces?answertab=votes#tab-top
no subject
Date: 2020-05-13 09:59 am (UTC)Сходу - не знаю.
1. На живом интерфейсе оставить "вечный" ssh. Если он отвалился, перевесить на другой.
Попробуй так:
отключаем старый интерфейс
поднимаем новый интерфейс
sshd reload
Ну и опции не забудь
ClientAliveCountMax 99999
ClientAliveInterval 30
TCPKeepAlive yes
В целом хз.
Если я правильно понял, то в один момент времени работает только один модем и только через него мы должны запускать проверку скорости через ssh
Следовательно мы должны иметь один и тот же ip при любых раскладах.
И этот ip не должен "уезжать" с одного модема на другой для ssh.
Отсюда мысль, что модемы должны быть в некоем пуле, который для ssh выглядит одним интерфейсом, который не падает и т.д.
Выход самый простой: используем vrrp
no subject
Date: 2020-05-13 10:11 am (UTC)ssh только для того, чтобы мы могли с железкой что-то делать. Проверка скорости идёт просто через tcp.
no subject
Date: 2020-05-13 10:12 am (UTC)no subject
Date: 2020-05-13 10:14 am (UTC)В данном случае на ум кроме vrrp ничего не идёт
Про namespace ( оратор выше ) тож вариант, но никогда глубоко не копал
Там вроде как event-модель реализована, так что вполне может и рабочий вариант.
no subject
Date: 2020-05-13 10:27 am (UTC)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).
no subject
Date: 2020-05-13 10:57 am (UTC)Я вечером постараюсь попробовать этот варик, отпишусь
no subject
Date: 2020-05-13 11:25 pm (UTC)Слишком много вопросов.
Например:
1) Почему у всех модемов один адрес?
2) ссш соединение идет вроде как через впн? А впн через модем что-ли? Или чего оно рвется? Ты вообще все интерфейсы тушишь или только ван?
3) зачем тебе переменная ЦМД? Главное ж есть и без ЦМД вызов %))) Сори, не в качестве наезда, просто глаза режет %)))
no subject
Date: 2020-05-14 07:02 am (UTC)2. Забудь про vpn. Либо ssh либо vpn. Я тушу все интерфейсы по очереди, и тестирую скорость через каждый в отдельности. Покуда идёт тест ssh должно восстановиться, но не успевает.
3. Потому что я ещё логирую использованные команды. В данном примере опущено.
no subject
Date: 2020-05-14 11:46 am (UTC)2) Еще раз: там что других интерфейсов кроме модемов нет? Даже локальной сети нет? Если локальная сеть есть - зачем ты ее отключаешь?
no subject
Date: 2020-05-14 01:04 pm (UTC)2. Считай что нет. Я отключаю только интерфейсы модема.
no subject
Date: 2020-05-14 03:02 pm (UTC)Ну вот и хотелось бы понять как оно работает до того как ты начинаешь отключать интерфейсы.
Что значит из дхцп назначает адрес интерфейсу? У тебя дхцп сервер на этой же машине крутится?
У тебя там что модемный пул?
А почему на всех интерфейсах один и тот же адрес?
Как оно маршрутизирует пакеты?
А может у тебя там что-то вроде "ip unnumbered" https://www.cisco.com/c/en/us/support/docs/ip/hot-standby-router-protocol-hsrp/13786-20.html ?
no subject
Date: 2020-05-14 04:02 pm (UTC)Только при физическом подключении у нас ещё и создаётся дополнительный интерфейс и тут же провайдер по dhcp фигачит настройки и так каждый провайдер одновременно, конкурируя.
no subject
Date: 2020-05-14 06:05 pm (UTC)Меня смущает то что у них у всех один IP адрес. Это зачем так сделано?
Как вообще сеть работает с такими настройками?
мы подключаем 10 ethernet кабелей от разных провайдеров. Но адреса их маршрутизаторов одинаковые и каждый провайдер выдаёт нашему соединению один и тот же адрес. - и ничего работать не будет. И да, странно что все выдают на один и тот же адрес. Обычно адреса разные жаде при подключении к одному и тому же провайдеру.
Только при физическом подключении у нас ещё и создаётся дополнительный интерфейс и тут же провайдер по dhcp фигачит настройки и так каждый провайдер одновременно, конкурируя.
Ага, т.е. кроме wanX интерфейсов с одинаковыми адресами есть еще дополнительные интерфейсы с разными адресами полученными по дхцп?
no subject
Date: 2020-05-14 06:47 pm (UTC)Дядя, купи два модема и попробуй. Надо чтобы работало!
Ладно. Не вижу смысла дальше дискутировать, ибо мне это не помогает в решении проблемы.