Набор в несколько соединений PPP
У меня есть несколько 3G USB-модемов. Я хотел бы, чтобы они поддерживали связь одновременно, НЕ обязательно объединяя их пропускную способность; отдельное интеллектуальное приложение будет эффективно управлять их использованием.
Однако я сталкиваюсь с проблемой настройки правильных маршрутов для интерфейсов ppp0,ppp1: когда один из них соединяется, другие записи в таблице маршрутизации обновляются, поэтому он больше не может использоваться. Если я переподключу второй, он переопределит записи маршрутизации первого. Если я делаю это снова и снова, иногда обе записи исчезают, а в редких случаях они работают хорошо.
Я пробовал оба с использованием NetworkManager, а также WVDial, но проблема появляется в обоих из них. Возможно, они оба используют один и тот же номеронабиратель PPP на бэкэнде, и именно поэтому возникает эта проблема.
Каково правильное решение, чтобы заставить их работать вместе? В долгосрочной перспективе я также хотел бы, чтобы они автоматически подключались после подключения USB.
1 ответ
Возможно, вы захотите попытаться настроить свои мобильные подключения с помощью простой настройки: установите флажок Использовать это подключение только для ресурсов в его сети, который к сожалению скрыт немного далеко:
Под настройками для вашего подключения перейдите на вкладку IPv4, нажмите кнопку Маршруты, затем установите последний флажок в этом диалоговом окне.
Не проверено, но примерно то, что должно происходить, - это то, что каждое устройство pppX должно быть включено с правильными маршрутами через сети каждого из ваших провайдеров, но маршрут по умолчанию не должен быть настроен для передачи по любому из них.
После этого вы сможете написать простой сценарий, который, например, проверяет один и тот же сервер на каждом из интерфейсов и выбирает самый быстрый для установки маршрута по умолчанию; что-то вроде:
route_candidate=$(
for iface in `ifconfig -a | grep ppp | awk '{print $1; }'`; do
echo $iface = `ping -I $iface -c 1 -q 8.8.8.8 | grep avg | awk -F/ '{print $5;}'`
done | sort -k 3 -rn | head -n 1
)
logger "Setting new route from candidate: $route_candidate"
ip route del default
ip route add default dev `echo $route_candidate | awk '{print $1;}'`
Я не проверял это полностью, но это примерно то, что нужно сделать; с добавлением или изменением использования "via what_the_default_gw_ip_is" для команды ip route add default. Запускайте это с помощью cron через регулярные промежутки времени, и у вас будет дешевая система для работы на "самом быстром" провайдере.
У меня тоже проблемы с подключением к нескольким ключам. Я могу инициализировать соединение с одним маршрутизатором за раз, но не с обоими. У вас есть возможность подключиться к Интернету или он просто не работает на втором? (пожалуйста, дайте мне знать и здесь-> Почему NetworkManager не обрабатывает более одного 3g Dongle)
Может помочь создание отдельных таблиц IP с помощью iproute2.
Отредактируйте файл
/etc/iproute2/rtc_tables
просто добавив в конце что-то вроде:
1 ppp0
2 ppp1
Перезапустите демон, чтобы загрузить новую конфигурацию. Затем вы можете использовать сценарий, который запускается при событии ip-up, например ip-up.local. Что-то вроде этого может сработать:
##export variables
export ip4_address_0=$IP4_ADDRESS_0
export iface=$IFACE
export gateway=$IP4_GATEWAY
##generate clean IP
ip=`echo "$ip4_address_0" | cut -d"." -f1-4 | cut -f 1 -d "/"`
##generate ip for subnet
baseip=`echo "$ip" | cut -d"." -f1-3`
if [[ "$iface" == "ppp0" ]] ; then
TABLE=ppp0
elif [[ "$iface" == "ppp1" ]] ; then
TABLE=ppp1
fi
##In my case I needed to add 2 defaults using weights, everything else failed
/usr/sbin/ip route add default scope global nexthop via "$gateway" dev "$iface" weight 1 nexthop via $baseip.0/24 dev "$iface" weight 2 table "$TABLE"
/usr/sbin/ip route add "$baseip.0/24" dev "iface" table "$TABLE"
/usr/sbin/ip route add default via "$gateway" dev "$iface" table "$TABLE"
/usr/sbin/ip rule add from "$ip/32" table "$TABLE"
/usr/sbin/ip rule add to "$ip/32" table "$TABLE"
Надеюсь, это поможет вам.... Может быть, вы тоже можете мне помочь ( почему NetworkManager не обрабатывает более одного 3g Dongle)