Internet OFFLINE: Ubuntu 26.04 install asterisk

From OnnoWiki
Jump to navigation Jump to search
  1. Instalasi Asterisk Ubuntu Server 26.04
    1. Extension SIP 1000–1100

Panduan berikut mengadaptasi pendekatan buku *VoIP Desa Menggunakan Asterisk*: instalasi melalui APT, penggunaan PJSIP, dialplan lokal, firewall, pengujian, dan dokumentasi akun. Buku menggunakan struktur satu akun PJSIP yang terdiri atas **endpoint, authentication, dan AOR**, serta menyarankan server memakai alamat IP statis.

Ubuntu 26.04 LTS menyediakan paket **Asterisk 22.5.2** melalui komponen `universe`, sehingga tidak perlu melakukan kompilasi dari source code. ([Ubuntu Packages][1])

Hasil akhir:

  • Asterisk aktif otomatis saat server hidup.
  • SIP menggunakan PJSIP dan UDP port 5060.
  • RTP menggunakan UDP port 10000–20000.
  • Tersedia **101 akun**, dari 1000 sampai 1100.
  • Setiap extension memiliki password acak berbeda.
  • Semua extension dapat saling menelepon.
  • Daftar username dan password tersimpan dalam CSV yang hanya dapat dibaca root.

---

    1. 1. Siapkan informasi jaringan

Contoh yang digunakan:

```text Hostname server : asterisk-desa IP server : 192.168.10.10 Gateway : 192.168.10.1 Jaringan LAN : 192.168.10.0/24 ```

Sesuaikan dengan jaringan yang sebenarnya.

Periksa jaringan server:

```bash ip -br addr ip route hostnamectl ```

Atur hostname:

```bash sudo hostnamectl set-hostname asterisk-desa ```

Tambahkan hostname ke `/etc/hosts`:

```bash sudo nano /etc/hosts ```

Pastikan terdapat baris:

```text 127.0.1.1 asterisk-desa ```

Server Asterisk sebaiknya menggunakan **IP statis** atau DHCP reservation agar alamat server tidak berubah.

---

    1. 2. Perbarui Ubuntu Server

```bash sudo apt update sudo apt full-upgrade -y sudo reboot ```

Setelah server hidup kembali, masuk melalui SSH:

```bash ssh namauser@192.168.10.10 ```

Periksa versi Ubuntu:

```bash lsb_release -a ```

atau:

```bash cat /etc/os-release ```

---

    1. 3. Instal Asterisk dan perangkat bantu

Aktifkan repository `universe`:

```bash sudo add-apt-repository universe sudo apt update ```

Instal Asterisk:

```bash sudo apt install -y \

   asterisk \
   asterisk-core-sounds-en \
   ufw \
   fail2ban \
   sngrep \
   tcpdump \
   openssl

```

APT merupakan mekanisme resmi Ubuntu untuk memasang dan memelihara paket perangkat lunak. ([Ubuntu][2])

Aktifkan layanan Asterisk:

```bash sudo systemctl enable --now asterisk ```

Periksa status:

```bash sudo systemctl status asterisk --no-pager ```

Periksa versi:

```bash sudo asterisk -rx "core show version" ```

Periksa modul PJSIP:

```bash sudo asterisk -rx "module show like pjsip" ```

PJSIP menghubungkan sebuah endpoint dengan objek autentikasi dan AOR; endpoint harus memiliki AOR agar Asterisk mengetahui kontak tujuan panggilan. ([Asterisk Documentation][3])

---

    1. 4. Backup konfigurasi bawaan

Jangan langsung menghapus konfigurasi asli.

```bash BACKUP_DIR="/root/asterisk-config-$(date +%Y%m%d-%H%M%S)" sudo mkdir -p "$BACKUP_DIR" sudo cp -a /etc/asterisk/. "$BACKUP_DIR/" ```

Periksa hasil backup:

```bash sudo ls -lah "$BACKUP_DIR" ```

---

    1. 5. Membuat konfigurasi utama PJSIP

Buat ulang `/etc/asterisk/pjsip.conf`:

```bash sudo tee /etc/asterisk/pjsip.conf >/dev/null <<'EOF'

==========================================================
Konfigurasi PJSIP Asterisk Desa
Ubuntu Server 26.04
Extension 1000-1100
==========================================================

[global] type=global user_agent=Asterisk-Desa

----------------------------------------------------------
Transport SIP
----------------------------------------------------------

[transport-udp] type=transport protocol=udp bind=0.0.0.0:5060

Apabila seluruh perangkat hanya berada di LAN,
external_media_address dan external_signaling_address
tidak diperlukan.
----------------------------------------------------------
Template endpoint
----------------------------------------------------------

[endpoint-template](!) type=endpoint transport=transport-udp context=internal disallow=all allow=ulaw allow=alaw

DTMF untuk IVR dan layanan berbasis tombol telepon

dtmf_mode=rfc4733

Pengaturan yang membantu client Wi-Fi/NAT

direct_media=no rtp_symmetric=yes force_rport=yes rewrite_contact=yes

Jangan izinkan pemanggilan tanpa autentikasi

allow_subscribe=yes language=en

----------------------------------------------------------
Template autentikasi
----------------------------------------------------------

[auth-template](!) type=auth auth_type=userpass

----------------------------------------------------------
Template Address of Record
----------------------------------------------------------

[aor-template](!) type=aor

Satu extension hanya boleh dipakai satu perangkat

max_contacts=1

Hapus registrasi lama bila perangkat berganti alamat

remove_existing=yes

Pemeriksaan berkala perangkat

qualify_frequency=60

----------------------------------------------------------
Akun extension dibuat otomatis di file berikut
----------------------------------------------------------
  1. include "pjsip-extensions.conf"

EOF ```

Konfigurasi sengaja menggunakan template agar 101 extension tidak harus memiliki seluruh parameter yang ditulis berulang kali.

---

    1. 6. Membuat extension 1000–1100 otomatis

Buat skrip generator:

```bash sudo tee /usr/local/sbin/generate-asterisk-extensions.sh >/dev/null <<'EOF'

  1. !/usr/bin/env bash

set -euo pipefail

CONFIG_FILE="/etc/asterisk/pjsip-extensions.conf" PASSWORD_FILE="/root/asterisk-extension-passwords.csv" TEMP_CONFIG="$(mktemp)" TEMP_PASSWORD="$(mktemp)"

cleanup() {

   rm -f "$TEMP_CONFIG" "$TEMP_PASSWORD"

}

trap cleanup EXIT

cat > "$TEMP_CONFIG" <<'HEADER'

==========================================================
Dibuat otomatis oleh generate-asterisk-extensions.sh
Jangan menyimpan file password ke repository publik.
==========================================================

HEADER

printf '%s\n' '"extension","username","password","server","transport"' \

   > "$TEMP_PASSWORD"

SERVER_IP="$(hostname -I | awk '{print $1}')"

if -z "$SERVER_IP" ; then

   SERVER_IP="GANTI_DENGAN_IP_SERVER"

fi

for EXTENSION in $(seq 1000 1100); do

   PASSWORD="$(openssl rand -hex 16)"
   cat >> "$TEMP_CONFIG" <<EOF_CONFIG
----------------------------------------------------------
Extension ${EXTENSION}
----------------------------------------------------------

[${EXTENSION}](endpoint-template) auth=auth-${EXTENSION} aors=aor-${EXTENSION} callerid="Extension ${EXTENSION}" <${EXTENSION}>

[auth-${EXTENSION}](auth-template) username=${EXTENSION} password=${PASSWORD}

[aor-${EXTENSION}](aor-template)

EOF_CONFIG

   printf '"%s","%s","%s","%s","UDP"\n' \
       "$EXTENSION" \
       "$EXTENSION" \
       "$PASSWORD" \
       "$SERVER_IP" >> "$TEMP_PASSWORD"

done

install -o root -g asterisk -m 0640 \

   "$TEMP_CONFIG" "$CONFIG_FILE"

install -o root -g root -m 0600 \

   "$TEMP_PASSWORD" "$PASSWORD_FILE"

echo "Berhasil membuat extension 1000 sampai 1100." echo "Konfigurasi : $CONFIG_FILE" echo "Password : $PASSWORD_FILE" EOF ```

Jadikan executable:

```bash sudo chmod 750 /usr/local/sbin/generate-asterisk-extensions.sh ```

Jalankan:

```bash sudo /usr/local/sbin/generate-asterisk-extensions.sh ```

Periksa jumlah extension:

```bash sudo grep -Ec '^\[[0-9]{4}\]\(endpoint-template\)$' \

   /etc/asterisk/pjsip-extensions.conf

```

Output seharusnya:

```text 101 ```

Periksa beberapa konfigurasi awal:

```bash sudo sed -n '1,80p' /etc/asterisk/pjsip-extensions.conf ```

Lihat daftar akun:

```bash sudo column -s, -t < /root/asterisk-extension-passwords.csv | head ```

Jangan membagikan seluruh file CSV secara terbuka karena berisi password semua pengguna.

---

    1. 7. Membuat dialplan panggilan

Buat `/etc/asterisk/extensions.conf`:

```bash sudo tee /etc/asterisk/extensions.conf >/dev/null <<'EOF'

==========================================================
Dialplan Asterisk Desa
Extension yang diizinkan
1000-1100
==========================================================

[general] static=yes writeprotect=no clearglobalvars=no

[globals] RINGTIME=30

----------------------------------------------------------
Panggilan internal
----------------------------------------------------------

[internal]

Extension 1000 sampai 1099

exten => _10XX,1,NoOp(Panggilan internal ${CALLERID(num)} ke ${EXTEN})

same => n,Dial(PJSIP/${EXTEN},${RINGTIME})
same => n,Hangup()
Extension 1100

exten => 1100,1,NoOp(Panggilan internal ${CALLERID(num)} ke 1100)

same => n,Dial(PJSIP/1100,${RINGTIME})
same => n,Hangup()
----------------------------------------------------------
Nomor pengujian
----------------------------------------------------------
600 - Echo test

exten => 600,1,Answer()

same => n,Wait(1)
same => n,Echo()
same => n,Hangup()
601 - Menyebutkan nomor extension pemanggil

exten => 601,1,Answer()

same => n,Playback(your)
same => n,Playback(extension)
same => n,SayDigits(${CALLERID(num)})
same => n,Hangup()
Nomor tidak dikenal

exten => i,1,Playback(invalid)

same => n,Hangup()

EOF ```

Dialplan `_10XX` hanya menerima nomor 1000–1099, sementara 1100 dibuat secara eksplisit. Dengan demikian, nomor 1101 dan seterusnya tidak dapat dipanggil.

---

    1. 8. Memastikan rentang RTP

Periksa konfigurasi RTP:

```bash sudo grep -Ev '^space:*(;|$)' /etc/asterisk/rtp.conf ```

Bila belum jelas, buat konfigurasi berikut:

```bash sudo tee /etc/asterisk/rtp.conf >/dev/null <<'EOF' [general] rtpstart=10000 rtpend=20000 strictrtp=yes icesupport=yes EOF ```

SIP dipakai untuk mengatur sesi dan registrasi, sedangkan suara dikirim melalui RTP. Konsep ini juga menjadi dasar konfigurasi pada buku.

---

    1. 9. Atur kepemilikan dan permission

```bash sudo chown root:asterisk \

   /etc/asterisk/pjsip.conf \
   /etc/asterisk/pjsip-extensions.conf \
   /etc/asterisk/extensions.conf \
   /etc/asterisk/rtp.conf

```

```bash sudo chmod 640 \

   /etc/asterisk/pjsip.conf \
   /etc/asterisk/pjsip-extensions.conf \
   /etc/asterisk/extensions.conf \
   /etc/asterisk/rtp.conf

```

Pastikan file password hanya dapat dibaca root:

```bash sudo chmod 600 /root/asterisk-extension-passwords.csv ```

---

    1. 10. Validasi lalu restart Asterisk

Restart:

```bash sudo systemctl restart asterisk ```

Periksa layanan:

```bash sudo systemctl status asterisk --no-pager ```

Periksa log jika gagal:

```bash sudo journalctl -u asterisk -n 100 --no-pager ```

Masuk CLI:

```bash sudo asterisk -rvvv ```

Di dalam CLI, jalankan:

```text core show version pjsip show transports pjsip show endpoints dialplan show internal ```

Keluar:

```text exit ```

Periksa jumlah endpoint dari shell:

```bash sudo asterisk -rx "pjsip show endpoints" |

   grep -E 'Endpoint: +[0-9]{4}/' |
   wc -l

```

Targetnya:

```text 101 ```

---

    1. 11. Konfigurasi firewall

Ubuntu menggunakan `ufw` sebagai perangkat firewall host yang mudah dikelola. ([Ubuntu][4])

    • Sangat penting:** izinkan SSH sebelum mengaktifkan firewall agar koneksi administrator tidak terputus.

Contoh untuk LAN `192.168.10.0/24`:

```bash sudo ufw default deny incoming sudo ufw default allow outgoing sudo ufw allow OpenSSH ```

Izinkan SIP hanya dari jaringan LAN:

```bash sudo ufw allow from 192.168.10.0/24 to any port 5060 proto udp \

   comment 'Asterisk SIP dari LAN'

```

Izinkan RTP hanya dari LAN:

```bash sudo ufw allow from 192.168.10.0/24 to any port 10000:20000 proto udp \

   comment 'Asterisk RTP dari LAN'

```

Aktifkan firewall:

```bash sudo ufw enable ```

Periksa:

```bash sudo ufw status numbered ```

Jangan membuka UDP 5060 dan 10000–20000 ke seluruh Internet kecuali benar-benar diperlukan. Untuk akses antarlokasi, pendekatan yang lebih aman adalah membawa SIP dan RTP melalui VPN seperti WireGuard. Buku juga merekomendasikan komunikasi antar-Asterisk melalui WireGuard daripada mengekspos SIP langsung ke Internet.

---

    1. 12. Registrasi Linphone

Ambil satu akun uji:

```bash sudo grep '^"1000"' /root/asterisk-extension-passwords.csv sudo grep '^"1001"' /root/asterisk-extension-passwords.csv ```

Contoh pengaturan perangkat pertama:

```text Display name : Extension 1000 Username : 1000 Password : password dari CSV Domain : 192.168.10.10 SIP server : sip:192.168.10.10 Transport : UDP Port : 5060 ```

Perangkat kedua:

```text Display name : Extension 1001 Username : 1001 Password : password dari CSV Domain : 192.168.10.10 Transport : UDP Port : 5060 ```

Pada beberapa versi Linphone, identitas SIP ditulis:

```text sip:1000@192.168.10.10 ```

Proxy/server:

```text sip:192.168.10.10;transport=udp ```

Pastikan smartphone dan server berada dalam jaringan yang dapat saling menjangkau.

---

    1. 13. Pengujian
      1. Periksa registrasi

```bash sudo asterisk -rx "pjsip show contacts" ```

atau:

```bash sudo asterisk -rx "pjsip show endpoint 1000" ```

Endpoint belum terdaftar biasanya terlihat:

```text Unavailable ```

Setelah registrasi berhasil, akan muncul alamat kontak perangkat.

      1. Uji panggilan

Lakukan:

```text 1000 → 1001 1001 → 1000 1000 → 1100 1100 → 1000 ```

Uji juga nomor yang tidak tersedia:

```text 1101 ```

Panggilan ke 1101 seharusnya ditolak karena berada di luar numbering plan.

      1. Uji suara

Hubungi:

```text 600 ```

Bicaralah ke mikrofon. Suara seharusnya dikirim kembali melalui aplikasi `Echo()`.

      1. Monitor panggilan langsung

```bash sudo asterisk -rvvv ```

Kemudian:

```text core show channels pjsip show contacts ```

Aktifkan SIP logger hanya ketika troubleshooting:

```text pjsip set logger on ```

Matikan kembali setelah selesai:

```text pjsip set logger off ```

Dokumentasi resmi Asterisk juga menyarankan pemeriksaan hubungan `auth`, endpoint, dan AOR ketika registrasi PJSIP gagal. ([Asterisk Documentation][5])

---

    1. 14. Troubleshooting cepat
      1. Asterisk tidak dapat dijalankan

```bash sudo systemctl status asterisk sudo journalctl -u asterisk -b --no-pager ```

Periksa konfigurasi:

```bash sudo asterisk -rx "pjsip show endpoints" ```

      1. Client tidak dapat register

Periksa port:

```bash sudo ss -lunp | grep ':5060' ```

Seharusnya terdapat proses Asterisk yang mendengarkan pada:

```text 0.0.0.0:5060 ```

Periksa firewall:

```bash sudo ufw status verbose ```

Periksa log:

```bash sudo tail -f /var/log/asterisk/full ```

Jika `/var/log/asterisk/full` belum tersedia, gunakan:

```bash sudo journalctl -u asterisk -f ```

      1. Username atau password ditolak

```bash sudo asterisk -rx "pjsip show endpoint 1000" sudo grep -A4 '\[auth-1000\]' \

   /etc/asterisk/pjsip-extensions.conf

```

Pastikan client menggunakan username **1000**, bukan `auth-1000`.

      1. Telepon berdering tetapi suara tidak terdengar

Periksa:

```bash sudo ufw status sudo ss -lunp | grep asterisk ```

Pantau RTP:

```bash sudo tcpdump -ni any udp portrange 10000-20000 ```

Penyebab umum:

  • Firewall RTP tertutup.
  • Client berada pada jaringan NAT berbeda.
  • Wi-Fi memiliki client isolation.
  • Router memblokir komunikasi antarklien.
  • Alamat server yang dimasukkan salah.
      1. Melihat paket SIP dengan sngrep

```bash sudo sngrep ```

Gunakan tombol:

```text Enter : membuka call flow F10 : keluar ```

---

    1. 15. Backup setelah konfigurasi berhasil

```bash sudo tar \

   --create \
   --gzip \
   --preserve-permissions \
   --file="/root/asterisk-ready-$(date +%Y%m%d-%H%M%S).tar.gz" \
   /etc/asterisk \
   /root/asterisk-extension-passwords.csv

```

Periksa:

```bash sudo ls -lh /root/asterisk-ready-*.tar.gz ```

Backup tersebut mengandung seluruh password extension. Simpan secara terenkripsi dan jangan diletakkan di web server atau repository Git publik.

---

    1. 16. Checklist hasil akhir

Jalankan seluruh pemeriksaan berikut:

```bash systemctl is-enabled asterisk systemctl is-active asterisk sudo asterisk -rx "core show version" sudo asterisk -rx "pjsip show transports" sudo asterisk -rx "pjsip show endpoints" sudo asterisk -rx "dialplan show internal" sudo ufw status sudo ss -lunp | grep -E ':5060|asterisk' ```

Kondisi yang diharapkan:

```text Asterisk service : active Start saat boot : enabled Transport SIP : UDP 0.0.0.0:5060 Jumlah extension : 101 Nomor pertama : 1000 Nomor terakhir : 1100 Dialplan : internal RTP : UDP 10000-20000 Password akun : berbeda untuk setiap extension Firewall : hanya membuka SIP/RTP dari LAN ```

Konfigurasi ini sudah cukup untuk **telepon internal 1000–1100**. Layanan lanjutan seperti voicemail, ring group, IVR, ConfBridge, paging, queue, SIP trunk, dan WireGuard dapat ditambahkan setelah registrasi serta panggilan dasar stabil.

[1]: https://packages.ubuntu.com/resolute/asterisk?utm_source=chatgpt.com "Details of package asterisk in resolute" [2]: https://ubuntu.com/server/docs/how-to/software/package-management/?utm_source=chatgpt.com "Install and manage packages - Ubuntu Server documentation" [3]: https://docs.asterisk.org/Configuration/Channel-Drivers/SIP/Configuring-res_pjsip/PJSIP-Configuration-Sections-and-Relationships/?utm_source=chatgpt.com "PJSIP Configuration Sections and Relationships" [4]: https://ubuntu.com/server/docs/how-to/security/firewalls/?utm_source=chatgpt.com "Firewall - Ubuntu Server documentation" [5]: https://docs.asterisk.org/Configuration/Channel-Drivers/SIP/Configuring-res_pjsip/Asterisk-PJSIP-Troubleshooting-Guide/?utm_source=chatgpt.com "Asterisk PJSIP Troubleshooting Guide"