设想:
一个简单的 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 日志。