IPTables-端口到另一个ip&端口(从内部)


10

我目前有一个运行在端口80下的NAS盒。要从外部访问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从内部指向我的路由器(Linux服务器)(10.32.25.1),但我想从内部将端口8080重定向到10.32.25.2上的端口80。

有什么线索吗?

编辑#1

为了帮助解决这个问题,我将这张图放在一起。如果您输入的内容有误或有误,请随时进行更新。

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

@slm确实如此。10.32.25.2:8080上没有任何反应,因为服务器位于端口80上。从外部,NAT从端口8080重定向到指定IP(10.32.25.2)上的端口80。NET-> NAT:8080-> 10.32.25.2:80。我需要内部的规则,我不知道该放在哪里。
DavidBélanger13年

@slm是的。我不知道我怎么能实现这样的目标。我想说10.32.25.1:8080重定向到10.32.25.2:80。我上面的规则是从网络外部进行的,而不是从网络内部进行的。因此,如果我在办公室里,可以从website.com:8080访问我的NAS ,它是完全透明的。在我家中,website.com:8080指向10.32.25.1,因为它是我的路由器,即Linux服务器。我想将端口8080也重定向到也在端口80上的NAS,但再次以透明的方式。
DavidBélanger13年

@slm是的,一切都很好并且可以正常工作。我只想将端口10.32.25.1:8080从内部网络重定向到10.32.25.2:80。
DavidBélanger13年

还提到了like eth0 10.32.25.2这样的接口,以便我们能够基于入站接口编写iptables的使用
Rahul Patil

哎呀对不起,我刚才看见..你已经解决了问题..
拉胡尔·帕蒂尔

Answers:


13

我终于找到了方法。首先,我必须添加-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
第二条规则不是必需的,因为第一条规则已经包含了……
machineaddict 2014年

1
第一条规则仅在预路由到达接口eth1时才对其进行限制。第二条规则更为通用,因为它适用于所有接口。当心循环!
tu-Restate Monica-dor duh,2015年

4

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

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

非常感谢您,我已经将头发拉了好几个小时了!
ColinM 2015年

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

0

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

cat /proc/sys/net/ipv4/ip_forward

如果没有1,请运行echo 1 > /proc/sys/net/ipv4/ip_forward

如果希望将端口80和443上达到10.32.25.1的流量转发到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
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.