IPTables - 端口到另一个 IP 和端口(从内部)

IPTables - 端口到另一个 IP 和端口(从内部)

我目前有一个 NAS 盒子在端口 80 下运行。为了从外部访问 NAS,我将端口 8080 映射到 NAS 上的端口 80,如下所示:

iptables -t nat -A PREROUTING -p tcp --dport 8080 -j DNAT --to-destination 10.32.25.2:80

这就像一个魅力。但是,只有当我从网络外部(在工作中、在不同的房子等)访问该网站时,这才有效。因此,当我输入 时mywebsite.com:8080,IPTables 会正确完成工作,并且一切正常。

现在,我遇到的问题是,如何从网络内部重定向此端口?我的域名mywebsite.com从内部(10.32.25.1)指向我的路由器(我的linux服务器),但我想从内部将端口8080重定向到10.32.25.2上的端口80。

有什么线索吗?

编辑#1

为了帮助解决这个问题,我将这张图放在一起。如果它不正确或歪曲了您要查找的内容,请随时更新。

                                 iptables
                                     |                   .---------------.
    .-,(  ),-.                       v               port 80             |
 .-(          )-.        port 8080________               |               |
(    internet    )------------>[_...__...°]------------->|      NAS      |
 '-(          ).-'     10.32.25.2    ^   10.32.25.1      |               |
     '-.( ).-'                       |                   |               |
                                     |                   '---------------'
                                     |
                                     |
                                   __  _ 
                                  [__]|=|
                                  /::/|_|

答案1

我终于找到了方法。首先,我必须添加-i eth1我的“外部”规则(eth1 是我的 WAN 连接)。我还需要添加另外两条规则。最后我得到了什么:

iptables -t nat -A PREROUTING -i eth1 -p tcp --dport 8080 -j DNAT --to 10.32.25.2:80
iptables -t nat -A PREROUTING -p tcp --dport 8080 -j DNAT --to 10.32.25.2:80
iptables -t nat -A POSTROUTING -p tcp -d 10.32.25.2 --dport 80 -j MASQUERADE

答案2

您还忘记提及应启用包转发才能执行目标 NAT。默认情况下,它通常是关闭的,因此 iptables 规则将不起作用。可以通过发出以下命令来启用它:

echo 1 > /proc/sys/net/ipv4/ip_forward

答案3

首先允许转发

echo 1 > /proc/sys/net/ipv4/ip_forward

然后设置 iptable 规则

IF=eth1
PORT_FROM=8080
PORT_TO=80
DEST=10.32.25.2
iptables -t nat -A PREROUTING -i $IF -p tcp --dport $PORT_FROM -j DNAT --to $DEST:$PORT_TO
iptables -t nat -A POSTROUTING -p tcp -d $DEST --dport $PORT_TO -j MASQUERADE

您可以将这些行放入/etc/rc.local例如。注意:由于 Debian jessie 使其可执行并通过以下方式启用了 rc.local 服务

systemctl enable rc-local.service

答案4

首先,您需要验证您是否已激活转发:

cat /proc/sys/net/ipv4/ip_forward

如果没有1,就跑echo 1 > /proc/sys/net/ipv4/ip_forward

如果您希望将到达 10.32.25.1 端口 80 和 443 的流量转发到 10.32.25.2 的 80 端口,那么您应该使用以下规则:

iptables -t nat -A PREROUTING -d 10.32.25.1 -p tcp -m multiport --dports 80,443 -j DNAT --to-destination 10.32.25.2:80

相关内容