我正在尝试使自定义SIP软件在EC2实例上工作。目前,我的软件不具备NAT处理功能,我想知道是否可以使其与与EC2实例关联的公共(弹性)IP透明地工作。

这是在我的EC2框上运行的“iconfig -a”的输出:

eth0链接封套:以太网HWaddr XXXXXX
inet地址:PRIVATE-IP-ADDRESS广播:10.48.195.255掩码:255.255.254.0
inet6地址:XXXXXX / 64范围:链接
UP广播多播MTU:1500公制:1
RX数据包:3825错误:0掉落:0超限:0帧:0
TX数据包:3596错误:0掉落:0超限:0运营商:0
碰撞:0 txqueuelen:1000
接收字节:259666(253.5 KiB)发送字节:1106872(1.0 MiB)

lo链接封套:本地环回
inet地址:127.0.0.1掩码:255.0.0.0
inet6 addr::: 1/128范围:主机
上环运行MTU:16436公制:1
RX数据包:78个错误:0掉落:0超限:0帧:0
TX封包:78个错误:0掉落:0超限:0载波:0
冲突:0 txqueuelen:0
接收字节:6892(6.7 KiB)接收字节:6892(6.7 KiB)

有没有一种方法可以更改此设置,以便我的应用程序可以透明地在PUBLIC(弹性)IP地址上打开UDP套接字?并且基本上像正常将公共IP分配给eth0一样工作。

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

最佳答案

答案是不。当使用私有IP地址时,没有一种好的方法可以使SIP服务器应用程序在Internet上透明地工作。服务器应用程序既需要知道其公共IP地址,也需要知道优先于私有IP地址使用该IP地址这一事实。 SIP要求在许多标头中插入公共地址,例如Record-Route,Route和Contact。作为服务器,它还需要将SDP有效负载中的公共IP地址用于INVITE请求和响应。大多数SIP服务器应用程序都具有执行此功能的能力,如果您正在编写自定义服务器,则建议将功能添加到您的服务器中。

除了上述内容之外,还有一种方法可以避免使用私有IP地址,即使用在应用程序前面安装SIP应用程序层网关(ALG)并使用它来处理SIP中的所有私有IP地址。来自服务器的数据包。但是,SIP ALG确实是一场灾难,总是造成比他们解决的问题更多的问题,因此,我强烈建议您不要走这条路。

10-07 19:47
查看更多