Kategorie
Sprzęt

Dodanie drugiego połączenia internetowego do routera z OpenWRT

W zależności, gdzie używamy naszego routera, możemy być w sytuacji, że potrzebujemy mieć plan awaryjny, w przypadku gdy nasze podstawowe połączenie internetowe przestanie działać.

Osobiście (Marzec 2020) jestem w sytuacji, gdzie moje połączenie internetowe pozostawia wiele do życzenia. Mimo szybkiej prędkości, jego niezawodność doprowadza mnie do szału (Virgin Media, które na szczęście w Kwietniu zmieniam na co innego), w związku z tym pomyślałem o wprowadzeniu dodatkowego połączenia. Te dodatkowe połączenie odbywać się będzie poprzez modem 4G podłączony przez port USB do mojego routera i w założeniu opierać się na zasadzie, gdy podstawowe połączenie przestanie działać, cały ruch przekierowany będzie na połączenie awaryjne.

W tym celu wykorzystam mój router ASUS RT-AC57U z oprogramowaniem OpenWRT oraz Modem na USB ZTE MF823 (oryginalnie od BT, ale ze zmienionym oprogramowaniem i w pełni odblokowany).

Co więcej, jako że ten modem ma możliwość podłączenia zewnętrznych anten, wyposażyłem go również w nie, aby nieco wzmocnić sygnał. Całość będzie używać operatora SMARTY, który bazuje na infrastrukturze sieci 3 w Wielkiej Brytanii.

I, mimo że sieć 3 i jej zasięg pozostawia wiele co życzenia, jeżeli w mojej lokalizacji działa oraz zapewnia nielimitowany transfer danych za £20 miesięcznie, to nie jest tak źle.

A więc zaczynamy…


Podłączenie modemu 4G przez USB do naszego routera

W pierwszej kolejności musimy zainstalować niezbędne pakiety. Możemy to zrobić przy pomocy graficznego interfejsu z poziomu przeglądarki internetowej (System > Software) lub z poziomu terminala SSH przy pomocy następującej komendy:

opkg update
opkg install kmod-usb-net-rndis kmod-usb-net kmod-usb2 usb-modeswitch kmod-usb-net-cdc-ether

Następnie aktywowaną kartę SIM wkładamy do naszego modemu i połączamy modem do portu USB naszego routera.

Za pomocą komendy dmesg sprawdzamy, czy system wykrył nowe urządzenie, w moim przypadku:

[1383.238310] usb 1-2: new high-speed USB device number 2 using xhci-mtk
[1388.676158] usb 1-2: USB disconnect, device number 2
[1389.358290] usb 1-2: new high-speed USB device number 3 using xhci-mtk
[1389.586108] rndis_host 1-2:1.0 usb0: register 'rndis_host' at usb-1e1c0000.xhci-2, RNDIS device

Z poziomu przeglądarki internetowej przechodzimy do Network > Interfaces na naszym routerze i dodajemy nowy interfejs (Add new interface).

W przypadku mojego modemu, który wykrywany jest jako karta sieciowa przez USB, wprowadzam nazwę 4G, wybieram protokół (Protocol) DHCP client oraz interfejs (Interface) usb0.

W następnym kroku pozostawimy wszystko domyślnie, a skupimy się tylko na ustawieniach zapory sieciowej (Firewall Settings), gdzie dodamy nasz wan, wan6. Po czym zapisujemy zmiany i na następnym kroku klikamy Zapisz i Zastosuj (Save & Apply).

Jeżeli wszystko wykonaliśmy prawidłowo, nasze połączenie powinno być aktywne.

Na tym etapie możecie ustawić w regułach zapory sieciowej (Firewall) jakie połączenia, porty, adresy IP mają korzystać z tego, a nie innego połączenia internetowego (interfejsu).

W moim przypadku, jak wspomniałem na początku, chcę ustawić możliwość używania dwóch połączeń, z czego, to po 4G będzie aktywowane, gdy podstawowe siądzie.

Nim przejdziemy dalej, sprawdzamy czy nasze połączenie działa:

ping -c 1 -I usb0 1.1.1.1

I idziemy dalej…


Używanie wielu połączeń internetowych

W tym celu potrzebujemy pakiet mwan3 oraz aplikację, dodającą możliwość zarządzania przez przeglądarkę internetową luci-app-mwan3.

Jak powyżej, możemy je zainstalować z System > Software lub z poziomu terminala SSH:

opkg update
opkg install mwan3 luci-app-mwan3

Podstawową funkcją mwan3 jest nie tylko możliwość używania równoległego (load balancing) obu połączeń internetowych, ale również monitorowanie każdego z połączeń. W momencie, gdy jedno z połączeń przestanie działać, ruch internetowy przekierowywany jest na to, które działa i to jest opcja, której potrzebuje najbardziej.

Po zainstalowaniu ww. pakietów otrzymamy dodatkową opcję w menu Network > Load Balancing.

W pierwszej kolejności musimy skonfigurować nasze interfejsy (Interfaces), dodając 4G (tutaj używamy nazwy ustawionej w Network > Interfaces).

Po dodaniu 4G, w nowej zakładce interfejsu (Interface), zaznaczamy nasz interfejs jako włączony (Enabled) oraz w polach Tracking hostname or IP address wprowadzamy adresy DNS 1.1.1.1 oraz 1.0.0.1. Dzięki temu nasz router będzie sprawdzał, czy nasz interfejs działa. W momencie, gdy nie działa, ruch nie będzie na niego kierowany.

Warto również wyedytować nasz interfejs wan oraz wan6 które domyślnie ma ustawione do sprawdzania aktywności serwery Google oraz OpenDNS.

W przypadku wan ustawiamy

1.1.1.1
1.0.0.1

W przypadku wan6 (opcjonalne) ustawiamy

2606:4700:4700::1111
2606:4700:4700::1001

Oprócz sekcji opisanych powyżej, w opcjach zobaczymy również:

Tracking method — sposób, w jaki określane jest, czy interfejs działa, czy nie. Domyślnie zostawiamy na ping.

Tracking reliability — określa, ile adresów zdefiniowanych w sekcji Tracking hostname or IP address musi odpowiedzieć pozytywnie, aby uznane było, że interfejs działa. Domyślnie zostawiamy na 1.

Ping count — określa, ile zapytań ping ma zostać wysłanych w jednym teście. Zostawiamy na 1.

Jeżeli odpowiedź na ping trwa bardzo długo, po jakim czasie ma zostać przerwane — to określa Ping timeout. Natomiast jak często ping ma byś powtórzony określa Ping interval. W przypadku, gdy ping zakończy się powodzeniem, po jakim czasie ma być zapytanie ponowione określa Failure interval. Te trzy opcje w moim przypadku ustawiłem odpowiednio 2/5/1 dla wan oraz 4G. W przypadku, gdy interfejs oznaczony zostanie jako niedziałający (Offline), po jakim próba sprawdzenia aktywności i przywrócenia stanu jeżeli okaże się, że interfejs działa, określa Recovery interval — w moim przypadku ustawiłem 3 sekundy.

Pozostały nam jeszcze dwie opcje, które warto przemyśleć, a mianowicie Interface down oraz Interface up

Interface down określi, po ilu błędach przy wykonaniu ping interfejs uznany jest za niedziałający (Offline), analogicznie Interface up po ilu prawidłowych odpowiedziach ping uznany zostanie za działający. W moim przypadku jako że wan uznany jest za bardziej stabilny (sic!), a 4G, nawet gdy działa, może zgłaszać błąd, nawet gdy wszystko działa, ustawiłem 4/6 (wan) oraz 6/8.

Oprócz tego musimy jeszcze sprecyzować, który interfejs jest podstawowy, a który dodatkowy (awaryjny). Dokonujemy tego przy pomocy opcji Metrics w ustawieniach podstawowych interfejsów. W moim przypadku wan ustawiłem na 10 a 4G na 50. Zmiany tej dokonujemy z poziomu Network > Interfaces edytując ustawienia poszczególnych interfejsów.

Wszystko potwierdzamy klikając Zapisz i Zamknij (Save & Apply).


Ja zapewne zauważyłeś, Load Balancing zawiera również zakładkę Members, Policies oraz Rules, które musimy odpowiednio ustawić, w zależności co chcemy osiągnąć.

Members

Tutaj ustawiamy nasze interfejsy z dodatkowym podziałem na to, który jest ważniejszy od drugiego (podobnie jak ustawiliśmy wcześniej). I tak w moim przypadku, gdy chcę osiągnąć automatyczne używanie 4G w momencie, gdy moje podstawowe połączenie wysiądzie, dodałem dwa wpisy:

Policies

Tutaj łączymy nasze powyższe ustawienia w sposób, w jaki mają działać – czyli najpierw wan a w przypadku problemów 4G.

Rules

Jak sama nazwa mówi za siebie, ustawiamy tutaj reguły odnośnie transferu. Który transfer ma byś przekazywany przez który interfejs. Domyślnie otrzymujemy zdefiniowane reguły odnośnie do szyfrowanego ruchu www (https) oraz wszystkiego innego.

W moim przypadku ustawię jedną regułę domyślną (default).

Żeby zbytnio wszystkiego nie opisywać, skupimy się na protokole(Protocol), który ustawimy na wszystkie (all); Policy assigned ustawiamy na wan_4G.

Aby wszystkie opcje zostały prawidłowo wprowadzone, uruchamiamy ponownie nasz router lub wykonujemy następujące komendy w terminalu:

/usr/sbin/mwan3 restart
/etc/init.d/network restart
/etc/init.d/firewall restart

Jeżeli chcemy zobaczyć jak wszystko działa sprawdzamy Status > Load Balancing


Powyższa konfiguracja nie wyczerpuje możliwości konfiguracji mwan3. Możemy ustawić również, aby połączenie wan oraz 4G były używane równolegle, lub też przekierować (przy pomocy odpowiedniej reguły Rules) poszczególny ruch w sieci przez wyspecjalizowany interfejs. Zastosowań jest mnóstwo, a ja skupiłem się tylko na moim celu.

Należy pamiętać, że gdy zdecydujemy się na podpięcie dynamicznego DNS (domeny do naszego zmiennego IP), aby sprecyzować odpowiednią regułę, aby aktualizacja adresu IP odbywała się tylko przez interfejs, który do tego celu używamy.

Jeżeli jesteś zainteresowany innymi przykładami, zachęcam do odwiedzenia wpisu:

https://gist.github.com/idarek/ff753db47fbea0b6c7d5e64dce515754 (fork braian87b/mwan3-notes.md) oraz szczegółowego przykładu konfiguracji https://gist.github.com/idarek/32dcc3b6c874c1b70f04afac2cc763b7 (fork braian87b/mwan-config.sh)


Aktualizacja 22/03/2020

Jako że wraz z mwan3 używam również Bezpiecznego DNS (DoH), w momencie, gdy jedno z połączeń wysiądzie, a drugie zostanie załączone, zauważyłem opóźnienie, szczególnie w przekierowaniu połączeń DNS. W związku z tym zmieniłem  jedną opcję w ustawieniach głównych Network > Load Balancing, zakładka Globals, a mianowicie Update interval.

Opcja ta odpowiada na odświeżeniu tablicy routingu (kierowania ruchu). Domyślnie ustawione jest na 3 sekundy, więc przestawiłem na 1 sekundę.


Credits:
Failover to LTE using mwan3
Connect 4G USB modem to WRT2200