如何在 OS X 中根据 TCP 端口通过两个不同的网络适配器路由流量

如何在 OS X 中根据 TCP 端口通过两个不同的网络适配器路由流量

(从 ServerFault 交叉发布,因为这个论坛似乎更适合这个问题)

我有一个场景,我们将使用 Mac 将视频内容流式传输到 RTMP 服务器。此 RMTP 服务提供 2 个导入 URL,以便您可以上传相同的视频内容两次,并在您的连接出现问题时提供冗余。但是,两个 RTMP 导入 URL 是相同的,唯一的区别是它们的 TCP 端口号,例如:

{
    "rtmp1": "rtmp://xxx.xxx.com:1935/id1",
    "rtmp2": "rtmp://xxx.xxx.com:1936/id1"
}

我想要做的事情如下:

  • Mac 上有两个网络接口(每个使用不同的网络提供商,以实现冗余)。
  • 让 OS X 使用其中一个网络接口将内容传输到第一个 URL,然后使用第二网络接口流式传输到第二个 URL

我不知道如何通过 OS X 中的不同网络接口将流量拆分到同一主机(但不同的端口)。我发现这些链接(这里, 和这里),但它们解决的问题不同。

有谁知道如何使用 iptables、nat、hosts 或 OS X 中的任意服务组合来实现我想要的这种分割?

更新

经过一番研究,我确信这应该可以通过 PF 实现。我创建了以下规则集并启用了 pf 并加载了此规则。但是,所有流量都被阻止,并且应该允许出站并正确路由的实际 rtmp 流量也被阻止。似乎我在让 PF 将 RTMP 流量与我配置的规则匹配时遇到了语法问题:

ext_if1 = "en0"
ext_if1_gwt = "192.168.1.1"
ext_if2 = "en5"
ext_if2_gwt = "172.168.1.1"

rtmp_ip = "104.46.55.96"
rtmp_port1 = "1935"
rtmp_port2 = "1936"

pass in on $ext-if1 route-to ($ext_if1 $ext_if1_gwt) proto tcp from any to $rtmp_ip port $rtmp_port1
pass in on $ext-if1 route-to ($ext_if2 $ext_if2_gwt) proto tcp from any to $rtmp_ip port $rtmp_port2

pass in on $ext-if2 route-to ($ext_if1 $ext_if1_gwt) proto tcp from any to $rtmp_ip port $rtmp_port1
pass in on $ext-if2 route-to ($ext_if2 $ext_if2_gwt) proto tcp from any to $rtmp_ip port $rtmp_port2

block out

相关内容