已解决禁止 403:从 openvpn 网络访问私人网站客户端使用公共 ip 代替 openvpn ip

问题描述

我正在尝试从/向 openvpn 网络访问私人网站。但是,Nginx 在 access.log 中告诉客户端使用他的公共 IP 而不是他的私有 openvpn ip。

在这里你可以看到我的网络:

OpenVPN server (tun mode): 
     10.10.10.1 (server public ip)
          172.17.0.1 (docker bridge)
               172.17.0.2 (openvpn server container)
               192.168.255.1 (openvpn server private ip)

My client :
     10.10.10.2 (public ip)
          192.168.255.10 (openvpn private ip)

mywebsite.domain.com : this is my private web site i'm trying to access.

Nginx conf :(这个 Nginx conf 的允许行不起作用......)。 “位置参数在这里并不重要”。

allow 192.168.255.10/32;
deny all;
location / {
    proxy_http_version 1.1;
    proxy_set_header Connection "";
    proxy_pass http://localhost:9000;
}

当我尝试与“我的客户”连接时,403 被禁止

如果我使用这个 Nginx conf :

allow 10.10.10.2;

然后,mywebsite.domain.com 正常工作。

那么...为什么“我的客户”不使用内部 openvpn IP? (即 192.168.255.10)。在Nginx access.log中可以看到My client使用了他的公网ip。

我澄清一下,除此之外,我的 openvpn 服务器似乎工作正常。例如,当我使用客户端导航到 Internet 时,外部网站会看到服务器的公共 ip (10.10.10.1)。我用 mon-ip.io 来检查。

有人有想法吗?

先谢谢你!

解决方法

解决了! https://serverfault.com/questions/858657/openvpn-and-website-on-the-same-server-ip

这是一个路由问题。

为了建立和维护到您的 VPN 的连接,您的 VPN 客户端必须有一个路由路由到您在服务器上用于传入 VPN 连接的地址。假设采用标准路由,这意味着任何发往相同 IP 的 VPN 服务器都将直接穿过 Internet。

选项。

  • 简短的基本答案是为您的 VPN 服务器获取并使用单独的 IP 地址。不要将您用于 VPN 的 IP 用于其他任何用途。

  • 在您的 VPN 主机上设置一些 DNS 服务器,并在您连接时将托管站点的记录映射到内部 IP 地址。

  • 如果您将 Linux 作为客户端运行,那么您可能会处理策略路由和多个表,并且仅通过标准表发送 1194 流量,并通过 VPN 端口发送 http/https 流量。