ΠœΠΎΡΡ‚Π° статия Π½Π΅ Π΅ пълно описаниС Π½Π° ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚Π°, Π° само Π»Π΅ΠΊΠΎ ΠΏΠΎΠ΄ΠΎΠ±Ρ€Π΅Π½ΠΈΠ΅ Π½Π° Π΄ΠΎΠ±Ρ€Π°Ρ‚Π° публикация "FusionPBX, ΠΈΠ»ΠΈ ΠΎΡ‚Π½ΠΎΠ²ΠΎ страхотно, FreeSWITCH". Π‘Ρ‚Ρ€ΡƒΠ²Π° ΠΌΠΈ сС, Ρ‡Π΅ Ρ‚Π΅ΠΌΠ°Ρ‚Π° Π·Π° ACL във FusionPBX Π½Π΅ Π΅ ΠΌΠ½ΠΎΠ³ΠΎ Π΄ΠΎΠ±Ρ€Π΅ Ρ€Π°Π·ΠΊΡ€ΠΈΡ‚Π° Π² Π½Π΅Π³ΠΎ. Π©Π΅ сС ΠΎΠΏΠΈΡ‚Π°ΠΌ Π΄Π° запълня Ρ‚Π°Π·ΠΈ ΠΏΡ€Π°Π·Π½ΠΈΠ½Π° въз основа Π½Π° собствСния си ΠΎΠΏΠΈΡ‚ с FreeSWITCH/FusionPBX.

И Ρ‚Π°ΠΊΠ°, ΠΈΠΌΠ°ΠΌΠ΅ инсталирана FusionPBX с рСгистриран Π²ΡŠΡ‚Ρ€Π΅ΡˆΠ΅Π½ Π½ΠΎΠΌΠ΅Ρ€ 1010 Π² Π΄ΠΎΠΌΠ΅ΠΉΠ½Π° domain.local ΠΈ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€ΠΈΡ€Π°Π½ ΠΌΠ°Ρ€ΡˆΡ€ΡƒΡ‚ Π·Π° външни Ρ€Π°Π·Π³ΠΎΠ²ΠΎΡ€ΠΈ към Π³Ρ€Π°Π΄Π°. ИзползвамС ACL, Π·Π° Π΄Π° Π·Π°Ρ‰ΠΈΡ‚ΠΈΠΌ Π½Π°ΡˆΠ°Ρ‚Π° Ρ‚Π΅Π»Π΅Ρ„ΠΎΠ½Π½Π° систСма ΠΎΡ‚ Π½Π΅Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΈ обаТдания, ΠΊΠΎΠΈΡ‚ΠΎ Ρ‰Π΅ Π½ΠΈ ΠΎΡ‚Π½Π΅ΠΌΠ°Ρ‚ ΠΏΠ°Ρ€ΠΈΡ‚Π΅. Π’Π΅Π·ΠΈ. само ΠΎΡ‚ ΠΌΡ€Π΅ΠΆΠΈΡ‚Π΅, описани Π² ACL, позволяват изходящи повиквания. И Ρ‚ΡƒΠΊ сС Π½ΡƒΠΆΠ΄Π°Π΅Ρ‚Π΅ ΠΎΡ‚ напълно ясно Ρ€Π°Π·Π±ΠΈΡ€Π°Π½Π΅ Π·Π° Ρ‚ΠΎΠ²Π° ΠΊΠ°ΠΊ ACL Ρ€Π°Π±ΠΎΡ‚ΠΈ във FusionPBX, Π½Π΅Π³ΠΎΠ²ΠΈΡ‚Π΅ характСристики, Π»ΠΎΠ³ΠΈΠΊΠ° ΠΈ Π½Π΅Π³ΠΎΠ²Π°Ρ‚Π° ΠΎΠΏΠΎΡ€Π½Π° Ρ‚ΠΎΡ‡ΠΊΠ°.

Подобно Π½Π° уваТавания Π°Π²Ρ‚ΠΎΡ€ Π½Π° Π³ΠΎΡ€Π½Π°Ρ‚Π° статия, Π°Π· ΡΡŠΡ‰ΠΎ ΡΡ‚ΡŠΠΏΠΈΡ… Π½Π° всички Π³Ρ€Π΅Π±Π»Π°, ΡΠ²ΡŠΡ€Π·Π°Π½ΠΈ с ACL.

Π©Π΅ Π·Π°ΠΏΠΎΡ‡Π½Π° с SipProfiles.
И Π΄Π²Π°Ρ‚Π° ΠΏΡ€ΠΎΡ„ΠΈΠ»Π° (Ρ‰Π΅ Π³ΠΈ Π½Π°Ρ€Π΅ΠΊΠ° Ρ‚Π°ΠΊΠ°), ΠΈ Π²ΡŠΡ‚Ρ€Π΅ΡˆΠ½ΠΈΡ, ΠΈ външния, са Π² ΠŸΡƒΠ±Π»ΠΈΡ‡Π΅Π½ контСкст ΠΈ Ρ‚ΠΎΠ²Π° Π½Π΅ Π΅ случайно. РСгистрацията Π½Π° Π½ΠΎΠΌΠ΅Ρ€Π° става във Π²ΡŠΡ‚Ρ€Π΅ΡˆΠ½ΠΈΡ ΠΏΡ€ΠΎΡ„ΠΈΠ» ΠΈ Π½ΠΈΠ΅ Ρ‰Π΅ ΠΎΠ±ΡŠΡ€Π½Π΅ΠΌ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° Ρ‚ΠΎΠ²Π°. Π’ΡŠΠ² Π²ΡŠΡ‚Ρ€Π΅ΡˆΠ½ΠΈΡ ΠΏΡ€ΠΎΡ„ΠΈΠ» ACL Π½Π° Π΄ΠΎΠΌΠ΅ΠΉΠ½ΠΈΡ‚Π΅ Π΅ ΠΎΠ±Π²ΡŠΡ€Π·Π°Π½ ΠΊΠ°Ρ‚ΠΎ apply-inbound-acl. ИмСнно Ρ‚ΠΎΠ·ΠΈ Ρ€Π΅Π΄ Π΅ ΠΎΡ‚Π³ΠΎΠ²ΠΎΡ€Π΅Π½ Π·Π° Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚Π° Π½Π° ACL Π½Π° Π½ΠΈΠ²ΠΎ ΠΏΡ€ΠΎΡ„ΠΈΠ». ЗасСга Ρ‚ΠΎΠ²Π° Π΅ с ΠΏΡ€ΠΎΡ„ΠΈΠ»ΠΈΡ‚Π΅.

ΠšΠΎΠ½Ρ‚Π΅ΠΊΡΡ‚

ΠšΠΎΠ½Ρ‚Π΅ΠΊΡΡ‚ΡŠΡ‚ сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°, Π½Π°Ρ€Π΅Π΄ с Π΄Ρ€ΡƒΠ³ΠΈ Π½Π΅Ρ‰Π°, ΠΏΡ€ΠΈ ΠΌΠ°Ρ€ΡˆΡ€ΡƒΡ‚ΠΈΠ·ΠΈΡ€Π°Π½Π΅Ρ‚ΠΎ Π½Π° повикванията. Всички входящи ΠΌΠ°Ρ€ΡˆΡ€ΡƒΡ‚ΠΈ са ΠΎΠ±Π²ΡŠΡ€Π·Π°Π½ΠΈ с публичния контСкст.

Π˜Π·Ρ…ΠΎΠ΄ΡΡ‰ΠΈΡ‚Π΅ (към Π³Ρ€Π°Π΄Π°, към ΠΊΠ»Π΅Ρ‚ΡŠΡ‡Π½Π°Ρ‚Π° ΠΌΡ€Π΅ΠΆΠ°, дълги разстояния, ΠΌΠ΅ΠΆΠ΄ΡƒΠ½Π°Ρ€ΠΎΠ΄Π½ΠΈ ΠΈ всякакви Π΄Ρ€ΡƒΠ³ΠΈ) ΠΌΠ°Ρ€ΡˆΡ€ΡƒΡ‚ΠΈ са (ΠΏΠΎ ΠΏΠΎΠ΄Ρ€Π°Π·Π±ΠΈΡ€Π°Π½Π΅) Π² контСкста Π½Π° ΠΈΠΌΠ΅ Π½Π° Π΄ΠΎΠΌΠ΅ΠΉΠ½ (Π½Π΅ΠΊΠ° Π³ΠΎ Π½Π°Ρ€Π΅Ρ‡Π΅ΠΌ domain.local).

ACL

Π‘Π΅Π³Π° Π½Π΅ΠΊΠ° сС Π·Π°Π΅ΠΌΠ΅ΠΌ с ACL. По ΠΏΠΎΠ΄Ρ€Π°Π·Π±ΠΈΡ€Π°Π½Π΅ прясно инсталирана FusionPBX ΠΈΠΌΠ° Π΄Π²Π° ACL:

Π΄ΠΎΠΌΠ΅ΠΉΠ½ΠΈ дСйствиС ΠΏΠΎ ΠΏΠΎΠ΄Ρ€Π°Π·Π±ΠΈΡ€Π°Π½Π΅: ΠΎΡ‚ΠΊΠ°Π· - Ρ‚ΠΎΠ·ΠΈ лист Π΅ ΠΎΠ±Π²ΡŠΡ€Π·Π°Π½ с Π²ΡŠΡ‚Ρ€Π΅ΡˆΠ½ΠΈΡ ΠΏΡ€ΠΎΡ„ΠΈΠ»
lan дСйствиС ΠΏΠΎ ΠΏΠΎΠ΄Ρ€Π°Π·Π±ΠΈΡ€Π°Π½Π΅: Ρ€Π°Π·Ρ€Π΅ΡˆΠΈ

Π’ списъка с ACL Π½Π° Π΄ΠΎΠΌΠ΅ΠΉΠ½ΠΈ Π½ΠΈΠ΅ прСдписвамС ΠΌΡ€Π΅ΠΆΠ°Ρ‚Π° (Π΄ΠΎΠ±Ρ€Π΅, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ 192.168.0.0/24), ΠΏΡ€Π°Π²ΠΈΠΌ Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ Π·Π° Ρ€Π°Π·Ρ€Π΅ΡˆΠ°Π²Π°Π½Π΅ Π½Π° Ρ‚Π°Π·ΠΈ ΠΌΡ€Π΅ΠΆΠ°, ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌΠ΅ reloadacl.

Π‘Π»Π΅Π΄ Ρ‚ΠΎΠ²Π° рСгистрирамС Ρ‚Π΅Π»Π΅Ρ„ΠΎΠ½ ΠΎΡ‚ Ρ‚Π°Π·ΠΈ ΠΌΡ€Π΅ΠΆΠ° ΠΈ всичко ΠΈΠ·Π³Π»Π΅ΠΆΠ΄Π° Π½Π°Ρ€Π΅Π΄ ΠΈ спорСд инструкциитС ΠΈ Π»ΠΎΠ³ΠΈΡ‡Π½ΠΎ.
Π—Π°ΠΏΠΎΡ‡Π²Π°ΠΌΠ΅ тСстванС, ΠΎΠ±Π°ΠΆΠ΄Π°ΠΌΠ΅ сС Π½Π° външСн Π½ΠΎΠΌΠ΅Ρ€ ΠΈ ... ΠΏΠΎΠ»ΡƒΡ‡Π°Π²Π°ΠΌΠ΅ ΠΏΠΎΠ½ΠΈΡ‡ΠΊΠ° ΠΈΠ»ΠΈ ΠΏΠΎ-скоро Π΄ΡƒΠΏΠΊΠ° Π·Π° ΠΏΠΎΠ½ΠΈΡ‡ΠΊΠ°. Π’Π½Π΅Π·Π°ΠΏΠ½ΠΎ!

Π—Π°ΠΏΠΎΡ‡Π²Π°ΠΌΠ΅ Π΄Π° Π°Π½Π°Π»ΠΈΠ·ΠΈΡ€Π°ΠΌΠ΅ Π΄Π½Π΅Π²Π½ΠΈΠΊΠ° Π² ΠΊΠΎΠ½Π·ΠΎΠ»Π°Ρ‚Π° ΠΈΠ»ΠΈ Ρ‡Ρ€Π΅Π· Log Viewer FusioPBX.

Π’ΠΈΠΆΠ΄Π°ΠΌΠ΅ Π½Π°ΡˆΠ΅Ρ‚ΠΎ прСдизвикатСлство:

switch_channel.c:1104 New Channel sofia/internal/[email protected]

Π’ΠΈΠΆΠ΄Π°ΠΌΠ΅ ACL, ΠΊΠΎΠΉΡ‚ΠΎ Ρ€Π°Π±ΠΎΡ‚ΠΈ:

sofia.c:10208 IP 192.168.0.150 Approved by acl "domains[]". Access Granted.

И ΠΎΡ‰Π΅:

mod_dialplan_xml.c:637 Processing 1010 <1010>->98343379xxxx in context public
switch_core_state_machine.c:311 No Route, Aborting 
switch_core_state_machine.c:312 Hangup sofia/internal/[email protected] [CS_ROUTING] [NO_ROUTE_DESTINATION] 

Π‘Π΅Π· ΠΌΠ°Ρ€ΡˆΡ€ΡƒΡ‚! Π’ΡŠΠΏΡ€Π΅ΠΊΠΈ Ρ‡Π΅ ΠΌΠ°Ρ€ΡˆΡ€ΡƒΡ‚ΡŠΡ‚ смС чСстно рСгистрирани.

ΠžΡ‚Π³ΠΎΠ²ΠΎΡ€ΡŠΡ‚ Π΅ наистина прост.

ΠžΠ±Π°ΠΆΠ΄Π°Π½Π΅Ρ‚ΠΎ Π΄ΠΎΠΉΠ΄Π΅. ACL Π³ΠΎ пропусна. И Ρ‚ΡŠΠΉ ΠΊΠ°Ρ‚ΠΎ ACL Π΅ ΠΎΠ±Π²ΡŠΡ€Π·Π°Π½ във Π²ΡŠΡ‚Ρ€Π΅ΡˆΠ½ΠΈΡ ΠΏΡ€ΠΎΡ„ΠΈΠ» ΠΈ Ρ‚ΠΎΠ·ΠΈ ΠΏΡ€ΠΎΡ„ΠΈΠ» Π΅ Π² публичния контСкст, FreeSWITCH чСстно Π³Π»Π΅Π΄Π° Π½Π° ΠΌΠ°Ρ€ΡˆΡ€ΡƒΡ‚ΠΈΠ·ΠΈΡ€Π°Π½Π΅Ρ‚ΠΎ Π² публичния контСкст. Но Π² публичния контСкст само входящо ΠΌΠ°Ρ€ΡˆΡ€ΡƒΡ‚ΠΈΠ·ΠΈΡ€Π°Π½Π΅ ΠΈ систСмата чСстно Π½ΠΈ ΠΊΠ°Π·Π²Π°, Ρ‡Π΅ няма ΠΌΠ°Ρ€ΡˆΡ€ΡƒΡ‚ΠΈ Π΄ΠΎ Π³Ρ€Π°Π΄Π° Ρ‚Π°ΠΌ.

Има ΠΏΠΎΠ½Π΅ Π΄Π²Π° ΠΈΠ·Ρ…ΠΎΠ΄Π° ΠΎΡ‚ Ρ‚Π°Π·ΠΈ ситуация.

  1. ΠŸΡ€ΠΈΠΊΡ€Π΅ΠΏΠ΅Ρ‚Π΅ Ρ‚ΠΎΠ·ΠΈ ACL Π½Π΅ към ΠΏΡ€ΠΎΡ„ΠΈΠ»Π°, Π° към самия Π²ΡŠΡ‚Ρ€Π΅ΡˆΠ΅Π½ Π½ΠΎΠΌΠ΅Ρ€. Π’ΠΎΠ²Π° ΠΌΠΎΠΆΠ΅ Π΄Π° Π΅ Π½Π°ΠΉ-правилният Π½Π°Ρ‡ΠΈΠ½ Π·Π° Ρ€Π΅ΡˆΠ°Π²Π°Π½Π΅, Ρ‚.ΠΊ. По-Π΄ΠΎΠ±Ρ€Π΅ Π΅ Π΄Π° ΡΠ²ΡŠΡ€ΠΆΠ΅Ρ‚Π΅ ACL възмоТно Π½Π°ΠΉ-Π±Π»ΠΈΠ·ΠΎ Π΄ΠΎ Ρ€Π°Π·ΡˆΠΈΡ€Π΅Π½ΠΈΠ΅Ρ‚ΠΎ Π·Π° ΠΏΠΎ-Ρ„ΠΈΠ½Π° настройка. Π’Π΅Π·ΠΈ. ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° Π·Π°Π΄Π°Π΄Π΅Ρ‚Π΅ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π΅Π½ адрСс / ΠΌΡ€Π΅ΠΆΠΎΠ² адрСс Π½Π° Ρ‚Π΅Π»Π΅Ρ„ΠΎΠ½Π°, ΠΎΡ‚ ΠΊΠΎΠΉΡ‚ΠΎ Π΄Π° ΠΌΠΎΠΆΠ΅ Π΄Π° ΠΎΡΡŠΡ‰Π΅ΡΡ‚Π²ΡΠ²Π° изходящо ΠΏΠΎΠ²ΠΈΠΊΠ²Π°Π½Π΅. ΠΠ΅Π΄ΠΎΡΡ‚Π°Ρ‚ΡŠΠΊΡŠΡ‚ Π½Π° Ρ‚Π°Π·ΠΈ опция Π΅, Ρ‡Π΅ всяко Ρ€Π°Π·ΡˆΠΈΡ€Π΅Π½ΠΈΠ΅ Ρ‰Π΅ трябва Π΄Π° ΠΏΡ€Π°Π²ΠΈ Ρ‚ΠΎΠ²Π°.
  2. ΠšΠΎΡ€ΠΈΠ³ΠΈΡ€Π°ΠΉΡ‚Π΅ ACL, Ρ‚Π°ΠΊΠ° Ρ‡Π΅ Π΄Π° Ρ€Π°Π±ΠΎΡ‚ΠΈ ΠΏΡ€Π°Π²ΠΈΠ»Π½ΠΎ Π½Π° Π½ΠΈΠ²ΠΎ ΠΏΡ€ΠΎΡ„ΠΈΠ». Π˜Π·Π±Ρ€Π°Ρ… Ρ‚Π°Π·ΠΈ опция, Π·Π°Ρ‰ΠΎΡ‚ΠΎ ΠΌΠΈ сС стори ΠΏΠΎ-лСсно Π΄Π° добавя ΠΌΡ€Π΅ΠΆΠ°Ρ‚Π° към ACL вСднъТ, ΠΎΡ‚ΠΊΠΎΠ»ΠΊΠΎΡ‚ΠΎ Π΄Π° я прСдписвам във всяко Ρ€Π°Π·ΡˆΠΈΡ€Π΅Π½ΠΈΠ΅. Но Ρ‚ΠΎΠ²Π° Π΅ спСциално Π·Π° моята Π·Π°Π΄Π°Ρ‡Π°. Π—Π° Π΄Ρ€ΡƒΠ³ΠΈ Π·Π°Π΄Π°Ρ‡ΠΈ ΠΌΠΎΠΆΠ΅ Π΄Π° сС Π½ΡƒΠΆΠ΄Π°Π΅Ρ‚Π΅ ΠΎΡ‚ Ρ€Π°Π·Π»ΠΈΡ‡Π½Π° Π»ΠΎΠ³ΠΈΠΊΠ° Π·Π° Π²Π·Π΅ΠΌΠ°Π½Π΅ Π½Π° Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ.

Π’Π°ΠΊΠ°. НСка ΠΊΠΎΡ€ΠΈΠ³ΠΈΡ€Π°ΠΌΠ΅ ACL Π΄ΠΎΠΌΠ΅ΠΉΠ½ΠΈΡ‚Π΅, ΠΊΠ°ΠΊΡ‚ΠΎ слСдва:

дСйствиС ΠΏΠΎ ΠΏΠΎΠ΄Ρ€Π°Π·Π±ΠΈΡ€Π°Π½Π΅ Π½Π° Π΄ΠΎΠΌΠ΅ΠΉΠ½ΠΈ: Ρ€Π°Π·Ρ€Π΅ΡˆΠΈ

Π’ списъка с ACL Π½Π° Π΄ΠΎΠΌΠ΅ΠΉΠ½ΠΈ рСгистрирамС ΠΌΡ€Π΅ΠΆΠ°Ρ‚Π°:

ΠΎΡ‚ΠΊΠ°ΠΆΠΈ 192.168.0.0/24

ΠŸΡ€ΠΈΠ»Π°Π³Π°Π½Π΅, ΠΏΡ€Π΅Π·Π°Ρ€Π΅ΠΆΠ΄Π°Π½Π΅.
ВСствамС: Π½Π°Π±ΠΈΡ€Π°ΠΌΠ΅ ΠΎΡ‚Π½ΠΎΠ²ΠΎ Π½ΠΎΠΌΠ΅Ρ€Π° 98343379xxxx ΠΈ ... ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π½ΠΎ-пропускатСлният ΠΏΡƒΠ½ΠΊΡ‚ ΠΈΠ΄Π²Π° ... ЗДРАВЕЙВЕ. Всичко Ρ€Π°Π±ΠΎΡ‚ΠΈ.
НСка Π΄Π° Π²ΠΈΠ΄ΠΈΠΌ ΠΊΠ°ΠΊΠ²ΠΎ сС случи във FreeSWITCH:
Ρ€Π°Π·Π³ΠΎΠ²ΠΎΡ€ Π·Π°ΠΏΠΎΡ‡Π²Π°:

switch_channel.c:1104 New Channel sofia/internal/[email protected]

ACL Π½Π΅ пропусна:

[DEBUG] sofia.c:10263 IP 192.168.0.150 Rejected by acl "domains". Falling back to Digest auth.

ΠΈ ΠΏΠΎ-Π½Π°Ρ‚Π°Ρ‚ΡŠΠΊ:

mod_dialplan_xml.c:637 Processing 1010 <1010>->98343379xxxx in context domain.local
sofia/internal/[email protected] Regex (PASS) [Sity] destination_number(98343379xxxx) =~ /^9(8343[23]d{6})$/ break=on-false 

ΠœΠ°Ρ€ΡˆΡ€ΡƒΡ‚ΠΈΠ·ΠΈΡ€Π°Π½Π΅Ρ‚ΠΎ Π΅ ΠΌΠΈΠ½Π°Π»ΠΎ ΠΈ слСдва установяванСто Π½Π° Π²Ρ€ΡŠΠ·ΠΊΠ°Ρ‚Π°, ΠΊΠΎΠ΅Ρ‚ΠΎ Π΅ извън ΠΎΠ±Ρ…Π²Π°Ρ‚Π° Π½Π° Ρ‚Π΅ΠΌΠ°Ρ‚Π°.

Ако ΠΏΡ€ΠΎΠΌΠ΅Π½ΠΈΠΌ мрСТовия адрСс Π² ACL, Π½ΠΎ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠΌ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½Π°Ρ‚Π° ΠΎΡ‚ ΠΏΡŠΡ€Π²ΠΈΡ тСст, Ρ‚.Π΅. ACL Ρ‰Π΅ пропуснС ΠΏΠΎΠ²ΠΈΠΊΠ²Π°Π½Π΅Ρ‚ΠΎ ΠΈ ΠΌΠ°Ρ€ΡˆΡ€ΡƒΡ‚ΡŠΡ‚ Ρ‰Π΅ ΠΊΠ°ΠΆΠ΅ NO_ROUTE_DESTINATION.

Π’ΠΎΠ²Π° вСроятно Π΅ всичко, ΠΊΠΎΠ΅Ρ‚ΠΎ исках Π΄Π° добавя към ACL FusionPBX.

Надявам сС да С полСзно на някого.

Π˜Π·Ρ‚ΠΎΡ‡Π½ΠΈΠΊ: www.habr.com

ДобавянС Π½Π° Π½ΠΎΠ² ΠΊΠΎΠΌΠ΅Π½Ρ‚Π°Ρ€