یکی از مباحثی که در راه اندازی شبکه های VoIP رایج است، برقراری ارتباط میان دو سرور تلفنی می باشد. به عنوان مثال دو سرور تلفنی را در نظر بگیرید که در دو مکان مجزا در حال سرویس دهی به کاربران خود می باشند و لازم است تا کاربران این دو سیستم نیز بتوانند با یکدیگر تماس داشته باشند. برای این منظور، لازم است تا یک کانال ارتباطی میان دو سرور تلفنی ایجاد گردد و ارتباطات میان داخلی های این دو سیستم از طریق این کانال برقرار شود.
در سیستم های تلفنی مبتنی بر استریسک چند روش برای برقراری چنین ارتباطاتی وجود دارد که در ادامه به بررسی آن ها پرداخته شده است. همچنین برای درک بهتر تنظیمات از سیستم تلفنی محبوب FreePBX نسخه ۱۳ استفاده شده است. طبیعی است این متد ها قابلیت بکارگیری در سیستم الستیکس را نیز دارند.
همانطور که گفته شد، برای برقراری ارتباط میان دو سرور استریسک، روش های مختلفی وجود دارد، اما همگی مبتنی بر دو پروتکل ارتباطی یعنی IAX و SIP هستند. پس روش برقراری ارتباط از طریق این دو پروتکل را بررسی می کنیم.
در این آموزش مفروضات زیر را در نظر بگیرید:
دو سرور تلفنی :
۱- FreePBX1 : آدرس IP : 192.168.1.50
2- FreePBX2 : آدرس IP : 192.168.1.60
روش اول: برقراری ارتباط میان دو سرور FreePBX از طریق IAX2:
همانطور که می دانید IAX2 یک پروتکل ارتباطی خاص استریسک می باشد و پیاده سازی آن طوری است که پیچیدگی های پروتکل SIP را ندارد؛ به همین دلیل یکی از ساده ترین روش ها جهت برقراری ارتباط دو سرور تلفنی مبتنی بر استریسک همچون FreePBX، اتصال از طریق ترانک IAX2 می باشد.
برای این کار لازم است ابتدا بر روی هر دو سرور یک ترانک از نوع IAX2 ایجاد کرده و سپس برای شماره گیری داخلی های هر طرف یک مسیر خروجی (Outbound Route) تعریف نمایید.
پس ابتدا بر روی سرور FreePBX1، وارد بخش Connectivity و سپس Trunks شوید و با کلیک بر روی Add Trunk یک ترانک جدید از نوع IAX2 تعریف کنید.
در بخش General، نام ترانک و در بخش Outbound CallerID، مقدار دلخواهی را با عنوان Caller-ID تعریف نمایید.
سپس وارد تب iax settings شوید و تنظیمات زیر را انجام دهید:
Trunk Name: freepbx1
host=192.168.1.60
type=friend
context=from-internal
qualify=yes
که در آن می بایست نام دلخواه برای ترانک وارد کنید. سپس آدرس IP سرور دوم را در host وارد نمایید. همچنین برای اینکه به کانتکست داخلی های سیستم مقابل دسترسی امکان پذیر باشد، کانتکست را from-internal وارد کنید.
دقیقا همین روند را نیز باید در سرور دوم که در اینجا سرور FreePBX2 هست، انجام دهید. یعنی:
Trunk Name: freepbx2
host=192.168.1.50
type=friend
context=from-internal
qualify=yes
پس از تعریف ترانک ها، می بایست در هر دو سرور یک مسیر خروجی برای شماره گیری داخلی های سرور مقابل، تعریف گردد. به عنوان مثال می توان یک پیش شماره ثابت برای شماره گیری داخلی های سیستم مقابل در نظر گرفت و یا اگر داخلی های دو سیستم دارای رنج های مختلف هستند، برای هر رنج، مسیر خروجی تعریف کرد.
به عنوان مثال می توان گفت تمامی شماره های ۳ رقمی با پیش شماره ۸ از طریق این ترانک به سرور مقابل هدایت شود:
۸XXX
و یا اینکه اگر داخلی های سرور FreePBX1 رنج ۳۰۰ تا ۳۵۹ هستند و داخلی های سرور FreePBX2 رنج ۶۰۰ تا ۶۶۰ هستند، الگوی خاص برای آن ها تعریف نمایید:
۳[۰-۵]X
6[0-6]X
بر همین اساس از طریق منوی Connectivity و بخش Outbound Routes یک مسیر خروجی با الگوی دلخواه تعریف کرده و سپس ترانک تعریف شده در مرحله قبل را برای این مسیر خروجی انتخاب نمایید:
پس از تعریف مسیرهای خروجی بر روی هر سرور ها، ارتباط دو سرور برقرار شده و می توانید بین داخلی های دو سیستم تماس برقرار نمایید.
روش دوم : برقراری ارتباط میان دو سرور FreePBX از طریق SIP:
در مقابل IAX2، پروتکل استاندارد و پرکاربرد SIP وجود دارد و برخی ترجیح می دهند ارتباط دو سرور را از طریق این پروتکل برقرار نمایند. البته باید توجه داشت که در صورت برقراری ارتباط میان دو سرور از روی اینترنت، تنظمیات NAT Traversal می بایست به دقت انجام شود.
برای برقراری ارتباط میان دو سرور FreePBX از طریق ترانک SIP، مراحل دقیقا مشابه مراحل روش قبلی است و تنها تفاوت در نوع ترانک و تنظمیات آن می باشد. لذا تنها به این تفاوت ها می پردازیم و تعاریف مربوط به مسیرهای خروجی مشابه قبل انجام می پذیرد.
پس از بخش Trunks، یک ترانک از نوع chan_sip ایجاد نمایید و پس از وارد کردن نام و مقدار Caller-ID به تب SIP Settings وارد شوید. در این تب می بایست تنظیمات ضروری زیر را قرار دهید:
سرور FreePBX1:
Trunk Name : freepbx2
host=192.168.1.60
port=5061
username=freepbx1
fromuser=freepbx1
secret=123456
type=friend
context=from-internal
trustrpid=yes
sendrpid=yes
سرور FreePBX2:
Trunk Name : freepbx1
host=192.168.1.60
port=5061
username=freepbx2
fromuser=freepbx2
secret=123456
type=friend
context=from-internal
trustrpid=yes
sendrpid=yes
در تنظیمات فوق چند نکته مهم وجود دارد که می بایست به آن دقت کرد:
نام ترانک: هنگامی که از هر یک از سیستم های فوق تماسی به سیستم دیگر وارد شود، مبدا این تماس برابر با مقدار fromuser ست می شود. پس از آن، از طرف سرور مقابل درخواست authenticate داده می شود. در این درخواست نام کاربری برابر با مقدار username و رمز عبور ست شده در مقدار secret مورد استفاده قرار می گیرد.
پس از دریافت اطلاعات authenticate، سرور مقصد به دنبال کانتکست با نام برابر با مقدار قرار گرفته در درخواست دریافتی، می گردد. و پس از یافتن آن نام کاربری و رمز عبور را با مقدار داخل آن مطابقت می دهد و اگر برابر بود، اجازه برقراری مکالمه داده می شود.
به عبارت ساده تر در مثال بالا، هنگام تماس از سرور FreePBX1 به سرور FreePBX2، درخواست INVITE، حاوی نام کاربری freepbx1 می باشد. سرور دوم با دریافت این درخواست، از سرور اول درخواست ارسال اطلاعات authentication می نماید. سرور FreePBX1 نام کاربری freepbx1 و رمز عبور ۱۲۳۴۵۶ را در پیام INVITE قرار می دهد و مجددا برای سرور دوم ارسال می کند. در این مرحله، سرور FreePBX2، به دنبال یک peer با عنوان freepbx1 می گردد و پس از یافتن آن، نام کاربری و رمز عبور درخواست آمده از سرور FreePBX1 را با آن مطابقت می دهد؛ و در صورت تطابق آن را به کانتکست مربوطه هدایت می نماید.
پس برای هدایت و دسترسی به کانتکست داخلی ها، کانتکست from-internal ست شده است. علاوه بر این، برای اینکه شماره داخلی تماس گیرنده به جای نام ترانک، نمایش داده شود، لازم است تا RPID مورد استفاده قرار گیرد.
در نمونه آزمایشی ما به دلیل اینکه پورت پیش فرض یعنی ۵۰۶۰ به chan_pjsip اختصاص یافته بود، با استفاده از پارامتر port، پورت مربوط به chan_sip سرور مقابل را نیز معرفی کرده ایم.
پس از انجام این تنظیمات، ارتباط دو طرفه دو سرور با یکدیگر به راحتی برقرار می شود.