旧游戏的 Tinc 和广播

旧游戏的 Tinc 和广播

我想了解如何为旧游戏正确设置广播。我特别对《魔兽争霸 3》游戏感兴趣,它在本地网络上运行,并且仅搜索 192.168.0.0/16 子网上的游戏。

我的任务是让游戏能够在 Linux 和 Windows 系统上运行,就像在本地网络上一样

初始数据:

  • 本地接口:eth0
  • 本地地址:192.168.20.75
  • VPN接口:tun0
  • VPN地址:192.168.55.1
  • 游戏端口:6112

现在我有一个看起来很奇怪的工作解决方案:

  • 我启动魔兽争霸3并在里面制作本地游戏,它上升到0.0.0.0:6112
  • 制定路由规则
    ip route add 255.255.255.255 dev tun0
    
  • 我正在制定更改广播源的规则
    iptables -tnat -A POSTROUTING -p udp -m udp --dport 6112 -j SNAT --to-source 192.168.55.1
    

瞧,游戏出现在客户端的本地网络中

在这种情况下有没有一种更可靠且不那么“奇怪”的解决方案呢?让我困惑的是我必须将所有 255.255.255.255 重定向到该tun0接口

答案1

我在 iptables 中寻找解决我的问题的方法,但事实证明它无法帮助我。在一次在线聊天中,我被告知要深入研究 nfttables,几个小时后我找到了这个解决方案

在MANGLE链中为INPUT和OUTPUT创建2个表

nft 'add chain ip mangle OUTPUT { type filter hook output priority  150; policy accept; }'
nft 'add chain ip mangle INPUT { type filter hook input priority  150; policy accept; }'`

将流量复制到另一个接口

nft add rule mangle INPUT iifname eth0 ip daddr 255.255.255.255 udp dport 6112 meta mark set 2 dup to 255.255.255.255 device tun0

它从本地网络接口 (eth0) 获取流量,确保接收地址来自广播 (255.255.255.255) 并转到端口 6112,如果条件为真,则将其标记为“2”并发送到地址 255.255.255.255,仅到 VPN(tun0) 接口。

在此阶段,我们已经开始在 VPN 中的设备上看到必要的流量,只有源地址将等于本地网络的源。那么让我们解决这个问题:

nft add rule mangle OUTPUT oifname tun0 meta mark 2 counter ip saddr set 192.168.55.5

在这里,我们确保来自带有标签“2”的 tun0 接口的流量将源地址替换为 VPN 网络上的地址。如果不这样做,那么当通过广播访问时,流量将流向其本地网络的地址

相关内容