基本上我想要的是,我想使用 google cloud vm 的公共 IP 来访问我的本地网络服务器。我在本地没有任何公共 IP。
当我放gcloud_public_ip:80在我的浏览器 URL 栏中,我想要访问本地服务器的 Web 端口而不是云虚拟机的 Web。
我已成功配置 wireguard。gcloud vm 和本地服务器上的 wg0 接口均已启动并正在运行。我的本地路由器中没有端口阻止或 IP 过滤。我还在 google cloud 防火墙上打开了 Web 端口 80/443 udp/tcp 入口以及 wireguard 隧道的一些其他端口。
我读到我需要在云虚拟机上使用 iptables 命令将来自互联网的传入流量重定向到位于 wireguard 隧道另一侧的本地服务器的 webport 80/443。我对此不太熟悉,但据我所知,我需要发出两个命令;一个用于 PREROUTING ,一个用于 POSTROUTING 。
这些是我发出的命令,但它们不起作用,或者至少,我认为我仍然缺少了一些东西。
sudo iptables -t nat -A PREROUTING -i ens4 -p tcp --dports 80,443 -j DNAT --to-destination 10.0.3.2
sudo iptables -t nat -A POSTROUTING -p tcp -d 10.0.3.2 --dports 80,443 -j SNAT --to-source 10.140.0.2
ens4 是 Google Cloud VM 的内部接口,它具有映射到它的公共 IP。
10.0.3.2是本地服务器侧隧道ip。
10.140.0.2 是 ens4 的 ip,它有公网 ip 映射到它。
答案1
您已经在 VPS 服务器上设置了规则,以便它可以正确处理来自/到您的 Web 服务器的流量。
但是,您需要在 Web 服务器上设置规则,通过 Wireguard 隧道转发所有流量。
您需要在 Web 服务器上通过 Wireguard 隧道设置默认路由。需要通过您使用的实际互联网连接建立到 VPS 的主机路由。
所有细节取决于您的网络设置的详细情况。