Cara Bina Pelayan VoIP Sendiri dengan Asterisk dan FreePBX
Ketahui cara memasang Asterisk atau FreePBX pada VPS anda. Panduan ini merangkumi konfigurasi SIP trunk, julat port RTP, peraturan firewall, dan cara mencegah penipuan caj.
Apakah pelayan VoIP yang dihoskan sendiri
Pelayan VoIP yang dihoskan sendiri ialah pelayan SIP yang berjalan pada VPS di bawah kawalan anda, supaya panggilan anda dihalakan oleh mesin anda sendiri dan bukannya oleh perkhidmatan telefon yang dihoskan. VoIP (voice over IP) membawa pertuturan sebagai paket UDP. SIP (session initiation protocol) ialah isyarat yang menyediakan dan menamatkan panggilan. Audio tidak bergerak melalui SIP, dan fakta tunggal itu menyebabkan kebanyakan masalah di bawah.
Empat bahagian membentuk sistem yang berfungsi.
- Perisian PBX (private branch exchange). Asterisk ialah pilihan biasa. Ia menyimpan sambungan dan dialplan.
- Titik akhir (endpoints). Telefon meja atau softphone yang mendaftar ke PBX dengan nama pengguna dan kata rahsia.
- SIP trunk. Akaun berbayar dengan pembekal yang menghubungkan anda ke rangkaian telefon awam dan menyewakan nombor telefon sebenar kepada anda.
- Laluan media. Aliran RTP (real-time transport protocol) yang membawa audio pada port UDP masing-masing.
Menghoskan sendiri PBX tidak bermakna menghoskan sendiri nombor telefon. Nombor datang daripada pembawa, dan anda masih membayar mengikut nombor dan mengikut minit. Apa yang anda miliki ialah penghalaan panggilan, mel suara, rakaman dan senarai sambungan. Anda juga memiliki keselamatan perkhidmatan yang diserang oleh pihak lain demi wang.
Port manakah yang diperlukan oleh pelayan VoIP yang dihoskan sendiri?
Isyarat SIP menggunakan port 5060 untuk UDP dan TCP, serta port 5061 untuk SIP melalui TLS (transport layer security). Port tersebut hanya membawa persediaan panggilan. Audio bagi setiap panggilan adalah aliran UDP yang berasingan, dihantar ke port yang diambil daripada julat RTP. Asterisk membekalkan sampel rtp.conf yang menetapkan rtpstart=10000 dan rtpend=20000, manakala nilai lalai yang dikompilasi ialah 5000 dan 31000. Setiap panggilan mengambil dua port daripada julat tersebut, satu untuk RTP dan satu lagi untuk RTCP (RTP control protocol).
Pembahagian ini merupakan punca kebanyakan percubaan awal gagal. Panggilan bersambung, kedua-dua telefon menunjukkan panggilan telah dijawab, namun tiada pihak yang mendengar apa-apa kerana firewall membenarkan port 5060 tetapi menggugurkan setiap paket RTP. Isyarat dan media adalah aliran yang berasingan, jadi ia memerlukan peraturan firewall yang berasingan. Jika perbezaan ini baharu bagi anda, cara port dan listening socket berfungsi pada Linux wajar dibaca sebelum anda membuka sebarang port.
Kecilkan julat tersebut sebelum anda membukanya. Dua puluh ribu port adalah jauh lebih banyak daripada yang diperlukan oleh sistem kecil. Dua port bagi setiap panggilan bermakna julat dua ratus sudah memadai untuk seratus panggilan serentak.
[general]
rtpstart=10000
rtpend=10200Gunakan ia dengan sudo asterisk -rx "core reload".
Adakah anda perlu memasang Asterisk atau FreePBX?
Asterisk ialah enjinnya. Anda mengkonfigurasinya menggunakan fail teks dalam /etc/asterisk dan anda menulis dialplan sendiri. FreePBX ialah antara muka web yang ditulis dalam PHP dan JavaScript yang berada di atas Asterisk, menjana fail tersebut untuk anda, serta menambah modul untuk mel suara dan baris gilir panggilan.
Perbezaan yang penting pada VPS ialah pemilikan mesin. Sehingga Ogos 2026, pemasang rasmi FreePBX 17 memerlukan sistem Debian 12 yang bersih, dan ia akan memasang Asterisk, pelayan web, pelayan pangkalan data dan PHP. Jika anda menghalakannya ke pelayan yang sudah menjalankan perkhidmatan lain, anda tidak akan berpuas hati dengan hasilnya. Berikan FreePBX VPSnya sendiri.
wget https://github.com/FreePBX/sng_freepbx_debian_install/raw/master/sng_freepbx_debian_install.sh -O /tmp/sng_freepbx_debian_install.sh
sudo bash /tmp/sng_freepbx_debian_install.shLog pemasangan disimpan dalam /var/log/pbx/freepbx17-install.log, yang merupakan tempat pertama untuk diperiksa apabila skrip berhenti lebih awal.
FreePBX memiliki fail konfigurasi yang dijanakannya. Jika anda menyunting pjsip.conf secara manual pada kotak FreePBX, perubahan anda akan hilang pada kali seterusnya GUI menulis fail tersebut. FreePBX membaca fail berasingan dengan _custom dalam namanya untuk konfigurasi yang ditulis tangan, dan ia tidak mengganggu fail tersebut.
Pertukaran yang jujur adalah seperti berikut. FreePBX memberikan anda GUI, dan ia meletakkan halaman log masuk untuk sistem telefon anda di internet awam. Asterisk mentah tidak mempunyai sebarang permukaan web, dan setiap tetapan ialah arahan berdokumen yang boleh anda baca dalam fail dan simpan dalam git. Jika anda memasang FreePBX, hadkan port webnya kepada alamat anda sendiri atau capainya melalui VPN, kerana GUI pentadbir untuk PBX ialah sasaran dengan laluan terus kepada wang.
Nota versi, tepat sehingga Ogos 2026: Asterisk 22 ialah keluaran sokongan jangka panjang semasa, diterbitkan pada Oktober 2024 dan menerima pembetulan keselamatan sehingga Oktober 2028. Asterisk 23 ialah keluaran standard. Ubuntu 24.04 membawa Asterisk 20.6.0 dalam repositori universe.
Memasang Asterisk pada Ubuntu 24.04
Pakej pengedaran merupakan cara terpantas. Ubuntu menyediakan patch untuknya dan ia akan bermula di bawah systemd secara automatik.
sudo apt update
sudo apt install -y asterisk
sudo asterisk -rx "core show version"Membina daripada sumber (source) membolehkan anda mendapatkan keluaran sokongan jangka panjang (LTS) terkini.
sudo apt update
sudo apt install -y build-essential wget
cd /usr/local/src
sudo wget https://downloads.asterisk.org/pub/telephony/asterisk/asterisk-22-current.tar.gz
sudo tar -xzf asterisk-22-current.tar.gz
cd asterisk-22.*
sudo contrib/scripts/install_prereq install
sudo ./configure
sudo make menuselect
sudo make -j"$(nproc)"
sudo make install
sudo make samples
sudo make config
sudo ldconfiginstall_prereq install menarik dependensi binaan untuk pengedaran anda, dan install_prereq test memaparkan arahan yang akan dijalankan tanpa mengubah apa-apa. make menuselect membuka pemilih modul, iaitu tempat anda mendayakan codec_opus di bawah Codec Translators. Jalankan make samples hanya pada pemasangan baharu, kerana ia menulis konfigurasi contoh ke dalam /etc/asterisk. make config memasang skrip init pada /etc/init.d/asterisk, dan systemd mengendalikannya melalui lapisan keserasian SysV, jadi sudo systemctl enable --now asterisk akan berfungsi selepas itu.
Tidak kira laluan yang anda ambil, sudo asterisk -rvvv akan bersambung ke daemon yang sedang berjalan dan memberikan anda CLI. Menjalankan core show version di situ akan memaparkan perkara yang sebenarnya telah anda pasang.
Konfigurasi trunk SIP dan satu sambungan
PJSIP ialah pemacu saluran SIP dalam Asterisk semasa. Konfigurasinya terletak di dalam /etc/asterisk/pjsip.conf dan dibina daripada bahagian-bahagian kecil berjenis yang merujuk antara satu sama lain mengikut nama. Bahagian daripada jenis yang berbeza boleh berkongsi nama yang sama, itulah sebabnya setiap blok di bawah dipanggil mytrunk.
[transport-udp]
type=transport
protocol=udp
bind=0.0.0.0
[mytrunk]
type=registration
outbound_auth=mytrunk
server_uri=sip:sip.example.com
client_uri=sip:1234567890@sip.example.com
retry_interval=60
[mytrunk]
type=auth
auth_type=userpass
username=1234567890
password=REPLACE_WITH_A_LONG_RANDOM_SECRET
[mytrunk]
type=aor
contact=sip:sip.example.com:5060
[mytrunk]
type=endpoint
context=from-trunk
disallow=all
allow=ulaw
outbound_auth=mytrunk
aors=mytrunk
[mytrunk]
type=identify
endpoint=mytrunk
match=sip.example.comObjek registration menghantar REGISTER yang memberitahu pembekal anda ke mana panggilan perlu dihantar. Objek identify ialah cara panggilan yang tiba daripada pembekal dipadankan dengan titik akhir (endpoint) ini melalui alamat sumber, dan pembekal biasanya menerbitkan beberapa alamat untuk disenaraikan di sana. Pendaftaran keluar dan titik akhir adalah objek yang berasingan secara sengaja: satu memberitahu pembekal di mana anda berada, satu lagi menentukan apa yang berlaku kepada panggilan tersebut.
Telefon meja memerlukan tiga objek lagi.
[6001]
type=endpoint
context=internal
disallow=all
allow=ulaw
auth=auth6001
aors=6001
direct_media=no
[auth6001]
type=auth
auth_type=userpass
username=6001
password=REPLACE_WITH_A_LONG_RANDOM_SECRET
[6001]
type=aor
max_contacts=1direct_media=no mengekalkan Asterisk dalam laluan media. Jika ditinggalkan, Asterisk akan cuba membuat kedua-dua titik akhir menghantar RTP terus antara satu sama lain, yang akan gagal apabila telefon berada di belakang NAT (network address translation) pada penghala rumah. Jangan sekali-kali membiarkan kata laluan (secret) sama dengan nombor sambungan. Contoh huluan menggunakan password=6001 untuk sambungan 6001 bagi memastikan contoh mudah dibaca, dan pengimbas akan mencuba corak itu terlebih dahulu.
Pelan dail (dialplan) dalam /etc/asterisk/extensions.conf menentukan perkara yang dibenarkan untuk dilakukan oleh setiap konteks.
[internal]
exten => 6001,1,Dial(PJSIP/6001,20)
exten => _9X.,1,Dial(PJSIP/${EXTEN:1}@mytrunk,60)
[from-trunk]
exten => 1234567890,1,Dial(PJSIP/6001,20)
same => n,Hangup()Kedua-dua konteks tersebut merupakan sempadan keselamatan. from-trunk mengendalikan panggilan yang tiba daripada pembekal dan hanya boleh mendail sambungan 6001. Ia tidak boleh mencapai corak _9X., jadi panggilan dari luar tidak boleh mendail keluar semula melalui trunk anda. Jika anda menggabungkan konteks tersebut, anda telah membina laluan penipuan caj (toll fraud) klasik: orang asing mendail nombor anda, pelan dail anda mendail keluar menggunakan akaun anda, dan anda yang menanggung kosnya.
Gunakan konfigurasi tersebut dan semak statusnya.
sudo asterisk -rx "pjsip reload"
sudo asterisk -rx "pjsip show registrations"
sudo asterisk -rx "pjsip show endpoints"pjsip show registrations sepatutnya menyenaraikan mytrunk dengan status Registered. Rejected bermaksud pembekal menolak kelayakan anda. Unregistered bermaksud REGISTER anda tidak dijawab, jadi periksa firewall seterusnya.
Peraturan firewall untuk SIP dan RTP
Isyarat (signalling) dan media memerlukan pengendalian yang berbeza kerana tahap risiko yang berlainan. Hadkan port 5060 kepada alamat yang benar-benar digunakan oleh pembekal anda dan kepada rangkaian tempat telefon anda berada.
sudo ufw allow proto udp from 203.0.113.10 to any port 5060
sudo ufw allow proto tcp from 203.0.113.10 to any port 5060
sudo ufw allow 10000:10200/udp
sudo ufw status verboseJulat RTP adalah bahagian yang tidak boleh dihadkan dengan ketat, kerana media sering tiba daripada alamat yang berbeza berbanding isyarat. Minta subnet media daripada pembekal anda dan hadkan kepada subnet tersebut jika mereka menyediakannya. Pastikan julat tersebut hanya sebesar yang diperlukan oleh waktu trafik puncak anda. Dasar lalai, susunan peraturan dan selebihnya daripada model ufw diliputi dalam panduan asas firewall ufw untuk VPS.
Semak juga IPv6. Jika IPV6=no ditetapkan dalam /etc/default/ufw, ufw tidak menapis IPv6 sama sekali, jadi daemon yang terikat pada :: boleh dicapai melalui IPv6 tanpa sebarang peraturan di atas digunakan. Membuka port untuk IPv6 dengan ufw menjelaskan perbezaan antara kedua-dua keluarga protokol tersebut. Kebanyakan pembekal juga menyediakan firewall rangkaian berasingan dalam panel kawalan, dan firewall tersebut dikuatkuasakan sebelum paket anda sampai ke VPS, jadi port perlu dibuka di kedua-dua lokasi.
Serangan brute force SIP dan penipuan caj panggilan bukan masalah pilihan
Letakkan port 5060 pada alamat awam dan imbasan akan bermula. Polanya tetap: permintaan REGISTER dan INVITE daripada banyak alamat sumber, mencuba nombor sambungan biasa dengan kata laluan yang lazim. Asterisk merekodkan setiap kegagalan, dan baris tersebut mempunyai bentuk ini.
Request 'REGISTER' from '<sip:1000@198.51.100.20>' failed for '198.51.100.20:5060' (callid: 5f1a5c0d) - No matching endpoint foundSebab perkara ini memerlukan usaha sebenar adalah wang. Sambungan yang dicuri digunakan untuk membuat panggilan antarabangsa yang mahal, selalunya ke nombor kadar premium yang membayar bahagian kepada penyerang, dan bil tersebut menjadi tanggungjawab anda kerana panggilan itu menggunakan kelayakan anda. Ia berjalan pada kelajuan mesin dan biasanya berlaku pada waktu malam.
Enam kawalan adalah mandatori dan bukannya pengukuhan pilihan.
- Jangan sekali-kali mencipta sambungan yang kata laluannya adalah nombornya sendiri atau perkataan pendek. Jana satu dengan
openssl rand -base64 24dan tampalkannya. - Biarkan panggilan masuk tanpa nama (anonymous) dimatikan. PJSIP menolak panggilan yang tidak dikenal pasti secara lalai dan hanya menerimanya jika anda mencipta endpoint bernama
anonymous. Jangan cipta satu pun. - Pastikan konteks trunk berasingan daripada mana-mana konteks yang boleh membuat panggilan keluar, seperti yang ditunjukkan di atas.
- Hadkan isyarat mengikut alamat sumber, kedua-duanya dalam ufw dan dalam firewall rangkaian pembekal anda.
- Tetapkan had perbelanjaan dengan pembekal trunk SIP anda dan nyahdayakan destinasi antarabangsa yang tidak pernah anda hubungi. Ini adalah satu-satunya kawalan yang mengehadkan kerugian apabila kawalan lain gagal.
- Jalankan fail2ban terhadap log Asterisk.
Asterisk juga boleh membangkitkan peristiwa keselamatan selepas permintaan yang tidak sepadan berulang daripada satu alamat. Bahagian [global] dalam pjsip.conf mengambil unidentified_request_count, yang secara lalai adalah 5, dan unidentified_request_period, yang secara lalai adalah 5 saat. Bersama-sama, ia bermakna lima permintaan yang tidak sepadan daripada satu alamat dalam masa lima saat menghasilkan peristiwa keselamatan yang boleh diambil tindakan oleh fail2ban.
Menyekat pengimbas dengan fail2ban
fail2ban membekalkan jail asterisk yang telah siap ditulis. Ia meliputi port 5060 dan 5061, membaca /var/log/asterisk/messages, dan menggunakan maxretry = 10 sebagai tetapan lalai. Jail tersebut kekal dimatikan sehingga anda mengaktifkannya dalam /etc/fail2ban/jail.local.
[asterisk]
enabled = true
maxretry = 5
findtime = 600
bantime = 86400sudo systemctl restart fail2ban
sudo fail2ban-client status asteriskHasil yang sihat akan menyenaraikan fail log jail tersebut serta jumlah alamat yang sedang disekat. Pada port 5060 yang awam, jumlah tersebut tidak akan kekal sifar dalam masa sehari. Penapis yang dibekalkan memadankan notis No matching endpoint found di atas, dan ia juga memadankan baris SecurityEvent berstruktur milik Asterisk. Peristiwa tersebut pergi ke saluran log berasingan yang dikomen dalam /etc/asterisk/logger.conf, jadi aktifkannya di sana dan tambah fail tersebut ke dalam logpath jail jika anda mahukannya.
[logfiles]
console => notice,warning,error
messages.log => notice,warning,error
security.log => securityMuat semula logger dengan sudo asterisk -rx "logger reload". Penapis tersebut juga membawa journalmatch untuk asterisk.service, jadi backend journal boleh berfungsi jika anda tidak mahu menyimpan fail log. Pemasangan, struktur jail.local dan cara menyahsekat alamat yang anda kunci diliputi dalam panduan fail2ban untuk Ubuntu 24.04.
Kependaman dan pemilihan codec pada VPS jarak jauh
Kelewatan ditentukan oleh geografi dan anda tidak boleh menghilangkannya melalui konfigurasi. ITU-T G.114 mengesyorkan agar kelewatan sehala dikekalkan di bawah 150 ms untuk perbualan biasa dan menganggap sehingga kira-kira 400 ms sebagai masih boleh digunakan. Audio daripada telefon pergi ke VPS anda dan kemudian keluar ke penyedia trunk anda, jadi VPS yang berada di wilayah yang salah akan menanggung perjalanan tersebut sebanyak dua kali. Letakkan VPS berhampiran dengan telefon atau berhampiran dengan penyedia, dan utamakan kedudukan berhampiran telefon apabila kedua-duanya berada di arah yang berbeza, kerana bahagian tersebut biasanya melalui internet pengguna di mana jitter adalah paling teruk.
Pemilihan codec menetapkan lebar jalur bagi setiap panggilan. Setiap codec di sini menghantar paket setiap 20 ms, iaitu 50 paket sesaat, dan setiap paket membawa 40 bait pengepala IP, UDP dan RTP sebagai tambahan kepada muatan audio.
The data behind this chart
[
{
"label": "G.711 ulaw",
"payload_kbps": 64,
"ip_kbps": 80
},
{
"label": "G.722",
"payload_kbps": 64,
"ip_kbps": 80
},
{
"label": "Opus at 24 kbps",
"payload_kbps": 24,
"ip_kbps": 40
},
{
"label": "G.729",
"payload_kbps": 8,
"ip_kbps": 24
}
]G.711 ulaw ialah lalai pada kebanyakan trunk. Muatannya ialah 64 kbps, dan dengan pengepala, panggilan yang sedang berlangsung menelan kos 80 kbps dalam setiap arah. Opus pada 24 kbps berada pada 40 kbps, dan G.729 turun kepada 24 kbps dengan mengorbankan kualiti audio dan masa CPU. Angka-angka ini adalah aritmetik pengepala dan bukannya ukuran: kadar muatan ditambah 40 bait setiap paket pada 50 paket sesaat. Pembingkaian Ethernet atau VLAN menambah sedikit lagi pada talian.
Transcoding menggunakan CPU. Jika telefon dan trunk anda kedua-duanya menggunakan ulaw, benarkan hanya ulaw dan Asterisk akan membiarkan audio tersebut tanpa diubah. Opus berfungsi dengan baik pada pautan yang mengalami kehilangan paket, tetapi transcoding antara Opus dan G.711 memerlukan modul luaran codec_opus, yang anda pilih dalam make menuselect dan yang tidak dibina secara lalai.
Perkara yang tergendala dan rentetan yang akan anda lihat
Panggilan bersambung tetapi tiada suara kedengaran. RTP tidak sampai. Sahkan julat dalam rtp.conf adalah julat yang anda buka dalam firewall, kemudian pantau paket dengan sudo tcpdump -ni any udp portrange 10000-10200 semasa anda membuat panggilan. Jika tiada paket langsung, bermakna firewall anda atau firewall rangkaian pembekal anda menggugurkan paket tersebut.
Audio hanya pada satu arah. Satu pihak menghantar RTP ke alamat yang tidak boleh menerimanya; ini adalah masalah alamat dan bukannya masalah port. Jika VPS anda mempunyai alamat awam terus pada antara mukanya, tiada pengendalian NAT diperlukan. Jika pembekal memberikan VPS alamat peribadi dengan pemetaan awam satu-ke-satu, tetapkan alamat awam pada transport dan senaraikan julat peribadi anda dalam local_net.
[transport-udp]
type=transport
protocol=udp
bind=0.0.0.0
local_net=10.0.0.0/8
external_media_address=198.51.100.5
external_signaling_address=198.51.100.5No matching endpoint found dalam log. Permintaan tidak sepadan dengan mana-mana titik akhir (endpoint) mengikut alamat IP atau nama pengguna. Jika ia datang daripada pengimbas, ini adalah perkara biasa dan fail2ban akan menanganinya. Jika ia datang daripada pembekal anda sendiri, bermakna bahagian identify tidak menyenaraikan alamat yang mereka gunakan untuk menghubungi anda.
Status pendaftaran ialah Rejected. Pembekal menolak kelayakan dalam bahagian auth anda. Jalankan pjsip set logger on pada CLI, perhatikan satu REGISTER dan respons kepadanya, kemudian bandingkan client_uri dan username dengan maklumat yang diberikan oleh pembekal anda.
Tiada maklumat berguna langsung dalam log. Asterisk menulis tahap notice dan ke atas ke messages.log secara lalai. Tingkatkan tahap log dengan core set verbose 4 dan pjsip set logger on semasa anda menghasilkan semula masalah tersebut, kemudian matikan kedua-duanya semula, kerana logger SIP menulis setiap paket.
Sebelum anda mendedahkannya
PBX tidak sama dengan aplikasi lain yang anda hoskan sendiri. Aplikasi web yang rosak hanya menyebabkan paparan ralat pada halaman. PBX yang rosak boleh menyebabkan bil telefon melambung tinggi dalam masa beberapa jam, semasa anda sedang tidur. Jalankan ia pada VPS yang tidak menjalankan tugas lain, hadkan port 5060 kepada alamat yang diketahui sahaja, berikan setiap sambungan (extension) kata laluan rawak, dan tetapkan had perbelanjaan pada akaun trunk. Bahagian lain pelayan memerlukan garis panduan keselamatan yang sama seperti mana-mana pelayan yang terdedah, yang diperincikan dalam tinjauan mengenai tahap keselamatan sebenar pengehosan VPS ini.
FAQ
Apakah port yang perlu saya buka untuk pelayan VoIP yang dihoskan sendiri?
Port 5060 untuk isyarat SIP melalui UDP dan TCP, port 5061 jika anda menggunakan SIP melalui TLS, dan julat port UDP untuk media RTP. Contoh rtp.conf Asterisk menggunakan 10000 hingga 20000, dan lalai yang dikompilasi adalah 5000 hingga 31000. Setiap panggilan menggunakan dua port daripada julat tersebut, jadi julat dua ratus port boleh mengendalikan seratus panggilan serentak. Buka julat RTP sebagai UDP, dan hadkan port 5060 kepada alamat pembekal anda dan rangkaian anda sendiri dan bukannya membiarkannya terbuka kepada semua orang.
Patutkah saya memasang Asterisk secara berasingan atau menggunakan FreePBX?
Pasang Asterisk mentah apabila anda mahukan permukaan serangan yang kecil dan fail konfigurasi yang boleh disimpan dalam git, serta anda sanggup menulis dialplan sendiri. Pasang FreePBX apabila anda mahukan GUI untuk sambungan, mel suara dan barisan panggilan. Sehingga Ogos 2026, pemasang FreePBX 17 memerlukan mesin Debian 12 kosong dan akan memasang Asterisk, pelayan web, pelayan pangkalan data dan PHP, jadi sediakan VPS khusus untuknya. FreePBX menjana semula fail konfigurasi yang diuruskannya, jadi suntingan manual perlu dilakukan dalam fail _custom miliknya.
Mengapakah tiada audio selepas panggilan bersambung?
Isyarat berjaya tetapi media tidak. SIP menetapkan panggilan pada port 5060, dan audio merupakan aliran UDP berasingan ke port dalam julat RTP yang mungkin disekat oleh sesuatu. Pastikan julat dalam rtp.conf sepadan dengan julat yang dibuka dalam firewall anda, dan periksa firewall rangkaian pembekal anda serta firewall pada pelayan. Jalankan sudo tcpdump -ni any udp portrange 10000-10200 semasa panggilan: tiada paket bermakna ia disekat sebelum sampai.
Bagaimanakah cara untuk menghentikan serangan kekerasan (brute force) SIP dan penipuan caj panggilan?
Berikan setiap sambungan kata laluan rawak yang panjang, jangan gunakan kata laluan yang sama dengan nombor sambungan. Pastikan konteks yang digunakan oleh trunk anda berasingan daripada mana-mana konteks yang boleh membuat panggilan keluar, supaya panggilan masuk tidak boleh membuat panggilan keluar menggunakan akaun anda. Hadkan port 5060 kepada alamat pembekal anda. Aktifkan jail asterisk dalam fail2ban, yang membaca /var/log/asterisk/messages dan menyekat alamat yang menghasilkan kegagalan No matching endpoint found. Kemudian, tetapkan had perbelanjaan dan sekat destinasi antarabangsa yang tidak digunakan melalui pembekal anda, kerana itu adalah satu-satunya kawalan yang mengehadkan kerugian jika langkah lain gagal.
Adakah VPS di wilayah yang jauh menjejaskan kualiti panggilan?
Ya, kerana audio melalui dua peringkat: telefon ke VPS, kemudian VPS ke pembekal trunk. ITU-T G.114 mengesyorkan kelewatan sehala di bawah 150 ms, dan VPS yang diletakkan di lokasi yang tidak sesuai boleh menghabiskan sebahagian besar bajet tersebut hanya disebabkan jarak. Pilih wilayah yang dekat dengan telefon, kerana peringkat tersebut biasanya berjalan melalui internet pengguna yang mempunyai jitter paling teruk. Pilihan codec tidak membaiki kelewatan, ia hanya mengubah lebar jalur, jadi G.729 menjimatkan bait tetapi tidak akan menyelamatkan laluan 200 ms.