551

(31 odpowiedzi, napisanych Oprogramowanie / Software)

Kompilacja systemu zakończyła się powodzeniem. Tryb "failsafe" zaczął działać tylko z przycisku "reset".

Do dalszego składania swoich paczek wolałbym jednak skorzystać z image buildera - jest to dla mnie dużo prostsze narzędzie.
Które z stworzonych plików powinienem do niego przenieść?

Wstępnie przeniosłem:

./build_dir/target-mips_24kc_musl-1.1.16/linux-ar71xx_generic/tl-mr3420-v2-kernel.bin

...ale niestety, w takiej konfiguracji router po uruchomieniu ciągle się resetuje

552

(31 odpowiedzi, napisanych Oprogramowanie / Software)

Cezary napisał/a:

Przerób sobie /etc/rc.button/failsafe tak żeby rozróżniał przyciski.

Rozumiem, że cały czas mówisz o kompilatorze?

nano ./package/base-files/files/etc/rc.button/failsafe

Kod:

#!/bin/sh

if [ "$BUTTON" = "reset" ]; then
  [ "${TYPE}" = "switch" ] || echo ${BUTTON} > /tmp/failsafe_button

fi

return 0

Czy to powinno załatwić sprawę?

553

(31 odpowiedzi, napisanych Oprogramowanie / Software)

Jeśli teraz przez failsafe będę musiał się przesiąść z imagebuildera na kompilator, chciałem móc używać go zarówno dla TL-MR3420v2 jak i AC1750v5 (bez podstawiania na przemian zawartości folderu "files"). W przypadku imagebuildera robiłem to tak:

make image PROFILE="tl-mr3420-v2" FILES="files/tl-mr3420-v2/" PACKAGES="..."
make image PROFILE="archer-c7-v5" FILES="files/archer-c7-v5/" PACKAGES="..."

Czy polecałbyś mi pobrać dwa razy środowisko, aby nie przełączać się pomiędzy wersjami oprogramowania? Nie byłoby to problematyczne?

Czy wiesz może jak pozbyć się z  trybu failsafe przycisku WPS?

554

(31 odpowiedzi, napisanych Oprogramowanie / Software)

Cezary napisał/a:

Nie modyfikuj skryptów tylko ustaw w .configu odpowiednią opcję kompilacji.

Ponieważ w pliku konfiguracyjnym znalazłem tylko:

 580: # CONFIG_TARGET_PREINIT_DISABLE_FAILSAFE is not set
 583: # CONFIG_TARGET_PREINIT_SUPPRESS_FAILSAFE_NETMSG is not set
3055: # CONFIG_PACKAGE_luci-mod-failsafe is not set

Powtórzę, że zależy mi na działaniu failsafe tylko z przycisku reset. W pliku konfiguracyjnym nie ma opcji wyłączenia procedury "failsafe" dla przycisku WPS, dlatego zależało mi wyeliminować go ze skryptów rozruchowych.

Cezary napisał/a:

Tylko po skoro i tak w sdk zbudujesz ten obraz?

Powiedz mi proszę, czy w pliku .config tak jak w przypadku imagebuildera jestem w stanie określić ścieżkę do folderu "files" inną niż domyślna ("./files/")?

555

(31 odpowiedzi, napisanych Oprogramowanie / Software)

Cześć, wczoraj uruchomiłem kompilowanie się systemu. W tym celu przesiadłem się na mojego testowego TL-MR3420v2. Wszystkie ustawienia w defaulcie, aby sprawdzić czy to zadziała - obraz skompilował się prawidłowo po kilku godzinach. Chciałem przejść teraz do próby kompilacji obrazu, w którym przycisk WPS nie będzie brał udziału w procedurze "failsafe". Znalazłem skrypty startowe "failsafe" w kompilatorze pod ścieżką:

./package/base-files/files/lib/preinit/

W nim następujące pliki:

02_default_set_state
10_indicate_failsafe
10_indicate_preinit
10_sysinfo
30_failsafe_wait
40_run_failsafe_hook
50_indicate_regular_preinit
70_initramfs_test
80_mount_root
81_urandom_seed
99_10_failsafe_login
99_10_run_init

Zainteresował się kodem pochodzącym z pliku "30_failsafe_wait". Nie wiem za bardzo, które linijki kodu powinienem zmodyfikować, aby wyeliminować przycisk WPS z procedury "failsafe"

#!/bin/sh
# Copyright (C) 2006-2010 OpenWrt.org
# Copyright (C) 2010 Vertical Communications

fs_wait_for_key () {
    local timeout=$3
    local timer
    local do_keypress
    local keypress_true="$(mktemp)"
    local keypress_wait="$(mktemp)"
    local keypress_sec="$(mktemp)"
    if [ -z "$keypress_wait" ]; then
        keypress_wait=/tmp/.keypress_wait
        touch $keypress_wait
    fi
    if [ -z "$keypress_true" ]; then
        keypress_true=/tmp/.keypress_true
        touch $keypress_true
    fi
    if [ -z "$keypress_sec" ]; then
        keypress_sec=/tmp/.keypress_sec
        touch $keypress_sec
    fi

    trap "echo 'true' >$keypress_true; lock -u $keypress_wait ; rm -f $keypress_wait" INT
    trap "echo 'true' >$keypress_true; lock -u $keypress_wait ; rm -f $keypress_wait" USR1

    [ -n "$timeout" ] || timeout=1
    [ $timeout -ge 1 ] || timeout=1
    timer=$timeout
    lock $keypress_wait
    {
        while [ $timer -gt 0 ]; do
            echo "$timer" >$keypress_sec
            timer=$(($timer - 1))
            sleep 1
        done
        lock -u $keypress_wait
        rm -f $keypress_wait
    } &

    [ "$pi_preinit_no_failsafe" != "y" ] && echo "Press the [$1] key and hit [enter] $2"
    echo "Press the [1], [2], [3] or [4] key and hit [enter] to select the debug level"
    # if we're on the console we wait for input
    {
        while [ -r $keypress_wait ]; do
            timer="$(cat $keypress_sec)"

            [ -n "$timer" ] || timer=1
            timer="${timer%%\ *}"
            [ $timer -ge 1 ] || timer=1
            do_keypress=""
            {
                read -t "$timer" do_keypress
                case "$do_keypress" in
                $1)
                    echo "true" >$keypress_true
                    ;;
                1 | 2 | 3 | 4)
                    echo "$do_keypress" >/tmp/debug_level
                    ;;
                *)
                    continue;
                    ;;
                esac
                lock -u $keypress_wait
                rm -f $keypress_wait
            }
        done
    }
    lock -w $keypress_wait

    keypressed=1
    [ "$(cat $keypress_true)" = "true" ] && keypressed=0

    rm -f $keypress_true
    rm -f $keypress_wait
    rm -f $keypress_sec

    return $keypressed
}

failsafe_wait() {
    FAILSAFE=
    [ "$pi_preinit_no_failsafe" == "y" ] && {
        fs_wait_for_key "" "" $fs_failsafe_wait_timeout
        return
    }
    grep -q 'failsafe=' /proc/cmdline && FAILSAFE=true && export FAILSAFE
    if [ "$FAILSAFE" != "true" ]; then
        pi_failsafe_net_message=true
        preinit_net_echo "Please press button now to enter failsafe"
        pi_failsafe_net_message=false
        fs_wait_for_key f 'to enter failsafe mode' $fs_failsafe_wait_timeout && FAILSAFE=true
        [ -f "/tmp/failsafe_button" ] && FAILSAFE=true && echo "- failsafe button "`cat /tmp/failsafe_button`" was pressed -"
        [ "$FAILSAFE" = "true" ] && export FAILSAFE && touch /tmp/failsafe
    fi
}

boot_hook_add preinit_main failsafe_wait

Czy tak skompilowany system jestem w stanie użyć w imagebulderze, aby następnie w łatwy sposób móc modyfikować w nim pliki systemowe oraz zainstalowane paczki?

556

(31 odpowiedzi, napisanych Oprogramowanie / Software)

Cezary napisał/a:

o tym mówię: http://eko.one.pl/?p=openwrt-kompilacja

Zanim zapoznam się z tym artykułem sprawdziłem jeszcze działanie failsafe będąc podłączony pod serial port. Działa on zarówno na przycisku WPS jak i przycisku reset.

[    5.990354] IPv6: ADDRCONF(NETDEV_UP): eth0: link is not ready
Press the [f] key and hit [enter] to enter failsafe mode
Press the [1], [2], [3] or [4] key and hit [enter] to select the debug level
[    7.004199] eth0: link up (1000Mbps/Full duplex)
[    7.009182] IPv6: ADDRCONF(NETDEV_CHANGE): eth0: link becomes ready
- failsafe button wps was pressed -
- failsafe -

Wnioskuję, że czeka on ok. 1 sekunde na wciśnięcie przycisku WPS lub reset. Czy nie mogę tego czasu skrócić do zera lub najlepiej usunąć przycisk WPS z tej procedury w jakimś systemowym skrypcie? W ten sposób nie pozbawiałbym się trybu failsafe, a mógłbym go uruchamiać poprzez przycisk reset. Miałbym jeden wspólny firmware do wszystkich modemów, a WPS to byłaby kwestia tylko pliku konfiguracyjnego

557

(31 odpowiedzi, napisanych Oprogramowanie / Software)

Cezary napisał/a:

tylko opcja kompilacji do ustawienia w .config.

Nie bardzo rozumiem o jakim "ustawieniu w .config" mówisz. Jest to jakiś plik imagebuildera?

Cezary napisał/a:

Bez failsafe serial będzie działał, ale nie wejdziesz do obrazu jak coś popsujesz

Ale normalnie będę mógł się poruszać po katalogach systemu przez serial port i wgrać firmware przez np. pendrive?

558

(31 odpowiedzi, napisanych Oprogramowanie / Software)

Cezary napisał/a:

pozbawiasz się największej zalety openwrt - możliwości wejścia w tryb awaryjny i poprawy jak coś się zepsuło.

Od tego zostawiłbym sobie serial port w płycie PCB - rozumiem, że bez failsafe będzie on nadal działał?

Cezary napisał/a:

Skompiluj sobie system wywalając failsafe z obrazu (to opcja kompilacji jest)

Zbudowałem to tak i niestety router cały czas wchodzi w ten tryb.

make image PROFILE="archer-c7-v5" PACKAGES="-failsafe ..."

559

(31 odpowiedzi, napisanych Oprogramowanie / Software)

Masz rację. Dodanie takiej instrukcji warunkowej rozwiązuje problem:

if grep WPS /sys/kernel/debug/gpio | grep "in  lo" > /dev/null; then
  ACTION="pressed"
elif grep WPS /sys/kernel/debug/gpio | grep "in  hi" > /dev/null; then
  ACTION="released"
else
  ACTION="fail"
fi

Teraz po wciśnięciu i przytrzymaniu przycisku WPS, a następnie włączeniu routera skrypt wps startuje z /etc/rc.local sprawdzając stan przycisku ;-)

Wyczyszczam plik /etc/rc.button/wps z całego kodu (aby wyeliminować wszystkie rzeczy, które on wykonuje) i zapisuje. Uruchamiam router z zasilania. Podczas uruchamiania naciskam pulsacyjnie przycisk WPS - po chwili dioda zasilania na routerze zaczyna bardzo szubko migać, a sam router się nie uruchamia.

560

(31 odpowiedzi, napisanych Oprogramowanie / Software)

Tak, ale uruchomienie go z /etc/rc.local

sh /etc/rc.button/wps

powoduje, że zmienne $BUTTON, $ACTION i $SEEN nie mają żadnych wartości, więc wykonanie tego skryptu nie wnosi żadnych zmian. W dodatku podczas uruchamiania się routera, gdy nacisnę kilka razy przycisk WPS router nie uruchomi się już. Trzeba go ponownie zresetować

561

(31 odpowiedzi, napisanych Oprogramowanie / Software)

Cześć,

W Archer C7 AC1750 posiadam przycisk WPS, który chciałem obsługiwać jako przełącznik ON (wciśnięty) i OFF (wyciśnięty). W /etc/rc.button/wps umieściłem prosty skrypt zapalający i gaszący diodę oraz podnoszący WiFi:

#!/bin/sh

if [ "$ACTION" = "pressed" ]; then
  echo "255" > /sys/devices/platform/leds-gpio/leds/archer-c7-v5:green:wps/brightness

  uci set wireless.radio0.disabled=1
  uci set wireless.radio1.disabled=1
  uci commit wireless
  wifi

elif [ "$ACTION" = "released" ]; then
  echo "0" > /sys/devices/platform/leds-gpio/leds/archer-c7-v5:green:wps/brightness
  
  uci set wireless.radio0.disabled=0
  uci set wireless.radio1.disabled=0
  uci commit wireless
  wifi
  
fi

return 0

Wszystko działa znakomicie, ale jeśli wymienię ten przycisk na przełącznik ON/OFF w płycie PCB pojawi się problem. Jeśli wciskam i trzymam przycisk WPS, a następnie włączam router - po uruchomieniu się urządzenia dioda WPS nie zapala się... Skrypt /etc/rc.button/wps nie jest w takiej sytuacji wykonywany.

Myślałem o ręcznym uruchomieniu tego skryptu z /etc/rc.local ale w jaki sposób mogę sprawdzić jego stan: wciśnięty czy nie? Zmienna $SEEN w obydwu sytuacjach zwraca wartość ok. 42949424 sekund.

Udało mi się wypracować pewną metodę. W jednym źródle wan zainstalowałem kartę sim, w której skończył się pakiet Internetu. Oczywiście MWAN3 pokazuje to źródło jako online i jest niestety gotowy przekierować ruch na to łącze.

Wpisując w konsoli - źródło działa przy wielkości 2kB (16kb):

# ping -w 3 -s 2048 -I eth2 8.8.8.8
PING 8.8.8.8 (8.8.8.8): 2048 data bytes
2056 bytes from 8.8.8.8: seq=0 ttl=122 time=714.805 ms
2056 bytes from 8.8.8.8: seq=1 ttl=122 time=761.825 ms
2056 bytes from 8.8.8.8: seq=3 ttl=122 time=723.425 ms

--- 8.8.8.8 ping statistics ---
3 packets transmitted, 3 packets received, 0% packet loss

Następnie zwiększam rozmiar do 3kB (24kb):

# ping -w 3 -s 3072 -I eth2 8.8.8.8
PING 8.8.8.8 (8.8.8.8): 3072 data bytes

--- 8.8.8.8 ping statistics ---
3 packets transmitted, 0 packets received, 100% packet loss

Szacuje, że prędkość łącza przy tym "lejku" to max. 24kb/s. Chciałbym ignorować takie łącze już na poziomie MWAN3. Na stronie (link poniżej) znalazłem konfigurację z wieloma nieznanymi mi parametrami nie podawanymi na tym forum oraz oficjalnym forum OpenWRT:

Postanowiłem wprowadzić jej do swojej konfiguracji:

...
config interface 'wanX'
        ...
        option size '3072'
        ...
...

Niestety, to nie działa. Po wprowadzeniu rozmiaru ping łącze w MWAN3 rozpoznawane jest dalej jako online.

a czy pod samym OpenWRT te urządzenia nie zgłaszają się czymś wyróżniającym je między sobą np. jakieś ID?

Jakim poleceniem mogę zmienić nazwę interface np. eth2 na eth10?

Cześć,

Pod swoim routerem posiadam aktualnie podłączone trzy modemy Huawei E3372h-153. Każdy z nich ma identyczny Mac Address - 0C:5B:8F:27:9A:64. Zmiana tego adresu wymagałaby kompilacji jądra w modemie, dlatego wolałbym zostawić to jako ostateczność.

Modemy zgłaszają się w systemie jako eth2, eth3 oraz eth4. Problem polega na tym, że wystarczy zresetować lub odłączyć jeden z tych modemów np. eth2 i po ponownym uruchomieniu kolejność modemów jest inna. Chciałem statycznie ustawić te interface, aby każdy z tych modemów zawsze zgłaszał się pod tą samą nazwą. Szukałem informacji na ten temat na kilku forach, ale za każdym razem dotyczyła statycznego ustawienia adresu IP.

Proszę o pomoc.

566

(24 odpowiedzi, napisanych Oprogramowanie / Software)

Cześć jaros85, przeglądając to forum wpadłem na Twój temat i mam chyba pewne doświadczenia, z którym chciałbym się podzielić.


W pierwszej sprawie to konfiguracja mwan3. Nie podawaj żadnego źródła do pingowania hosta - wtedy mwan3 będzie brał pod uwagę tylko stan z opcji initial_state, która jest online. Będzie się zgłaszał ten WAN jako "online and tracking is not enabled" oraz WebGUI jako "Status: Wyłączony" - nie ważne czy masz aktualnie aktywną sesję w Aero2, czy nie oraz czy działa na karcie Aero2 dostęp do Internetu czy nie - interfejs zawsze będzie uznawany za działający, dlatego uważam że nie warto używać go w "Load Balancingu" z innym interfejsem o tej samej metryce oraz na pewno zastosować go jako ostatnią metrykę w failoverze.

# nano /etc/config/mwan3
...
config interface 'wan_aero2'
        option enabled '1'
        option initial_state 'online'
        #list track_ip '8.8.8.8' <--- zakomentować
        option family 'ipv4'
        option flush_conntrack 'never'
        
...

Potwierdź te ustawienia poprzez poniższą komendę i zrestartuj usługę:

# uci commit mwan3
# mwan3 restart

Następnie trzeba wyskrobać skrypt w bashu uruchamiany przy starcie routera i działający w tle (np. /etc/rc.local):

# Put your custom commands here that should be executed once
# the system init finished. By default this file does nothing.

sh /root/aero2_reset.sh &

exit 0

Musiałby działać na zasadzie nieskończonej pętli, w której będzie sprawdzany brak dostępu do Internetu na interfejsie Aero2. Jeśli taka sytuacja nastąpi skrypt powinien zresetować ten interfejs i nawiązać połączenie od nowa. Utwórz plik /root/aero2_reset.sh

#!/bin/sh


# Interfejs logiczny (np. wan, wan2, aero2, mobile)
INTERFACE_LOGICAL="wan_aero2"

# Interfejs fizyczny (np. eth2, wwan0)
INTERFACE_PHYSICAL="wwan0"

# Szybkosc dzialania (np. od 1 do 5)
TIMEOUT=2

# Sprawdzanie zycia hostow z ponizszej listy
TRACKS_IP=" \
  8.8.8.8 \
  8.8.4.4 \
"

# Funkcja restartujaca polaczenie lub modem hilink
function reset {
  
  # Modem szeregowy (np. przez QMI)
  ifdown $INTERFACE_LOGICAL
  ifup $INTERFACE_LOGICAL
  
  # Modem HiLink wykrywany jako karta sieciowa przez ADB (Wymagane "opkg update" i "opkg install adb")
  #adb kill-server > /dev/null
  #adb connect 192.168.8.1 > /dev/null
  #adb shell "echo -en 'AT^RESET\r' > /dev/appvcom1" > /dev/null
  #adb kill-server > /dev/null
  
}


#########################################################
################### Skrypt wykonawczy ###################
#########################################################

while true
do
  OFFLINE=true
  for TRACK_IP in $TRACKS_IP
  do
    if ping -I $INTERFACE_PHYSICAL -c 1 -w $TIMEOUT -W $TIMEOUT $TRACK_IP > /dev/null; then
      OFFLINE=false
    fi
    sleep $TIMEOUT
  done
  if [ "$OFFLINE" == "true" ]; then
    reset
    sleep 900
  fi
  sleep $(( TIMEOUT * 2 ))
done

Podajemy nazwy interfejsów fizycznego i logicznego, czas zadziałania (tak sobie to nazwałem), liste ip hostów do pingowania oraz w funkcji "reset" piszemy skrypt resetowania lub odkomentowujemy to co mamy dostepne, czyli resetowanie modemu szeregowego lub modemu HiLink z otwartym dostępem przez ADB i Telnet.


Tego skryptu nie przygotowałem do obsługi kilku kart sim, ponieważ nie widzę sensu w stosowaniu dwóch kart Aero2, ale jeśli ktoś chciałby używać tego skryptu dla kilku kart sim to proponuję skopiować ten plik kilka razy i używać oddzielnie dla każdej karty sim:
- /root/aero2_sim1_reset.sh
- /root/aero2_sim2_reset.sh
- /root/aero2_sim3_reset.sh


Dodatkowo pamiętaj, że po automatycznym zrestartowaniu się połączenia jeśli strona z captcha nie chce się wyświetlić:
- należy wywołać stronę www bez szyfrowania SSL (czyli http: // zamiast https: // )
- w routerze /etc/config/dhcp -> option rebind_protection '0' (niezalecane)

Dostałem się dziś na mój drugi router (192.168.2.0/25) z dwoma modemami E3372h.
Router jest idealnym klonem tego pierwszego pod względem konfiguracji ze zmianami adresacji oczywiście.
Failover działa w nim dobrze przy konfiguracji:

config rule 'default_rule'
        option dest_ip '0.0.0.0/0'
        option use_policy 'failover'

Jedynym problemem, który zauważyłem to działanie OpenVPN, gdy pierwszy WAN jest offline.
Mój klient VPN jakby nie słuchał się reguł mwan3 i potrafił korzystać tylko z pierwszego WAN.
Oczywiście po powrocie łącza na pierwszym WAN - klient vpn łączy się ponownie do serwera.

Jasne, no nic... będę sobie działał, może coś się uda...

Zerknij na mój post, chyba udało mi się znaleźć rozwiązanie...
https://eko.one.pl/forum/viewtopic.php? … 49#p218349

Chciałem wydać aktualizację dla E3372h-153, mógłbym pokusić się o dodanie w sofcie w menu Ustawienia -> Transfer danych opcję automatycznego rozłączania, gdy: nieodebrany sms, od określonego/ych nadawców oraz zawierające określone słowa kluczowe lub ustawiony limit miesięczny został osiągnięty - rozłączanie transferu danych. To chyba byłoby najbardziej odpowiednie rozwiązanie.

Problemem jest oprogramowanie na tym modemie oraz support - na forum bez kabli nikt mi raczej nie pomoże, a tutaj?
Tam nawet wget nie potrafi dobrze działać, a trzeba by było jeszcze pewnie coś doinstalować...

Cezary napisał/a:

No to może wywal mwan3 i zobacz czy openvpn działa

Po wyczyszczeniu konfiguracji w "/etc/config/mwan3", "uci commit mwan3" i kilku restartach i testach wszystko działa.

Postanowiłem stopniowo dodawać wany, aby wyeliminować problem. Podczas utworzenia konfiguracji dla dwóch wanów, czyli wan (niepodłączony rj45) + wan2 (podłączony modem usb) już jest problem z OpenVPN.

Postanowiłem więc wprowadzić konfigurację tylko dla tego co mam - czyli wan2 (nie wiem, czy tak można):

config interface 'wan2'
        option enabled '1'
        list track_ip '8.8.8.8'
        list track_ip '8.8.4.4'
        option reliability '2'
        option count '1'
        option timeout '1'
        option interval '0'
        option down '2'
        option up '4'

config member 'wan2_m2_w100'
        option interface 'wan2'
        option metric '2'
        option weight '100'

config policy 'failover'
        list use_member 'wan2_m2_w100'

config rule 'default_rule'
        option dest_ip '0.0.0.0/0'
        option use_policy 'failover'

Taka konfiguracja również powoduje problemy z OpenVPN.
Zakomentowanie "option use_policy 'failover'" usuwa ten problem ;-)

W tej konfiguracji zainteresowała mnie linijka:

option dest_ip '0.0.0.0/0'

Sprawdzając status mwan3, widzę że cała moja sieć VPN wpada do mwan3:

# mwan3 status
Interface status:
 interface wan2 is online and tracking is active

...

Directly connected ipv4 networks:
 ...
 192.168.127.255 - adres rozgłoszenia sieci VPN
 192.168.64.0 - adres sieci VPN
 192.168.100.11 - mój adres klienta VPN
 192.168.64.0/18 - sieć VPN
 192.168.0.0/18 - routowana sieć do VPN

Czy nie powinienem ustawić tam adresu mojego routera?

option dest_ip '192.168.1.0/25'

... lub routera + wany?

option dest_ip '192.168.1.0/24'

W takiej konfiguracji mój OpenVPN działa prawidłowo, ale czy nie zaburzy to pracy mwan3?
Cezary, proszę o Twoją opinie...

Więc zacznijmy od początku:

# ls /etc/hotplug.d/iface
00-netstate       15-mwan3          16-mwancustombak
10-qos            15-teql           20-firewall

Dodaje i zapisuje skrypt:

# nano /etc/hotplug.d/iface/27-openvpn

#!/bin/sh

config_load "network"
config_get wan_proto "wan" "proto"

if [ "$INTERFACE" = "wan" ] && [ "$ACTION" = "ifup" ]
then
        sleep 60
        /etc/init.d/openvpn restart
fi

Następnie:

# reboot

Po upłynięciu 5 minut loguje się na router. Sprawdzam na tun0:

# ping -I tun0 192.168.100.1
PING 192.168.100.1 (192.168.100.1): 56 data bytes
64 bytes from 192.168.100.1: seq=0 ttl=64 time=44.721 ms
^C

I na wszystkich interface:

# ping 192.168.100.1
PING 192.168.100.1 (192.168.100.1): 56 data bytes
^C

ja chyba czegoś mocno nie rozumiem...

Może to ma związek z niedawno instalowanym przeze mnie pakietem mwan3.
wan - eth0 - rj45 - niepodłączony kabel
wan2 - eth2 - usb - podłączony modem
wan3 - eth3 - usb - niepodłączony modem
wan4 - eth4 - usb - niepodłączony modem
wan5 - eth5 - usb - niepodłączony modem

Cezary napisał/a:

A kiedy masz lejek? Po przekroczeniu transferu? Po czasie czy po wyczerpaniu środków?

Ciężko to stwierdzić, ponieważ kilka wanów, różni operatorzy, więc sposób musi być uniwersalny dla każdego z nich.
W modemie E3372-153 jest opcja statystyki z rozliczeniem miesięcznym. Jeśli dokodowałbym do tego wyłączenie transferu danych byłoby całkiem ok. Tylko jest też kwestia, że w ustawieniach mam opcję "data rozpoczęcia" naliczania, w której wybieram dzień od 1 do 31 dnia miesiąca. Większość tych pakietów jest na 30 dni, więc co miesiąc musiałbym przestawiać to o +/- 1 dzień. Drugą sprawą jest to, że DIL w RBM teoretycznie robił się lejek po 100GB, a w praktyce osiągałem transfery po 300GB przy pełnej prędkości, więc obcinałbym dobrze działający Internet zupełnie niepotrzebnie.

Czy macie jeszcze jakieś pomysły? Sam od kilku dni debatuję z kolegami w pracy jak można od strony logiki ugryźć ten temat...

Jasne wink

Jeszcze jedna dosyć ciężka kwestia... Jeśli któryś z wanów będzie miał lejek do 32k lub 1M też chciałbym go wyeliminować. Na ten moment na pewno zadziała to, gdy ręcznie na moim HiLinku rozłączę transfer danych. Jakbyś polecił mi zautomatyzować ten proces?

Pierwsza myśl to skrypty w bashu, który będzie pobierał co 1min plik z max. 1Mbps i sprawdzał czas. W razie wykrycia wystąpienia "lejka" usunie trasę lub wyłączy interface. To by na pewno działało, ale w skali miesiąca taka metoda obciąży mnie na dobre kilkanaście GB transferu, a jak wiadomo w realiach mobilnych operatorów nie jest to dobrym rozwiązaniem.

Druga myśl to obserwowanie transferu z ostatniej minuty na routerze dla poszczególnych wanów, ale znowu jeśli wyłączę klientów swojego routera, od razu wyłączą mi się wszystkie pierwsze cztery wany. W dodatku, nie zawsze używając w danej minucie łącza osiągnę 1Mbps i wtedy również dany wan się wyłączy.

Trzeci sposób to skrypt na modemie odczytujący SMSy i wyłączający transfer. Ale w modemie jest kiepsko z oprogramowaniem i druga sprawa, to że operator czasami zastrzega sobie prawo do wysłania sms o treści "twój pakiet się wyczerpał. zasil konto i wykup pakiet".

Jak podejść do tego tematu oszacowania "lejka"?

Udało mi się wprowadzić router znowu w ten błąd, tym razem dopiero kiedy odłączyłem go fizycznie od zasilania.
Restart "/etc/init.d/openvpn restart" nic nie pomaga, stąd wnioskuje, że opóźnienie o 15 sekund też nic nie pomoże.
Co mogę jeszcze sprawdzić? Powoli kończą mi się pomysły...

Wrzucę jeszcze loga z połączenia klienta:

Sun Mar 17 14:06:40 2019 OpenVPN 2.4.4 mips-openwrt-linux-gnu [SSL (OpenSSL)] [LZO] [LZ4] [EPOLL] [MH/PKTINFO] [AEAD]
Sun Mar 17 14:06:40 2019 library versions: OpenSSL 1.0.2q  20 Nov 2018, LZO 2.10
Sun Mar 17 14:06:40 2019 WARNING: --ns-cert-type is DEPRECATED.  Use --remote-cert-tls instead.
Sun Mar 17 14:06:40 2019 TCP/UDP: Preserving recently used remote address: [AF_INET]XXX.XXX.XXX.XXX:1194
Sun Mar 17 14:06:40 2019 Socket Buffers: R=[163840->163840] S=[163840->163840]
Sun Mar 17 14:06:40 2019 UDP link local: (not bound)
Sun Mar 17 14:06:40 2019 UDP link remote: [AF_INET]XXX.XXX.XXX.XXX:1194
Sun Mar 17 14:06:40 2019 TLS: Initial packet from [AF_INET]XXX.XXX.XXX.XXX:1194, sid=289872b2 c3da81f8
Sun Mar 17 14:06:40 2019 VERIFY OK: depth=1, C=PL, ST=Mazowieckie, L=Warszawa, O=Serwer, OU=Serwer, CN=Serwer CA, name=server, emailAddress=admin@example.com
Sun Mar 17 14:06:40 2019 VERIFY OK: nsCertType=SERVER
Sun Mar 17 14:06:40 2019 VERIFY OK: depth=0, C=PL, ST=Mazowieckie, L=Warszawa, O=Serwer, OU=Serwer, CN=server, name=server, emailAddress=admin@example.com
Sun Mar 17 14:06:40 2019 Control Channel: TLSv1.2, cipher TLSv1/SSLv3 ECDHE-RSA-AES256-GCM-SHA384, 2048 bit RSA
Sun Mar 17 14:06:40 2019 [server] Peer Connection Initiated with [AF_INET]XXX.XXX.XXX.XXX:1194
Sun Mar 17 14:06:41 2019 SENT CONTROL [server]: 'PUSH_REQUEST' (status=1)
Sun Mar 17 14:06:41 2019 PUSH: Received control message: 'PUSH_REPLY,topology subnet,route-gateway 192.168.100.1,route 192.168.0.0 255.255.192.0,dhcp-option DNS 192.168.100.1,ping 5,ping-restart 10,ifconfig 192.168.100.11 255.255.192.0,peer-id 0,cipher AES-256-GCM'
Sun Mar 17 14:06:41 2019 OPTIONS IMPORT: timers and/or timeouts modified
Sun Mar 17 14:06:41 2019 OPTIONS IMPORT: --ifconfig/up options modified
Sun Mar 17 14:06:41 2019 OPTIONS IMPORT: route options modified
Sun Mar 17 14:06:41 2019 OPTIONS IMPORT: route-related options modified
Sun Mar 17 14:06:41 2019 OPTIONS IMPORT: --ip-win32 and/or --dhcp-option options modified
Sun Mar 17 14:06:41 2019 OPTIONS IMPORT: peer-id set
Sun Mar 17 14:06:41 2019 OPTIONS IMPORT: adjusting link_mtu to 1624
Sun Mar 17 14:06:41 2019 OPTIONS IMPORT: data channel crypto options modified
Sun Mar 17 14:06:41 2019 Data Channel: using negotiated cipher 'AES-256-GCM'
Sun Mar 17 14:06:41 2019 Outgoing Data Channel: Cipher 'AES-256-GCM' initialized with 256 bit key
Sun Mar 17 14:06:41 2019 Incoming Data Channel: Cipher 'AES-256-GCM' initialized with 256 bit key
Sun Mar 17 14:06:41 2019 TUN/TAP device tun0 opened
Sun Mar 17 14:06:41 2019 TUN/TAP TX queue length set to 100
Sun Mar 17 14:06:42 2019 do_ifconfig, tt->did_ifconfig_ipv6_setup=0
Sun Mar 17 14:06:42 2019 /sbin/ifconfig tun0 192.168.100.11 netmask 255.255.192.0 mtu 1500 broadcast 192.168.127.255
Sun Mar 17 14:06:42 2019 /sbin/route add -net 192.168.0.0 netmask 255.255.192.0 gw 192.168.100.1
Sun Mar 17 14:06:42 2019 WARNING: this configuration may cache passwords in memory -- use the auth-nocache option to prevent this
Sun Mar 17 14:06:42 2019 Initialization Sequence Completed

Widzę, że moja teoria się nie sprawdziła, bo tym razem nie było "Restart pause, 5 second(s)", a znowu nie mogę pingować bramy VPN. Chociaż restartowałem samego klienta ręcznie, więc poprzednie logi mogły się nadpisać.

Cezary napisał/a:

Po prostu restartuj openvpn na hotplugu jak wstanie wan

Rozwiniesz, co masz na myśli? Chodzi Ci o dopisanie odpowiednich komend w init.d ?
W pierwszym poście zapomniałem dopisać, ze "service openvpn restart" nie pomaga...
Muszę albo restartować router do skutku, albo czekać aż zacznie mi pingować brama vpn