Помогите в настройке сетей, Настройка GPRS, автоматический выбор провайдера, выбор SIM-карты

Добрый день, прошу помочь с настройкой сетевых интерфейсов контроллера.

ETH0 - DHCP без раздачи интернета для подключения клиентов. IP адрес в этой сети должен быть 192.168.0.100 и возможность подключения к mosquitto от подключенных устройств.

ETH1 - Подключение к интернету, если возможно и нет сим-карты.

3G - подключение к интернету, если имеется сим-карта. Есть ли возможность автоопределения настроек подключения исходя из названия провайдера? Список провайдеров ограничен. Также хотелось подключение на максимально возможной скорости.

Также хотелось ещё и OpenVPN подключение к серверу, сертификаты и т.д. будут скоро готовы без DEFAULT_ROUTE с возможностью подключения к SSH из виртуальной сети.

Прошу прислать примеры конфигов для портов или посоветовать куда копать.

Kenny, добрый день! Я правильно вас понял, что вы хотите использовать контроллер как DHCP-сервер на порту eth0?
Думаю, этат статья вам поможет: https://wirenboard.com/wiki/index.php/Wirenboard6:InstallingOnTheRemoteSite
Она в бета-версии, что-то может работать на вашем контроллере иначе чем описано, но в целом на нее можно полагаться.

Поскольку на борту контроллера полноценный Debian, можете искать в сети, как нужные вам задачи реализуются на этом дистрибутиве.

Статья довольно понятна для использования базовых соединений.
Я задам более конкретизированные вопросы:

Как сделать для PPP автоматический выбор из /etc/ppp/peers по значению названия оператора из gammu networkinfo и заранее заготовленных пиров? Имеются ли какие-либо скрипты по автоматическому подключению к интернету без ручных настроек /etc/ppp/peers, как это сделано на андройде?

Про запуск своего DHCP там описано только WiFi. Возможно ли клиентов с WiFi и eth0 объединить в один DHCP и лишить их возможности выхода в интернет через сим карту или eth1?

Как настроить очерёдность возможности выхода в интернет GSM - 1, eth1 - 2

Сети eth0+wifi, eth1 и VPN - разные сети и переход из одной в другую должен быть невозможен, как это настроить?

Как можно настроить прокидывание порта для подключения через VPN в eth0 ?

Kenny, подозреваю, что вы будете первопроходцем в решении обозначенных вами задач на нашем контроллере!
Готового скрипта для выбора настроек под конкретного оператора нет: предполагается, что контроллер настроили на объекте и SIM-карта не меняется. Если вы сможете написать что-то для решения этой задачи, попрошу вас опубликовать здесь!

DHCP на контроллере раздает dnsmasq, попробуйте настроить его, чтобы он обслуживал и нужный вам интерфейс. Мне кажется, эта документация может помочь.

Маршрутизация трафика в интернет через разные интерфейсы как раз в статье описана: вам нужно менять шлюз по умолчанию, и отслеживать активность GSM-подключения.

В общем случае маршрутизации между eth0+wifi, eth1 и VPN быть не должно. Для дополнительной фильтрации трафика и маскарадинга используйте iptables.

На всякий случай хотел бы предупредить, что контроллер Wiren Board — не маршрутизатор и не сетевой шлюз. Вы можете с его использовать в таком качестве, но для технических нужд: высокой скорости передачи трафика ожидать не придется.

Я отлично понимаю, что маршрутизация трафика не является основной функцией контроллера и быть роутером он не должен. Но это как раз и не нужно, нужно подключение самого контроллера к нескольким сетям

С eth0+wifi должны приходить клиенты mqtt либо висеть определённые клиенты с ftp
На eth1 сидит другая система диспетчеризации, ожидающая http запросы о событиях
На vpn вишу я с возможностью обратного подключения к ssh для диагностики проблем

Также подскажи пожалуйста как активировать слот SIM2 в SIM5300E

Kenny, установите SIM-карту во второй слот,
в файле /usr/lib/wb-utils/wb-gsm-common.sh поменяйте
gpio_set_value $WB_GPIO_GSM_SIMSELECT 0
на
gpio_set_value $WB_GPIO_GSM_SIMSELECT 1

Затем выполните команды
~# wb-gsm off
~# wb-gsm restart_if_broken

Модем переключится на SIM-карту во втором слоте.

Можете проверить подключение к сети провайдера командой
gammu networkinfo

Сделал автовыбор провайдеров из определённого списка провайдеров по максе из gammu networkinfo
Для каждого провайдера должен быть свой настроенный файл в /etc/ppp/peers/ и
/etc/chatscripts/

Общая суть - копирование нужных настроек в используемый файл autoprovider относительно определённого через gammu оператора.

/etc/network/interfaces

auto ppp0
iface ppp0 inet ppp
pre-up wb-gsm on; sleep 10; /etc/autoGSM.sh; sleep 5;
provider autoprovider

/etc/autoGSM.sh

#!/bin/sh
PROVIDER=gammu networkinfo | grep -o -P '(?<=\").*(?=\")' | head -n 1
echo “Deteted provider: $PROVIDER”

if [ “$PROVIDER” = ‘MTS RUS’ ]; then
echo “Using MTS”
cp /etc/ppp/peers/mts /etc/ppp/peers/autoprovider
fi;

if [ “$PROVIDER” = ‘MegaFon RUS’ ]; then
echo “Using Megafon”
cp /etc/ppp/peers/megafon2 /etc/ppp/peers/autoprovider
fi;

if [ “$PROVIDER” = ‘Beeline’ ]; then
echo “Using Beeline”
cp /etc/ppp/peers/beeline /etc/ppp/peers/autoprovider
fi;

if [ “$PROVIDER” = ‘Tele2 RU’ ]; then
echo “Using Tele2”
cp /etc/ppp/peers/tele2 /etc/ppp/peers/autoprovider
fi;
echo “Done”

/etc/autoGSM.sh должен иметь атрибуты исполняемого (755)

Данный код можно переделать под поиск кода оператора (250 01 и т.п.), расшифровку которых можно взять здесь https://ru.wammu.eu/tools/networks/?country=250 и соответственно искать настройки APN для каждого.

По настройке wlan0+eth0 отпишусь чуть позже

Супер! Спасибо!
С переключением на вторую симку получилось?

Вторая симка заработала. Разъём очень неудобно расположен и при вставке симки с родным переходником nanоSim-microSim она там застревает и ломает гнездо.

У меня упал вайфай совсем. Телефоны не видят эту точку доступа. Поэтому временно отказался от моста wlan0-eth0

ifconfig

eth0: flags=4099<UP,BROADCAST,MULTICAST>  mtu 1500
        inet 10.10.10.1  netmask 255.255.255.0  broadcast 10.10.10.255
        ether 54:10:ec:32:43:0c  txqueuelen 1000  (Ethernet)
        RX packets 0  bytes 0 (0.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 0  bytes 0 (0.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

eth1: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.0.19  netmask 255.255.255.0  broadcast 192.168.0.255
        inet6 fe80::5610:ecff:fe32:1c7c  prefixlen 64  scopeid 0x20<link>
        ether 54:10:ec:32:1c:7c  txqueuelen 1000  (Ethernet)
        RX packets 1123776  bytes 80022868 (76.3 MiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 28952  bytes 4581479 (4.3 MiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        inet6 ::1  prefixlen 128  scopeid 0x10<host>
        loop  txqueuelen 1  (Local Loopback)
        RX packets 4123214  bytes 286926622 (273.6 MiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 4123214  bytes 286926622 (273.6 MiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

wlan0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.42.1  netmask 255.255.255.0  broadcast 192.168.42.255
        inet6 fe80::56c9:dfff:fecb:86cb  prefixlen 64  scopeid 0x20<link>
        ether 54:c9:df:cb:86:cb  txqueuelen 1000  (Ethernet)
        RX packets 0  bytes 0 (0.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 0  bytes 0 (0.0 B)

iwconfig

wlan1     unassociated  Nickname:"<WIFI@REALTEK>"
          Mode:Managed  Frequency=2.412 GHz  Access Point: Not-Associated
          Sensitivity:0/0
          Retry:off   RTS thr:off   Fragment thr:off
          Encryption key:off
          Power Management:off
          Link Quality:0  Signal level:0  Noise level:0
          Rx invalid nwid:0  Rx invalid crypt:0  Rx invalid frag:0
          Tx excessive retries:0  Invalid misc:0   Missed beacon:0

eth0      no wireless extensions.

eth1      no wireless extensions.

sit0      no wireless extensions.

wlan0     IEEE 802.11b  ESSID:"abzpro"  Nickname:"<WIFI@REALTEK>"
          Mode:Master  Frequency:2.412 GHz  Access Point: 54:C9:DF:CB:86:CB
          Sensitivity:0/0
          Retry:off   RTS thr:off   Fragment thr:off
          Encryption key:off
          Power Management:off
          Link Quality:0  Signal level:0  Noise level:0
          Rx invalid nwid:0  Rx invalid crypt:0  Rx invalid frag:0
          Tx excessive retries:0  Invalid misc:0   Missed beacon:0

lo        no wireless extensions.

lsusb

Bus 002 Device 009: ID 1e0e:0020 Qualcomm / Option
Bus 002 Device 003: ID 0bda:b720 Realtek Semiconductor Corp.
Bus 002 Device 002: ID 0424:2514 Standard Microsystems Corp. USB 2.0 Hub
Bus 002 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub

uname -a

Linux wirenboard-AVBQBQ46 4.9.22-wb6 #2 SMP Mon Jul 23 13:07:52 UTC 2018 armv7l GNU/Linux

hostapd.conf

interface=wlan0
#driver=nl80211 # оставьте эту строку закомментированной
ssid=abzpro
channel=1

wpa=2
wpa_passphrase=123123123
wpa_key_mgmt=WPA-PSK
wpa_pairwise=TKIP CCMP
rsn_pairwise=TKIP CCMP
ignore_broadcast_ssid=0

interfaces

# /etc/network/interfaces -- configuration file for ifup(8), ifdown(8)

# The loopback interface
auto lo
iface lo inet loopback

# Wireless interfaces
allow-hotplug wlan0

#iface wlan0 inet dhcp
#    wpa-ssid wifiessid
#    wpa-psk wifipassword

iface wlan0 inet static
	hostname AbzPro
	address 192.168.42.1
	network 192.168.42.0
	netmask 255.255.255.0


auto eth0
iface eth0 inet static
        address 10.10.10.1
        netmask 255.255.255.0
        network 10.10.10.0
        broadcast 10.10.10.255
		#hostname AbzPro

allow-hotplug eth1
iface eth1 inet dhcp
   pre-up wb-set-mac
   #hostname AbzPro
   metric 10


## The gsm pptp interface
## vvv uncomment block to enable

auto ppp0
iface ppp0 inet ppp
   	pre-up wb-gsm restart_if_broken; sleep 10; /etc/autoGSM.sh; sleep 5;
    provider autoprovider


    iface lo inet loopback

    # Wireless interfaces
    allow-hotplug wlan0

    #iface wlan0 inet dhcp
    #    wpa-ssid wifiessid
    #    wpa-psk wifipassword

    iface wlan0 inet static
      address 192.168.42.1
      network 192.168.42.0
      netmask 255.255.255.0


    auto eth0
    iface eth0 inet static
            address 10.10.10.1
            netmask 255.255.255.0
            network 10.10.10.0
            broadcast 10.10.10.255
    		hostname AbzPro

    allow-hotplug eth1
    iface eth1 inet dhcp
       pre-up wb-set-mac
       hostname AbzPro
       metric 10


    ## The gsm pptp interface
    ## vvv uncomment block to enable

    auto ppp0
    iface ppp0 inet ppp
       	pre-up wb-gsm restart_if_broken; sleep 10; /etc/autoGSM.sh; sleep 5;
        provider autoprovider

Добрый день! А можно попросить вас показать еще cat /etc/default/hostapd?
У вас в /etc/network/interfaces iface wlan0 дважды определяется, наверное, стоит оставить одно:
%D0%B8%D0%B7%D0%BE%D0%B1%D1%80%D0%B0%D0%B6%D0%B5%D0%BD%D0%B8%D0%B5

Видимо была ошибка вставки

# /etc/network/interfaces -- configuration file for ifup(8), ifdown(8)

# The loopback interface
auto lo
iface lo inet loopback

# Wireless interfaces
#allow-hotplug wlan0

#iface wlan0 inet dhcp
#    wpa-ssid wifiessid
#    wpa-psk wifipassword

iface wlan0 inet static
		address 192.168.42.1
		network 192.168.42.0
		netmask 255.255.255.0


auto eth0
iface eth0 inet static
        address 10.10.10.1
        netmask 255.255.255.0
        network 10.10.10.0
        broadcast 10.10.10.255

allow-hotplug eth1
iface eth1 inet dhcp
   pre-up wb-set-mac
   metric 10


## The gsm pptp interface
## vvv uncomment block to enable

auto ppp0
iface ppp0 inet ppp
   	pre-up wb-gsm restart_if_broken; sleep 10; /etc/autoGSM.sh; sleep 5;
    provider autoprovider

Точки доступа не видно
Как и с allow-hotplug wlan0 так и без этой строки
И после service networking restart

wlan0     IEEE 802.11b  ESSID:"abzpro"  Nickname:"<WIFI@REALTEK>"
          Mode:Master  Frequency:2.412 GHz  Access Point: 54:C9:DF:CB:86:CB
          Sensitivity:0/0
          Retry:off   RTS thr:off   Fragment thr:off
          Encryption key:off
          Power Management:off
          Link Quality:0  Signal level:0  Noise level:0
          Rx invalid nwid:0  Rx invalid crypt:0  Rx invalid frag:0
          Tx excessive retries:0  Invalid misc:0   Missed beacon:0

А Link Quality:0 Signal level:0 Noise level:0 точно должно быть по нулям?

Да, если к точке никто не подключался, то по нулям.
Проверьте, что /etc/default/hostapd не закомментирована строка DAEMON_CONF="/etc/hostapd.conf".

Телефоны не видели это точку доступа никогда или после изменения конфигурации?
Перезагрузка с новыми настройками Wi-Fi делается командой

service hostapd restart

/etc/hostapd.conf у вас вполне рабочий. /etc/network/interfaces – тоже.

Проверьте еще работу в режиме клиента.

Хм. Видимо “auto wlan0” нехватало. В клиенте заработал, в точке доступа также заработал.

apt-get install bridge-utils

brctl addbr br0
add bridge failed: Package not installed

Далее понимаем, что компонент не настроен в ядре

zcat /proc/config.gz | grep CONFIG_BRIDGE=
и тишина

zcat /proc/config.gz | grep CONFIG_BRIDGE_NETFILTER=
и тишина

В /lib/modules/4.9.22-wb6/kernel/net нет упоминаний о bridge
lsmod | grep bridge - также пусто

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

Заметил явный баг в restart_if_broken - невозможность нагорячую поменять симку. Вынимаешь симку, коннект падает, pppd пытается дозвониться - не получается
Вставляем симку, а pppd даже после 10 попытки не может дозвониться - результата нет,
смотрим gammu networkinfo - Can not access SIM card. Т.е. модем в ступоре и его нужно перезагружать, а wb-gsm restart_if_broken этого не делает, так как смотрит на gpio_get_value и ему неизвестно, в каком состоянии находится его порт.
В этом случае запускаем wb-gsm reset
После запуска pppd заново, конечно же срабатывает wb-gsm restart_if_broken и запускает модем. (Вопрос почему reset не запускает модем сам?)
Также не смог разобраться как же сделать триггер у ppp при пропадании коннекта

Написал в итоге скрипт /etc/init.d/autoGSM_HW.sh

#!/bin/sh
#LOGFILE=/var/log/ppp0.log

while :; do
	if [ ! -f /var/run/ppp0.pid ]; then
		#echo "`date +'%b %d %T'` restarting ppp0" >> $LOGFILE
		sh -c "ifdown ppp0; ifup ppp0"
	fi
	sleep 10
done

Можно включить логирование рестартов раскаментив пару строк.

Добавляем в автозагрузку

chmod 755 /etc/init.d/autoGSM_HW.sh
update-rc.d autoGSM_HW.sh defaults

В /etc/network/interfaces прописал ppp0 таким образом, используя && чтоб лишнего не ждать

auto ppp0
iface ppp0 inet ppp
   	pre-up wb-gsm restart_if_broken && /etc/autoGSM.sh;
    provider autoprovider

В /etc/autoGSM.sh добавил несколько строк проверки наличия сети провайдера, здесь на всякий случай оставил паузу в 10 сек

#!/bin/sh
sleep 10

PROVIDER=`gammu networkinfo | grep -o -P '(?<=\").*(?=\")' | head -n 1`


if [ "$PROVIDER" = '' ]; then
	echo "Error getting provider name"
	sh -c "wb-gsm reset"
	exit 1;
fi;

echo "Detected provider: $PROVIDER"


if [ "$PROVIDER" = 'MTS RUS' ]; then
	echo "Using MTS"
	cp /etc/ppp/peers/mts /etc/ppp/peers/autoprovider
	exit 0;
fi;
	
if [ "$PROVIDER" = 'MegaFon RUS' ]; then
	echo "Using Megafon"
	cp /etc/ppp/peers/megafon2 /etc/ppp/peers/autoprovider
	exit 0;
fi;

if [ "$PROVIDER" = 'Beeline' ]; then
	echo "Using Beeline"
	cp /etc/ppp/peers/beeline /etc/ppp/peers/autoprovider
	exit 0;
fi;

if [ "$PROVIDER" = 'Tele2 RU' ]; then
	echo "Using Tele2"
	cp /etc/ppp/peers/tele2 /etc/ppp/peers/autoprovider
	exit 0;
fi;

echo "Error, provider not in list"
exit 1;

Если скрипт выйдет с exit 1 то это вызовет ошибку в pre-up и скрипт дозвона не запустится, далее демон autoGSM_HW.sh в течении 10 сек перезапустит модем и запустит соединение ppp0 с определением провайдера и дозвоном снова

Также во всех скриптах дозвона в /etc/ppp/peers задал maxfail 3 а также прописал порт /dev/ttyACM0 и скорость 460800. Таким образом через три попытки дозвона ppp0 упадёт, далее опять будет работа демона autoGSM_HW.sh. Если указать бесконечное число попыток, то pre-up запустить лишь один раз при загрузке модема, если симку вынуть во время работы, то переподключение не произойдёт без перезагрузки модема, а ppp будет пытаться дозвониться при отсутствующей симке.

По скорости:
speedtest-cli --server 14091 - выбрал один сервер для проведения тестов
Результат:

Hosted by KRAFT-S (Samara) [287.68 km]: 144.141 ms
Download: 0.84 Mbit/s
Upload: 2.80 Mbit/s

Тоже самое с телефона
Ping - 74ms, Download 5Mbit/s, Upload 4.43 Mbit/s

Подскажите, какую скорость в peer можно устанавливать для sim5300e ? 460800 это максимум?

Переделал скрипты на MNC идентификаторы, init.d не работает нормально, выполнит while три раза и упадёт, сделал через cron с периодичностью в минуту. rc.local вообще не нашёл где лежит.

В кроне * * * * * root /etc/autoGSM_HW

#!/bin/bash
#LOGFILE=/var/log/ppp0.log

if [ ! -e /var/run/ppp0.pid ]; then
	#echo "`date +'%b %d %T'` restarting ppp0" >> $LOGFILE
	logger -i -t autoGSM_HW "Restarting ppp0"
	sh -c "ifdown ppp0; ifup ppp0"
fi

/etc/autoGSM.sh

#!/bin/bash

PORT=/dev/ttyGSM
DEFAULT_BAUDRATE=115200
REPORT_FILE=`mktemp`
declare -a gsm_dbm=("-110" "-109" "-107" "-105" "-103" "-101" "-99" "-97" "-95" "-93" "-91" "-89" "-87" "-85" "-83" "-81" "-79" "-77" "-75" "-73" "-71" "-69" "-67" "-65" "-63" "-61" "-59" "-57" "-55" "-53")
declare -a gsm_cond=("BAD" "BAD" "BAD" "BAD" "BAD" "BAD" "BAD" "BAD" "BAD" "OK" "OK" "OK" "OK" "OK" "Good" "Good" "Good" "Good" "Good" "Excellent" "Excellent" "Excellent" "Excellent" "Excellent" "Excellent" "Excellent" "Excellent" "Excellent" "Excellent" "Excellent")

if [ ! -e $PORT ]; then
	logger -i -t autoGSM "Reseting modem by pin"
	#echo "Reseting modem by pin"
	sh -c "wb-gsm reset && wb-gsm restart_if_broken; sleep 10;"
else
	#set speed
	stty -F $PORT  ${DEFAULT_BAUDRATE} -icrnl
	/usr/sbin/chat -s -r $REPORT_FILE TIMEOUT 10 ABORT "ERROR" REPORT "\r\n" "" "AT" "" OK "OK"  > $PORT < $PORT
	ANSWER=`tail -n 1 $REPORT_FILE`
	logger -i -t autoGSM "AT: $ANSWER"
	if [ "$ANSWER" = "RDY" ]; then
		/usr/sbin/chat -s -r $REPORT_FILE TIMEOUT 10 ABORT "ERROR" REPORT "\r\n" "" "AT" "" OK "OK"  > $PORT < $PORT
		ANSWER=`tail -n 1 $REPORT_FILE`
		logger -i -t autoGSM "AT: $ANSWER"
	fi
	
	if [ "$ANSWER" != "OK" ]; then
		logger -i -t autoGSM "Reseting modem by pin"
		sh -c "wb-gsm reset; wb-gsm restart_if_broken"
		sleep 10
		exit 1;
	fi
	/usr/sbin/chat -s -r $REPORT_FILE  TIMEOUT 5 ABORT "RDY" ABORT "ERROR"  ABORT "BUSY" REPORT "\r\n" "" "AT+CPIN?" OK "+CPIN: READY" > $PORT < $PORT 2>/dev/null 
	ANSWER=`tail -n 1 $REPORT_FILE`
	logger -i -t autoGSM "AT+CPIN?: $ANSWER"

	if [ "$ANSWER" != "+CPIN: READY" ]; then
		logger -i -t autoGSM  "Reseting modem by software"
		/usr/sbin/chat -s -r $REPORT_FILE  TIMEOUT 10 ABORT "ERROR" REPORT "\r\n" "" "AT+CFUN=1,1" OK "OK"  > $PORT < $PORT
		ANSWER=`tail -n 1 $REPORT_FILE`
		logger -i -t autoGSM "AT+CFUN=1,1: $ANSWER"
		sleep 11
		/usr/sbin/chat -s -r $REPORT_FILE  TIMEOUT 15 ABORT "ERROR" ABORT "BUSY" REPORT "\r\n" "" "AT" OK "RDY" > $PORT < $PORT
		ANSWER=`tail -n 1 $REPORT_FILE`
		logger -i -t autoGSM "AT: $ANSWER"
		exit 1;
	fi
	rm $REPORT_FILE
fi


/usr/sbin/chat -s  -r $REPORT_FILE TIMEOUT 1 ABORT "ERROR" ABORT "BUSY" REPORT "\r\n" "" "AT+COPS=0,0" OK "OK" > $PORT < $PORT
ANSWER=`tail -n 1 $REPORT_FILE`
logger -i -t autoGSM "AT+COPS=0,0: $ANSWER"
rm $REPORT_FILE

/usr/sbin/chat -s  -r $REPORT_FILE TIMEOUT 2 ABORT "ERROR" ABORT "BUSY" REPORT "\r\n" "" "AT+COPS?" OK "OK" > $PORT < $PORT
ANSWER=`tail -n 1 $REPORT_FILE`
logger -i -t autoGSM "AT+COPS?: $ANSWER"
rm $REPORT_FILE

if [[ "$ANSWER" =~ ^.*,[\"]{0,}([^\"\,]+)[\"]{0,},[0-9]{1,}$ ]]; 
then 
  PROVIDER_NAME=${BASH_REMATCH[1]}
  logger -i -t autoGSM "PROVIDER_NAME = $PROVIDER_NAME"
else 
  logger -i -t autoGSM "PROVIDER_NAME = ERROR"
  exit 1;
fi



/usr/sbin/chat -s  -r $REPORT_FILE TIMEOUT 1 ABORT "ERROR" ABORT "BUSY" REPORT "\r\n" "" "AT+COPS=3,2" OK "OK" > $PORT < $PORT
ANSWER=`tail -n 1 $REPORT_FILE`
logger -i -t autoGSM "AT+COPS=3,2: $ANSWER"
rm $REPORT_FILE

/usr/sbin/chat -s  -r $REPORT_FILE TIMEOUT 2 ABORT "ERROR" ABORT "BUSY" REPORT "\r\n" "" "AT+COPS?" OK "OK" > $PORT < $PORT
ANSWER=`tail -n 1 $REPORT_FILE`
logger -i -t autoGSM "AT+COPS?: $ANSWER"
rm $REPORT_FILE

if [[ "$ANSWER" =~ ^.*,[\"]{0,}([^\"\,]+)[\"]{0,},[0-9]{1,}$ ]]; 
then 
  PROVIDER_ID=${BASH_REMATCH[1]}
  logger -i -t autoGSM "PROVIDER_ID = $PROVIDER_ID"
else 
  logger -i -t autoGSM "PROVIDER_ID = ERROR"
  exit 1;
fi

/usr/sbin/chat -s  -r $REPORT_FILE TIMEOUT 1 ABORT "ERROR" ABORT "BUSY" REPORT "\r\n" "" "AT+CSQ" OK "OK" > $PORT < $PORT
ANSWER=`tail -n 1 $REPORT_FILE`
logger -i -t autoGSM "AT+CSQ: $ANSWER"


if [[ "$ANSWER" =~ ^.*\ ([0-9]{1,}),[0-9]{1,}$ ]]; 
then 
	STRENGTH=$(("${BASH_REMATCH[1]}"))
	logger -i -t autoGSM "Signal: [$STRENGTH] ${gsm_cond[$STRENGTH]} ${gsm_dbm[$STRENGTH]}dBm"
fi

if [ ! -e $(eval echo /etc/ppp/peers/$PROVIDER_ID) ]; then
	logger -i -t autoGSM "Unknown network $PROVIDER_NAME [$PROVIDER_ID], error getting apn settings"
	exit 1;
else
	logger -i -t autoGSM "Selecting /etc/ppp/peers/$PROVIDER_ID"
	cp $(eval echo "/etc/ppp/peers/$PROVIDER_ID") /etc/ppp/peers/autoprovider
	exit 0;
fi

exit 1;

/etc/network/interfaces

auto ppp0
iface ppp0 inet ppp
      pre-up wb-gsm restart_if_broken; /etc/autoGSM.sh;
      provider autoprovider

/etc/ppp/chap-secrets

# Secrets for authentication using CHAP
# client	server	secret			IP addresses
gdata * gdata *
beeline * beeline *
mts * mts *
motiv * motiv *
n@k * nok *
ntc * ntc *
skylink * skylink *
smarts * smarts *
internet * internet *
IT * IT *

Итог: не выключая контроллер можно вставить симкарту или заменить текущую, соединение поднимется автоматически. У меня также установлен openvpn в качестве клиента, и при первой же возможности контроллер остётся на связи с возможностью обратного доступа по ssh.
Используемые операторы:

25001	MTS (Mobile Telesystems)
25002	Megafon
25006	DANYCOM
25011	YOTA
25020	Tele2/ECC/Volgogr.
25023	ЗАО «Джи Ти Эн Ти» (Возможно не поддерживается, имеется спутниковая связь)
25027	Летай (ТАТТЕЛЕКОМ)
25032	WIN-Mobile
25033	СевМобайл
25034	Крымтелеком
25035	Motiv LLC Ekaterinburg-2000
25039	Ростелеком (Utel, АКОС, НСС, БайкалВестКом, Волгоград-GSM, Тамбов GSM)
25054	Таттелеком
25060	Волна мобайл
25061	Интертелеком (Республика Крым и Севастополь) (Возможно не поддерживается CDMA с точной доступа #777)
25062	Тинькофф Мобайл
25099	Beeline / OJSC Vimpel-Communications (VimpelCom)

Было отсеяно 17 операторов из 44, остальные закрылись или были выкуплены другими операторами. Если есть информация, что APN точки из /etc/chatscripts имеют неверную конфигурацию, сообщите здесь.

Результат работы из /var/log/messages

Mar  3 21:46:32 wirenboard-AVBQBQ46 user.notice autoGSM[2612]: AT: OK
Mar  3 21:46:32 wirenboard-AVBQBQ46 user.notice autoGSM[2619]: AT+CPIN?: +CPIN: READY
Mar  3 21:46:32 wirenboard-AVBQBQ46 user.notice autoGSM[2623]: AT+COPS=0,0: OK
Mar  3 21:46:33 wirenboard-AVBQBQ46 user.notice autoGSM[2627]: AT+COPS?: +COPS: 0,0,"MTS RUS",2
Mar  3 21:46:33 wirenboard-AVBQBQ46 user.notice autoGSM[2629]: PROVIDER_NAME = MTS RUS
Mar  3 21:46:33 wirenboard-AVBQBQ46 user.notice autoGSM[2632]: AT+COPS=3,2: OK
Mar  3 21:46:33 wirenboard-AVBQBQ46 user.notice autoGSM[2636]: AT+COPS?: +COPS: 0,2,"25001",2
Mar  3 21:46:33 wirenboard-AVBQBQ46 user.notice autoGSM[2638]: PROVIDER_ID = 25001
Mar  3 21:46:33 wirenboard-AVBQBQ46 user.notice autoGSM[2641]: AT+CSQ: +CSQ: 15,0
Mar  3 21:46:33 wirenboard-AVBQBQ46 user.notice autoGSM[2642]: Signal: [15] Good -81dBm
Mar  3 21:46:33 wirenboard-AVBQBQ46 user.notice autoGSM[2644]: Selecting /etc/ppp/peers/25001
3 лайка

Kenny, добрый день! Грандиозная работа! Спасибо!
По поводу CONFIG_BRIDGE_NETFILTER: когда-то он был в ядре, но. поскольку вещь практически невостребованная, мог пропасть.

Для sim5300e скорость 460800 актуальна только для последовательного подключения, через UART (/dev/ttyGSM), для коммуникации через CDC/ACM-усторйство установка скорости неактуальна, обмен данными будет на максимальной скорости.

Переименуйте пожалуйста топик. С таким названием при желании потом трудно будет найти.
Например “Скрипт для Автонастройки GSM соеднинения”