我已经在我的服务器上安装了 OpenVPN,并且还运行 git 和 Web 服务器。在开始安装之前,我最初的想法是仅允许 VPN 客户端访问某些网站,并仅允许它们访问 git 的 SSH。我以为我只会允许从 VPS 的本地 IP - 10.254.1.0/24 访问端口,但我发现该包似乎是用我的实际 IP 转发的,而不是来自 VPN 的 IP。我当前从 tun 接口进行预路由的规则(我正在使用 UFW,这是 iptables 规则的一部分,该规则位于 ufw 的 before.rules 中):
*nat
:POSTROUTING ACCEPT [0:0]
-A POSTROUTING -s 10.254.1.0/24 -o eth0 -j MASQUERADE
COMMIT
我不太明白为什么客户端的实际IP分配给通过VPN发送的数据包,我宁愿期望这个数据包将从VPN的网络发送。我正在考虑这个问题的解决方案,我唯一的想法是在我的第二台服务器上安装 OpenVPN 并从它进行连接。然而,我发布这个问题的原因是我更喜欢从我已经安装了 OpenVPN 的当前服务器上执行此操作。欢迎任何建议。
答案1
我假设*您正在尝试通过其公共地址访问 VPN 服务器,并期望此连接通过隧道。
这种情况不会发生,您的客户端需要通过公共网络连接到您的 VPN 服务器来建立和维护隧道。
您有多种选择,其中更简单的似乎是使用 Dnsmasq 设置一种水平分割 DNS。
- 在服务器上安装Dnsmasq
- 设置将
/etc/hosts
服务器名称指向 VPN 地址的条目 - 而不是
DNS 8.8.8.8
为客户推动DNS 10.254.1.1
这样,您的客户端将在连接到 VPN 时在内部解析您的服务器名称。
如果您希望服务器本身继续将其自己的名称解析为公共地址,请使用 Dnsmasq 的附加主机文件,而不是/etc/hosts
.
*:如果假设错误,整个答案就没用,所以请告诉我:-)