Amazon ec2 SIP和EC2弹性IP

Amazon ec2 SIP和EC2弹性IP,amazon-ec2,sip,nat,ifconfig,Amazon Ec2,Sip,Nat,Ifconfig,我正试图让一个定制的SIP软件在EC2实例上工作。我的软件目前没有NAT处理功能,我想知道是否可以让它与EC2实例关联的公共(弹性)IP透明地工作。 以下是在我的EC2盒上运行“iconfig-a”的输出: eth0链路封装:以太网HWaddr XXXXXX inet地址:私有IP地址Bcast:10.48.195.255掩码:255.255.254.0 inet6地址:XXXXXX/64范围:链接 上行广播运行多播MTU:1500度量:1 接收数据包:3825错误:0丢弃:0溢出:0帧:0 发

我正试图让一个定制的SIP软件在EC2实例上工作。我的软件目前没有NAT处理功能,我想知道是否可以让它与EC2实例关联的公共(弹性)IP透明地工作。

以下是在我的EC2盒上运行“iconfig-a”的输出:

eth0链路封装:以太网HWaddr XXXXXX
inet地址:私有IP地址Bcast:10.48.195.255掩码:255.255.254.0
inet6地址:XXXXXX/64范围:链接
上行广播运行多播MTU:1500度量:1
接收数据包:3825错误:0丢弃:0溢出:0帧:0
发送数据包:3596错误:0丢弃:0溢出:0载波:0
冲突:0 txqueuelen:1000
接收字节:259666(253.5千字节)发送字节:1106872(1.0兆字节)

lo Link encap:本地环回
inet地址:127.0.0.1掩码:255.0.0.0
inet6地址:1/128作用域:主机
上环回运行MTU:16436公制:1
接收数据包:78错误:0丢弃:0溢出:0帧:0
发送数据包:78错误:0丢弃:0溢出:0载波:0
冲突:0 txqueuelen:0
接收字节:6892(6.7kib)发送字节:6892(6.7kib)

有没有办法改变这一点,使我的应用程序可以在公共(弹性)IP地址上透明地打开UDP套接字?基本上就像公共IP通常分配给eth0一样工作


我曾考虑过使用iptablesdnat/SNAT或手动添加IP地址,但到目前为止没有成功

我建议为EC2购买静态IP。你将节省大量的精力。尽管如此,您还是必须考虑SIP通信中的NAT。顺便说一句,在大多数情况下,nat遍历是从基础设施(sip路由器/网关/sip服务器)处理的,这些基础设施在sip消息中添加/删除“路由”头。
SIP服务希望有公共端点,所以我不确定您是否需要实现NAT功能。您提到的这个定制SIP软件,我认为是客户端,而不是服务器。

答案是否定的。当SIP服务器应用程序使用私有IP地址时,没有好的方法让它在internet上透明地工作。服务器应用程序需要知道它的公共IP地址以及它应该优先使用该IP地址而不是私有IP地址的事实。SIP要求将公共地址插入多个报头中,如记录路由、路由和联系人。作为服务器,它还需要使用SDP有效负载中的公共IP地址进行INVITE请求和响应。大多数SIP服务器应用程序都能够做到这一点,如果您正在编写一个自定义服务器,那么最好将此功能添加到您的服务器中

除上述内容外,还有一种方法可以避免使用私有IP地址,即使用在应用程序前面安装SIP应用层网关(ALG),并使用它从服务器上篡改SIP数据包中的所有私有IP地址。然而,SIP ALG是一场灾难,总是导致比它们解决的问题更多的问题,所以我强烈建议您不要走这条路。

回答

弹性IP地址使用1:1 NAT映射到实例。实例本身不知道公共广播。由于这个地址无法绑定到接口,恐怕您需要用另一种方式处理它。您将希望避免更改网络配置,因为这可能会导致连接丢失


我遇到了一些与此类似的问题,我通过编辑sip_nat.conf文件来解决这些问题,使其具有以下内容:

externip=x.x.x.x
localnet=10.0.0.0/255.0.0.0
nat=yes
当然,你的里程数可能会有所不同,但这似乎解决了很多问题。当然,如果您的IP发生更改或启动了新实例,您必须找到更新Asterisk配置并重新加载设置的方法


我的理解是,在不告诉它IP地址的情况下,它总是通过ping某个服务器将其取回,但星号有一个问题,即如果它在ping响应之前收到任何其他数据,它就没有足够的智能来知道它不是IP地址。硬编码似乎可以解决很多问题。

下面是另一种方法,可以让sip与asterisk配合使用

在sip.conf或chan_sip.conf->
[general]
设置中,添加这些

nat=force_rport,comedia
externip=<PUBLIC_IP/ELASTIC_IP>
localnet=<PRIVATE_IP>/20
nat=force\u rport,喜剧
外压=
localnet=/20
如果您没有使用弹性IP,那么每次重新启动服务器时可能都必须更改公共IP。
希望这有帮助

我不认为强制使用SIP代理的意图。除非代理在NAT上运行(换句话说,在NAT的两侧运行),否则您仍然需要处理NAT。您为什么需要这样做公共端点| NAT | Sip代理| Sip服务器|-如果您有此功能,您的应用程序不需要处理NAT。sip消息将被发送到端点的公共ip:公共端口,NAT将它们路由到sip代理内部地址,等等。。。我不认为NAT的每一侧都需要2个代理。我没有清楚地表达自己的意思:如果NAT上没有端口转发之类的黑客攻击,那么NAT的两侧都需要(单个)代理监听。在家庭网络中,这不太可能。特别强调“添加功能”:考虑到我自己对家庭网络内无配置安装的要求,以及当时缺乏ICE,我不得不使用发现机制和管理工具将正确的外部/公共IP地址推送到各个SIP/SDP位置。