我正在尝试将 pfSense 设置为我的主要 Internet 路由器,以替换提供商路由器。
基本的 Internet 连接可以正常工作:将外部接口配置为 DHCP 客户端,为内部客户端配置 DHCP 服务器,配置 NAT——一切都很好。
但是,我也想在设备上使用 IPTV。我的 ISP 在 WAN 线路上使用单独的 VLAN 提供 IPTV。(互联网流量使用本地 VLAN,因此这里不需要弄乱 VLAN。)
ISP路由器配置如下:
- 一个网桥,其成员是用于连接 IPTV 接收器和终止 WAN 接口上 IPTV VLAN 的内部端口
- 网桥绑定了一个 IP 地址。它是一个静态 RFC1918 地址,显然没有在该接口上配置默认网关。
- 此外,该设备运行一个 IGMP 代理,该代理将网桥作为其上游接口,将 LAN 接口(甚至那些不用于 IPTV 的接口)作为下游接口。启用快速离开,在上游和下游强制使用 IGMP 版本 2,并且为一个特定 IP 地址跳过多播组。虽然我确实觉得奇怪的是上游被配置为整个网桥,而不仅仅是 VLAN 接口——可能与支持其他上行链路连接的路由器有关(我在光纤上,ONT 通过以太网连接,显然设备还支持以太网上的 ATM 以及 ADSL)。
我在 pfSense 中所做的:
- 在 Interfaces > VLANs 中,添加了一个新接口 (
WANIPTV
),其中 WAN 接口作为其父接口和相应的 VLAN ID。 - 在 Interfaces > Bridges 中,创建了一个带有
WANIPTV
接口和其他未使用的物理接口作为其成员的网桥。这座桥被称为BRIDGE0
。 - 在 Interfaces > Assignments 中,分配
BRIDGE0
为它自己的接口 (IPTVBRIDGE
) 并启用它,使用没有IP配置与提供商提供的路由器相同的 IP 配置(RFC1918 地址,无网关)。 - 在 System > Advanced > Tunables 中,设置
net.link.bridge.pfil_member
为 0 和net.link.bridge.pfil_bridge
1。因为net.link.bridge.pfil_onlyip
我保留了默认值 0 以允许非 IP 流量通过。 - 在防火墙 > 规则中,我为
IPTVBRIDGE
接口添加了一个通过规则,匹配 IPv4+IPv6,其他所有设置为 ANY。 - 在 Services > IGMP Proxy 中,我启用了 IGMP,添加
IPTVBRIDGE
为上游接口和接收器的物理端口作为下游。我不知道我需要在接口上为网络输入什么;我刚刚为两者添加了 0.0.0.0/1 和 128.0.0.0/1 。 WANIPTV
然后,我为所涉及的接口(以及IPTVBRIDGE
接收器的物理接口)添加了任意过滤规则。
通过这些设置,我可以通过在 ISP 路由器上运行接收器,然后将 WAN 电缆和 IPTV 接收器插入我的 pfSense 来获得一小段时间的图片。但是,过了一段时间,图像冻结了,当我重新启动接收器时,它报告没有可用的网络连接。
如何找出必须为 IGMP 代理配置的网络?还是其他地方的问题?
经过一番摆弄和研究,我相信我终于弄明白了:
IGMP 代理
对于我的 ISP,消费设备似乎位于交换网络上,IGMP 代理似乎根本不需要。
YMMV,如果你有从 IPTV 接收器到上游服务器的路由连接,你可能仍然需要这个。在这种情况下,它应该是这样工作的:
将上游网络设置为尽可能长的带有掩码的任何有效 IP 地址(您希望创建一个语法上有效的条目,该条目实际上与您的服务实际使用的任何 IP 地址都不匹配)。然后转到状态 > 系统日志 > 系统 > 常规并过滤
igmpproxy
. 您应该会看到一堆消息,例如:源地址是您需要在上游接口上允许的地址。如果您偏执,您可以一一添加地址,或者您可以添加整个 IP 范围。
找出接收器的 IP 地址(您可能需要将其连接到工作路由器)并在下游启用它。
本地 IP 地址
禁用 IGMP 代理后,
IPTVBRIDGE
接口上的本地 IP 地址也不再需要。禁用 IGMP 代理后,我还删除了 IP 地址。过滤规则
在
IPTVBRIDGE
接口的过滤规则中,请务必展开高级选项并选中“允许 IP 选项”。如果不选中此框,默认情况下将丢弃带有 IP 选项(多播服务所需,例如 IPTV)的数据包。如果在我的情况下,您没有运行 IGMP 代理并且 pfSense 配置为在网桥而不是其成员接口上应用过滤规则,则您不需要在外部/内部 IPTV 接口上使用任何规则。
结论
有了这个,我的 IPTV 接收器终于可以接收到流,即使在重新启动之后也是如此。
一切正常后,我删除了所有不必要的东西(IGMP 代理、接口上的本地 IP 配置
IPTVBRIDGE
和 IPTV 网桥成员接口上的过滤规则)。可以肯定的是,我重新启动了 IPTV 盒子并放置了大约 15 分钟。我仍然可以看电视,并且在任何与 IPTV 相关的接口上都没有观察到任何丢包。