我的网络中有两台机器(A 和 B),其中 A 是调用我的 IP 地址时直接从外部访问的机器,而 B 是一台功能非常强大的机器,可以执行非常密集的任务。
我想将某个端口(例如 9090)从 A 转发到 B,这样通过端口 9090 发送到 A 的任何请求都会直接转发到 B。
如何才能实现这一点呢?
(如果任何答案包含 A 或 B 的 IP 地址,请分别使用 192.168.2.A/B)
答案1
这一页详细描述了如何执行您要执行的操作。要在机器 A 上执行的主要命令如下:
root@A # iptables -A PREROUTING -t nat -i eth0 -p tcp --dport 9090 -j DNAT --to 192.168.2.B:9090
root@A # iptables -A FORWARD -p tcp -d 192.168.2.B --dport 9090 -j ACCEPT
第一个命令创建一个 iptables 规则,该规则将重新路由进入机器 A 的端口 9090 的数据包以转到机器 B 的端口 9090;第二条规则允许将此类数据包转发到机器 B。(第二条规则可能不是必需的,具体取决于机器 A 上 FORWARD 链的策略设置,但添加它也没有坏处;如果不需要,它什么也不做。)
请注意,除非明确设置,否则这些更改不会在重启后保留。不同的发行版以不同的方式处理此问题;如果您无法或不愿意使用发行版定义的方法,您可以这样做
iptables-save > /etc/network/iptables
(如果不是,则为类似的文件/etc/network/iptables
),然后将以下内容添加到/etc/rc.local
:
iptables-restore < /etc/network/iptables
(使用与命令中给出的相同路径iptables-save
)以便在启动时重新应用更改。