问题
我需要同时访问多个不同的 VPN 网络,主要用于 HTTP,有时也用于 SSH。此外,我不允许在工作站上使用 openvpn(没有法律限制,而是基础设施问题)。端口转发没问题。
下图试图描绘出所涉及的各方。我的工作站想要访问host1.private-network1.de
哪些host2.private-network1.de
在互联网上不可见。该机构要求我进入他们的 VPN 才能访问这台机器。这同样适用于第二个私有网络中的第三台主机。我需要在端口 22 上访问机器,但这只能在 VPN 内部实现。
我打算采用的解决方案
(其他解决方案也很好)
我计划使用我控制的代理服务器(例如 RPI)通过 openvpn 连接到不同的网络。代理服务器允许使用 SSH 进行端口转发。在我的工作站上,我现在可以设置端口转发,如下所示:
问题是如何在 Linux 中配置多个 OpenVPN 网络,以便我可以使用简单的端口转发(如图所示)访问不同私有网络中的不同主机。VPN 应该仅有的可用于此端口转发。代理主机上的其余流量(如更新)不应通过任何这些 VPN 连接路由。甚至希望所有剩余流量仍然可以通过第三个 VPN 进行路由,但这可能是另一个问题。
OT:圣诞快乐:)
答案1
我假设两个私有网络都提供了一个可公开访问的 OpenVPN 服务器,并推送适当的路由。
只需从代理服务器同时连接到所有 OpenVPN 服务器。运行ip route show
以确保默认流量未通过 VPN。
现在iptables
在代理服务器上使用将端口转发到私有主机:
iptables -t nat -A PREROUTING -p tcp --dport 2223 -j DNAT --to host1.private-network1.de:22
iptables -t nat -A PREROUTING -p tcp --dport 8081 -j DNAT --to host2.private-network1.de:80
iptables -t nat -A PREROUTING -p tcp --dport 2224 -j DNAT --to host.private-network2.de:22
iptables -t nat -A POSTROUTING -s <WORKSTATION_IP> -j MASQUERADE
将其替换<WORKSTATION_IP>
为工作站的 IP 地址(代理服务器所见)以及host1.private-network1.de
代理服务器可访问私有主机的 IP 地址。
现在如果你想通过 ssh 进入host1.private-network1.de
,请执行以下操作:
ssh <proxy_server_ip> -p 2223
代理服务器允许使用 SSH 进行端口转发。
不要使用 SSH 隧道。它不可靠且速度慢。它主要用于创建临时隧道。