@aravindo

Как дать доступ к сайту только по VPN?

У меня есть виртуалка на которой установлен OpenVPN и Nginx.

Нужно сделать так чтобы Nginx отдавал пользователю "из интернета" 403 forbidden, а если пользователь подключен к VPN серверу - 200 OK.

Настройка Nginx следующая:

server {
    listen       80;
    server_name  localhost;

    location / {
        add_header "Content-Type" "text/html";

        if ( $remote_addr !~ ^10\.6\. ) {
                return 403 "($remote_addr) Forbidden\n"
        }

        return 200 "($remote_addr) Hello from internal network\n";
    }
}


И настройка OpenVPN:

mode server
tls-server

server 10.6.0.0 255.255.255.0

ifconfig 10.6.0.254 10.6.0.253
route 10.6.0.0 255.255.255.0
push "route 192.168.0.0 255.255.255.0"

dev tun
verb 3
duplicate-cn
key key.pem
ca cert.pem
cert cert.pem
dh dh.pem
keepalive 10 60
persist-key
persist-tun
proto tcp-server
port 1194


К сожалению, если подключиться к VPN и сделать запрос на рельный IP адрес сервера, то в $remote_addr будет мой реальный адрес, а не тот, что в VPN сети. И Nginx верёт 403.

curl <public_ip_of_vps> # Получаю 403

curl 10.6.0.1 # Получаю 200

Как сделать так, чтобы при обращении к публичному IP возвращалось 200?
  • Вопрос задан
  • 2395 просмотров
Пригласить эксперта
Ответы на вопрос 3
markus_saar
@markus_saar
CEO at hidemy.name
Возможно, такое решение будет самым простым: если у пользователей вашего VPN есть выход в интернет и внешний IP-адрес, вы можете через htaccess htaccess.ru/info/ip-filtering разрешить доступ к сайту только с этого IP-адреса.
Ответ написан
ValdikSS
@ValdikSS
Добавьте пользователям VPN маршрут на внешний IP-адрес сайта через VPN. Это не будет работать, если сайт и VPN-сервер расположен на одном и том же IP-адресе.
Ответ написан
Desem
@Desem
в server { добавляем
satisfy all;
allow 10.6.0.0/24;
deny all;
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы