当使用 EIP 在 Amazon EC2 上运行 Asterisk 时,Asterisk 的 NAT 配置是什么?
[general]
nat=yes
externip=xxx.yyy.zzz.vvv
localnet=192.168.0.0/255.255.0.0 ; RFC 1918 addresses
localnet=10.0.0.0/255.0.0.0 ; Also RFC1918
localnet=172.16.0.0/12 ; Another RFC1918 with CIDR notation
localnet=169.254.0.0/255.255.0.0 ; Zero conf local network
显然,EIC 使用 NAT:
如果您的 EC2 实例位于 VPC 的私有子网中,则它可以使用您的 NAT 进行出站连接。外界会将其 IP 地址视为您的 NAT 的 IP 地址,但 NAT 的 IP 地址永远不会“成为”实例的公共 IP 地址。
大致的了解生态IP如何运作:
在进入示例之前,我们先回顾一下弹性 IP 的工作原理:
...
请记住,每个实例都有一个内部 IP 地址和一个外部(公共)IP 地址,该地址会转换为内部 IP 地址。如果两个外部 IP 被转换为相同的内部 IP,则入站数据包将顺利到达,但对传出数据包进行分类(即确定将哪个外部 IP 地址分配给传出数据包)将非常困难。因此,在任何给定时间点,每个实例的单个外部 IP 地址都受到限制。
维基百科(供我参考):
弹性 IP 地址 Amazon 弹性 IP
亚马逊的弹性IP地址功能与传统数据中心的静态IP地址类似,但有一个关键区别。用户可以通过编程方式将弹性 IP 地址映射到任何虚拟机实例,无需网络管理员的帮助,也无需等待 DNS 传播绑定。从这个意义上说,弹性 IP 地址属于帐户而不是虚拟机实例。它一直存在,直到被显式删除为止,并且即使在不与任何实例关联的情况下仍保持与帐户的关联。
深入到具体细节SIP 和 Asterisk 的背景:
1.3.不同类型的 NAT 和防火墙。
特定 NAT 或防火墙实现可以通过多种方式处理 UDP,这些方式分为:
1.3.1 全锥NAT
全锥 NAT 是一种来自同一内部 IP 地址和端口的所有请求都映射到同一外部 IP 地址和端口的NAT。此外,任何外部主机都可以通过将数据包发送到映射的外部地址来将数据包发送到内部主机。
1.3.2 受限锥体:
受限锥形 NAT 是一种来自同一内部 IP 地址和端口的所有请求都映射到同一外部 IP 地址和端口的类型。与全锥 NAT 不同,只有当内部主机之前已向 IP 地址 X 发送过数据包时,外部主机(具有 IP 地址 X)才能向内部主机发送数据包。
1.3.3 端口限制锥体:
端口受限锥形 NAT 类似于受限锥形 NAT,但限制包括端口号。
具体来说,只有当内部主机之前向IP地址X和端口P发送过数据包时,外部主机才可以向内部主机发送源IP地址X和源端口P的数据包。
1.3.4 对称NAT:
对称 NAT 是一种将来自同一内部 IP 地址和端口的所有请求映射到同一外部 IP 地址和端口的特定目标 IP 地址和端口的方法。如果同一主机发送具有相同源地址和端口的数据包,但发送到不同的目的地,则使用不同的映射。此外,只有接收到数据包的外部主机才能将UDP数据包发送回内部主机。
听起来 EIC 使用“全锥”NAT。那么 NAT 的 Asterisk 设置是什么?
答案1
externip应该设置为外部ip
Localnet 设置为本地网络(使用 ifconfig 检查)。
当然
nat=comedia,force_rport
(nat=yes 在现代版本中不起作用)。
; nat = no ; Do no special NAT handling other than RFC3581
; nat = force_rport ; Pretend there was an rport parameter even if there wasn't
; nat = comedia ; Send media to the port Asterisk received it from regardless
; ; of where the SDP says to send it.
; nat = auto_force_rport ; Set the force_rport option if Asterisk detects NAT (default)
; nat = auto_comedia ; Set the comedia option if Asterisk detects NAT