通过 WireGuard VPN 从 Docker 容器将呼叫路由到 IP 过滤的 Web 服务

通过 WireGuard VPN 从 Docker 容器将呼叫路由到 IP 过滤的 Web 服务

设想:

一个简单的 PHP 脚本 (myip.php),托管在具有公共 IP WSIP 的服务器上。该脚本可通过 http 和 https 访问。

我有一台小型服务器 (GW),具有公共 IP GWIP。此服务器仅用作网关。

另一台服务器(WORKER)必须访问 php 脚本,但是仅通过 GW.WORKER 上安装了 Docker。

Wireguard配置在GW和WORKER之间,充当GW的VPN服务器。

网关 wg0.conf

[Interface]
PrivateKey = <GW-PRI-K>
Address = 10.1.0.1/24
ListenPort = 51820
PostUp = iptables -A FORWARD -i wg0 -j ACCEPT; iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
PostDown = iptables -D FORWARD -i wg0 -j ACCEPT; iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE

[Peer]
PublicKey = <WORKER-PUB-K>
AllowedIPs = 10.1.0.2/32,10.1.0.0/24

工作者 wg0.conf

[Interface]
PrivateKey = <WORKER-PRI-K>
Address = 10.1.0.2/24

[Peer]
PublicKey = <GW-PUB-K>
Endpoint = GWIP:51820
AllowedIPs = 10.1.0.1/24,WSIP/32
PersistentKeepalive = 25

从 WORKER(主机)我可以访问 Web 服务。一切正常。

curl http://$WSIP/myip.php
xxx.xxx.243.174

curl https://$WSIP/myip.php
xxx.xxx.243.174

但是,如果我从 docker 容器运行相同的命令:

curl http://$WSIP/myip.php
xxx.xxx.243.174

curl https://$WSIP/myip.php

没有反应对于 https。

WORKER相关路由表条目:

10.1.0.0/24 dev wg0 proto kernel scope link src 10.1.0.2
WSIP dev wg0 scope link 

看起来访问服务器 WS 没有问题,但是响应出现了一些问题。

我非常确信解决方案应该与伪装有关,但几个小时后我有点迷失了。

有什么线索吗?

答案1

由于您使用 http 获得了答案,因此这不应该是路由或网络故障。此外,您使用 curl 不会收到错误,因此它可能只是一个空答案。

您能否尝试获取 http 代码curl -I https://$WSIP/myip.php,并使用 使 curl 详细显示curl -v https://$WSIP/myip.php

您还可以检查 php 日志。

相关内容