Ubuntu 如何通过VPN将传入请求转发到IP

Ubuntu 如何通过VPN将传入请求转发到IP,ubuntu,networking,vpn,iptables,forwarding,Ubuntu,Networking,Vpn,Iptables,Forwarding,我正在做一个项目,需要通过VPN连接到我们客户的网络(我们发送HTTP请求并连接到他们本地服务器上的数据库) 我试图实现的是: 我在AWS上有一组实例,但我不想在每个实例上都设置VPN连接,事实上,如果可能的话,我宁愿不更改它们。(我们称这些应用程序为实例。) 所以我想我应该做的是为每个客户端设置其他具有VPN连接的实例。(让我们称这些vpn实例为虚拟专用网。) 其思想是,应用程序实例将具有vpn实例(例如:myclient.vpn.myservice)的DNS,并将其用于通过vpn的所有流量

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

我试图实现的是:

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

所以我想我应该做的是为每个客户端设置其他具有VPN连接的实例。(让我们称这些vpn实例为虚拟专用网。)

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

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

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

echo 1 > /proc/sys/net/ipv4/ip_forward
但这似乎不起作用(至少在HTTP请求中是这样)

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


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

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

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


有了这个,您的实例的连接将不需要VPN实例就可以连接到VPN。

好的,所以我找到了答案。首先,我上面写的所有步骤都是有效的,不是从VPN实例本身,而是从应用程序实例它确实有效,但是这些iptables规则太过宽松,它们弄乱了系统的内部主机解析和sudo命令在应用它们后变得非常缓慢

下面是我的结论(继续回答问题中的示例):

在vpn实例上:

echo 1>/proc/sys/net/ipv4/ip\u转发
iptables-t nat-A预路由-i eth0-p tcp-dport 1234-j DNAT-到目的地1.2.3.4:1234
iptables-t nat-A预路由-i eth0-p udp-dport 1234-j DNAT-到目的地1.2.3.4:1234
iptables-tnat-A输出-o lo-ptcp-dport1234-jdnat-到目的地1.2.3.4:1234
iptables-t nat-A输出-o lo-p udp--dport 1234-j DNAT--to destination 1.2.3.4:1234
iptables-t nat-A后路由-o tun0-j伪装
其中eth0是实例的公共网络接口,tun0是vpn连接的网络接口


根据这些规则,我可以
curlhttp://myclient.vpn.myservice:1234
从所有实例接收来自vpn另一端的响应。

哦,是的,这将是一个解决方案,我也想到了,但这对我工作的公司来说太贵了:/而且据我所知,AWS目前只支持OpenVPN我们的一些客户有Cisco VPN设置。SopenvPN用于客户连接。对于站点到站点连接,它是不同的。我想知道为什么有两个人认为这个问题没有显示任何研究成果,不清楚或没有用处。我不知道这个问题怎么不是关于一般的编程硬件和软件,而是因为我设法解决了解决它我不在乎它是关闭的还是其他人可能对答案感兴趣…我认为它应该关闭,但有错误的原因。它确实更适合(即,它是关于服务器管理,而不是一般的硬件和软件,而不是编程)谢谢你的反馈,这我完全能理解,我不知道服务器故障,下次我有这样的问题,我会把它贴在那里
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