Kto z nas nie lubi czasami skorzystać z jakieś bezpłatnej aplikacji, darmowego serwisu internetowego albo nawet darmowej maszyny w chmurze? Tym razem trafia się gratka 3 w 1. Bezpłatny Asterisk na platformie Google Cloud z wykorzystaniem ClouDNS.
Na stronie Google Cloud możemy przeczytać o całkowicie bezpłatnej instancji komputera.
Jak widać, dotyczy to małej maszyny utworzonej w jednym z 3 regionów USA. Jednak wystarczy nam ona do zainstalowania i uruchomienia bezpłatnej wersji Asteriska, a bezpłatny wariant usługi ClouDNS umożliwi nam utrzymanie widoczności naszego systemu pomimo zmian adresu IP. Zaczynamy zatem!
Spis treści
1) Tworzenie bezpłatnej instancji na Google Cloud
Przejdź do konsoli Google Cloud i wybierz z menu „Compute Engine” -> „VM Instances” i kliknij „Create Instance”.
UWAGA: Jeżeli nie rozpocząłeś jeszcze pracy z Google Cloud przy pomocy konta rozliczeniowego, możesz je teraz założyć. Dostaniesz dodatkowo pulę pewnych darmowych środków do wykorzystania przez 90 dni. Jeżeli nie wybierzesz żadnych płatnych rozwiązań, nie poniesiesz potem żadnych dodatkowych kosztów. Brzmi jak dobry deal?
W Twojej nowej instancji wybierz najpierw typ maszyny „e2-micro”. W okienku po prawej pojawiają się co prawda prognozowane koszty, ale nie przejmuj się tym! Niebawem okaże się, że zgodnie z wcześniejszym opisem będzie ona bezpłatna.
W sekcji „Boot Disk” -> „PUBLIC IMAGES” wybierz najnowszą stabilną wersję systemu „Debian GNU/Linux 12 (bookworm)”. Oczywiście można wybrać dowolny inny, ale skoro nawet FreePBX traktuje ten system jako nową bazę, to posłuchajmy ich rekomendacji. Zwiększ też pojemność dysku do 30GB. Tyle maksymalnie możemy uzyskać od Google za darmo.
Nadaj przyjazną nazwę systemu oraz wybierz jeden z poniższych regionów, zgodnie z warunkami otrzymania bezpłatnej instancji:
- Oregon: us-west1
- Iowa: us-central1
- South Carolina: us-east1
Następnie klikamy „Create”.
2) Logowanie, update i upgrade
Do nowo utworzonej maszyny będziemy mogli się dostać po SSH korzystając z widniejącego przycisku „SSH”. Google Cloud używa własnych kluczy SSH, które transferuje do maszyny.
sudo
i domyślnie należy do grupy „sudoers”. Teraz w konsoli przejdź na konto root
i wykonaj update systemu.
sudo -i
apt update
Potem wykonaj ugrade systemu
apt -y upgrade
Aby łatwiej łączyć się z maszyną poprzez zewnętrznego klienta SSH np. putty, dodaj swój publiczny klucz do pliku "authorize_keys" dla swojego użytkownika w Google Cloud.
3) Bezpłatny DNS
Czekając na wykonanie upgrade (to wolna maszyna, trwało to około 20 minut) założymy sobie darmowy DNS. Jest nam to potrzebne, ponieważ ta darmowa wersja maszyny otrzymuje co prawda publiczny adres IP, ale niestety po każdym restarcie on się zmienia. Na stronie ClouDNS mamy poszukiwany przez nas gratis. Przejdź zatem do stworzenia bezpłatnego wpisu i kliknij „Free zone”.
W polu „Domain name” wpiszemy przyjazną nam nazwę a w polu „Enter your current IP address” nasz aktualny adres IP który widoczny jest w panelu Google Cloud. Możesz też zaznaczyć od razu okienko „Activate Dynamic DNS”. Na koniec kliknij „Create”.
Za pomocą strony WhatsMyDNS możemy sprawdzić, jak rozpropagowuje się nasz adres hotkey404-free-asterisk-gcp.cloudns.ph po całym świecie.
4) Instalacja Asteriska
Realizacja tej części na naszej darmowej maszynie zajmie nam około godziny. Cały ten proces opisany jest w innym naszym blogu więc zachęcam do przeczytania posta: Instalacja Asterisk 20 ze źródła na Debian 12 oraz wykonanie opisanych tam czynności. Jeżeli wybierzesz inną wersję linuxa też możesz skorzystać z naszych podpowiedzi co do instalacji dla systemów Ubuntu, Rocky, CentOS 7, CentOS Stream 8.
Po zasadniczej instalacji możemy też ustawić strefę czasową właściwą dla naszej fizycznej lokalizacji.
timedatectl set-timezone Europe/Warsaw
5) Konfiguracja Firewalla
Jeżeli chcemy umożliwić logowanie się telefonom SIP do naszej centrali, to musimy dodać odpowiednią regułę na firewallu Google Cloud. Wybierz menu: „Firewall” -> „Create firewall rule” i stwórz regułę „allow-sip”. Jej przykładowa konfiguracja jest na screenie poniżej.
"rtp.conf"
z "samples/"
do katalogu roboczego Asteriska
i ograniczyć w nim porty rtp do wybranego zakresu – tutaj 10000 do 10030. Zazwyczaj nie ma potrzeby otwierać tysięcy portów, skoro taka mała maszyna nie pozwoli nawet na setki jednoczesnych połączeń.
cp /etc/asterisk/samples/rtp.conf /etc/asterisk
nano /etc/asterisk/rtp.conf
rtpstart=10000
rtpend=10030
6) Konfiguracja dynamicznego DNS
Co prawda nasza centrala jest już rozpoznawana w internecie po nazwie (FQDN), ale niestety po każdym pełnym wyłączeniu maszyny, zmienia się adres IP. Tracilibyśmy więc możliwość połączenia się po nazwie do nowego adresu IP. Serwisy typu ClouDNS umożliwiają nam odpowiednią konfigurację dynamicznego DNS. Na stronie ClouDNS kliknij w dwie przeciwstawne strzałki przy swoim darmowym wpisie, który skonfigurowaliśmy w punkcie 3 (Active Dynamic URL)
Strona ClouDNS: https://www.cloudns.net/aff/id/698914/
wget
wywołującego odpowiedni URL. Musimy jednak pójść o krok dalej i napisać skrypt, który będzie uruchamiany po każdym pełnym wyłączeniu naszego systemu („poweroff”). Mamy wtedy gwarancję niemal ciągłego dostępu do swoich usług przez określony adres FQDN. W kolejnej części opiszemy to krok po kroku.
7) Skrypt aktualizujący zmianę adresu IP
Do aktualizacji naszego adresu IP wykorzystamy nowo utworzony skrypt cloudns_update.sh
nano /var/tmp/cloudns_update.sh
#!/bin/bash
curl -s https://ipv4.cloudns.net/api/dynamicURL/?q=tutaj wklej zakodowaną wartość pozyskaną ze strony ClouDNS
EXTERNALIP=$(curl https://ipecho.net/plain)
sudo sed -i "s/^external_media_address =.*$/external_media_address = $EXTERNALIP/" /etc/asterisk/pjsip.conf
sudo sed -i "s/^external_signaling_address =.*$/external_signaling_address = $EXTERNALIP/" /etc/asterisk/pjsip.conf
Zawartość tego pliku obejmuje wywołanie dedykowanego linku dla usługi ClouDNS oraz odczytanie bieżącego adresu IP za pomocą usługi IPecho. Lokalna znajomość zmienionego adresu jest niezbędna dla modyfikacji konfiguracji naszego Asteriska, aby zapewnić mu poprawność udostępniania usług. Dlatego skrypt zmodyfikuje również odpowiednie wpisy w pliku pjsip.conf
.
Domyślnie po instalacji w pliku pjsip.conf
linijki kodu, które zamierzamy zmieniać naszym skryptem są zakomentowane średnikiem. Należy je najpierw odkomentować (usunąć średnik) aby polecenie sed -i
znalazło właściwy ciąg znaków do zamiany.
nano /etc/asterisk/pjsip.conf
Zmian dokonujemy w dwóch linijkach
external_media_address =
external_signaling_address =
Nadamy teraz uprawnienia do wykonywania dla stworzonego przez nas skryptu.
chmod +x /var/tmp/cloudns_update.sh
Oraz stworzymy plik nowego serwisu, który będzie automatycznie uruchamiany przy każdym restarcie systemu.
nano /etc/systemd/system/cloudns_update.service
[Unit]
Description=Update my External IP on Cloudns
After=network.target
[Service]
Type=simple
ExecStart=/var/tmp/cloudns_update.sh
TimeoutStartSec=0
[Install]
WantedBy=default.target
Teraz przeładujemy usługę systemową, aby uwzględnić nowo utworzony serwis.
systemctl daemon-reload
Nastęnie dodamy serwis do autostartu i go uruchomimy.
systemctl enable cloudns_update.service
systemctl start cloudns_update.service
Teraz po wyłączeniu maszyny i ponownym jej uruchomieniu, zobaczymy tam nowy adres IP, a w naszym serwisie ClouDNS adres IP będzie zaktualizowany.
poweroff
Maszynę startujemy z poziomu interfejsu GoogleCloud.
8) Zalogowanie konta telefonicznego
Sprawdźmy, czy będziemy mogli już poprawnie zalogować przykładowe konto PJSIP. Należy tylko pamiętać, aby wpisać opcjonalną nazwę: „Autentication username”. Wszystkie dane do logowania znajdziemy w pliku /etc/asterisk/pjsip.conf
Po chwili zobaczymy, że nasze konto telefonicznie jest poprawnie zalogowane i dostępne.
Od teraz możesz w pełni cieszyć się swoim darmowym systemem telefonicznym. Miłej zabawy!
Jeżeli chciałbyś monitorować wszystko, co dzieje się na Twojej centrali, wypróbuj nasze autorskie oprogramowanie VoiperoManager.
Instalacja i konfiguracja zajmuje kilka minut, a system możesz mieć całkowicie za darmo.
Przeczytaj, co potrafi nasz system VoiperoManager w zakresie monitorowania na żywo i raportowania systemów VoIP opartych na Asterisku.