フリースイッチ:抵抗が最小の経路

いくつかの歌詞



私がシステム管理者の椅子に座っていることを覚えている限り(そして、全体の経験はすでに15歳に近づいています)、オフィステレフォニーの多くの問題は、カリフォルニア州RHCPのカリフォルニケイションのハードコアソフトポルノのラインとして認識されました。 テレフォニーは常に並行測定のように見えましたが、その管理と構成に入らないようにしました。 より正確には、一般的にこれらすべての電話問い合わせを広い範囲で回避し、そのようなタスクをすべて「特別に訓練された人々」に任せます。



しかし、よくあることですが、終わりはありません...新しい組織に就職した後、私はエリクソンのデジタルアナログPBXとCisco 2911の「統合サービスルーター」の多くの「幸せな」管理者になりました。数十台のデジタルエリクソンと2〜3ダースのIP電話Ciscoとエリクソン。 この素晴らしさはすべて、かつてハードコアソフトポルノの同じ専門家によって調整されていましたが、今日まで、一般的な用語でしか想像できません。 ただし、場合によっては、拡張機能とは何か、条件付きおよび無条件の転送がどのように編成されるか、IVRがどのように配置されるか、DIDがどのようになるかなど、私はまだ調べなければなりませんでした。 そして、私は習得した知識に熱心ではありませんでした(はい、有用なものすべてが面白くて楽しいわけではありません)。 構成の論理を理解した後、tsiskaだけが多少なりとも心地よい鉄片になりました。



ある時点で、電話はまだシステム管理者の家庭に不可欠な部分であるという謙虚さが生まれました。



そして雷が打たれた



私が働いている組織は別の建物に移動します。 もちろん、すべてのアナログおよびデジタル経済は永遠の登録の場所に残ります。 2911の準備におけるTsiskovsky VoIPは50回線を提供し、Cisco電話の価格は完全に非人道的です。 そして、すでに来た謙虚さのおかげか、知識に対する生来の渇望のおかげか、またはこれら2つの要因の組み合わせのおかげで、私は自分自身で新しい場所で電話を上げることにしました。



要件はシンプルでした:安いが、無料でより良い、 そして理想的には、余分に支払うには、150回線以上から基本的な機能(従業員、IVR、コール転送、会議、コール転送のための直接の都市番号)を提供します。 最初に思いついた言葉は「SIP」、2番目は「アスタリスク」、3番目は「Google」でした。



AsteriskNOWがダウンロードされ、展開されました。 tun然としたWebインターフェイスにつまずいた。 hardcornsoftporn'ovskimロジック電話オペレーターをもう一度評価し、再びGoogleにアクセスしました。 そして、偶然「FreeSWITCH」という言葉に出会いました。 新しい単語、新しい検索。 安定性、構成の容易さ(どこでもXML)、少ないリソース要件、すぐに使える操作、さらに音声歪みのない数百または数千の回線を備えた仮想環境で完璧に働く「人」の称賛に値する(開発者は仮想環境を推奨しませんが)リアルタイムでCPUにアクセスできないため)。 わかった やってみます。

推奨されるDebian 8 x64、1コア2 GHz、2ギガRAM、16ギガディスクの下で仮想マシンを上げます。 私たちは、指示( 1000 )に従ってインストールを実行します。 ソフトフォンをセットアップしました(3CXのタイツが好きでした )。



ソフトフォンが登録されました。 テストコールは終了しました。 リャポタ。 Ericsson Dialog 4422も登録され、呼び出し音が鳴り、両方向に音声が聞こえます。 リャポタ。 Cisco 7945にはSIP対応ファームウェアの予防接種が行われ、SCCPの設定を比較的短期間踊った後、デバイスも登録され、コールは問題なく行われました。 リャポタ。 生産中のFreeSWITCH!



歌詞を止める



ソースデータ:



1階のスイッチング機器:



  1. スイッチはMTSが所有しており、MTSにはポートのグループが割り当てられています。 それからインターネットを利用し、SIPテレフォニーを利用します。 タグ付きトラフィックvlan4
  2. スイッチには、vlanが割り当てられているポートの専用グループがあります。 インターネットは、MTSのこれらのポート(ポート2-vlan2)、Miralogicのインターネット(ポート3-vlan3)、MTSのSIP(ポート4-vlan4)から来ています。 ポート1もトランクの下に割り当てられ、ケーブルは4階のサーバールームに接続されます。


4階のサーバー機器:



  1. 1階からトランクを受け入れるスイッチ。 ポート1-トランク着信(1階から。ポート2-トランク発信(サーバーへ)。
  2. サーバーはVMware vSphere 6を実行しています。このホストには、ゲートウェイおよびファイアウォールとして機能するMikrotik RouterOSを備えたゲストマシンがあります。 このホストには、FreeSWITCHを備えたゲストマシンもあります。 VSwitchがホスト上で構成され、対応するトラフィックのタグ付けされたポートが追加されます:vlan2、vlan3、vlan4。


E1を介したテレフォニーは、MTSによって提供されます。 MTSから、テスト用にSIPトランクが提供されました。

これらの設定は、MTSエンジニアから送られてきました。



 !  SIP     9  5555555 ip-: 172.16.160.154 : 255.255.255.252 : 172.16.160.153   ,  -  sip-: 172.16.253.3, port: 5060 UDP media-: 172.16.253.4, port: 10000 - 30000 UDP : G711a/u   DTMF: rfc-2833
      
      





FreeSWITCHを搭載したマシンには、1つのネットワークインターフェイス、ネットワーク設定があります。



 IP: 172.18.253.1 Netmask: 255.255.0.0 GW: 172.18.1.254
      
      





フライ、ミクロティック



Mikrotikでゲストマシンを消滅させ、別のネットワークインターフェイスを追加して、vlan4を割り当てます。 ゲストマシンの電源を入れると、Mikrotikが起動し、新しいインターフェイスが表示されます。



カスタマイズ可能。

Mikrotikのインターフェイス設定
利用可能なインターフェイスをリストします。

/interface ethernet print







新たに追加されたインターフェイスは、 ether6という名前のインターフェイスであることがわかります。

名前をif-sipに変更します。

/interface ethernet set [ find default-name=ether6 ] name=if-sip







アドレスを構成します。

/ip address add address=172.16.160.154/30 comment=mts-sip interface=if-sip network=172.16.160.152





Mikrotikでルーティングを構成する
マングルを構成します(トラフィックが希望どおりにマークされ、トラフィックがこれらのラベルに基づいて必要なインターフェイスのみを通過するように)。

/ip firewall mangle add action=mark-routing chain=prerouting comment="mark sip traffic" new-routing-mark=sip src-address=172.18.253.1







ルーティングを構成します。

/ip route add comment=mts-sip distance=1 dst-address=172.16.0.0/16 gateway=172.16.160.153 routing-mark=sip







MikrotikでファイアウォールとNATを構成する
ファイアウォールを使用してフィルタリングを行わないように構成します(この段階では、MTS PANアドレスからのSIPトランクからの悪意のあるハッカーを恐れていません)。

/ip firewall filter

add chain=forward comment="allow any to mts-sip" dst-address=172.16.0.0/16 in-interface=if-local out-interface=if-sip src-address=172.18.253.1

add chain=forward comment="allow any from mts-sip" dst-address=172.18.253.1 in-interface=if-sip out-interface=if-local src-address=172.16.0.0/16








これら2つの有効化ルールがルールリストの一番上にあることを確認してください。 これにより、ファイアウォールの負荷が軽減されます。



私自身は、SIPゲートウェイがローカルネットワーク上にあることを決定しました。



  • 個々の電話がNATの背後にあるゲートウェイで動作することに抵抗があるため、trahomudiyaを使用しないでください。
  • 内部トラフィックは、発信と着信の合計よりも10倍高く、

    彼をミクロティックに通す必要はありません。
  • そして一般に、ゲートウェイを一度セットアップすることは、異なるファームウェアを備えた多くの電話(数百台)と戦うよりも、将来的には異なるメーカーのものと戦うよりも先見の明があるでしょう。


このため、 1:1 NATを構成します

/ip firewall nat

add action=netmap chain=srcnat comment="source NAT for sip" src-address=172.18.253.1 to-addresses=172.16.160.154

add action=netmap chain=dstnat comment="destination NAT for sip" dst-address=172.16.160.154 to-addresses=172.18.253.1






サービスポートを無効にした場合、sip backを有効にします。

/ip firewall service-port set sip ports=5060,5061,5080,5081 disabled=no







ゲートウェイ(172.16.160.153)をpingし、SIPゲートウェイ(172.16.253.3)をpingし、メディアゲートウェイ(172.16.253.4)をpingします。 pingが行きます。 素晴らしい。



これで、簡単で理解できる部分が終わりました。



フライ、FreeSWITCH



「外出」のために、電話に出会ったことのないIT専門家の耳には馴染みのない次のことを行う必要があります。



免責事項 :FreeSWITCHがデフォルトフォルダにインストールされていることを前提としています: / etc / freeswitch


最初に行うことは、デフォルトのパスワードを変更することです。 しかし、あなたが思ったからではありません。 しかし、したがって、あまりにも。 パスワードはダイヤルプランによって検証され、パスワードがデフォルトと一致する場合、接続の前に10秒の一時停止が挿入されます。 したがって、最初にパスワードを変更します。

ファイル: /etc/freeswitch/vars.xml

 <X-PRE-PROCESS cmd="set" data="default_password=ballsofsteel"/>
      
      





または、パスワード「1234」が本当に好きな場合は、対応するブロックを編集するだけで、ダイヤルプランから一時停止を削除できます。

ファイル: /etc/freeswitch/dialplan/default.xml

 <condition field="${default_password}" expression="^1234$" break="never"> <action application="log" data="Fuck pretense just let's dance"/> <action application="log" data="Never Open $${conf_dir}/vars.xml and change default password."/> </condition>
      
      





IPアドレス設定

ファイル: /etc/freeswitch/sip_profiles/external.xml

 <param name="ext-rtp-ip" value="172.16.160.154"/> <param name="ext-sip-ip" value="172.16.160.154"/>
      
      





地域設定

ファイル: /etc/freeswitch/vars.xml

 <X-PRE-PROCESS cmd="set" data="outbound_caller_name=3435555555"/> <X-PRE-PROCESS cmd="set" data="outbound_caller_id=3435555555"/> <X-PRE-PROCESS cmd="set" data="default_areacode=343"/> <X-PRE-PROCESS cmd="set" data="default_country=RU"/>
      
      





オペレーターからの詳細

ファイル: /etc/freeswitch/vars.xml

 <X-PRE-PROCESS cmd="set" data="default_provider=172.16.253.3"/> <X-PRE-PROCESS cmd="set" data="default_provider_username=3435555555"/> <X-PRE-PROCESS cmd="set" data="default_provider_password=not-used"/> <X-PRE-PROCESS cmd="set" data="default_provider_from_domain=172.16.253.3"/> <X-PRE-PROCESS cmd="set" data="default_provider_register=true"/> <X-PRE-PROCESS cmd="set" data="default_provider_contact=73435555555"/>
      
      





最も注意深い発言
おそらく、 default_provider_registerパラメーターの値が、オペレーターが発行した設定( 登録なしの接続、ポイントツーポイント )に適合しないことに気付いたでしょう。 ただし、MTSの場合、登録が必要でしたが、それなしでは、外部から内部への呼び出しは通過しませんでした。 登録なしでは、内部から呼び出すことはかなり可能でしたという事実にもかかわらず。 この機能は、私がそれを手に入れて捕まえる前に、大量の血を私に飲んだ。



承認が必要な典型的な兆候は、 407 Proxy Authentication Requiredエラーです。



このエラーは、SIPトレースを有効にすることでキャッチされます。

sofia global siptrace on







トレースはそれぞれオフになります:

sofia global siptrace off





加入者番号を追加する(内線)

/ etc / freeswitch / directory / defaultフォルダーに任意の名前のxmlファイルを作成します。 番号と一致する名前のファイルを作成しました。

ファイル: /etc/freeswitch/directory/default/4545.xml

 <include> <user id="4545"> <params> <param name="password" value="$${default_password}"/> <param name="vm-password" value="4545"/> </params> <variables> <variable name="toll_allow" value="domestic,international,local"/> <variable name="accountcode" value="4545"/> <variable name="user_context" value="default"/> <variable name="effective_caller_id_name" value=" .."/> <variable name="effective_caller_id_number" value="4545"/> <variable name="outbound_caller_id_name" value="$${outbound_caller_name}"/> <variable name="outbound_caller_id_number" value="$${outbound_caller_id}"/> <variable name="callgroup" value="techsupport"/> </variables> </user> </include>
      
      





ゲートウェイを作成する

ほとんどの場合、IPアドレスの設定を完了し、オペレーターが提供した詳細をvars.xmlのフィールドに入力すると、問題なくオペレーターのゲートウェイで登録が行われます。



しかし、MTSは詳細を送信し、内線番号3435555555を取得しなかったため、「問題なく」成功しませんでした。 セットアップのオペレーターを疑う前に、ゲートウェイを構成するための無数のオプションを試してみました。 ただし、その結果、オペレーターは自分のSIPゲートウェイで加入者番号を作成し、デフォルト設定ではない場合は近い設定ですべてが起動しました。 external.xmlファイルの名前を変更して取得したmts.xmlファイルのリストを次に示します。

ファイル: /etc/freeswitch/directory/default/mts.xml

 <include> <user id="$${default_provider}"> <gateways> <gateway name="$${default_provider}"> <param name="username" value="$${default_provider_username}"/> <param name="password" value="$${default_provider_password}"/> <param name="from-user" value="$${default_provider_username}"/> <param name="from-domain" value="$${default_provider_from_domain}"/> <param name="expire-seconds" value="600"/> <param name="register" value="$${default_provider_register}"> <param name="retry-seconds" value="30"/> <param name="extension" value="$${default_provider_contact}"/> <param name="context" value="public"/> </gateway> </gateways> <params> <param name="password" value="$${default_provider_password}"/> </params> </user> </include>
      
      





ここで、ドメインとネットワークにアクセス許可を追加して、FreeSWITCHがドメインとオペレーターのネットワークからの接続を確立する試みをブロックしないようにします。 そして、はい、この段階で、すべてを簡単に解決できます。 私の仕事は、最終的に組織外に電話をかけることです。

ファイル: /etc/freeswitch/autoload_configs/acl.conf.xml

これはできません
 <list name="lan" default="allow"> <node type="allow" cidr="172.18.0.0/16"/> <node type="allow" cidr="172.16.0.0/16"/> </list> <list name="domains" default="allow"> <node type="allow" domain="172.18.253.1"/> <node type="allow" domain="172.16.253.3"/> <node type="allow" cidr="172.16.0.0/16"/> <node type="allow" cidr="172.18.0.0/16"/> </list>
      
      





 <list name="lan" default="allow"> </list> <list name="domains" default="deny"> <node type="allow" cidr="172.16.253.3/32"/> </list>
      
      





注意してください!

  1. ACLは、ドメインおよびネットワークプロバイダーのみを対象としています。 ドメインリストはデフォルトで拒否する必要があります。 ドメイン変数の使用は避けるべきであり、代わりに、/ 32マスクを持つオペレーターのゲートウェイのcidrとIPアドレスを使用する必要があります。 これらの基本的なルールに従わないと、プロバイダーのゲートウェイに着信コールのユーザーとパスワードを使用して強制的にログインさせ(ダイジェスト認証)、間違ったコンテキストで内部加入者番号を取得するという形で予期せぬ結果をもたらしますダイジェストの代わりに)、ダイヤルプランの中断など。
  2. これはファイアウォールではありません。 トラフィックフィルタリングは発生しません。 これらは、FreeSWITCHサービスのアクセスリストです。


おめでとうございます! 成功した(成功しない)ことを確認できます。

FreeSWITCHコンソールを起動します。

fs_cli -rRS





xml'kiを再起動します。

reloadxml



またはF6をクリックします。

ACLを再起動します。

reloadacl





電話接続を担当するSofiaモジュールを再起動します。

reload mod_sofia





ゲートウェイへの接続で何が得られるかを調べます。
freeswitch@phone> sofia status

Name Type Data State

=================================================================================================

external profile sip:mod_sofia@172.16.160.154:5080 RUNNING (0)

external::172.16.253.3 gateway sip:3435555555@172.16.253.3 REGED

172.18.253.1 alias internal ALIASED

internal profile sip:mod_sofia@172.18.253.1:5060 RUNNING (0)

=================================================================================================

2 profiles 1 alias







いいね オペレーターのゲートウェイでの登録が成功しました。

詳細を確認します。

sofia status gateway 172.16.253.3





freeswitch@phone> sofia status gateway 172.16.253.3

==============================================================

Name 172.16.253.3

Profile external

Scheme Digest

Realm 172.16.253.3

Username 3432788299

Password yes

From <sip:3435555555@172.16.253.3>

Contact <sip:gw+172.16.253.3@172.16.160.154:5080;transport=udp;gw=172.16.253.3>

Exten 73435555555

To sip:3435555555@172.16.253.3

Proxy sip:172.16.253.3

Context public

Expires 600

Freq 600

Ping 0

PingFreq 0

PingTime 0.00

PingState 0/0/0

State REGED

Status UP

Uptime 3932s

CallsIN 1

CallsOUT 1

FailedCallsIN 0

FailedCallsOUT 0

==============================================================







それは小さな問題でした。



ダイヤルプラン

外部への呼び出しの場合、 mts.xmlファイルを最初から作成します。/etc/freeswitch/dialplan/defaultフォルダー内の他のすべてのファイルは、拡張子を変更して名前を変更したり、別の場所に移動したりすることができます。

ファイル: /etc/freeswitch/dialplan/default/mts.xml

 <include><extension name="outbound-city-call"> <condition field="${toll_allow}" expression="local"/> <condition field="destination_number" expression="^(\d{7})$"> <action application="set" data="effective_caller_id_number=${outbound_caller_id_number}"/> <action application="set" data="effective_caller_id_name=${outbound_caller_id_name}"/> <action application="bridge" data="sofia/gateway/${default_gateway}/8${default_areacode}$1"/> </condition> </extension> <extension name="outbound-country.cellular-call"> <condition field="${toll_allow}" expression="domestic"/> <condition field="destination_number" expression="^8(\d{10})$"> <action application="set" data="effective_caller_id_number=${outbound_caller_id_number}"/> <action application="set" data="effective_caller_id_name=${outbound_caller_id_name}"/> <action application="bridge" data="sofia/gateway/${default_gateway}/8$1"/> </condition> </extension> <extension name="outbound-international-call"> <condition field="${toll_allow}" expression="international"/> <condition field="destination_number" expression="^(810\d+)$"> <action application="set" data="effective_caller_id_number=${outbound_caller_id_number}"/> <action application="set" data="effective_caller_id_name=${outbound_caller_id_name}"/> <action application="bridge" data="sofia/gateway/${default_gateway}/810$1"/> </condition> </extension> </include>
      
      





外部から内部への呼び出しの場合、 / etc / freeswitch / dialplan / publicフォルダーにmts_inbound.xmlファイルを作成します。 上記の類推により、このフォルダーの残りの部分は、 * .bckまたは* .noloadに名前を変更できます。

ファイル: /etc/freeswitch/dialplan/public/mts_inbound.xml

 <include> <extension name="public_did"> <condition field="destination_number" expression="^(73435555555)$"> <action application="set" data="domain_name=$${domain}"/> <action application="transfer" data="4545 XML default"/> </condition> </extension> </include>
      
      





まあ何。 指を交差させて、確認してください。



FreeSWITCHコンソールを再度起動します。

fs_cli -rRS





xml'kiを再起動します。

reloadxml



またはF6をクリックします

電話接続を担当するダイヤルプランモジュールを再起動します。

reload mod_dialplan_xml





内側からダイヤルしてみます。 外側から内側にダイヤルしてみます。 「1回、2回、2回」というテストを喜んで繰り返します。サウンドは双方向に進むと確信しています。 両方向の終了信号の通過を確認します。



ソフトポルノに参加できてうれしいです。



PS:特定の編集の意味の解読を意図的に避けました。 部分的には、パラメーターの名前とシステム変数が非常にわかりやすいためです。 部分的には、テレフォニーのターボローンチを各バンチの言い訳で混乱させないためです。



PPS:このテキストの執筆は、同じタスクが解決されるテキストが統合されたわかりやすいマニュアルを見つけることができなかったという恐怖によって指示されました:ポイントツーポイント認証で電話を上げるために、できるだけ簡単に。 何らかの理由で文書が豊富であることには、議論や実例が豊富に含まれていません。 または、たまたま私がうまくいく「同じ例」をグーグル検索するよりも早くすべてを読み終えたのです。 いずれにせよ、将来のために私と同僚のためのチートシートにしてください。



All Articles