如何在 Debian 上进行端口转发/重定向?

Dán*_*son 13 debian iptables point-to-point-protocol

我有两个问题。

问题 1:我的 debian 机器有接口 eth3,ip 192.168.57.28。如果有人尝试连接到 192.168.57.28:1234,我该如何将请求重定向到另一台机器:192.168.57.25:80?

问题 2:如果我的 debian 机器有两个接口:带有 192.168.57.28 的 eth3 和带有一些动态 IP 的 ppp0,并且有人尝试通过端口 1234 上的 ppp0 进行连接,我该如何将请求重定向到 192.168.57.25:80?

我试过这个:

$ iptables -t nat -A PREROUTING -p tcp --dport 1234 -j DNAT --to-destination 192.168.57.25:80
$ echo 1 > /proc/sys/net/ipv4/ip_forward
Run Code Online (Sandbox Code Playgroud)

但它不起作用。

Day*_*ker 12

iptables -A PREROUTING -t nat -i eth3 -p tcp --dport 1234 -j DNAT --to-destination 192.168.57.25:80
iptables -A FORWARD -p tcp -d 192.168.57.25 --dport 80 -j ACCEPT
iptables -A POSTROUTING -t nat -s 192.168.57.25 -o eth3 -j MASQUERADE
Run Code Online (Sandbox Code Playgroud)

第一个指定所有到端口 1234 的传入 tcp 连接应发送到内部机器 192.168.57.25 的端口 80。仅此规则并不能完成工作,因为 iptables 拒绝所有传入连接。然后我们接受从 eth3 到端口 1234 的传入连接,该连接通过第二条规则使用公共 IP 连接到 Internet。我们在 FORWARD 链中添加第二条规则以允许将数据包转发到 192.168.57.25 的 80 端口。

编辑: 添加了POSTROUTING。

跟踪连接。否则外部主机会看到他不知道的内部 IP 192.168.57.25。

EDIT2:刚刚得到提示,它应该是 --to-destination 而不是 --to (sry)

  • 我尝试了你的建议,但没有奏效。然后我将最后一个更改为:iptables -A POSTROUTING -t nat -j MASQUERADE,然后它起作用了! (3认同)

小智 9

感谢 Daywalker 和 Dánjal Salberg Adlersson。经过几个小时的咒骂,iptables 的端口转发终于奏效了。(在 Debian 上测试)

bash脚本

#!/bin/bash

IPTBL=/sbin/iptables

IF_IN=eth0
PORT_IN=40022

IP_OUT=172.16.93.128
PORT_OUT=22

echo "1" > /proc/sys/net/ipv4/ip_forward
$IPTBL -A PREROUTING -t nat -i $IF_IN -p tcp --dport $PORT_IN -j DNAT --to-destination ${IP_OUT}:${PORT_OUT}
$IPTBL -A FORWARD -p tcp -d $IP_OUT --dport $PORT_OUT -j ACCEPT
$IPTBL -A POSTROUTING -t nat -j MASQUERADE
Run Code Online (Sandbox Code Playgroud)