如何使用iptables将HTTP请求路由到专用网络

时间:2015-09-21 20:22:04

标签: rest iptables netfilter

首先,我想澄清一下,我是计算机网络中的一个完整的菜鸟,所以如果我使用错误的术语或说废话,我会提前道歉。话虽如此,我会尽可能清楚地解释我的问题。假设我有两台Linux服务器(ubuntu),Server A和Server B连接如图所示:

enter image description here

两台服务器都有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中的应用程序获得响应。

1 个答案:

答案 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'