我的问题如下:在 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 后,它也不再工作(顺便说一句,旧虚拟机)已经不存在了)。
我想我错过了一个配置,但是在哪里?
感谢您的帮助 !