我需要将大量端口转发到运行 Asterisk 的 Linux 机器。该机器位于家用路由器后面。可以成功配置路由器以将单个端口转发到 Asterisk,例如 5060,但是路由器上转发一系列端口(例如 10000:20000)的功能已被禁用,显然是我的电话/互联网运营商(设备提供商)禁用了此功能。
路由器的防火墙确实允许打开一系列端口并分配内部/外部 IP 和端口。至少,它这样做没有任何明显的错误。
我不明白路由器防火墙上的内部端口和 IP 的作用。有没有办法让我的 Linux 机器在分配的 IP 上自行将端口转发到 Asterisk?
更换路由器会非常麻烦。希望有人能帮我找到一个软件解决方案。也许可以用 iptables?
谢谢你,
答案1
首先,您可以选择逐个发送端口。每个通道只需要 2 个端口,不需要太多。之后将 rtp.conf 更改为相同的值。
大多数情况下,您只需在该路由器上搜索 DMZ IP 设置,将其设置为星号内部 IP,然后在服务器上执行防火墙。
答案2
路由器可以成功配置为将单个端口转发到 Asterisk,例如 5060,但是路由器上已禁用转发一系列端口(例如 10000:20000)的功能
根据屏幕截图,你应该只输入外部的端口范围。在这种情况下,“内部端口”字段被标记为可选,并且内部端口将自动以 1:1 映射到同一范围。
(无关的旁注:标签上写着“如果源是......”但这并不正确——“内部”和“外部”字段都指的是目标地址/端口。)
路由器的防火墙确实允许打开一系列端口并分配内部/外部 IP 和端口。至少,它这样做没有任何明显的错误。
‘端口转发’规则控制数据包重写– “外部”字段用于匹配原始值,而“内部”字段用于指定新的(重写)值。如果原始端口值指定为一个范围,则新值自然必须是完全相同大小的范围,这就是路由器甚至不允许输入它的原因。
相比之下,“防火墙”规则控制数据包过滤– 所有框都与 IP 数据包中现有的相应字段相匹配。“远程”(又名源)值完全独立于“本地”(又名目标)值。
我不明白路由器防火墙上的内部端口和IP的作用。
防火墙可以应用于其他数据包,而不仅仅是通过端口转发从 WAN 传来的数据包。一些路由器允许创建多个独立的 LAN 子网 - 防火墙还可以控制子网之间的流量。
例如,您可能允许“IoT”子网上的电视访问“主 LAN”子网上的文件服务器 - 在这种情况下,电视(源)将是“远程”设备,而文件服务器(目的地)将是“本地”设备。
关于端口转发
有没有办法让我的指定 IP 上的 Linux 机器将其自己的端口转发到 Asterisk?
您的 Linux 机器无法仅使用软件绕过路由器。
从技术上讲,机器已经始终将数据包转发给在其上运行的服务。但你的问题不是这个——问题是这些数据包无法到达机器本身。
当你说“所有内部设备都有相同的外部 IP”时,通常意味着没有任何其中大多数都具有该功能。您的路由器是唯一具有该功能的设备,并且所有外部 IP 地址的入站数据包都必须首先到达路由器,无论是物理上还是逻辑上。
有些路由器有一个名为“DMZ”的功能,它类似于端口转发规则,当所有实际端口转发规则都不匹配时使用。如果你可以将 Linux 计算机配置为“DMZ 主机”,它将接收全部尚未配置的连接。
但是如果您既没有端口转发也没有 DMZ,那么您的内部机器就无法从路由器“窃取”数据包 - 它根本就不会接收它们。
答案3
在这里给出答案,说明问题已通过 Daniel B 的建议(在上面的评论中)得到解决,即在转发配置的内部字段中仅输入端口范围的起点。
非常感谢上面的所有回答和评论,我从中学到了很多东西。