اتصال تلفن دو دفتر با ترانک SIP بین دو ایزابل روی تونل EoIP میکروتیک
سرفصل: ویپ

شرکتی که دو دفتر در دو شهر دارد، معمولاً در هر دفتر یک مرکز تلفن ایزابل و یک روتر میکروتیک دارد. برای این‌که همکاران دو دفتر با شمارهٔ داخلی و بدون هزینهٔ مخابرات با هم صحبت کنند، دو چیز لازم است: یک ارتباط شبکه‌ای امن بین دو دفتر و یک ترانک بین دو ایزابل.

در این مقاله ارتباط شبکه را با تونل EoIP میکروتیک می‌سازیم و روی آن یک ترانک SIP بین دو ایزابل راه می‌اندازیم. دستورها برای RouterOS 7 و Issabel 4 نوشته شده‌اند.

سناریو

  • دفتر A: میکروتیک با آدرس عمومی 203.0.113.10، شبکهٔ داخلی 192.168.10.0/24، ایزابل 192.168.10.5، داخلی‌های 1XX
  • دفتر B: میکروتیک با آدرس عمومی 198.51.100.20، شبکهٔ داخلی 192.168.20.0/24، ایزابل 192.168.20.5، داخلی‌های 2XX

آدرس‌ها نمونه‌اند. دو شرط را از همین اول رعایت کنید:

  • محدودهٔ آدرس دو شبکهٔ داخلی یکی نباشد.
  • شمارهٔ داخلی‌های دو دفتر تداخل نداشته باشد؛ مثلاً دفتر A از ۱۰۱ تا ۱۹۹ و دفتر B از ۲۰۱ تا ۲۹۹.

چرا EoIP؟

EoIP (Ethernet over IP) تونل اختصاصی میکروتیک است که یک اینترفیس اترنت مجازی بین دو روتر می‌سازد. راه‌اندازی‌اش ساده است و با یک خط تنظیم، رمزنگاری IPsec هم می‌گیرد. دو محدودیت دارد:

  • هر دو طرف باید میکروتیک باشند.
  • هر دو روتر باید آدرس عمومی ثابت داشته باشند.

اگر یک طرف میکروتیک نیست، از IPsec استفاده کنید؛ مقالهٔ تونل IPsec بین MikroTik و Cisco همین را توضیح می‌دهد.

بریج یا مسیریابی؟

EoIP را به دو شکل می‌شود استفاده کرد:

  • بریج: تونل را با شبکهٔ داخلی بریج می‌کنید و دو دفتر یک شبکهٔ لایهٔ ۲ می‌شوند. ساده به نظر می‌رسد، اما Broadcast و DHCP هر دو دفتر از تونل عبور می‌کند و هر مشکلی در یک دفتر به دفتر دیگر سرایت می‌کند.
  • مسیریابی: به دو سر تونل آدرس می‌دهید و بین دو شبکه Route می‌نویسید. هر دفتر شبکهٔ خودش را دارد و فقط ترافیک لازم از تونل می‌گذرد.

برای ترانک بین دو ایزابل، روش مسیریابی پایدارتر و قابل کنترل‌تر است و این مقاله همین روش را پیش می‌برد.

تونل EoIP به‌صورت مسیریابی‌شده: یک شبکهٔ کوچک روی تونل و یک مسیر در هر روتر
تونل EoIP به‌صورت مسیریابی‌شده: یک شبکهٔ کوچک روی تونل و یک مسیر در هر روتر

بخش اول: تونل EoIP بین دو میکروتیک

۱. ساخت تونل

روی میکروتیک A:

/interface eoip add name=eoip-office-b local-address=203.0.113.10 remote-address=198.51.100.20 tunnel-id=10 ipsec-secret="Str0ng-Tunnel-Key" allow-fast-path=no keepalive=10s,5

روی میکروتیک B:

/interface eoip add name=eoip-office-a local-address=198.51.100.20 remote-address=203.0.113.10 tunnel-id=10 ipsec-secret="Str0ng-Tunnel-Key" allow-fast-path=no keepalive=10s,5

چند نکته:

  • tunnel-id در دو طرف باید یکی باشد.
  • ipsec-secret تونل را رمزنگاری می‌کند و در دو طرف باید یکسان باشد. بدون آن، مکالمه‌ها بدون رمز از اینترنت عبور می‌کنند. کلید خودتان را بگذارید، نه نمونهٔ این مقاله.
  • وقتی ipsec-secret تنظیم می‌شود، allow-fast-path باید no باشد.
  • keepalive باعث می‌شود اگر طرف مقابل در دسترس نبود، اینترفیس از حالت running خارج شود.

در Winbox همین تنظیمات در Interfaces → EoIP Tunnel است.

۲. آدرس دادن به دو سر تونل

یک شبکهٔ کوچک /30 فقط برای خود تونل در نظر می‌گیریم.

میکروتیک A:

/ip address add address=10.255.255.1/30 interface=eoip-office-b comment="EoIP to office B"

میکروتیک B:

/ip address add address=10.255.255.2/30 interface=eoip-office-a comment="EoIP to office A"

۳. مسیر به شبکهٔ دفتر مقابل

میکروتیک A:

/ip route add dst-address=192.168.20.0/24 gateway=10.255.255.2 comment="Office B LAN"

میکروتیک B:

/ip route add dst-address=192.168.10.0/24 gateway=10.255.255.1 comment="Office A LAN"

۴. فایروال روتر

به روتر مقابل اجازه بدهید تونل را برقرار کند. این قوانین را بالاتر از قانون drop زنجیرهٔ input بگذارید.

میکروتیک A (روی B همین قوانین با آدرس 203.0.113.10):

/ip firewall filter add chain=input action=accept protocol=udp dst-port=500,4500 src-address=198.51.100.20 comment="IKE from office B"
/ip firewall filter add chain=input action=accept protocol=ipsec-esp src-address=198.51.100.20 comment="ESP from office B"
/ip firewall filter add chain=input action=accept protocol=gre src-address=198.51.100.20 comment="EoIP from office B"

ترافیک دو دفتر از اینترفیس تونل خارج می‌شود، نه از اینترفیس اینترنت؛ پس اگر قانون masquerade شما با out-interface-list=WAN نوشته شده، به NAT Bypass نیازی نیست. اگر masquerade بدون اینترفیس خروجی نوشته شده، آن را به اینترفیس اینترنت محدود کنید.

۵. خاموش کردن SIP Helper

سرویس SIP ALG میکروتیک گاهی بسته‌های SIP را دست‌کاری می‌کند و باعث صدای یک‌طرفه یا قطع تماس می‌شود. روی هر دو روتر خاموشش کنید:

/ip firewall service-port disable sip

۶. آزمایش تونل

/interface eoip print
/ip ipsec active-peers print
/ping 10.255.255.2
/ping 192.168.20.5 src-address=192.168.10.1

در خروجی eoip print اینترفیس باید پرچم R (running) داشته باشد و در active-peers وضعیت established باشد. تا وقتی پینگ ایزابل مقابل جواب نمی‌دهد، سراغ ترانک نروید.

بخش دوم: ترانک SIP بین دو ایزابل

مسیر یک تماس بین دو دفتر: داخلی ۱۰۱، ایزابل A، تونل EoIP، ایزابل B و داخلی ۲۰۱
مسیر یک تماس بین دو دفتر: داخلی ۱۰۱، ایزابل A، تونل EoIP، ایزابل B و داخلی ۲۰۱

۱. معرفی شبکهٔ دفتر مقابل به ایزابل

اگر در ایزابل برای خط شهری یا سرویس‌دهندهٔ SIP، آدرس عمومی (External IP) تنظیم شده است، باید شبکهٔ دفتر مقابل را به‌عنوان شبکهٔ محلی معرفی کنید؛ وگرنه ایزابل برای آن هم آدرس عمومی می‌فرستد و صدا یک‌طرفه می‌شود.

در PBX → PBX Configuration → Asterisk SIP Settings، در بخش Local Networks:

  • روی ایزابل A: 192.168.20.0 / 255.255.255.0 را اضافه کنید.
  • روی ایزابل B: 192.168.10.0 / 255.255.255.0 را اضافه کنید.

۲. ساخت ترانک روی ایزابل A

از PBX → PBX Configuration → Trunks گزینهٔ Add SIP Trunk را بزنید.

  • Trunk Name: to-office-b
  • Outbound CallerID: خالی بماند تا شمارهٔ داخلی تماس‌گیرنده به طرف مقابل برسد.

در بخش Outgoing Settings:

  • Trunk Name: office-b
  • PEER Details:
host=192.168.20.5
type=friend
context=from-internal
qualify=yes
insecure=port,invite
nat=no
dtmfmode=rfc2833
disallow=all
allow=alaw&ulaw
deny=0.0.0.0/0.0.0.0
permit=192.168.20.5/255.255.255.255

بخش Incoming Settings و Register String را خالی بگذارید و Submit را بزنید.

۳. ساخت ترانک روی ایزابل B

همان کار، با نام و آدرس برعکس:

  • Trunk Name: to-office-a
  • Outgoing Settings → Trunk Name: office-a
  • PEER Details:
host=192.168.10.5
type=friend
context=from-internal
qualify=yes
insecure=port,invite
nat=no
dtmfmode=rfc2833
disallow=all
allow=alaw&ulaw
deny=0.0.0.0/0.0.0.0
permit=192.168.10.5/255.255.255.255

این ترانک با آدرس IP طرف مقابل را می‌شناسد، نه با نام کاربری و رمز. خطوط deny و permit تضمین می‌کنند فقط سرور ایزابل دفتر مقابل بتواند از این ترانک استفاده کند.

۴. مسیر خروجی (Outbound Route)

روی ایزابل A در Outbound Routes یک مسیر بسازید:

  • Route Name: to-office-b
  • Dial Patterns: در فیلد match pattern مقدار 2XX
  • Trunk Sequence: ترانک to-office-b

روی ایزابل B مسیری با الگوی 1XX و ترانک to-office-a بسازید.

این مسیر را در فهرست، بالاتر از مسیرهای خط شهری بگذارید و در پایان روی هر دو سرور Apply Config را بزنید.

۵. فایروال ایزابل

اگر فایروال ایزابل (Security → Firewall) فعال است، این دو مورد را فقط برای آدرس ایزابل مقابل مجاز کنید:

  • SIP: پورت UDP 5060
  • RTP (صدا): پورت‌های UDP 10000 تا 20000

آزمایش

روی هر سرور کنسول Asterisk را باز کنید:

asterisk -rvvv

وضعیت ترانک را ببینید:

sip show peers

جلوی office-b باید OK و زمان پاسخ بر حسب میلی‌ثانیه نوشته شده باشد. حالا از داخلی 101 شمارهٔ 201 را بگیرید و بعد برعکس. در هر دو جهت، صدای هر دو طرف را بررسی کنید.

اگر کار نکرد

  • ترانک UNREACHABLE است: ابتدا از خط فرمان ایزابل A آدرس 192.168.20.5 را پینگ کنید. اگر جواب نمی‌دهد، مشکل در تونل یا Route است، نه در ایزابل.
  • تماس برقرار می‌شود اما صدا یک‌طرفه است یا صدا نیست: شبکهٔ دفتر مقابل را در Local Networks اضافه نکرده‌اید، یا پورت‌های RTP در فایروال بسته است، یا SIP Helper میکروتیک روشن مانده.
  • تماس بعد از حدود ۳۰ ثانیه قطع می‌شود: معمولاً بستهٔ ACK به مقصد نمی‌رسد؛ همان سه مورد بالا را بررسی کنید.
  • شماره‌گیری به ترانک نمی‌رود: الگوی Outbound Route را بررسی کنید و مطمئن شوید مسیری با الگوی کلی‌تر بالاتر از آن نیست.
  • تونل running نیست: tunnel-id و ipsec-secret دو طرف را مقایسه کنید و ببینید پروتکل GRE و پورت‌های UDP 500 و 4500 در مسیر بسته نباشد.
  • صدا بریده‌بریده است: پهنای باند یا کیفیت اینترنت کافی نیست؛ بخش بعد را ببینید.

برای دیدن جزئیات یک تماس در کنسول Asterisk:

sip set debug peer office-b
rtp set debug on

بعد از بررسی، با sip set debug off و rtp set debug off خاموششان کنید.

پهنای باند و کیفیت صدا

هر مکالمه با کدک G.711 (alaw) در هر جهت حدود ۸۰ کیلوبیت بر ثانیه مصرف می‌کند و با سربار تونل و رمزنگاری به حدود ۱۲۰ کیلوبیت بر ثانیه می‌رسد. برای ۱۰ مکالمهٔ هم‌زمان، حدود ۱٫۲ مگابیت در هر جهت کنار بگذارید.

  • اگر اینترنت دفترها برای کارهای دیگر هم استفاده می‌شود، در میکروتیک برای ترافیک دو ایزابل اولویت تعریف کنید تا دانلود کاربران، صدا را خراب نکند.
  • تأخیر بالای ۱۵۰ میلی‌ثانیه و Jitter زیاد، حتی با پهنای باند کافی، کیفیت مکالمه را پایین می‌آورد. با پینگ طولانی بین دو ایزابل، پایداری لینک را بسنجید.

نکته‌های امنیتی

  • تونل را بدون ipsec-secret راه نیندازید؛ EoIP به‌تنهایی رمزنگاری ندارد.
  • context=from-internal یعنی تماس‌های دفتر مقابل همان دسترسی داخلی‌های محلی را دارند، از جمله خط شهری. این برای دو دفتر یک سازمان رایج است، اما اگر نمی‌خواهید دفتر مقابل از خطوط شهری شما استفاده کند، یک context محدودتر بسازید.
  • پورت SIP ایزابل را روی اینترنت باز نکنید؛ ترانک فقط از داخل تونل کار می‌کند.
  • بعد از راه‌اندازی، از هر دو روتر نسخهٔ پشتیبان بگیرید.

یک تونل EoIP رمزنگاری‌شده با دو آدرس و دو Route، دو شبکه را به هم وصل می‌کند؛ یک ترانک SIP و یک Outbound Route در هر ایزابل، تماس داخلی دو دفتر را برقرار می‌کند. ترتیب کار مهم است: اول تونل و پینگ، بعد ترانک. اگر ترجیح می‌دهید ترانک را با IAX2 بسازید، مقالهٔ ترانک بین دو ایزابل را ببینید.

  • Issabel
  • MikroTik
  • EoIP
  • SIP Trunk
  • VoIP
  • IPsec