我有一个中央开发服务器,运行一个 VPN 服务器,以及几个需要连接到它的客户端。服务器正在运行 Apache,但仅接受本地请求(仅侦听 127.0.0.1:80)。
我基本上需要强制连接到 VPN 的每个客户端通过 VPN 将流量路由到某个主机名并路由到本地 Apache 实例。
例如:
Client requests google.com -> google.com
Client requests server -> vpn -> server:80
我知道当客户端连接到 VPN 时我可以将路由命令推送到客户端,现在我只需要弄清楚要推送什么路由来实现这一点。至少,route
客户端自己添加此路由的语法/命令是什么?
答案1
首先:除了本地计算机之外,您将无法将流量路由到 127.xyz(好吧,这甚至可能是可能的,但您肯定会在此过程中破坏其他东西......)所以我' d 建议更新 apache 配置以侦听 VPN IP(例如 10.8.0.1)。如果这不是一个选项,您可以尝试我的答案末尾的选项之一。
OpenVPN 客户端应该已经获得了到服务器的路由,在我的示例中是这样的:
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
10.8.0.1 10.8.0.53 255.255.255.255 UGH 0 0 0 tun0
10.8.0.53 0.0.0.0 255.255.255.255 UH 0 0 0 tun0
如果您希望将其他路由推送到客户端,请使用:
push "route 192.168.10.0 255.255.255.0"
(相应地更改 IP/网络掩码)。
如果您希望您的 apache 实例可以通过主机名访问(而不仅仅是 at http://10.8.0.1/
),请将其放入每个客户端的/etc/hosts
文件中
10.8.0.1 servername.domain.example
或者设置一个 DNS 服务器(如 dnsmasq <- 确保禁用 dhcp 服务器)并将其推送到客户端(在您的 ovpn-conf 中):
push "dhcp-option DNS 10.8.0.1"
这应该够了吧。
其他选项
如果您无法更改 apache 监听的 IP,我会想到以下方法(但仅将它们用作最后的手段):
SSH 端口转发:不使用 OpenVPN(或任何其他 VPN 服务器),而是使用 SSH 连接到您的服务器:
ssh -L1234:localhost:80 user@servername
这样,服务器上的 apache 实例(仅侦听
127.0.0.1:80
)将在您的客户端上可用http://localhost:1234/
。您必须对每个客户端执行此操作,因此如果您有很多客户端,则可能不适合。
但即便如此,您也可以在~/.ssh/authorized_keys
.请记住,客户可能能够使用它作为互联网的代理或做一些您可能不希望他们做的其他事情。所以正确配置sshd很重要。- 一些 iptables 魔法(你必须对流量进行 NAT)
- 其他一些用户空间端口转发或反向代理