如何使用 vpn 将子网流量转发到远程服务器?

如何使用 vpn 将子网流量转发到远程服务器?

抱歉,我问了一个非常笼统的问题,我更像是一名开发人员,而不是网络专家,所以请耐心等待... :-(

我的问题是这样的:我有
- 服务器A,为我们的 REST API 提供服务。
- 服务器,托管到B子网的 ipsec strongswan VPN C,我们需要安全地访问来自服务器的实时数据A,并且我们无法控制。我希望服务器上
往返于子网的流量CA转发 通过服务器‘B’。

您认为这样的任务可行吗?
我应该在路由表中添加路由,还是应该先使用防火墙转发规则?

我最初的尝试是:

在服务器A上:
# ip route add C_SUBNET_IP via B_SERVER_PUBLIC_IP dev eth0

它确实向我吐口水:RTNETLINK answers: Network is unreachable

然后,使用防火墙规则:

# echo 1 > /proc/sys/net/ipv4/ip_forward
# iptables -t nat -A POSTROUTING -j MASQUERADE
# iptables -t nat -A PREROUTING -s C_SUBNET_IP -p udp -j DNAT --to-destination B_SERVER_PUBLIC_IP

它不允许我访问任何C子网ip:

# ping C_SUBNET_IP
PING C_SUBNET_IP (C_SUBNET_IP) 56(84) bytes of data.
...
^C
10 packets transmitted, 0 received, 100% packet loss, time 9056ms

答案1

一般而言,您不能在不属于您子网的路由上设置网关。您可以使用以下技巧解决服务器 A 上的问题。

首先,设置所需网关的路由:

ip route add B_SERVER_PUBLIC_IP dev eth0

然后,设置你的路线:

ip route add C_SUBNET_IP via B_SERVER_PUBLIC_IP

现在它可以工作了!以下文章对此进行了解释,包括如何在 Ubuntu 中使其永久生效:

https://www.adminsehow.com/2011/09/gateway-on-a-different-subnet-on-linux/

现在您已经到达服务器 B,您将必须在那里实现一些转发功能……

相关内容