Моя основная цель заключается в следующем: установить 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-адрес сайта