我有 3 台设备:
- 连接到 Network1 的服务器
- 一台笔记本电脑,连接到 Network2
- Raspberry Pi,也连接到 Network2
Network1 上还有一个 openVPN 服务器,以及用于访问 VPN 的端口转发。
我需要 Raspi 从笔记本电脑接收 TCP 请求(针对服务器)并通过 VPN 将它们发送到服务器,然后将服务器的响应发送回笔记本电脑。只会使用一个端口,但如果所有端口都转发也可以。笔记本电脑上无法安装任何软件。笔记本电脑上最好也没有命令等。
我需要某种“端口转发”但进入 VPN
使用字面上相同的“端口转发”,即路由器(RasPi)防火墙中的 DNAT 规则;无论网络类型如何,它的功能都相同。
也就是说,
DNAT
为您需要的每个“端口转发”将 iptables 或 nftables 规则添加到 RasPi 防火墙。(不要忘记还添加“允许转发”规则 - 这些规则在大多数路由器中是自动的,但在普通 iptables 或 nftables 中不是自动的。)您的服务器必须有一条通过其 VPN 连接返回 Network2 的路由(在 OpenVPN 中,这可能意味着配置
iroute
)。如果设置起来很困难,另一种选择是让 RasPi 也执行 DNAT 操作SNAT
或MASQUERADE
除了 DNAT 之外还执行此操作。(SNAT/MASQ 选项与 LAN 中的“NAT 发夹”配置完全相同。)nftable 的示例:
iptables 的示例:
替代方案:在 RasPi 上使用“反向代理”。大多数反向代理适用于 HTTP/HTTPS,但可以代理任何 TCP 或 TLS 协议。这不适用于 UDP(至少不容易),并且需要额外的软件,但路由要求较少。
对于 HTTP/HTTPS 服务,Nginx 或 Apache httpd 是常见的选择;其他地方广泛记录。(在这两种情况下,该选项都称为“proxy_pass”或“ProxyPass”。)