来源:     Emercoin Tech    新闻报道 |   2017年09月28日   

文章讲述了基于Emercoin加密货币区块链ENUM IP电话协议的分散式实现。ENUMER的系统描述,以及它与其他ENUM实现的区别。同时还给出ENUMER节点扩展的技术说明和与ENUMER协同运行的网络电话交换机FreeSWITCH配置示例。

1506586181926834.png

绪论

网络电话(下文简称“IP电话”)在全世界的使用愈加广泛,与传统方式相比,IP电话具有诸多优点。IP处理通常比传统方式价格更为低廉且功能更强。现在许多单位已使用网络电话交换机,但传统方式在电话网中仍占主流地位,甚至即使是数字电话交换机。因此,甚至两个网络电话交换机之间也需通过普通电话网,即公共交换电话网络(下文简称“PSTN”)。请看以下例子:

假设我们有“买方”群体,和另一群体“卖方”。双方为满足各自的内部需求均使用网络电话交换机(也称用户级交换机,下文简称“PBX”)。假设买方发现自己感兴趣的广告。买方决定给卖方打电话,拨号。呼叫将按以下方式进行:

1506586225445046.png

         买方电话                 买方PBX      网络接入商PSTN链路          卖方PBX                卖方电话

在这次呼叫中,两个网络电话交换机通过网络接入商PSTN链路进行连接,相应地买方将向网络接入商支付从VOIP网发送至PSTN网的呼叫费用(呼叫接入)。然后PSTN网络接入商之间将互相结算,这不是我们所感兴趣的。

如果买方网络电话交换机能够识别路径,可以通过因特网直接与卖方网络电话交换机连接,那么买方就可以不用向PSTN接入者付费,呼叫免费:

1506586178825889.png

         买方电话                 买方PBX               卖方PBX                卖方电话

而且连接的安全性和质量大幅提高,因为在那种链路中的中间因素和语音通讯转码较少。

众所周知,“了解所有路径”,也就是说支持所有可能的IP直接连接是相当困难的,研发出网络协议,将电话号转换为“路径”,即被称为ENUM的 URI。

ENUM

ENUM协议 (rfc6116)像是一个分布地址簿,可按电话号码“找到路径”,通往服务于这个号码的网络电话交换机。协议描述为:https://en.wikipedia.org/wiki/Telephone_number_mapping

协议使用设想如下:

卖方在 ENUM系统中注册自己的网络电话交换机 (PBX)。

买方网络电话交换机在使用PSTN网呼叫前将尝试在ENUM系统中查询“较短路径”。

如果系统中有“较短路径”——买方的自动电话交换机就会使用该路径。如果未查询到——那么就会使用标准路径,通过PSTN,像平时一样支付呼叫费用。

ENUM益处

使用ENUM不仅有利于发起方,还有利于接收方。其中包括:

  • 借助直接数字连接改善信号质量。

  • 提高连接速度和安全性。

  • 避开PSTN运营商对线路数量和使用分钟数的限制。

  • 不会出现运营商超载造成的拒绝服务。

  • 对呼叫方而言——呼叫免费(直接经济节省)。

  • 对应答方而言——也是免费的,甚至如果他有免费号码,本应为接听电话支付费用(也是一笔节省)。

  • ENUM自动工作,不影响用户,只需网络电话交换机最低配置。

ENUM协议简单易懂,技术高效,日常网络电话交换机均可支持。但是,因其具有组织经济性,所以它并没有得以广泛应用。我们将详细研究。

ENUM目前的实现问题

  • ENUM的首要问题——现在普通网络电话交换机所有人无处注册自己的号码(或一些号码)和相应的 e164.arpa ENUM-服务器。但是这种服务器——不是面向网络电话交换机所有者或私人,而是“网络接入商间的节点”,彼此互信的大型VOIP网络接入商提供可接入他们网络的相关信息。这种“为自己人的小团体”,普通的网络电话交换机所有人是无法进入的。

  • 第二个问题——网络运行太过依赖于可能非正常工作或根本就不工作的中央服务器。对此的一个直观例子就是——e164.org。最近两年——运行不稳定,除此之外,还发生不端事宜,例如——不顾已注册免费号码的网络电话交换机用户,而只向自己的PSTN网络呼叫付费接入者发送通信。自然,这种行为导致了免费号码用户不再愿意在e164.org上注册号码。

    例如关闭前一个月——e164.org全部停止发送ENUM应答,虽然其中包括一些正确的记录(我们已测试)。

  • 因为传统的中央ENUM系统运用域名系统(下文简称“DNS”)传输,它易受到各种各样对 DNS基础设施的攻击,如DNS-Spoofing、DNS-hijacking等。自然,DNS系统故障也会导致ENUM系统拒绝服务。

  • 最后、却很重要的一点:那样的服务器加载量非常大,因为网络电话交换机每次呼叫都要进行查询。是的,查询需要通过中间的DNS服务器缓冲,但即便如此——对于面向全球电话机的服务器来说这个加载量还是相当大的。结果就是拒绝服务或查询处理阻滞,另外,服务器基础设施价格不菲。

上述“失败”原因包括源自中央服务器以及查询处理不透明的组织技术。确实,ENUM的集中实现,和任何网络服务器一样,取决于建立ENUM记录和实际支持这些记录的网站的工作性能,还取决于相应的ENUM查询处理DNS服务器。换句话说,对ENUM系统的信任并不能提高对系统管理机构的信任。中央服务器ENUM查询处理的算法和标准的不清晰也会导致信任度降低。这样,例如,今天它能够正常工作,而明天——向主管人员感兴趣的某个号码再次发送呼叫(事情已完成)。例如,向本身就可以完成所有通信的中间VOIP节点发送。为什么突然重新发送?可能,号码所有者在演奏爵士...

相应地,脱离这个系统会导致整个网络的瞬间停滞。这两个缺点完全展示了e164.org:最初取代注册号码而只向自己的网络接入商-接入者发送免费呼叫,后来总是空答回复,最终全部基站退出经营。

ENUMER——分散式 ENUM

为解决上述问题,我们研发了基于Emercoin区块链的ENUM分散式系统。项目名称“ENUMER”,源于单词“ENUM”和“Emer”。简而言之:ENUM+EMER=ENUMER。

加密货币是现代金融业的趋势,现在正活跃地发展。包括Emercoin在内的加密货币的基础是区块链——数据支付操作的分布式信任公共基站。

Emercoin的显著特点在于名称值存储 (Name-Value Storage,下文简称“NVS”)——分布式一般用途信息库。也就是说每一个网络参与者都有可信的区块链局域副本,因此——所有NVS包含的内容,而对NVS内容的信任、就像对整个区块链的信任,基于POW工作量证明和POS权益证明的挖矿机综合力。

基于这个库已经建立并使用emcSSH/emcSSL安全系统,还有无懈可击的分散式EmerDNS。

分散式ENUM项目采用系统EmerDNS,相比于传统的 ENUM集中实现,它具有以下优点:

  • 借助于局域处理的高速ENUM查询处理

  • 查询处理可靠性强。甚至在丢失与其他网络参与者的连接时,也将通过局域副本继续查询。

  • 匿名的ENUM查询。因为查询不会离开局域电脑或可信的局域网,任何外部人员都不会知道发生了什么、在寻找谁。

  • 因为缺少这样的不可能对DNS基础设施实施攻击[3]。

  • 因为网络真正分散,对网络的信任不取决于对任何一家公司的信任。不可能出现整个系统因为一个人的决定而停止的情况[2]。ENUM网将继续工作,直到数百个独立挖矿机关闭区块并确认区块链协议。

  • ENUM查询处理算法将由查询方完成。它所编写的程序代码可在Github中找到,任何人都可以对代码进行正确性分析。ENUM服务器不可能在运行过程中改变规则。也就是说原有局域服务器通过局域连接(或通过可信网络)进行查询。

  • 借助于Emercoin分散式对等网络,定标不受限。所以,来自世界各地的查询聚集时不会出现“狭窄瓶颈”。每一个都可以任意给自己设置一些独立的EmerCoin节点,在这个文件族中处理自己的ENUM查询。即解决问题 [4]。

  • 用户自己通过 EmerCoin局域钱包创建ENUM记录,对记录作变形处理。所以,不需要服务器或其他地方[1]来写入信息。每个用户自己局域操作,而“通知自己的场所”——将不再需要。每一个将通知自己的局域钱包,而局域钱包已将ENUM中继传输到对等网络。

结果,我们将得到如下系统:

  • 高速

  • 可靠

  • 受保护

  • 定比

  • 不取决于任何人

  • 不因随意的处理脱离系统

  • 不能拦截不合心意的

  • 查询处理算法透明

  • 局域钱包取代“网络服务器”管理记录

分散式ENUM虽有上述许多优点,但自身仍存在着一些与基础设施公共利用度相关的特殊问题。有意愿的人可以与任何内容建立记录,捕捉与他人电话号相应的记录,记录内容或为真正的电话用户封锁ENUM入口或更糟糕——把呼叫发送到其他地方。

为防止类似的非法利用,在系统中预设了检验器。这些媒介可以检验各种ENUM记录是否属于相应号码的所有人,然后将签名转给ENUM记录所有者——判断记录的正确性以及是否能够使用,为控制恶意使用ENUM系统只用个人电话号运行。也就是说一个ENUM记录不可能侵占一片号码空间。

怎样在ENUMER系统中建立经过验证的记录

想使用ENUM接听呼叫的网络电话交换机所有人,应当先使自己的网络电话交换机能够接收“来自世界各地”的SIP URI呼叫。建设细节取决于具体的网络电话交换机(PBX)和网络环境,与普通非区块链电话交换机的建设毫无差异。

然后应当在EmerCoin NVS中分配呼叫者将使用的已被验证的ENUM记录。为此应当进行以下操作:

设置Emercoin钱包

Emercoin钱包是分布的ENUM网络(但不只是 ENUM)客户系统,有些类似于“私人办公室”,使用者可以建立自己的ENUM记录并按需要进行更新。钱包可从下列网址下载:http://emercoin.com/#download

为了您的操作系统,建议使用图形用户界面钱包管理记录。

下载并启动后,需要等待直到钱包与区块链本地副本同步。这需要几个小时。

获取EMC钱币

接着,应从某处获取加载和更新NVS记录的EMC钱币。可从交易所获取,或是从研发者那里获得。

储存一个记录10年及后续的更新需要大约0.05EMC,,按照现在的汇率就是0.06美元。总体来说,这个价格是完全可以接受的。而如果注意到,NVS的价格将很快下降至1/100,可以认为ENUMER记录服务费几乎为零。

获取钱币的地址位于菜单“File/Receiving Addresses”,大致如下:ERFJfQGwmZEomHQHGZsRFLZEyBxaWsCHTo。

建立ENUM记录

EmerCoin NVS(Name-Value Storage,名称值存储)分散式储存库将用来保存ENUM记录。NVS记录或是通过temp“Manage Names”中的GUI 钱包,或是从事文件编码的JSON API团队。NVS记录,就像它的名字一样,由名称(Name) 和值(Value)组成。

1506586178659019.png

  • 名称

ENUM 子系统记录名称具有以下形式:

enum:phone_num:N

这里:

enum —服务前缀

phone_num — E164形式电话号码

N –入侵者拦截号码(十进制数)

例如:

enum:18009359935:0

如果说服务前缀和号码易于理解,那么参数用途就需要解释一下了。这个数字是用来保护号码的真正所有人免受拦截他人号码ENUM记录并借此做坏事的入侵者的侵袭。他们无法使用非正常工作的记录(见下文的验证),但号码的真正所有人没有拦截号N就无法写入自己的记录。电话号码的真正所有人如果使用号码N,可以根据N的第一个自由意义建立记录。例如假设您想为电话号码 18009359935创建ENUM记录,而在上面的例子中——已被某入侵者拦截。不要紧,建立名称“enum:18009359935:1”,验证后系统将核查您的名称,而入侵者只能浏览一些无效的记录,白白消耗自己的钱币。如果这个名称被泄露——尝试建立N=2号码记录,以此类推。

  • 值 (Value)

Поле Value cостоит из нескольких строк. Строки – либо U-директивы NAPTR (rfc3402)

值域由多行组成。字句行——或是名称权威指针(rfc3402) ENUM(从E2U开始) U指令 ,或是检验器签名(从SIG开始)。一个ENUM记录不仅可以有几个指令,还能有一些不同检验器的签名。例如包含U指令和签名的值:

E2U+sip=100|10|!^(.*)$!sip:17772325555@in.callcentric.com!

SIG=ver:enum|IC00zMELlEwmMHLpQs8=

您现在没有签名(检验器会向您发送签名行),因此在创建签名时只需存入向您的网络电话交换机发送呼叫的U指令(即使一个)。指令结构如下:

Service=Priority|Preference|Regex

在上面的例子中:

Service -> E2U+sip

Priority -> 100

Preference ->10

Regex -> !^(.*)$!sip:17772325555@in.callcentric.com!

域和名称的涵义符合传统ENUM的标准。为避免阅读冗长的文件,为新手提供了简洁的指令:

几乎服务器总是——就像在上述例子中,会话初始协议(SIP)网络电话交换机E2U+sip。可能有其他选项,例如E2U+iax或其他类似等。就像上面提到的,在ENUM记录中可以存在几个U指令。

Priority, Preference——与初始示例同样保留下来。不建议大幅减少其数量。

最主要的是——Regex。SIP URI中的电话号码按Regex规则改动。分隔符表示“!”。第一部分——电话号中加入regex ,第二部分——以此号码代替\1,从而形成SIP URI。

还有一个不错的regex使用示例为:!^\+?441865332(.*)$!sip:\1@nominet.org.uk!

验证

这样,区块链可以接收的ENUM就已建立好。所有人均可使用。但是网络电话交换机呼叫者一致将它忽略,因为里面没有他们所信任的检验器签名。这完全正确。因为难道随便什么人都能用您的电话号码建立记录?现在所有话务都发送到指定地点,没有注意到么?不,话务将只根据包含检验器签名的验证记录发送。

现在尚未开发出自动验证系统,但系统的研发和使用已列入计划。如果您有意合作研发和使用自动验证子系统,请与我们联系:enumer@emercoin.com。暂时验证还是通过人工操作进行。

请向以下地址发送邮件以获取签名:enumer@emercoin.com。请在邮件中写明您ENUMER记录的NVS名称,例如:enum:18009359935:0。

操作员将在几天内核查现有记录,向相应号码发送测试呼叫确认号码所有者了解要求并同意使用ENUMER。验证成功后我们将发送回复,其中包括您将写入NVS记录的签名。写入签名后,您的记录成为可信任记录,其他使用者可使用此记录直接呼叫您的用户交换机。

在ENUM记录中增加检验器签名

将此签名写入您的ENUM记录并完成名称更新(NAME_UPDATE),将证明您对此号码的拥有,信任此检验器的呼叫方(ENUMER用户)将取代PSTN而通过SIP URI向您的网络电话交换机发送呼叫。

ENUM记录中可存在来自几个不同检验器的签名。用户将使用ENUM记录,哪怕只有一个来自于他所信任的检验器签名。

增加记录后——您的ENUM记录被激活,ENUMER用户可以不使用PSTN网络直接对您进行呼叫。

怎样使用ENUMER拨打电话(用户)

现在,网络电话交换机记录已写入ENUMER,该系统就可以为您和其他用户服务了。为此您的网络电话交换机需要向Emercoin NVS发送查询。

使用enum.enumer.org服务

在ENUMER中我们设置了公共网关,任何PBX用户无需对区块链作任何调整、无需任何技术支持就可以在自己的电话交换机中使用。为此应当向域名系统发送查询:enum.enumer.org分解器。命令行的测试查询和回复示例如下:

$ dig -t naptr +short 53995390081.enum.enumer.org

100 10 "u" "E2U+sip" "!^(.*)$!sip:\\1@tollfree.alcazarnetworks.com!" .

但在使用网关时,您将潜在遇到上文所研究的与集中操作装置和外部服务器使用相关的所有问题。因此,网关的主要用途只是提供测试媒介。我们始终不建议在系统运行时实际运用网关,而是在Emer域名系统中打开个人网关,下文将详细论述。

在Emer域名系统中扩展网关

最正确、快速和安全的方法——设置自己的EmerCoin钱包服务程序,将网关扩展为网络电话交换机工作局域网中的emc域名系统。网关扩展文件——请见«Integration into a regular DNS tree»部分。

在BIND(或其他DNS代理服务器)配置中将需要增加援引与Emer域名系统中已有第四区所类似的“enum”第五区。

除此以外,在emercoin.conf钱包配置中必须将“$enum”加入服务区名单,如下述示例。使用“$”符号代替句号指示钱包,此区将按照ENUM rfc6116规则服务。除此以外,钱包配置中还需增加ENUM独有的两种参数:

  • Enumtrust信任检验器(下文示例—ver:enum|olegh)

  • 文件名或援引名称值存储记录(援引以“@”开始),包括通过公共落地户完成免费电话规则名单,如果在ENUMER中没有任何找到任何目标号码的信息。这就是 enumtollfree。

在下文示例中,enum NVS记录援引清单:免费电话,如今涵盖了免费呼叫美国、法国和波兰的接入规则。我们赞同该记录的现实意义,并随着接入者的出现将增加向其他国家呼叫的途径。

因此,应当在emercoin.conf位形文件中增加下列行句:

emcdnsallowed=$enum|.coin|.emc|.lib|.bazar # Allowed TLDs, including ENUM

enumtrust=ver:enum|olegh

enumtollfree=@enum:tollfree

为调整测试,请将 ENUM查询人工发送至DNS:

$ dig -t naptr +short 53995390081.enum localhost

答复大致应为:

100 10 "u" "E2U+sip" "!^(.*)$!sip:\\1@tollfree.alcazarnetworks.com!" .

如果某部分不运行——请尝试直接将查询发送至钱包,至端口5335

$ dig -t naptr +short 53995390081.enum localhost –p 5335

排除故障点。但行句正确时——一切将毫无问题立即运行。

接入网络电话交换机

这比任何都简单。在网络电话交换机的拨号计划中应当指明在内部和小团体号码解析后、但在转向PSTN网络接入商前,向ENUMER发送查询。自然,在查询前应将目标号码转成ITU-T E164格式。

下面列举FreeSWITCH拨号计划的片段,开始转换成不具任何优点的 E164形式,然后向ENUMER发送查询,在查询时补充加号。如果ENUMER无法帮助——向e164.arpa进行查询。如果无任何查询结果——那么拨号计划转向PSTN接入者。可为其他网络电话交换机创建支持ENUM的类似拨号计划片段(Asterisk, Yate等)。

<!-- Normalize numbers to ITU-T E164 without PLUS -->

<extension name="Normalize to ITU-T E164 without PLUS">

  <condition field="destination_number" expression="^(?:\+|011|00)(\d{7,})$" break="on-true">

    <action application="transfer" data="$1"/>

  </condition>

  <condition field="destination_number" expression="^(\d{10})$" break="on-true">

    <action application="transfer" data="1$1"/>

  </condition>

  <condition field="destination_number" expression="^(\d{7})$" break="on-true">

     <action application="transfer" data="1${home_code}$1"/>

  </condition>

</extension>

 

<!-- Lookup E164 with PLUS in the ENUMER and e164.arpa -->

<extension name="Lookup ENUM" continue="true">

  <condition field="destination_number" expression="^(\d{7,})$" break="on-true">

    <action application="ring_ready"/>

    <action application="set" data="hangup_after_bridge=true"/>

    <action application="set" data="continue_on_fail=true"/>

    <action application="set" data="effective_caller_id_name=+15553550000"/>

    <action application="set" data="effective_caller_id_number=+15553550000"/>

    <action application="enum" data="+$1 enum"/>

    <action application="bridge" data="${enum_auto_route}"/>

    <action application="enum" data="+$1 e164.arpa"/>

    <action application="bridge" data="${enum_auto_route}"/>

    </condition>

</extension>


 

除特别注明外,本站所有文章均为Emercoin崛起币信息网原创,转载请注明出处来自  http://emercoin.info/zh-Hans/news/use-ENUMER-blockchain-for-free-call.html

扫一扫二维码分享