Internet OFFLINE: Ubuntu 26.04 install asterisk
- Instalasi Asterisk Ubuntu Server 26.04
- 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. 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.
---
- 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 ```
---
- 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])
---
- 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" ```
---
- 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
- ----------------------------------------------------------
- include "pjsip-extensions.conf"
EOF ```
Konfigurasi sengaja menggunakan template agar 101 extension tidak harus memiliki seluruh parameter yang ditulis berulang kali.
---
- 6. Membuat extension 1000–1100 otomatis
Buat skrip generator:
```bash sudo tee /usr/local/sbin/generate-asterisk-extensions.sh >/dev/null <<'EOF'
- !/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.
---
- 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.
---
- 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.
---
- 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 ```
---
- 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 ```
---
- 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.
---
- 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.
---
- 13. Pengujian
- 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.
- 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.
- Uji suara
Hubungi:
```text 600 ```
Bicaralah ke mikrofon. Suara seharusnya dikirim kembali melalui aplikasi `Echo()`.
- 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])
---
- 14. Troubleshooting cepat
- 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" ```
- 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 ```
- 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`.
- 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.
- Melihat paket SIP dengan sngrep
```bash sudo sngrep ```
Gunakan tombol:
```text Enter : membuka call flow F10 : keluar ```
---
- 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.
---
- 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"