根据TCP连接将UDP端口转发到Linux网桥

xytpbqjk  于 2023-03-29  发布在  Linux
关注(0)|答案(1)|浏览(148)

我在一个proxmox服务器上观察到一个我无法解释的路由行为(在Debian 11主机级别)。也许有人可以帮助我更好地理解或者已经观察到了同样的情况,并有一个解决方案。
配置下方:
Proxmox VE 7.3-6托管两个VM:

  • VM 1(10.0.10.1/254)连接到vmbr 1(10.0.10.254/24)
  • VM 2(10.0.11.1/24)连接到vmbr 2(10.0.11.254/24)
  • vmbr 0(与物理NIV桥接)是WAN接口(假设其IP为192.168.1.1)

(Linux网桥由Proxmox命名为vmbrX)
我在主机上配置了netfilter(使用iptables命令):

  • 将TCP端口80,443转发到VM 1(10.0.10.1)
  • 将UDP端口500、4500转发到VM 2(10.0.11.1)
iptables -t nat -A PREROUTING -i vmbr0 -p udp -d 192.168.1.1 -m multiport --dports 500,4500 -j DNAT --to-destination 10.0.11.1
  • 将TCP端口8888转发到VM 2(10.0.11.1)
  • Netfilter允许所有转发数据包(为了简单起见,没有任何东西被阻止)。此外,所有级别的Proxmox GUI(DC,主机,NIC...)都禁用了所有防火墙
  • 来自vmbr 0的所有传出流量都是WAN IP为www.example.com的源NAT192.168.1.1

iptables -t nat -A POSTROUTING -o vmbr0 -j SNAT --到192.168.1.1

type here

在我的配置中,UDP端口仅在建立TCP连接时才打开。
我使用外部端口扫描器检查Proxmox主机上的端口状态。我观察到的情况如下:
状态1:我扫描UDP端口500,我可以看到它被关闭,而它应该是打开的,因为没有什么应该阻止它:vmbr 0上的tcpdump显示UDP数据包到达Proxmox主机。但是vmbr 2上的tcpdump什么都没有显示--〉UPD端口转发不工作(或者有路由问题或???)。
状态2:现在我扫描TCP地址92.168.1.1:80(转发到VM 1)或192.168.1.1:8888(转发到VM 2)。这些端口按预期打开。
状态3:我立即重新扫描了www.example.com上的UDP端口50092.168.1.1,猜猜怎么着!这次端口是打开的。但不是永远打开。如果我等一段时间,它又会关闭。
这种行为可能与Linux网桥的路由有关。我从来没有在物理NIC上观察到过这种情况。为什么UDP数据包的路由/转发依赖于TCP数据包的路由?在VMBRX上应该会发生一些事情...
您的帮助将不胜感激。问候

t5fffqht

t5fffqht1#

我回答自己:实际上,问题来自我的测试工具。我使用了nmap,但可能参数错误。我用netcat替换了它,并注意到我的配置中没有问题:)我用来检查UDP 500端口的netcat命令是:

nc -vz -u 192.168.1.1 500

相关问题