我有一个 DO VPS 作为 WireGuad 服务器。
我在该网络中有几个设备(10.252.1.0/24),其中一台计算机运行 Kubernetes(我的家庭服务器),节点 IP 为 172.18.0.2,VPN IP 为 10.252.1.3
我尝试将除端口 22 之外的所有连接从 10.252.1.3 转发到 127.18.0.2,但我觉得它不起作用。
## Forward TCP traffic from source IP 10.252.1.3 on ports 1-21 and 23-65535
sudo iptables -t nat -A PREROUTING -s 10.252.1.3 -p tcp --dport 1:21 -j DNAT --to-destination 172.18.0.2
sudo iptables -t nat -A PREROUTING -s 10.252.1.3 -p tcp --dport 23:65535 -j DNAT --to-destination 172.18.0.2
# Forward UDP traffic from source IP 10.252.1.3 on ports 1-21 and 23-65535
sudo iptables -t nat -A PREROUTING -s 10.252.1.3 -p udp --dport 1:21 -j DNAT --to-destination 172.18.0.2
sudo iptables -t nat -A PREROUTING -s 10.252.1.3 -p udp --dport 23:65535 -j DNAT --to-destination 172.18.0.2
在 kubernetes 主机上,如果我 curl 172.18.0.2:port,则会有响应,但是当我 curl 10.252.1.3:port 时,它会拒绝“无法连接到服务器”
在应用 iptables 后,curl 和 kubectl 也在主机上停止工作。
知道可能哪里出了问题吗?
我的目标是拥有一个 VPS 服务器,这样我就可以连接到我的家庭网络并访问在我的家庭服务器上运行的 kubernetes 上的服务。这对我来说也是一种教育,可以学习 kubernetes
谢谢
答案1
您当前的 iptables 规则正在 VPS 上使用 DNAT,它将传入流量从 VPS (10.252.1.3) 上的特定端口重定向到您的 Kubernetes 节点 (172.18.0.2)。DNAT 在某些情况下可以工作,但它可能会干扰已建立的连接或在 VPS 本身上运行的服务。
为了实现从通过 WireGuard VPN 连接的家庭网络设备访问 Kubernetes 节点上的服务的目标,您实际上需要在 Kubernetes 节点上使用 SNAT(源网络地址转换)。SNAT 会修改从 Kubernetes 节点发出的数据包的源地址,使其看起来像是来自家庭网络上的 VPS(10.252.1.3)。
还要检查其他防火墙规则或服务是否阻止了 Kubernetes 节点上的传入流量。您可以暂时禁用 iptables 规则 ( ) 以查看它是否能解决和 的sudo iptables -F
问题。curl
kubectl
有关更多 iptables 高级配置选项,请参阅文档。