我的主要目标如下:在服务器上安装 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 地址