【问题标题】:How to forward incoming requests to IP through VPN [closed]如何通过 VPN 将传入请求转发到 IP [关闭]
【发布时间】:2020-12-02 00:29:12
【问题描述】:

我正在开展一个需要通过 VPN 连接到客户网络的项目(我们正在发送 HTTP 请求并连接到他们本地服务器上的数据库)。

我想要实现的是:

我在 AWS 上有一组实例,但我不想在每个实例上都设置 VPN 连接,事实上,如果可能的话,我根本不想更改它们。 (我们称这些应用实例。)

所以我想我会为每个客户端设置具有 VPN 连接的其他实例。 (我们称这些 vpn 实例。)

这个想法是应用程序实例将具有 VPN 实例的 DNS(例如:myclient.vpn.myservice)并将其用于通过 VPN 的所有流量。

示例:app instance #1 向http://myclient.vpn.myservice:1234 发送 HTTP 请求,vpn 实例收到请求,将其转发到 1.2.3.4:1234(在客户端本地网络上)并将响应返回给 app instance #1,所以从应用实例的角度来看,这就像向 myclient.vpn.myservice 发送一个常规的 HTTP 请求(旁注:这也应该适用于常规的 tcp 和 udp 连接)。

我尝试的是启用 ip 转发并在 vpn 实例上设置 iptables 规则,如下所示:

echo 1 > /proc/sys/net/ipv4/ip_forward
iptables -t nat -A PREROUTING -p tcp --dport 1234 -j DNAT --to-destination 1.2.3.4:1234
iptables -t nat -A PREROUTING -p udp --dport 1234 -j DNAT --to-destination 1.2.3.4:1234
iptables -t nat -A POSTROUTING -j MASQUERADE

但这似乎不起作用(至少对于 HTTP 请求)。

所有服务器都在 Ubuntu 20.04 上运行。

我不确定这个想法是否完全错误,而且我对 Ubuntu 没有特别丰富的经验,所以我愿意接受建议,唯一重要的是我真的不想改变应用实例。

【问题讨论】:

  • 我很想知道为什么 2 个人认为这个问题没有显示出任何研究成果、不清楚或没有用
  • 再次,我不知道这个问题与一般编程硬件和软件无关,但自从我设法解决它之后,我不在乎它是否已关闭,但答案可能对其他人来说很有趣。 ..
  • 我认为它应该被关闭,但原因有误。它真的更适合Server Fault(即它是关于服务器管理,而不是一般的硬件和软件,而不是编程)
  • 感谢反馈,这个我完全可以理解,我不知道服务器故障,下次我有这样的问题我会在那里发帖

标签: ubuntu networking vpn iptables forwarding


【解决方案1】:

有一种在 AWS 上设置 VPN 的最简单方法。

您可以create a VPN in your VPC(您还需要客户网关和虚拟专用网关)并更改现有路由表以将连接从您的客户 VPN CIDR 范围路由到 AWS VPN 资源。

这样,来自您的实例的连接将无需 VPN 实例即可转到 VPN。

【讨论】:

  • 哦,是的,这将是一个解决方案,我也想到了这一点,但对于我工作的公司来说太贵了:/
  • 据我所知,AWS 目前只支持 OpenVPN,我们的一些客户有 Cisco VPN 设置
  • OpenVPN 用于客户端连接。对于站点到站点的连接,情况有所不同。
【解决方案2】:

好的,所以我想通了。首先,我上面写的所有步骤都不是从 vpn 实例本身,从它确实起作用的应用程序实例开始的,但是这些 iptables 规则过于宽松,它们弄乱了系统的内部主机解析,sudo 命令变得非常慢应用后。

这就是我最终得到的结果(继续使用问题中的示例):

在 vpn 实例上:

echo 1 > /proc/sys/net/ipv4/ip_forward
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 1234 -j DNAT --to-destination 1.2.3.4:1234
iptables -t nat -A PREROUTING -i eth0 -p udp --dport 1234 -j DNAT --to-destination 1.2.3.4:1234
iptables -t nat -A OUTPUT -o lo -p tcp --dport 1234 -j DNAT --to-destination 1.2.3.4:1234
iptables -t nat -A OUTPUT -o lo -p udp --dport 1234 -j DNAT --to-destination 1.2.3.4:1234
iptables -t nat -A POSTROUTING -o tun0 -j MASQUERADE

其中eth0是实例的公网接口,tun0是vpn附加的网络接口。

在这些规则之后,我可以从所有实例中curl http://myclient.vpn.myservice:1234 并接收来自 vpn 另一端的响应。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-04-30
    • 1970-01-01
    • 2021-09-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-29
    • 1970-01-01
    相关资源
    最近更新 更多