重新路由来自 OpenVPN 客户端的流量以仅进行本地访问

重新路由来自 OpenVPN 客户端的流量以仅进行本地访问

我已经在我的服务器上安装了 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。

  1. 在服务器上安装Dnsmasq
  2. 设置将/etc/hosts服务器名称指向 VPN 地址的条目
  3. 而不是DNS 8.8.8.8为客户推动DNS 10.254.1.1

这样,您的客户端将在连接到 VPN 时在内部解析您的服务器名称。

如果您希望服务器本身继续将其自己的名称解析为公共地址,请使用 Dnsmasq 的附加主机文件,而不是/etc/hosts.


*:如果假设错误,整个答案就没用,所以请告诉我:-)

相关内容