我目前正在使用 Proxmox 构建私有云集群。我的集群包含一个头节点和两个计算节点。
我的头节点托管一个 NAT 服务器和 openvpn 服务器,以及三个 NIC:一个用于出站,每个计算节点一个。NAT 允许我与两个计算节点交互。在两个计算节点上,我托管一个路由器,每个路由器大约有 30 个 VLAN。
我的目标是在连接到路由器时能够从 vpn 客户端看到地址。目前,我使用 vpn 连接到头节点,然后尝试 ping 或 ssh 到路由器,它显示连接来自头节点的 ip 地址。任何帮助都非常感谢!
我的路线如下:
default via *.*.*.1 dev eno1 onlink
10.10.1.0/24 via 10.10.1.2 dev tun0
10.10.1.2 dev tun0 proto kernel scope link src 10.10.1.1
*.*.*.0/25 dev eno1 proto kernel scope link src *.*.*.46
192.168.0.0/19 via 192.168.77.1 dev vmbr0
192.168.32.0/19 via 192.168.76.6 dev vmbr1
192.168.76.0/24 dev vmbr1 proto kernel scope link src 10.10.1.1
192.168.77.0/24 dev vmbr0 proto kernel scope link src 192.168.77.1
以及 NAT 规则(我目前正在使用firewalld):
-A POST_public_allow ! -o lo -j MASQUERADE
答案1
您展示的 NAT 规则几乎不提供任何信息,因为它修改了风俗链,据称它是从其他表中的其他(标准)链调用的(据称POSTROUTING
是该nat
表的;您可以使用它来查看iptables -t nat -L POSTROUTING
)。
您遇到的问题是,据称伪装被应用在连接头节点和计算节点的接口上。
解决该问题的一种方法是仅在头节点用于连接 Internet 的接口上使用 SNAT。
但请注意一个问题。事实上,你使用 VPN 访问头节点(如果我没有看错的话),这意味着当你在头节点上禁用过度伪装时,你的计算节点将看到你发送的数据包超过VPN 来自发送程序所在的任何网络。由于它应该是私有子网,因此您必须确保 - 源网络和连接头节点和计算节点的网络具有不同的地址(并且它们都必须与隧道使用的子网不同) - 计算节点必须具有针对源网络的路由规则(以将发往那里的数据包发送到头节点)。 - 头节点必须启用 IP 转发。