Pisałem jakiś czas temu o dostępnym serwerze DMR BM w sieci HamNET. Serwer jest zlokalizowany w sieci na terenie Niemiec więc dostęp do niego w sieci HamNET z Polski obecnie jest jedynie poprzez siec tuneli internetowych i wykorzystanie jego w lokalnej siec radiowej HamNET w przypadku braku łączności internetowej staje się wątpliwa. Zastanawiałem się czy jest możliwość uruchomienia własnego lokalnego serwera sieci DV np w sytuacji kiedy mamy odizolowany internet a mamy tylko łączność radiową na 2/5 GHz, zapewnienie łączności cyfrowej w ramach EmCom itp. W wyniku poszukiwań trafiłem na ciekawy projekt DVSwitch. DVSwitch to zestaw aplikacji które pozwalają uruchomić własny lokalny serwer DV do którego mogą podłączać się hotspoty i przemienniki. Ma możliwość połączenia takiej lokalnej sieci do innych sieci np DMR BM/ DMR+ itp. DMRlink (Open Source IPSC Client Motorola), HBlink (mmdvm hotspots, przemienniki), Analog_Bridge (analog audio), HB_Bridge or IPSC_Bridge. Przy pomocy tych narzędzi możemy zbudować własną lokalną sieć DV do której mogą podłączać sie przemienniki i hotspota na bazie mmdvm oraz motoroli itp.

Historia DVSwitch jest związana z grupą radioamatorów z Kansas w USA K0USY. Na długo przed powstaniem Brandmeister, DMR+ i każdej sieci innej niż DMR-MARC, powstała KS-DMR. W październiku 2010 roku, Grupa K0USY umieściła w Lawrence pierwszy swój stały przemiennik DMR Kansas. Wkrótce potem, K0USY Group zakupiła c-Bridge, aby umożliwić tworzenie sieci na własną rękę, bez uzależnienia od sieci krajowej. Grupa radioamatorów z Kansas, zauważyła ograniczenia jakie posiada c-Bridge i grupa stawała się coraz bardziej niezadowolona z braku niezawodności i nieelastyczności. W połowie 2013 roku, Cort Buffington, N0MJS rozpoczął projekt inżynierii odwrotnej protokołu sieciowego Motorola IPSC. W wyniku czego, grupa zyskała niezależność; tym razem od komercyjnych produktów sieciowych, które nigdy nie były przeznaczone do użytku amatorskiego. Pod koniec 2013 roku, K0USY Group pracowała na własnym oprogramowaniu do routingu sieciowego IPSC o nazwie DMRlink - które udostępniła jako oprogramowanie open source. Kiedy MMDVM ustabilizowało się i wprowadziło "HomeBrew Repeater Protocol", ponownie K0USY Group opracowała HBlink, kolejnym pakietem oprogramowania open source dla przemienników na bazie MMDVM. Dzięki pomocy współtwórców Steve'a, N4IRS i Mike'a, N4IRR, DMRlink i HBlink zyskały możliwość komunikacji międzykomunikacyjnej - tworząc kolejne rozwiązanie open source łączące ze sobą przemienniki MMDVM i Motoroli.

DMRlink to Open Source IPSC Master / Peer narzędzie napisany w pytonie przez Cort Buffington, N0MJS. DMRlink zapewnia komunikację do i z IPSC (np przemienniki Motorola). Może to być naprzykład przemiennik Motoroli. Z DMRLink jest też dostępna aplikacja IPSC_Bridge. Ta aplikacja komunikuje się z DMRlink i zapewnia mostek do innych systemów. Warto tu powiedzieć o ograniczenicha DMRLink. Po pierwsze - działają tylko połączenia grupowe, brak połączeń prywatnych, brak obsługi sms. Musimy konfigurować każdą grupę rozmowną w konfiguracji 'bridges', nie ma możliwości użycia „zakresu” grup rozmownych.

IPSC_Bridge

HBlink to Open Source HB Master / Peer napisany w pythonie przez Cort Buffington, N0MJS. HBlink zapewnia komunikację do i z sprzętem który używa HB Repeater Protocol. Może to być przemiennik MMDVM, DVMega HotSpot, OpenSpot lub urządzenie sieciowe jak BrandMeister. Posiada wsparcie dla protokołu OpenBridge. Z HBLink dostępna jest aplikacja HB_Bridge. Ta aplikacja komunikuje się z HBlink i zapewnia mostek do innych systemów.

MMDVM_Bridge służy do zapewnienia połączenia pomiędzy sieciami cyfrowymi. MMDVM_Bridge działa w połączeniu z innymi narzędziami mostkowymi, aby umożliwić połączenie sieci z różnymi formatami audio i komponentami metadanych. Jest dostępna obsługa sieci DMR, D-Star, Yaesu Fusion, P25 i NXDN. Dodatkowo, mostkowanie do sieci analogowych (Allstar, Echolink) może być zrealizowane przy niewielkim nakładzie pracy.

Analog_Bridge strumień analogowy dźwięku, używając Vocodera sprzętowego DV3000 lub programowego md380-emu konwertuje się do AMBE i komunikuje się z jedną z dostępnych aplikacji opisanych powyżej. Dźwięk analogowy może pochodzić z ASL lub aplikacji działającej na komputerze stacjonarnym.

Możliwości wykorzystania narzędzi DVSwitch przedstawia poniższy rysunek konfiguracji lokalnej sieci w Kansas USA, gdzie widać połącznenia miedzysieciowe realizowane:

KS-DMR

Uruchamiamy nasz loklany HBLink Master Server.

Musisz posiadać umiejętności administracyjne na poziomie konsoli systemu Linux gdyż decydujesz się na zarządzanie, konfiguracje oraz rozwiązywanie problemów (jeśli takie się pojawią) lokalnego serwera HBLink. Dobrze byłoby abyś zapisał się do grupy dyskusyjnej DVSwitch bo tam znajdziesz wsparcie od autorów programów DVSwitch (HBlink, DMRLink itp) https://dvswitch.groups.io/g/HBlink

Najlepszym rozwiązaniem do uruchomienia serwera HBLink jest to zrobić na komputerze który ma zainstalowany Debian Stretch v9 . Poniższy opis jest wykonany na takim systemie. Ważnym jest aby serwer miał stały publiczny adres. Można uruchomić całość na VPS co daje nam niezawodność działania serwera.

HBLink serwer służy do podłączania przemienników i hotspotów na bazie  protokołu Homebrew - MMDVM.

Wszystkie poniżej komendy w opisie są wykonywane jako użytkownik 'root'. UWAGA na Debian v8 Jessie nie będzie działał HBLink3 gdyż wersja python 3.4 ma niezgodną składnie z python 3.5 który jest w Debian v9 oraz dmr_utils3 które używa python 3.5 nie działa na python 3.4.. Poniżej opis jak uruchomić podstawowy HBLink3 serwer do którego można będzie się podłączyć hotspotami. Można rozważyć instalacje HBLink serwera na wirtualnym komputerze VPS co zapewni nam stabilność i niezawodność naszego serwera na którym oprócz serwera HBLink możemy uruchomić inne usługi dla naszej lokalnej sieci. Poniższe opisane komendy są wykonywane jako użytkownik root lub komendy sudo -s aby mieć uprawnienia użytkownika root.

apt-get update
apt-get upgrade
apt-get install git python-pip python3-pip python-dev python3-dev libffi-dev libssl-dev

Instalujemy HBLink3 który używa python3 i wg opinii autorów ma lepszą wydajność niż HBLink z python2.

cd /opt
git clone https://github.com/n0mjs710/HBlink3.git
cd HBlink3

Uruchamiamy instalacje niezbędnych bibliotek python3 dla HBlink3:

chmod 0755 install.sh
./install.sh

Konfiguracja HBLink3. Robimy kopie przykładowej konfiguracji dla HBLink:

cd /opt/HBlink3
cp hblink-SAMPLE.cfg hblink.cfg

Robimy edycje pliku:

nano hblink.cfg

Poniżej pokazuje fragmenty pliku które należy zmienić wg podanych niżej

[LOGGER]
LOG_FILE: /var/log/hblink.log
LOG_HANDLERS: file-timed
LOG_LEVEL: INFO
LOG_NAME: HBlink

Wyłączamy pobieranie bazy danych DMR ID która w HBLink serwerze nie bedzie nam potrzebna:

[ALIASES] 
TRY_DOWNLOAD: False

Wyłączamy link OpenBridge który nie używamy na obecnym etapie konfiguracji serwera:

[OBP-1]
MODE: OPENBRIDGE
ENABLED: False

Zmieniamy hasło dostępowe (PASSWORD) oraz numer portu (PORT) na jakim będzie dostępny nasz HBLink serwer. Pole IP pozostawiamy puste. Dane PORT, PASSWORD oraz zewnętrzny IP będą później potrzebne dla użytkowników Pi-Star hotspotów, którzy będą chcieli się podłączyć do Twojego Master serwera.

Definicja master serwera dla hotspotów. Zamień w przykładowym MASTER-1 na MASTER-H i zawartość na poniższą:

[MASTER-H]
MODE: MASTER
ENABLED: True
REPEAT: True
MAX_PEERS: 10
EXPORT_AMBE: False
IP:
PORT: 55570
PASSPHRASE: passw0rd
GROUP_HANGTIME: 5
USE_ACL: True
REG_ACL: DENY:1
SUB_ACL: DENY:1
TGID_TS1_ACL: PERMIT:ALL
TGID_TS2_ACL: PERMIT:ALL

Jeśli planujesz że do HBLink serwera będą podłączane hotspoty, można uruchomić dwa master serwery MASTR-S dla hotspotów simplex na porcie 62000 i MASTER-D dla hotspotów duplex na porcie 55571. Dzięki temu będziesz mógł mapować grupy rozmowne dla TS1 i TS2 odpowiednio dla bezpośrednio połączonych hotspotów duplex do MASTER-D. Jeśli hotspoty będą się łączyć zawsze do HBLink jak do drugiej sieci poprzez DMRGateway wystarczy jeden MASTER-H na którym wszystkie grupy będą na TS2 a każdy użytkownik indywidualnie może sobie zmapować na odpowiednie szczeliny czasowe za pomocą TGRewrite w DMRGateway.

Wyłączamy link przy pomocy Homebrew protokołu (nie będziemy używali tego)

[REPEATER-1]
MODE: PEER
ENABLED: False
.....

[XLX-1]
MODE: XLXPEER
ENABLED: False
.....

Zapisujemy konfiguracje.

Robimy kopie pliku z regułami mapowania grup:

cp rules_SAMPLE.py  rules.py

Zrobić edycje pliku rules.py

nano rules.py

I należy skasować przykładowe mapowania grup w BRIDGES i zostawić zawartośc taką jak niżej:

BRIDGES = { 'TG7': [ {'SYSTEM': 'MASTER-H', 'TS': 2, 'TGID': 7, 'ACTIVE': True, 'TIMEOUT': 2, 'TO_TYPE': 'NONE', 'ON': [], 'OFF': [], 'RESET': []}, }

W podstatwowym Master serwerze nie potrzebujemy robić mapowania grup rozmownych.

Zapisać plik.

Tworzymy plik do uruchamiania automatycznie podczas startu systemu HBlink3

nano /lib/systemd/system/hblink.service

wklejamy zawartość do pliku:

[Unit]
Description=HB bridge all Service

After=network-online.target syslog.target
Wants=network-online.target

[Service]
StandardOutput=null
WorkingDirectory=/opt/HBlink3
RestartSec=3
ExecStart=/usr/bin/python3 /opt/HBlink3/bridge.py
Restart=on-abort

[Install]
WantedBy=multi-user.target

Zapisujemy plik i następnie aktywujemy HBLink:

systemctl enable hblink.service
systemctl start hblink.service

Sprawdzamy czy HBLink wystartował:

systemctl status hblink.service

Jęsli wszystko jest poprawnie, nasz serwer działa będziemy mieli wynik:

● hblink.service - HB bridge all Service
   Loaded: loaded (/lib/systemd/system/hblink.service; enabled; vendor preset: enabled)
   Active: active (running) since Mon 2019-06-10 13:44:38 CEST; 2h 11min ago
 Main PID: 29582 (python3)
    Tasks: 1 (limit: 4915)
   CGroup: /system.slice/hblink.service
           └─29582 /usr/bin/python3 /opt/HBlink3/bridge.py

cze 10 13:44:38 dmr-torun systemd[1]: Started HB bridge all Service.

Możemy zobaczyć do logu:

more /var/log/hblink.log

UWAGAI:

Administratorzy innych sieci np Brandmesiter nie życzą sobie aby robić do ich sieci połączeń z HBlink poprzez MODE = PEER. Jeśli już koniecznie chcesz mieć połączenie z tak siecią to rób to za pomocą OpenBridge. Wymaga to zgłoszenia do administratora BM z prośbą o taki link via OpenBridge podając jakie grupy rozmowne chce się mieć w ramach połączenia. Jeśli otrzymasz zgodę dostaniesz hasło do linku OPB.

Instalujemy HBmonitor który używa python3 i służy do monitorowania na stronie internetowej ruchu na HBLink.

HBmonitor to narzędzie dla administratora serwera HBlink które służy do monitorowania na stronie internetowej ruchu na HBLink.

UWAGA! Nie zaleca się instalacji i uruchamianie HBmonitor na tej samej maszynie co serwer HBLink.

Orginalny kod HBmonitora jest dostępny pod adresem:

https://github.com/kc1awv/HBmonitor3

Poniżej instalacja mojej wersji HBmonitora która ma zmienioną kolorystykę, dołożona funkcja wyświetlania nazw grup z talkgroup_ids.json itp.

cd /opt
git clone https://github.com/sp2ong/HBmonitor.git
cd HBmonitor

Jeśli chcesz mieć wersje HBmonitora gdzie wykaz mostów "Bridges" będzie wyświetlany na osobnej stronie uruchom następującą komende lub pomiń ją jeśli nie chcesz takiej wersji używać:

git checkout bridges

Następnie wykonaja polecenia:

chmod 0755 install.sh
./install.sh
cp config_SAMPLE.py config.py
nano config.py

Poniżej przykładowa konfiguracja w której możesz wpisać nazę swoją bez polskich liter w REPORT_NAME

REPORT_NAME     = 'Dashboard of local DMR network'           # Name of the monitored HBlink system
CONFIG_INC      = True                           # Include HBlink stats
LASTHEARD_INC   = True                           # Include Lastheard (10)
HOMEBREW_INC    = True                           # Include Homebrew Peers 
BRIDGES_INC     = True                           # Include Bridge stats (confbrige.py)
HBLINK_IP       = '127.0.0.1'                    # HBlink's IP Address
HBLINK_PORT     = 4321                           # HBlink's TCP reporting socket
FREQUENCY       = 10                             # Frequency to push updates to web clients
WEB_SERVER_PORT = 8080                           # Has to be above 1024 if you're not running as root
CLIENT_TIMEOUT  = 0                              # Clients are timed out after this many seconds, 0 to disable

# Put list of NETWORK_ID from OPB links to don't show local traffic in lastheard, for example: "260210,260211,260212"
OPB_FILTER = ""

# Authorization of access to dashboard
WEB_AUTH =  False
WEB_USER =  'hblink'
WEB_PASS =  'hblink'

# Files and stuff for loading alias files for mapping numbers to names
PATH            = './'                           # MUST END IN '/'
PEER_FILE       = 'peer_ids.json'                # Will auto-download from DMR-MARC
SUBSCRIBER_FILE = 'subscriber_ids.json'          # Will auto-download from DMR-MARC
TGID_FILE       = 'talkgroup_ids.json'           # User provided, should be in "integer TGID, TGID name" format
LOCAL_SUB_FILE  = 'local_subscriber_ids.json'    # User provided (optional, leave '' if you don't use it), follow the format of DMR-MARC
LOCAL_PEER_FILE = 'local_peer_ids.json'          # User provided (optional, leave '' if you don't use it), follow the format of DMR-MARC
FILE_RELOAD     = 30                              # Number of days before we reload DMR-MARC database files
PEER_URL        = 'https://database.radioid.net/static/rptrs.json'
SUBSCRIBER_URL  = 'https://database.radioid.net/static/users.json'

# Settings for log files
LOG_PATH        = './log/'                       # MUST END IN '/'
LOG_NAME        = 'hbmon.log'

W pliku talkgroup_ids.json możesz dopisać nazwy grup rozmownych które masz zdefiniowane wg formatu który znajdziesz już w wpisanych grupach w tym pliku. Błędy składni w tym pliku mogą skutkować że HBMonitor nie uruchomi się. Podobnie możesz zrobić lokalne własne wpisy w plikach local_subscriber_ids.json (użytkownicy, OPB Linki itp) i local_peer_ids.json (przemienniki)

Zwróć uwagę na LOG_PATH, CLIENT_TIMEOUT, SUBSCRIBER_URL, FILE_RELOAD , WEB_SERVER_PORT (port na którym dostępny jest nasz monitor: http://ip_adres_hblink:8080

Tworzymy plik do uruchamiania automatycznie podczas startu systemu HBmonitor

nano /lib/systemd/system/hbmon.service

wklejamy zawartość do pliku:

[Unit]
Description=HBmon Service

After=network-online.target syslog.target
Wants=network-online.target

[Service]
StandardOutput=null
WorkingDirectory=/opt/HBmonitor
RestartSec=3
ExecStart=/usr/bin/python3 /opt/HBmonitor/monitor.py
Restart=on-abort

[Install]
WantedBy=multi-user.target

Zapisać plik i następnie aktywujemy HBmonitor:

systemctl enable hbmon.service
systemctl start hbmon.service

Sprawdzamy czy HBLink wystartował:

systemctl status hbmon.service

Jeśli całośc działa poprawnie wynik statusu będzie wyglądał:

● hbmon.service - HB bridge all Service
   Loaded: loaded (/lib/systemd/system/hbmon.service; enabled; vendor preset: enabled)
   Active: active (running) since Mon 2019-06-10 13:42:06 CEST; 2h 18min ago
 Main PID: 29543 (python)
    Tasks: 1 (limit: 4915)
   CGroup: /system.slice/hbmon.service
           └─29543 /usr/bin/python3 /opt/HBmonitor/monitor.py

cze 10 13:42:06 dmr-torun systemd[1]: Started HB bridge all Service.

Możemy teraz sprawdzić jak działa nasz monitor sieci HBLink: http://ip_adrres_hblink:8080

hbmon

Po co nam i kiedy możemy użyć HBLink?

HBLink nie ma na celu zastąpienia obecnej dostępnej infrastruktury DMR w SP. Jest to zestaw narzędzi, programów które pozwolą zbudować tzw zapasową lokalną sieć („fall-back“ network) w ramach swojego przemiennika. Przykład mieliśmy w tym roku na wiosnę w kwietniu kiedy serwer BM2602 był niedostępny przez parę dni (atak DDoS 16 kwietnia 2019).

Staraj się nie używać łączenia swojego lokalnego serwera HB z innymi sieciami gdyż wielu operatorów tych sieci nie życzy sobie aby bez ich wiedzy uruchamianiać mostów z innymi sieciami.

Głównym celem jakim jest użycie HB server to udostępnienie lokalnym użytkownikom możliwości jakie może zaoferować dzięki takiemu rozwiązaniu np lokalny serwis informacyjny głosowy (stan pogody, alerty meteo, lokalne informacje) itp.

Z opini jakie otrzymałem od osób które używają HBLink bardzo dobrze działa na Raspberry PI (myslę że mówimy tu o wersji RPI 3 z Raspbian Stretch).

Jak uruchomić HBLink w wersji 2 na Pi-Star znajdziecie opis w tym dokumencie:

http://dl4fly.darc.de/docs/lokales_DMR_mit_pistar_DL4FLY.pdf

Na koniec warto jako lekturę przeglądać strony twórców narzędzi HBLink z Kansas http://ks-dmr.net/ http://k0usy.strikingly.com/. Mają oni najwięcej doświadczeń w konfiguracji i łączeniu HBLink z innymi sieciami DV. Polecam lekture DVSwitch wiki: https://dvswitch.groups.io/g/main/wiki/home

Może komuś przyda się do rozwiązania problemu z: "Please install it from HTTPS://pypi.python.org/pypi/service_identity". ( info z forum hblink)

pip install --upgrade google-auth-oauthlib
pip install service_identity
pip install --upgrade pyasn1-modules
pip3 install service_identity --force --upgrade
pip install service_identity --force --upgrade
pip2 install service_identity --force --upgrade
pip3 install service_identity --force --upgrade

Poprzedni Post Następny Post