我在数据中心有一台 Proxmox 服务器。在这台服务器上(多台服务器之一,它们位于 Proxmox 集群中)我托管了各种虚拟机。
VM 上的服务通过 iptables(使用 ufw)natting 公开,如下例所示:
-A PREROUTING -i eno1 -p tcp -d <public_ip> --dport 21 -j DNAT --to-destination <local_ip>:<port>
-A PREROUTING -i eno1 -p tcp -d <public_ip> --dport 23 -j DNAT --to-destination <local_ip>:<port>
-A PREROUTING -i eno1 -p tcp -d <public_ip> --dport 10090:10100 -j DNAT --to-destination <local_ip>:<port>
VM 使用虚拟桥接网卡进行连接,如 Proxmox 文档所述。(Proxmox 文档)这有效。但是有一个缺点。VM 不会接收连接方的源 IP。这为我在 IP 过滤、登录其他各种 VM 方面提供了有限的选项。
现在我正在寻找一个类似的 nftables 解决方案(它将或已经取代 iptables)。
有没有办法设置 natting 或转发规则以允许源 IP 发送到 VM?
答案1
您可以通过以下方式在 nftables 中执行相同的规则:
table inet nat {
chain prerouting {
type nat hook prerouting priority dstnat;
iif eno1 ip daddr { <public_ip> } tcp dport 21 dnat <local_ip>:<port>
iif eno1 ip daddr { <public_ip> } tcp dport 23 dnat <local_ip>:<port>
iif eno1 ip daddr { <public_ip> } tcp dport 10090-10100 dnat <local_ip>:<port>
}
}
不过,目标 NAT 不会重写源 IP,因此您应该可以看到真正的源 IP。如果看不到,则可能是您要删除的后路由 NAT 表中的源 NAT 规则。您可以使用 进行检查iptables -t nat -L
。