Как динамически менять шлюз по умолчанию?

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

5ec2f07453d21800964275.jpeg

Каждый модем при подключении создаёт eth-интерфейс с ip-адресом 192.168.8.100 и является шлюзом 192.168.8.1. И конфигурирует по dhcp все настройки. То есть у нас есть куча одинаковых сетевых интерфейсов с одинаковыми ip-адресами и одинаковыми шлюзами по умолчанию.

Вручную меняю ip-адреса на сетевых интерфейсах по следующей схеме.

5ec2f133806c2911064851.jpeg

Далее работаю следующим образом с модемами:

for iface in network_list:
  os.system("sudo ip route flush all") #удаляем все маршруты
#добавляем маршрут через текущий интерфейс
  os.system("sudo route add default gw 192.168.8.1 " + iface)   
#добавляем DNS-сервр  
  os.system("sudo bash -c 'echo nameserver 192.168.8.1 > /etc/resolv.conf'")
#что-то делаем нужное нам
  SpeedTest() 
  SaveResult()


И столкнулся с проблемой, что не всегда срабатывает такой подход. Почему-то сеть не всегда поднимается. И главное, ладно бы стабильно не работало бы. А то, то срабатывает такой подход, то нет.
Что я делаю не так, что не учитываю, что ещё стоит добавить или изменить? Приму любые рекомендации!

З.Ы. Это в некотором смысле является продолжением вопроса Как автоматически протестировать скорость на нескольких wan-интерфейсах, не теряя соединение ssh?
  • Вопрос задан
  • 516 просмотров
Пригласить эксперта
Ответы на вопрос 4
@Karpion
Каждый модем при подключении создаёт eth-интерфейс с ip-адресом 192.168.8.100 и является шлюзом 192.168.8.1. И конфигурирует по dhcp все настройки.
Возможно, этот параметр можно как-то изменить - отконфигурировать модем так, чтобы он на USB-соединении (ЕВПОЧЯ) делал другие IP-адреса.

os.system("sudo bash -c 'echo nameserver 192.168.8.1 > /etc/resolv.conf'")
Зачем каждый раз перезаписывать nameserver?

Почему-то сеть не всегда поднимается. И главное, ладно бы стабильно не работало бы. А то, то срабатывает такой подход, то нет.
Если Вы это делаете удалённо (по SSh), то команды изменения настроек д.б. в пакете (командном файле); и выполняться пакет должен оторванно от терминала (nohup на весь пакет. Если не так - то выполнение команд может прерваться, особенно если происходит вывод на терминал какого-то сообщения.

Приму любые рекомендации!
Поднять несколько вирт.машин. В каждую пробросить свой USB-порт. И тестировать скорость отдельно для каждой вирт.машины.
(Я не страдаю извращениями - я ими наслаждаюсь.)
Ответ написан
Комментировать
nero211
@nero211
А если не изобретать велосипед и воспользоваться практически любым интернет- шлюзом (pfSense/икс/kerio) на котором уже настроить мультиван и в зависимости от необходимости переключаться между сетями.
Ответ написан
Комментировать
shambler81
@shambler81 Куратор тега Linux
Давайте с начала, зачем именно вам сее художество, сдается мне что можно все решить другим способом.
Что и зачем вы делаете. Почему один интерфейс? и тд.
Возможно будет предложено куда более эффективное решение
Ответ написан
TerAnYu
@TerAnYu
Системный администратор
Может быть такой подход вам подойдёт?
Изолирование приложения с IP-адресом из VPN другой...
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы