Назад | Перейти на главную страницу

Ограничение подключения веб-сайта nginx для пользователей VPN на том же сервере

Моя основная цель заключается в следующем: установить VPN-сервер на сервере, и веб-сайт на этом сервере должен быть доступен только для пользователей, которые используют VPN на этом же сервере.

Во-первых, работает двухсерверный корпус.

То есть у меня есть два сервера, A и B. Сервер PPTP VPN установлен в A, а nginx - в B.

Я установил разрешающие правила для моего сайта nginx следующим образом, и они работают нормально:

allow ip_of_a;
deny all;

Однако, когда я пытаюсь подключить сайт к A (у vpn-сервера тоже есть nginx-сервер), мой удаленный IP-адрес отображается как мой исходный IP-адрес, а не IP-адрес, который я получаю, когда подключаюсь через VPN, и я получаю страницу 403 Forbidden на nginx . Журналы ошибок показывают попытку подключения с моего исходного IP-адреса, а не IP-адреса VPN.

Я понимаю, что VPN по-прежнему знает мой исходный IP-адрес, а не IP-адрес, который он мне предоставил, но в этой ситуации должен быть обходной путь.

VPN назначает локальные IP-адреса в форме разрешить 10.80.80. *, Поэтому я поставил еще одно разрешение в форме

allow 10.80.80.0/24;

Это не помогло.

Я также попытался напрямую добавить локальный IP-адрес, который мне дает VPN, но опять же это не сработало:

allow 10.80.80.100;

Нужно ли это как-то исправить с сервера pptp или это можно исправить с помощью правила nginx?

Изменить: таблицы маршрутизации на клиенте (OS X) до и после подключения к vpn:

Перед:

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

Как объяснено, сервер VPN по умолчанию не перенаправляет веб-трафик. Вот, добавляя строку

push "redirect-gateway def1"

на вашем openvpn.conf позволит вам использовать IP-адрес VPN-сервера в качестве удаленного IP-адреса, и при этом ваш веб-сервер должен позволить вам пройти.

На самом деле вам не нужно настраивать 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 публичный ip-адрес сервера A и ip-адрес сайта