限制 nginx 网站连接到同一服务器上的 VPN 用户

限制 nginx 网站连接到同一服务器上的 VPN 用户

我的主要目标如下:在服务器上安装 VPN 服务器,并且该服务器上的网站只有使用同一服务器上的 VPN 的用户才能访问。

首先,双服务器的情况有效。

也就是我有A、B两台服务器,PPTP VPN服务器安装在A上,nginx在B上。

我已经为我的 nginx 站点设置了允许规则,如下所示,并且它们运行正常:

allow ip_of_a;
deny all;

但是,当我尝试连接 A 上的站点时(VPN 服务器也有一个 nginx 服务器),我的远程 IP 显示为我的原始 IP,而不是我通过 VPN 连接时获得的 IP,并且我在 nginx 上收到 403 Forbidden 页面。错误日志显示从我的原始 IP 而不是 VPN 的 IP 进行的连接尝试。

我知道 VPN 仍然知道我的原始 IP 而不是它给我的 IP,但这种情况应该有一种解决方法。

VPN 分配的本地 IP 格式为允许 10.80.80.*,因此我又放了一个格式为

allow 10.80.80.0/24;

但那并没有起到作用。

我也尝试直接添加 VPN 提供给我的本地 IP,但仍然不起作用:

allow 10.80.80.100;

这是否需要以某种方式从 pptp 服务器修复或可以通过 nginx 规则修复?

编辑:连接到 VPN 之前和之后客户端(OS X)上的路由表:

前:

Internet:
Destination        Gateway            Flags        Refs      Use   Netif Expire
default            192.168.1.1        UGSc           18        0     en0
127                127.0.0.1          UCS             0        0     lo0
127.0.0.1          127.0.0.1          UH             17 12724964     lo0
169.254            link#4             UCS             0        0     en0
192.168.1          link#4             UCS             3        0     en0
192.168.1.1        0:25:9c:4a:c6:44   UHLWIir        19    28906     en0   1000
192.168.1.126      0:88:65:5c:6a:f4   UHLWIi          0       33     en0    440
192.168.1.129      127.0.0.1          UHS             1        0     lo0
192.168.1.255      ff:ff:ff:ff:ff:ff  UHLWbI          0       24     en0

后:

Internet:
Destination        Gateway            Flags        Refs      Use   Netif Expire
default            10.99.99.99        UGSc           16        0    ppp0
default            192.168.1.1        UGScI          11        0     en0
10                 ppp0               USc             1        0    ppp0
10.99.99.99        10.99.99.100       UHr            17        8    ppp0
SERVER_IP_HERE      192.168.1.1        UGHS            1      299     en0
127                127.0.0.1          UCS             0        0     lo0
127.0.0.1          127.0.0.1          UH             17 12724968     lo0
169.254            link#4             UCS             0        0     en0
192.168.1          link#4             UCS             3        0     en0
192.168.1.1        0:25:9c:4a:c6:44   UHLWIir        13    28987     en0    988
192.168.1.126      0:88:65:5c:6a:f4   UHLWIi          0       33     en0    428
192.168.1.129      127.0.0.1          UHS             0        0     lo0
192.168.1.255      ff:ff:ff:ff:ff:ff  UHLWbI          0       38     en0

答案1

VPN 服务器默认不重定向网络流量,如前所述这里,添加以下行

push "redirect-gateway def1"

在您的 openvpn.conf 上将允许您将 VPN 服务器 IP 作为您的远程 IP,并且您的 Web 服务器应该让您通过。

答案2

其实你不需要设置 DNS 服务器。我尝试过以下场景

VPN 服务器

创建别名

# ifconfig eth0:1 192.168.127.10 netmask 255.255.255.255 up

配置nginx为别名地址

server {
    listen      192.168.127.10:80;
    server_name  site1.example.net;

    location / {
        root          /var/www/html;
    }
}

配置 iptables

# iptables -t nat -I PREROUTING -p tcp -d xxx.xxx.xxx.xxx --dport 80 -j DNAT --to-destination 192.168.127.10:80

其中 xxx.xxx.xxx.xxx 是服务器 A 的公网 IP 地址,也是网站的 IP 地址

相关内容