我正在处理 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
我也遇到了这个问题。最后我终于搞明白了。
- 客户端连接到端口 2222 上的服务器 JUMPER
- JUMPER 服务器将端口 2222 上的所有数据包转发到 dest_server_ip:dest_server_port
- dest_server 回复 JUMPER 服务器
- 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