如何设置 IP 地址别名,以便从不同的 IP 网络访问 DLNA 资源

如何设置 IP 地址别名,以便从不同的 IP 网络访问 DLNA 资源

我拥有的

我有一个家庭 wifi 网络 192.168.1.0/24,DLNA 资源为 192.168.1.100。
我有一台带以太网的电视和一台同时具有 wifi 和以太网接口的上网本。
我想让我的笔记本像路由器一样工作。这意味着它通过 wifi 获得我的家庭网络,并通过以太网接口将其转发到电视。

我想要的是

我想让我的电视识别家庭网络中的 dlna 资源。

我做了什么

我已经在上网本的 eth0 接口上设置了一个 dhcp 服务器,其子网如下:

subnet 10.0.0.1 netmask 255.255.255.0 {
  range 10.0.0.5 10.0.0.10;
  option routers 10.0.0.1;
}

我在上网本上设置了我的 eth0 接口,如下所示:

ifconfig eth0 10.0.0.1/24 

我已启用转发:

echo 1 > /proc/sys/net/ipv4/ip_forward

我已向 iptables 添加了转发规则:

iptables -t nat -A POSTROUTING -o wlan0 -j MASQUERADE
iptables -A FORWARD -i eth0 -o wlan0 -j ACCEPT
iptables -A FORWARD -i wlan0 -o eth0 -j ACCEPT

现在我的电视获得了 10.0.0.5 的 IP 地址,我可以浏览互联网,但我的电视找不到任何 DLNA 资源。

问题

我认为资源发现仅通过 10.0.0.1/24,所以我的电视找不到 192.168.1.100 资源。请告诉我如何创建某种别名,以便 192.168.1.100 成为像 10.0.0.10 这样的别名

答案1

DLNA 仅支持广播。因此,您无法将广播数据包从 10.0.0.0/24 网络路由到 192.168.1.0/24 网络。

因此,最好的方法是根本不路由,而是使用笔记本电脑作为桥梁,并将 DLNA 资源和电视放在同一个网络上。这些是步骤。

  1. 删除笔记本上的 dhcp 服务器和 IP 表规则
  2. 桥接笔记本的接口。如何做到这一点取决于发行版,因此我将提供 debian/ubuntu 语法,您可以根据自己的发行版进行调整。

这是/etc/network/interfaces

auto lo br0 

iface lo inet loopback

iface br0 inet static
    bridge_ports eth0 wlan0
    address 192.168.1.x
    netmask 255.255.255.0

替换x为您当前的笔记本电脑的 IP 地址。

3)将电视设置为使用 DHCP

这应该足够了。桥接器将连接电视与笔记本电脑之间的有线连接和笔记本电脑与网络其余部分的 wifi 连接。由于它是一座桥接器,DLNA 广播将通过桥接器转发,响应将返回。

而且桥接意味着来自电视的 DHCP 广播也将穿过笔记本电脑,这就是为什么您不需要单独的 DHCP 服务器,它可以使用家庭网络上的服务器。

答案2

尝试将 DNS 服务器添加到您的 DHCP 选项中。您的电视可能还需要其他信息,例如域名。如果您的电视与其他路由器配合使用,我会研究 DHCP 监控工具(不知道有没有),查看 DHCP 服务器分发了哪些选项,然后在您的配置中模仿它们。

还有,你呢echo 1 > /proc/sys/net/ipv4/ip_forward

第三,如果你的range诗节看起来确实像,range 10.0.05 10.0.0.10那么可能需要改为range 10.0.0.5 10.0.0.10

好吧,在做了一些功课之后,似乎 DLNA 使用 SSDP 作为发现协议。来自“简单服务发现协议”维基百科页面:

SSDP 是基于 HTTPU 的文本协议。它使用用户数据报协议 (UDP) 作为底层传输协议。托管系统使用多播寻址向端口号为 1900 的特定 IP 多播地址发布服务。在 IPv4 中,多播地址为 239.255.255.250[3],IPv6 上的 SSDP 使用地址集 ff0X::c 来表示所有由 X 指示的范围。[4]

我对 Linux 上的多播流量没有太多经验,但看起来您可能需要启用多播流量的接收和转发才能使其正常工作。

相关内容