使用 nftables 将主机流量重定向到内部虚拟机不起作用

使用 nftables 将主机流量重定向到内部虚拟机不起作用

我的问题如下:在 ubuntu 20 主机上。我有一些多通道虚拟机管理程序和虚拟机,我希望能够从外部访问它们。

  • 物理主机:eth1 192.168.10.33/16

  • 虚拟机:mpqemubr0 10.54.32.232/24

转发已启用:

cat /etc/sysctl.conf | grep forward
# Uncomment the next line to enable packet forwarding for IPv4
net.ipv4.ip_forward=1

它还在每个接口上启用:

cat /proc/sys/net/ipv4/conf/mpqemubr0/forwarding
1

cat /proc/sys/net/ipv4/conf/eth0/forwarding 
1

iptables 和 ufw 被禁用,nftables 被安装。

nftables 配置如下:

#!/usr/sbin/nft -f
flush ruleset
table ip nat {
        chain prerouting {
            type nat hook prerouting priority 100;
            
            ip daddr 192.168.10.33 tcp dport {80,8080} dnat 10.54.32.232:8080
        }
        chain postrouting {
            type nat hook postrouting priority 100; policy accept;
            ip saddr 10.54.32.0/24 oifname {eth0,mpqemubr0} masquerade
        }
}
table inet filter {
    chain input {
        type filter hook input priority 0;
    }
    chain forward {
        type filter hook forward priority 0;
            ip daddr 10.54.32.232 accept
    }
    chain output {
        type filter hook output priority 0;
    }
}
  • 从主机我可以在端口 8080 上远程登录虚拟机
  • 从外面我可以联系到主人
  • 从虚拟机我可以 ping 外部

我无法将流量从外部重定向到主机到虚拟机,并且使用 tcpdump(从主机),系统看到数据包到达,但端口 8080 或主机 10.54.32.232 上没有任何输出:

sudo tcpdump -i any -n port 80 or port 8080 -vvvv
tcpdump: listening on any, link-type LINUX_SLL (Linux cooked v1), capture size 262144 bytes
14:30:36.229571 IP (tos 0x0, ttl 63, id 5375, offset 0, flags [DF], proto TCP (6), length 60)
    10.55.55.16.38848 > 192.168.10.33.80: Flags [S], cksum 0x71ba (correct), seq 560636356, win 64860, options [mss 1380,sackOK,TS val 1972236760 ecr 0,nop,wscale 7], length 0

显然,虚拟机没有看到任何东西进入其界面

它曾经可以与同一主机上的另一个虚拟机一起使用,但我必须重新创建它,新虚拟机采用另一个 IP,即使在更改 nftables.conf 以匹配新虚拟机 IP 后,它也不再工作(顺便说一句,旧虚拟机)已经不存在了)。

我想我错过了一个配置,但是在哪里?

感谢您的帮助 !

相关内容