Apache allow/deny IP 规则不适用于同一台服务器上的 OpenVPN

Apache allow/deny IP rules not working for OpenVPN on same server

我有一个限制对文件夹访问的 .htaccess 文件。唯一允许的 IP 是服务器 IP,我还用密码保护文件夹:

order deny,allow
allow from X.X.X.X
deny from all

AuthUserFile /path/to/.htpasswd
AuthType Basic
AuthName "test"
Require user username

当我使用带有动态端口转发的 SSH 隧道访问文件夹时,这非常有用 (ssh -fND 1080 user@host.com)。

现在我想通过服务器上安装的 OpenVPN 访问此文件夹,而不是 SSH。我在我的 Debian GNU/Linux 虚拟专用服务器上安装了预配置的 OpenVPN 访问服务器,我可以连接 sudo openvpn --config client.ovpn 和我的 VPN username/password.

当访问像http://whatismyipaddress.com/这样的网站时,我可以看到我的服务器IP地址出现了。 但是当我访问安装了 OpenVPN 服务器的 Apache HTTP 服务器时,我可以看到我的真实 IP 地址出现在 /var/log/apache2/access.log 中。 我没有与此服务器关联的域,并且想通过服务器 IP 地址或托管服务提供商 (vpsXXXXX.ovh.net) 的默认域访问受保护的文件夹。 我的问题可能与 post Restricting Apache2 virtual host access only to a VPN 有关 但是我没有使用域名访问服务器。

如果服务器使用相同的 IP 地址(但端口不同),HTTP 服务器如何获取 OpenVPN 服务器 IP 地址而不是我的真实 IP 地址?

这基本上与链接文章中的问题相同:如果您的 OpenVPN 服务器在 1.2.3.4 上并且 Apache 服务器正在侦听相同的 1.2.3.4 ip,当您连接到 Apache 服务器时,连接是不通过 VPN 路由,但通常通过 Internet 路由。由于您没有通过 VPN 连接到 Apache 服务器,它会看到您的 public IP。

一种解决方案是以某种方式将 vpsXXXXX.ovh.net 域(仅供您使用)解析为私有 IP,这将通过 VPN 路由您的连接 - 可能使用本地 DNS 服务器或通过手动编辑您的主机本地计算机的文件。 如果您采用这种方法,您还必须使用 Listen x.y.z.t

让 Apache 侦听私有 IP

虽然可能有更好的解决方案。

相关:https://forums.opensuse.org/showthread.php/481949-Running-apache-when-using-an-openvpn-connection