使用 IPTABLES 将流量转发到特定 IP

使用 IPTABLES 将流量转发到特定 IP

我正在处理 3 台机器(VM):-

答:172.20.10.1(客户端)

B:-172.20.10.2(原始服务器)

C:-172.20.10.5(重定向服务器)

现在我希望 A 访问 B,并且 B 将其转发给 C。

我能够通过以下方式实现这一点:-

iptables -t nat -A PREROUTING -p tcp --dport 80 -j DNAT --to-destination 172.20.10.5:80 iptables -t nat -A POSTROUTING -j MASQUERADE

但是现在我只想对一个 IP 执行此操作(IE)172.20.10.1 到 172.20.10.5,当它尝试访问 172.20.10.2 时。我已经尝试过了答案在这里

net.ipv4.ip_forward = 1并且也设置了Yes 。

答案1

将以下内容添加到预路由

-s 172.20.10.1/32,172.20.10.2/31,172.20.10.4/31 

答案2

在交叉发布的副本到unix.SE上,我回答道:

只需添加一些内容来匹配你希望规则匹配的 IP:

iptables -t nat -A PREROUTING -s 172.20.10.1 -p tcp --dport 80 -j DNAT --to-destination 172.20.10.5:80

而原贴作者留下了一条评论,简单地说“这不起作用...”,对此我必须问:这怎么不起作用?是没有转发流量还是其他客户端的流量仍然被转发或......?

答案3

我也遇到了这个问题。最后我终于搞明白了。

  1. 客户端连接到端口 2222 上的服务器 JUMPER
  2. JUMPER 服务器将端口 2222 上的所有数据包转发到 dest_server_ip:dest_server_port
  3. dest_server 回复 JUMPER 服务器
  4. JUMPER 服务器将所有数据包从目标服务器转发到客户端

首先通过设置启用端口转发

net.ipv4.ip_forward = 1

/etc/sysctl.conf文件中。然后使用以下命令:

iptables -t nat -A PREROUTING -p tcp --dport 2222 -j DNAT --to-destination dest_server_ip:dest_server_port
iptables -A FORWARD -p tcp -d dest_server_ip --dport dest_server_port -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
iptables -A POSTROUTING -t nat -p tcp -d dest_server_ip --dport dest_server_port  -j MASQUERADE

最后保存 iptables 规则

sudo /sbin/iptables-save > /etc/iptables/rules.v4

相关内容