抱歉,我问了一个非常笼统的问题,我更像是一名开发人员,而不是网络专家,所以请耐心等待... :-(
我的问题是这样的:我有
- 服务器A
,为我们的 REST API 提供服务。
- 服务器,托管到B
子网的 ipsec strongswan VPN C
,我们需要安全地访问来自服务器的实时数据A
,并且我们无法控制。我希望服务器上
往返于子网的流量C
A
转发 通过服务器‘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,您将必须在那里实现一些转发功能……