SSD Nodes Learn Hosting plans →
मार्गदर्शक Matt Connorद्वारे Matt Connor

स्वतःचा VoIP सर्व्हर: Asterisk की FreePBX?

VPS वर Asterisk किंवा FreePBX चालवताना SIP trunk, RTP port ranges आणि scanner रोखणारे firewall rules कसे सेट करावेत, तसेच toll fraud कसा सुरू होतो ते जाणून घ्या.

स्वतः-होस्ट केलेला VoIP सर्व्हर म्हणजे काय

स्वतः-होस्ट केलेला VoIP सर्व्हर म्हणजे तुम्ही नियंत्रित करत असलेल्या VPS वर चालणारा SIP सर्व्हर. त्यामुळे तुमचे कॉल hosted phone service ऐवजी तुमच्या स्वतःच्या मशीनमार्फत route केले जातात. VoIP (voice over IP) मध्ये आवाज UDP packets म्हणून पाठवला जातो. SIP (session initiation protocol) हे कॉल सुरू आणि समाप्त करणारे signalling आहे. ऑडिओ SIP वरून प्रवास करत नाही. खालीलपैकी बहुतेक समस्या याच एका तथ्यामुळे निर्माण होतात.

कार्यरत प्रणालीसाठी चार भाग आवश्यक असतात.

  • PBX (private branch exchange) software. Asterisk ही नेहमीची निवड आहे. त्यात extensions आणि dialplan असतात.
  • Endpoints. Desk phones किंवा softphones username आणि secret वापरून PBX वर register होतात.
  • SIP trunk. हा provider कडील सशुल्क account असतो. तो तुम्हाला public telephone network शी जोडतो आणि प्रत्यक्ष phone numbers भाड्याने देतो.
  • Media path. RTP (real-time transport protocol) flows ऑडिओ स्वतंत्र UDP ports वरून वाहून नेतात.

PBX स्वतः host करण्याचा अर्थ phone numbers स्वतः host करणे असा नाही. Numbers carrier कडून मिळतात आणि प्रत्येक number तसेच प्रत्येक minute साठी तुम्हाला पैसे द्यावे लागतात. तुमच्या नियंत्रणात call routing, voicemail, recordings आणि extension list असतात. पैशांसाठी हल्ले करणाऱ्या लोकांपासून अशा सेवेची security राखण्याची जबाबदारीही तुमचीच असते.

स्वतः होस्ट केलेल्या VoIP सर्व्हरला कोणते पोर्ट आवश्यक असतात?

SIP signalling साठी UDP आणि TCP वर port 5060 वापरले जाते. SIP over TLS (transport layer security) साठी port 5061 वापरले जाते. या पोर्टवर फक्त call setup संदेश वाहून नेले जातात. प्रत्येक call चा audio स्वतंत्र UDP flow मधून पाठवला जातो. त्यासाठी RTP range मधील port वापरले जाते. Asterisk सोबत येणाऱ्या sample rtp.conf मध्ये rtpstart=10000 आणि rtpend=20000 सेट केलेले असतात. Compiled-in defaults 5000 आणि 31000 आहेत. प्रत्येक call साठी या range मधून दोन पोर्ट लागतात. एक RTP साठी आणि एक RTCP (RTP control protocol) साठी.

बहुतेक पहिल्या प्रयत्नांमध्ये अडचण याच विभाजनामुळे येते. Call connect होतो. दोन्ही फोन call answered दाखवतात. तरीही दोन्ही बाजूंना audio ऐकू येत नाही. याचे कारण firewall 5060 ला परवानगी देतो, पण प्रत्येक RTP packet टाकून देतो. Signalling आणि media हे स्वतंत्र flows आहेत. त्यामुळे त्यांच्यासाठी स्वतंत्र firewall rules आवश्यक असतात. हा फरक नवीन असल्यास, काहीही उघडण्यापूर्वी Linux वर ports आणि listening sockets कसे कार्य करतात हे वाचणे उपयुक्त ठरेल.

Port उघडण्यापूर्वी range लहान करा. वीस हजार ports लहान system साठी आवश्यकतेपेक्षा खूपच जास्त आहेत. प्रत्येक call साठी दोन ports लागतात. त्यामुळे दोनशे ports ची range एकाच वेळी शंभर calls साठी पुरेशी ठरते.

[general]
rtpstart=10000
rtpend=10200

sudo asterisk -rx "core reload" वापरून ते लागू करा.

Asterisk किंवा FreePBX स्थापित करावे?

Asterisk हे मुख्य इंजिन आहे. तुम्ही /etc/asterisk मधील मजकूर फाइल्सद्वारे त्याचे configuration करता आणि dialplan स्वतः लिहिता. FreePBX हा PHP आणि JavaScript मध्ये लिहिलेला web interface आहे. तो Asterisk वर चालतो, त्या फाइल्स तुमच्यासाठी तयार करतो आणि voicemail व call queues साठी modules जोडतो.

VPS वर महत्त्वाचा फरक म्हणजे मशीनचे ownership. October 2026 पर्यंत अधिकृत FreePBX 17 installer ला vanilla Debian 12 system अपेक्षित आहे. तो Asterisk, web server, database server आणि PHP स्थापित करतो. आधीपासून इतर services चालू असलेल्या मशीनवर तो installer चालवला, तर परिणाम समाधानकारक राहणार नाही. FreePBX साठी स्वतंत्र VPS वापरा.

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.sh

Install log timestamp असलेल्या freepbx17-install-YYYY.MM.DD-HH.MM.SS.log या स्वरूपाच्या नावाने /var/log/pbx/ मध्ये तयार होतो. त्यामुळे प्रत्येक run साठी स्वतंत्र file मिळते. Script लवकर थांबला, तर प्रथम हेच ठिकाण तपासा. नवीनतम file शोधण्यासाठी ls -t /var/log/pbx/freepbx17-install-*.log | head -1 वापरा.

FreePBX स्वतः तयार केलेल्या configuration files चे नियंत्रण ठेवतो. FreePBX box वर pjsip.conf हाताने edit केल्यास, GUI ने ती file पुढच्या वेळी लिहिल्यावर तुमचा बदल नाहीसा होतो. FreePBX मध्ये हाताने लिहिलेल्या configuration साठी नावात _custom असलेल्या स्वतंत्र files वापरल्या जातात. त्या files मध्ये FreePBX बदल करत नाही.

यातील वास्तविक तडजोड अशी आहे. FreePBX तुम्हाला GUI देते आणि तुमच्या phone system साठी login page सार्वजनिक internet वर उपलब्ध करते. Raw Asterisk मध्ये web surface अजिबात नसतो. प्रत्येक setting ही file मधील documented directive असते. ती वाचता येते आणि git मध्ये ठेवता येते. FreePBX स्थापित केल्यास त्याचा web port फक्त तुमच्या स्वतःच्या address साठी उपलब्ध ठेवा किंवा VPN द्वारे त्याला access करा. कारण PBX साठीचे admin GUI हे पैशांपर्यंत थेट मार्ग असलेले लक्ष्य असते.

Version note, October 2026 पर्यंत अचूक: Asterisk 22 हे सध्याचे long term support release आहे. ते October 2024 मध्ये प्रकाशित झाले. October 2028 पर्यंत त्याला पूर्ण support मिळतो. त्यानंतर October 2029 मधील end of life पर्यंत फक्त security fixes मिळतात. Asterisk 23 हे standard release आहे. Asterisk 24 हे पुढील long term support release आहे. ते 15 October 2026 रोजी scheduled आहे आणि 10 October रोजी अजूनही pre-release म्हणून सूचीबद्ध होते. Ubuntu 24.04 मध्ये universe repository मधील Asterisk 20.6.0 उपलब्ध आहे.

Ubuntu 24.04 वर Asterisk स्थापित करा

वितरणाचे package वापरणे हा जलद मार्ग आहे. Ubuntu त्यात आवश्यक patches लागू करते आणि ते systemd अंतर्गत आपोआप सुरू होते.

sudo apt update
sudo apt install -y asterisk
sudo asterisk -rx "core show version"

Source मधून build केल्यास त्याऐवजी सध्याचे long term support release मिळते.

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 ldconfig

install_prereq install तुमच्या distribution साठी build dependencies install करते, तर install_prereq test काहीही बदल न करता चालवली जाणारी commands दाखवते. make menuselect module picker उघडते. येथे Codec Translators अंतर्गत codec_opus enable करा. नवीन install वरच make samples चालवा, कारण ते sample configuration /etc/asterisk मध्ये लिहिते. make config init script /etc/init.d/asterisk येथे install करते. systemd ते आपल्या SysV compatibility layer द्वारे चालवते. त्यामुळे त्यानंतर sudo systemctl enable --now asterisk कार्य करते.

तुम्ही कोणताही मार्ग निवडला असला तरी sudo asterisk -rvvv चालू daemon शी जोडते आणि CLI देते. तेथे core show version चालवल्यास प्रत्यक्षात install केलेली आवृत्ती दाखवते.

SIP trunk आणि एक extension configure करणे

सध्याच्या Asterisk मध्ये PJSIP हा SIP channel driver आहे. त्याची configuration /etc/asterisk/pjsip.conf मध्ये असते आणि एकमेकांना नावाने reference करणाऱ्या लहान typed sections पासून ती तयार होते. वेगवेगळ्या प्रकारच्या sections चे नाव समान असू शकते. म्हणूनच खालील प्रत्येक block ला 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.com

registration object तुमच्या provider ला REGISTER पाठवतो. त्यातून provider ला तुमचे calls कुठे पाठवायचे हे कळते. Provider कडून येणारा call source address नुसार या endpoint शी जुळवण्यासाठी identify object वापरला जातो. Provider साधारणपणे येथे नोंदवण्यासाठी अनेक addresses देतो. Outbound registration आणि endpoint हे जाणीवपूर्वक स्वतंत्र objects आहेत. एक object provider ला तुम्ही कुठे आहात हे सांगतो. दुसरा object आलेल्या calls चे काय करायचे ते ठरवतो.

Desk phone साठी आणखी तीन objects आवश्यक आहेत.

[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=1

direct_media=no Asterisk ला media path मध्ये ठेवते. हे वगळल्यास Asterisk दोन्ही endpoints ना RTP थेट एकमेकांकडे पाठवण्याचा प्रयत्न करेल. Home router वरील NAT (network address translation) मागे phone असल्यास ते अपयशी ठरते. Secret आणि extension number कधीही समान ठेवू नका. उदाहरण वाचायला सोपे राहावे म्हणून upstream sample मध्ये extension 6001 साठी password=6001 वापरले आहे. Scanners सर्वप्रथम हाच pattern वापरून पाहतात.

/etc/asterisk/extensions.conf मधील dialplan प्रत्येक context ला कोणती कामे करण्याची परवानगी आहे ते ठरवतो.

[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()

हे दोन contexts security boundary म्हणून काम करतात. from-trunk provider कडून येणारे calls हाताळते आणि फक्त extension 6001 वर ring करू शकते. तिला _9X. pattern पर्यंत पोहोचता येत नाही. त्यामुळे बाहेरून आलेला call तुमच्या trunk द्वारे पुन्हा बाहेर call करू शकत नाही. Contexts merge केल्यास toll fraud साठी नेहमीचा मार्ग तयार होतो: एखादा अनोळखी व्यक्ती तुमच्या number वर call करतो, तुमचा dialplan तुमच्या account वरून बाहेर call करतो आणि त्याचा खर्च तुम्हाला भरावा लागतो.

Configuration लागू करा आणि ती तपासा.

sudo asterisk -rx "pjsip reload"
sudo asterisk -rx "pjsip show registrations"
sudo asterisk -rx "pjsip show endpoints"

pjsip show registrations मध्ये mytrunk ची नोंद Registered status सह दिसली पाहिजे. Rejected याचा अर्थ provider ने तुमची credentials नाकारली आहेत. Unregistered याचा अर्थ तुमच्या REGISTER ला उत्तर मिळत नाही. त्यामुळे पुढे firewall तपासा.

SIP आणि RTP साठी firewall नियम

Signalling आणि media यांना वेगवेगळी हाताळणी आवश्यक आहे, कारण त्यांच्यातील जोखीम वेगवेगळी असते. 5060 फक्त तुमचा provider प्रत्यक्षात वापरत असलेल्या addresses आणि तुमचे phones ज्या networks वर आहेत त्या networks साठीच अनुमत करा.

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 verbose

RTP range तितकी मर्यादित करता येत नाही, कारण media अनेकदा signalling पेक्षा वेगळ्या address वरून येतो. तुमच्या provider कडे त्यांच्या media subnets ची माहिती मागा. त्यांनी ती प्रकाशित केली असल्यास, access फक्त त्या subnets पर्यंत मर्यादित करा. सर्वाधिक वापराच्या तासासाठी आवश्यक असेल तेवढाच मोठा range ठेवा. Default policies, rule order आणि उर्वरित ufw model यांची माहिती VPS साठी ufw firewall मूलभूत मार्गदर्शक मध्ये दिली आहे.

IPv6 देखील तपासा. ufw मध्ये IPv6 default ने अनुमत असते. RTP rule प्रमाणे source address नसलेला rule दोन्ही address families वर लागू होतो. 5060 rules मध्ये IPv4 source दिलेला असल्यामुळे ते फक्त IPv4 शी जुळतात. त्यामुळे IPv6 वर signalling करणाऱ्या provider साठी स्वतंत्र rules आवश्यक आहेत. IPV6=no हे /etc/default/ufw मध्ये सेट करून ufw reload केल्याने IPv6 unfiltered राहत नाही. त्यामुळे IPv6 traffic फक्त loopback interface पर्यंत मर्यादित होते. ufw वापरून IPv6 साठी ports उघडणे या मार्गदर्शकात दोन्ही address families मधील फरक स्पष्ट केला आहे. बहुतेक providers control panel मध्ये स्वतंत्र network firewall देखील देतात. तुमचे packets VPS पर्यंत पोहोचण्यापूर्वी तो firewall लागू होतो. त्यामुळे port दोन्ही ठिकाणी open असणे आवश्यक आहे.

SIP brute force आणि toll fraud या ऐच्छिक समस्या नाहीत

5060 सार्वजनिक address वर ठेवताच scans सुरू होतात. पद्धत स्थिर असते: अनेक source addresses कडून REGISTER आणि INVITE requests येतात आणि त्यांमध्ये सामान्य extension numbers सोबत सामान्य secrets वापरून पाहिले जातात. Asterisk प्रत्येक अपयशाची नोंद करते. त्या नोंदीची रचना अशी असते.

Request 'REGISTER' from '<sip:1000@198.51.100.20>' failed for '198.51.100.20:5060' (callid: 5f1a5c0d) - No matching endpoint found

यासाठी प्रत्यक्ष प्रयत्न करणे आवश्यक आहे, कारण यात पैशांचा प्रश्न आहे. चोरीला गेलेला extension महागड्या international calls साठी वापरला जातो. हे calls अनेकदा premium rate numbers वर केले जातात. त्यातून attacker ला काही हिस्सा मिळतो. तुमची credentials वापरून calls केले असल्यामुळे bill तुमच्याकडे येतो. ही प्रक्रिया machine speed ने चालते आणि बहुतेक वेळा रात्रभर सुरू असते.

खालील सहा controls अनिवार्य आहेत. ते optional hardening नाहीत.

  • ज्याचा secret त्याच्याच number इतका किंवा एखादा लहान शब्द आहे असा extension कधीही तयार करू नका. openssl rand -base64 24 वापरून secret generate करा आणि तो paste करा.
  • anonymous inbound calls बंद ठेवा. PJSIP unidentified calls default ने नाकारते. anonymous नावाचा endpoint तयार केल्यासच ती अशी calls स्वीकारते. तो तयार करू नका.
  • वर दाखवल्याप्रमाणे trunk context हा dial out करू शकणाऱ्या कोणत्याही context पासून वेगळा ठेवा.
  • ufw आणि तुमच्या provider च्या network firewall या दोन्ही ठिकाणी source address नुसार signalling मर्यादित करा.
  • तुमच्या SIP trunk provider कडे spending cap सेट करा आणि तुम्ही कधीही call न करणारी international destinations बंद करा. इतर controls अपयशी ठरल्यास नुकसान मर्यादित करणारा हा एकमेव control आहे.
  • Asterisk log वर fail2ban चालवा.

एखादी request कोणत्याही endpoint शी जुळत नसली तरी Asterisk security event निर्माण करते. fail2ban या events वर कारवाई करू शकते. pjsip.conf मधील [global] section मध्ये unidentified_request_count घेतले जाते, ज्याचे default मूल्य 5 आहे, आणि unidentified_request_period घेतले जाते, ज्याचे default मूल्य 5 seconds आहे. मात्र auth_username हे endpoint_identifier_order मध्ये नमूद केले असल्यासच ही settings लागू होतात. त्या पद्धतीत credentials असलेली request येईपर्यंत event पुढे ढकलला जातो. त्यानंतर ही दोन settings त्या कालावधीत एका address कडून आलेल्या unmatched requests पैकी किती requests झाल्यावर event निर्माण करायचा हे ठरवतात. ip,username,anonymous च्या default order मध्ये unmatched requests कोणतेही deferral न करता security events निर्माण करतात.

स्कॅनरना fail2ban ने प्रतिबंधित करा

fail2ban मध्ये asterisk jail आधीपासून उपलब्ध आहे. ते 5060 आणि 5061 पोर्टचा समावेश करते, /var/log/asterisk/messages वाचते आणि maxretry = 10 हे default मूल्य वापरते. /etc/fail2ban/jail.local मध्ये enable करेपर्यंत हे jail बंद राहते.

[asterisk]
enabled = true
maxretry = 5
findtime = 600
bantime = 86400
sudo systemctl restart fail2ban
sudo fail2ban-client status asterisk

योग्य परिणामात jail ची log file आणि सध्या प्रतिबंधित केलेल्या addresses ची संख्या दिसते. सार्वजनिक 5060 पोर्टवर ही संख्या एका दिवसात शून्य राहात नाही. उपलब्ध filter वरील No matching endpoint found notices शी जुळतो. तो Asterisk च्या संरचित SecurityEvent lines शी देखील जुळतो. हे events स्वतंत्र log channel कडे पाठवले जातात. /etc/asterisk/logger.conf मध्ये हा channel comment केलेला आहे. हे events हवे असल्यास तेथे तो enable करा आणि jail च्या logpath मध्ये ती file जोडा.

[logfiles]
console => notice,warning,error
messages.log => notice,warning,error
security.log => security

sudo asterisk -rx "logger reload" ने logger reload करा. या filter मध्ये asterisk.service साठी journalmatch देखील आहे. त्यामुळे log files ठेवायच्या नसल्यास journal backend वापरता येतो. Installation, jail.local structure आणि चुकून स्वतःचा address lock out केल्यास तो unban करण्याची पद्धत Ubuntu 24.04 साठी fail2ban मार्गदर्शक मध्ये दिली आहे.

दूरस्थ VPS वरील latency आणि codec ची निवड

Latency भूगोलामुळे ठरते; ती configuration करून दूर करता येत नाही. ITU-T G.114 नुसार सामान्य संभाषणासाठी one-way delay 150 ms पेक्षा कमी ठेवावा आणि सुमारे 400 ms पर्यंतचा delay वापरण्यायोग्य मानला जातो. फोनवरील audio तुमच्या VPS पर्यंत जाते आणि तेथून trunk provider कडे जाते. त्यामुळे चुकीच्या region मधील VPS निवडल्यास हा प्रवास दोनदा करावा लागतो. VPS फोनजवळ किंवा provider जवळ ठेवा. हे दोन्ही पर्याय परस्परविरोधी असल्यास फोनजवळचा पर्याय निवडा, कारण तो मार्ग सहसा consumer internet वरून जातो आणि तेथे jitter सर्वाधिक असतो.

Codec ची निवड प्रत्येक call साठी लागणारी bandwidth ठरवते. येथे प्रत्येक codec दर 20 ms ला एक packet पाठवतो. म्हणजे 50 packets प्रति सेकंद. प्रत्येक packet मध्ये audio payload व्यतिरिक्त IP, UDP आणि RTP headers साठी 40 bytes असतात.

तक्ताBandwidth per concurrent call, one direction, 20 ms packets
या तक्त्यामागील डेटा
[
  {
    "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 हा बहुतांश trunks वरील default आहे. त्याचा payload 64 kbps आहे. Headers धरल्यास सुरू असलेल्या call साठी प्रत्येक दिशेने 80 kbps bandwidth लागते. Opus 24 kbps वर 40 kbps वापरतो. G.729 audio quality आणि CPU time यांची किंमत देऊन bandwidth 24 kbps पर्यंत कमी करतो. ही आकडेवारी measurements नसून headers वरील arithmetic आहे: payload rate अधिक 50 packets प्रति सेकंदांसाठी प्रत्येक packet चे 40 bytes. Ethernet किंवा VLAN framing मुळे wire वर आणखी थोडी bandwidth वाढते.

Transcoding साठी CPU लागतो. तुमचे phones आणि trunk दोन्ही ulaw वापरत असल्यास फक्त ulaw ला परवानगी द्या; Asterisk audio मध्ये कोणताही बदल न करता ते पुढे पाठवतो. Lossy links वर Opus चांगली कामगिरी करतो. मात्र Opus आणि G.711 यांच्यात transcoding करण्यासाठी बाह्य codec_opus module आवश्यक आहे. तो make menuselect मध्ये निवडता येतो आणि default configuration मध्ये build केलेला नसतो.

काय बिघडते आणि तुम्हाला दिसणारा संदेश

कॉल कनेक्ट होतो, पण कोणालाही आवाज ऐकू येत नाही. RTP पोहोचत नाही. rtp.conf मधील range तुम्ही firewall मध्ये उघडलेल्या range शी जुळते का ते तपासा. त्यानंतर कॉल करताना sudo tcpdump -ni any udp portrange 10000-10200 वापरून packets monitor करा. रिकामा capture म्हणजे filter शी जुळणारा कोणताही packet आढळला नाही, एवढेच त्यातून स्पष्ट होते. Packets सर्व्हरपर्यंत पोहोचण्यापूर्वीच थांबवले गेलेले असू शकतात. उदाहरणार्थ, तुमच्या provider च्या network firewall मुळे असे होऊ शकते. किंवा समोरील बाजू packets दुसऱ्या address वर किंवा या filter बाहेरील port वर पाठवत असू शकते. त्यामुळे pjsip set logger on दाखवत असलेल्या SDP मधील media address आणि port शी तुलना करा.

फक्त एका दिशेने audio ऐकू येतो. एका बाजूकडून RTP असा address वर पाठवला जात आहे जो तो स्वीकारू शकत नाही. ही port ची नव्हे तर address ची समस्या आहे. तुमच्या VPS च्या interface वर public address थेट दिलेला असल्यास NAT handling आवश्यक नाही. Provider ने VPS ला private address देऊन one to one public mapping केले असल्यास, transport वर public address सेट करा आणि तुमची private range 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.5

Log मध्ये No matching endpoint found. IP address किंवा username नुसार या request शी कोणताही endpoint जुळला नाही. Scanner कडून आलेल्या request साठी हे सामान्य आहे आणि fail2ban ते हाताळेल. तुमच्या स्वतःच्या provider कडून असे होत असल्यास, ते तुम्हाला ज्या address वरून call करतात तो address identify section मध्ये नमूद केलेला नाही.

Registration status Rejected आहे. Provider ने तुमच्या auth section मधील credentials नाकारले. CLI मध्ये pjsip set logger on चालवा. एक REGISTER आणि त्याला मिळालेला response monitor करा. त्यानंतर client_uri आणि username यांची provider ने दिलेल्या माहितीसोबत तुलना करा.

Log मध्ये काहीही उपयुक्त दिसत नाही. Asterisk default नुसार notice level आणि त्यापुढील logs messages.log मध्ये लिहितो. समस्या पुन्हा निर्माण करताना core set verbose 4 आणि pjsip set logger on वापरून हा level वाढवा. त्यानंतर दोन्ही बंद करा, कारण SIP logger प्रत्येक packet लिहितो.

प्रवेशासाठी ते सार्वजनिक करण्यापूर्वी

PBX हे तुम्ही स्वतः host करत असलेल्या इतर सेवांसारखे नाही. वेब अॅपमध्ये बिघाड झाला, तर एखादे पेज उपलब्ध होत नाही. PBX मध्ये बिघाड झाला, तर तुम्ही झोपलेले असताना काही तासांत मोठे फोन बिल येऊ शकते. ते इतर कोणतेही काम न करणाऱ्या VPS वर चालवा. 5060 पोर्टचा प्रवेश केवळ ज्ञात पत्त्यांपुरता मर्यादित ठेवा. प्रत्येक extension साठी यादृच्छिक secret वापरा. Trunk account वर खर्चाची कमाल मर्यादा सेट करा. उर्वरित सर्व्हरसाठी कोणत्याही सार्वजनिकरीत्या उघडलेल्या सर्व्हरसारखीच मूलभूत सुरक्षा आवश्यक आहे. VPS hosting खरोखर किती सुरक्षित आहे याचा हा आढावा त्याचे वर्णन करतो.

FAQ

self-hosted VoIP server साठी कोणते ports उघडावे लागतात?

UDP आणि TCP वर SIP signalling साठी port 5060 उघडा. SIP over TLS वापरत असल्यास port 5061 उघडा. RTP media साठी UDP ports ची एक range उघडा. Asterisk च्या नमुना rtp.conf मध्ये 10000 ते 20000 ही range वापरली आहे. Compiled-in defaults 5000 ते 31000 आहेत. प्रत्येक call साठी या range मधील दोन ports लागतात. त्यामुळे दोनशे ports ची range एकावेळी शंभर calls हाताळते. RTP range UDP म्हणून उघडा. 5060 सर्वांसाठी उघडे ठेवू नका; ते तुमच्या provider च्या addresses आणि तुमच्या स्वतःच्या networks पर्यंत मर्यादित ठेवा.

Asterisk स्वतंत्रपणे install करावे की FreePBX वापरावे?

कमी attack surface हवे असल्यास आणि git मध्ये ठेवता येणाऱ्या configuration files हव्या असल्यास raw Asterisk install करा. Dialplan स्वतः लिहिण्याची तयारी असावी. Extensions, voicemail आणि call queues साठी GUI हवे असल्यास FreePBX install करा. October 2026 पर्यंत FreePBX 17 installer ला vanilla Debian 12 machine अपेक्षित आहे. तो Asterisk, web server, database server आणि PHP install करतो. त्यामुळे FreePBX साठी स्वतंत्र VPS द्या. FreePBX स्वतः व्यवस्थापित करत असलेल्या config files पुन्हा तयार करतो. त्यामुळे हाताने केलेले बदल त्याच्या _custom files मध्येच असावेत.

Call connect झाल्यानंतर audio का येत नाही?

Signalling यशस्वी झाले आहे, पण media प्रवाह यशस्वी झालेला नाही. SIP ने port 5060 वर call स्थापित केला. Audio हा RTP range मधील एखाद्या port कडे जाणारा स्वतंत्र UDP flow असतो. काहीतरी तो flow drop करत आहे. rtp.conf मधील range तुमच्या firewall मध्ये उघडलेल्या range शी जुळते का ते तपासा. Provider चा network firewall आणि server वरील firewall दोन्ही तपासा. Call सुरू असताना sudo tcpdump -ni any udp portrange 10000-10200 चालवा. Capture रिकामे असणे म्हणजे फक्त जुळणारे packets दिसले नाहीत. ते येण्यापूर्वी block झालेले असू शकतात किंवा filter च्या बाहेरील address किंवा port कडे पाठवलेले असू शकतात.

SIP brute force attacks आणि toll fraud कसे थांबवावे?

प्रत्येक extension साठी लांब, random secret द्या. Extension number शी जुळणारे secret कधीही वापरू नका. तुमच्या trunk साठी वापरला जाणारा context बाहेरच्या calls करू शकणाऱ्या context पासून स्वतंत्र ठेवा. त्यामुळे inbound call तुमच्या account वरून पुन्हा बाहेर call करू शकणार नाही. Port 5060 तुमच्या provider च्या addresses पर्यंत मर्यादित ठेवा. fail2ban मध्ये asterisk jail enable करा. ते /var/log/asterisk/messages वाचते आणि No matching endpoint found failures निर्माण करणाऱ्या addresses वर ban लावते. त्यानंतर provider कडे spending cap सेट करा आणि न वापरली जाणारी international destinations block करा. बाकीचे controls अपयशी ठरल्यास होणारा तोटा मर्यादित करणारे हेच एकमेव control आहे.

दूरच्या region मधील VPS मुळे call quality खराब होते का?

होय. Audio दोन legs मधून जाते: phone ते VPS आणि नंतर VPS ते trunk provider. ITU-T G.114 one-way delay 150 ms पेक्षा कमी असण्याची शिफारस करते. चुकीच्या ठिकाणी असलेला VPS हा संपूर्ण budget केवळ अंतरामुळेच मोठ्या प्रमाणात वापरू शकतो. Phones च्या जवळचा region निवडा. ही leg सहसा consumer internet वरून जाते आणि त्यात jitter सर्वाधिक असतो. Codec निवडल्याने network delay दूर होत नाही. Codec bandwidth बदलतो आणि स्वतःचा काही coding व packetization delay जोडतो. RFC 6716 नुसार Opus चे algorithmic delays 5 ms ते 65.2 ms असू शकतात. त्यामुळे G.729 bytes वाचवते, पण 200 ms path सुधारू शकत नाही.

हा लेख उपयुक्त होता का?

#voip#asterisk#freepbx#sip#self-hosting