首先,我想澄清一下,我是计算机网络中的一个完整的菜鸟,所以如果我使用错误的术语或说废话,我会提前道歉。话虽如此,我会尽可能清楚地解释我的问题。假设我有两台Linux服务器(ubuntu),Server A和Server B连接如图所示:
两台服务器都有3个网络接口,每个接口都有图像中列出的IP地址,两台服务器都有两个相互通用的网络:
172.16.0.0/24
10.20.0.0/24
服务器B的应用程序在以下网络中具有端点
192.168.0.1/24
服务器B可以访问但服务器A不能访问。该应用程序具有以下端点
http://192.168.0.1:35357
有没有办法从服务器A到达应用程序端点,所以我可以通过从服务器A到端点的POST进行卷曲并转到服务器B中的应用程序?也许通过iptables或类似的东西? 我还希望能够从服务器A中的应用程序获得响应。
答案 0 :(得分:0)
我终于能够使它工作了,最后它非常简单,只需两步。我会更新答案,以防有人帮忙。我做的是以下内容:
步骤1:在服务器A中,我通过vboxnet1接口添加了到192.168.0.0/24
网络的路由:
ip route add 192.168.0.0/24 dev vboxnet1
运行上面的命令后,您应该能够使用应显示路线的ip route show
命令查看新路线:
$ sudo ip route show
...
192.168.0.0/24 dev vboxnet1 scope link
...
您还可以使用您尝试访问的IP地址运行ip route get <IP>
命令,以查看系统将发送数据包到达该IP地址的路由。就我而言,我想到192.168.0.1
:
$ ip route get 192.168.0.1
192.168.0.1 dev vboxnet1 src 172.16.0.1
步骤2:因为我尝试访问的内容实际上是服务器B中的服务,而不是另一台机器,我还需要更改数据包的目的地,以便使用其IP地址将其发送到服务器B在192.168.0.0/24
网络内。该网络中服务器B的IP地址为192.168.0.2
:
$ iptables -t nat -A OUTPUT -p tcp -d 192.168.0.1 -j DNAT --to-destination 192.168.0.2
就是这样!在这之后,我能够通过cURL运行我的HTTP请求,并成功到达我的终端。
curl -v -k -X 'POST' http://192.168.0.1:35357/my_REST_resource -H 'Content-Type:application/json' -H 'Accept:application/json'