同一服务器上的 OpenVPN 和 NGINX 显示客户端真实 IP 而不是 VPN 公共 IP

同一服务器上的 OpenVPN 和 NGINX 显示客户端真实 IP 而不是 VPN 公共 IP

我们有一个在同一个系统上设置了 NGINX 和 OpenVPN 的服务器。

OpenVPN 客户端在正常访问外部互联网资源时成功连接并获取 OpenVPN 服务器的公共 IP 地址,但如果我们浏览服务器的 NGINX 网站,我看到的是实际的 OpenVPN 客户端 IPv4 地址,而不是 VPN 服务器的公共 IP。

我希望 OpenVPN 客户端在浏览 NGINX 网站时拥有服务器公共 IP 地址的原因是,这样他们就不需要使用以下规则输入 http 身份验证密码。

 location / {
        satisfy any;
        allow [Server_Public_IP]/32;
        auth_basic "Development Area";
        auth_basic_user_file /etc/nginx/.htpasswd;

任何帮助都值得感激。谢谢

答案1

这里的问题是 OpenVPN 客户端将其默认网关设置为10.8.0.1,即 VPN 服务器的 IP 地址。

这意味着客户端通过 VPN 隧道发送所有传出流量,并且源地址是 VPN 隧道客户端 IP 地址。

为了解决这个问题,您需要以某种方式排除服务器的公共 IP 地址通过 VPN 隧道进行路由。

如果只需要 VPN 与某些 IP 网络通信,那么您可以在 OpenVPN 服务器push route语句中明确配置这些网络。

另一个不太可行的解决方案是通过 VPN 明确路由除公共 IP 地址之外的所有 IP 地址。这会在客户端中创建一个相当大的路由表。

如果要求通过 VPN 服务器路由所有 IP 地址,那么唯一可行的解​​决方案是添加:

allow 10.8.0.0/24;

到nginx配置,以便允许VPN隧道用户访问该服务。

相关内容