iptables 端口重定向不起作用

iptables 端口重定向不起作用

我正在尝试设置一个在 localhost:8082 上运行的网络服务器并将端口 80 重定向到它。

我已经使用预路由重定向 nat 表完成了此操作,但它似乎不起作用,数据包到达规则,但似乎没有被转发。

这是我的 iptable 的样子:

ubuntu@ip-172-31-31-104:~$ sudo iptables -t nat -L -v -n
Chain PREROUTING (policy ACCEPT 6 packets, 348 bytes)
 pkts bytes target     prot opt in     out     source               destination
    6   320 REDIRECT   tcp  --  *      *       0.0.0.0/0            0.0.0.0/0            tcp dpt:80 redir ports 8082    
    2    84 REDIRECT   tcp  --  *      *       0.0.0.0/0            0.0.0.0/0            tcp dpt:443 redir ports 8082   
    0     0 REDIRECT   tcp  --  *      *       0.0.0.0/0            0.0.0.0/0            tcp dpt:38204 redir ports 38204

Chain INPUT (policy ACCEPT 14 packets, 752 bytes)
 pkts bytes target     prot opt in     out     source               destination

Chain OUTPUT (policy ACCEPT 381 packets, 27905 bytes)
 pkts bytes target     prot opt in     out     source               destination

Chain POSTROUTING (policy ACCEPT 381 packets, 27905 bytes)
 pkts bytes target     prot opt in     out     source               destination

当我卷曲到 localhost:8082 时,我的服务器日志如下所示:

2019/09/16 11:47:36 "GET http://localhost:8082/ping HTTP/1.1" from 127.0.0.1:40386 - 200 87B in 83.384µs

但是,当我尝试使用邮递员从外部 ei 发出请求时,ip 表如下所示:

ubuntu@ip-172-31-31-104:~$ sudo iptables -t nat -L -v -n
Chain PREROUTING (policy ACCEPT 6 packets, 348 bytes)
 pkts bytes target     prot opt in     out     source               destination
   11   580 REDIRECT   tcp  --  *      *       0.0.0.0/0            0.0.0.0/0            tcp dpt:80 redir ports 8082    
    2    84 REDIRECT   tcp  --  *      *       0.0.0.0/0            0.0.0.0/0            tcp dpt:443 redir ports 8082   
    0     0 REDIRECT   tcp  --  *      *       0.0.0.0/0            0.0.0.0/0            tcp dpt:38204 redir ports 38204

Chain INPUT (policy ACCEPT 19 packets, 1012 bytes)
 pkts bytes target     prot opt in     out     source               destination

Chain OUTPUT (policy ACCEPT 395 packets, 28995 bytes)
 pkts bytes target     prot opt in     out     source               destination

Chain POSTROUTING (policy ACCEPT 395 packets, 28995 bytes)
 pkts bytes target     prot opt in     out     source               destination

请注意 pkts 和 bytes 列确实发生了变化,因此数据包似乎确实到达了机器,但服务器日志中没有新日志出现。

我是否需要担心另一个防火墙或抽象级别?

感谢您的帮助 !

更新 这是netstat,我的服务器称为离心机,所以它确实监听端口8082

Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
tcp        0      0 127.0.0.1:8082          0.0.0.0:*               LISTEN      4163/centrifuge
tcp        0      0 127.0.0.53:53           0.0.0.0:*               LISTEN      -
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      -
tcp        0      0 127.0.0.1:52698         0.0.0.0:*               LISTEN      -
tcp        0      0 0.0.0.0:38204           0.0.0.0:*               LISTEN      4163/centrifuge
tcp6       0      0 :::22                   :::*                    LISTEN      -
tcp6       0      0 :::8088                 :::*                    LISTEN      26143/pm2-gui slave
tcp6       0      0 ::1:52698               :::*                    LISTEN      -

答案1

正如@msp9011和@user4556274试图描述的那样,您需要让您的服务器侦听“任何地址”而不是“127.0.0.1”地址。因此,根据您的网络服务器软件,您可以将所谓的“监听地址”更改为:

  • 将 127.0.0.1 替换为空,即删除配置
  • 将 127.0.0.1 替换为 0.0.0.0,这意味着监听任何 IP
  • 添加 0.0.0.0 配置以覆盖默认的 127.0.0.1
  • 沿着这些思路,检查您的文档中的“监听”或“绑定”地址以及如何使其不只监听本地地址

如果您告诉我们更多有关您拥有的网络服务器软件的信息,我们也许可以帮助您提供有关上述过程的更多详细信息。

不过,成功后,当前的 netstat 输出中会出现以下行:

tcp        0      0 127.0.0.1:8082          0.0.0.0:*               LISTEN      4163/centrifuge

成功更新配置后,应该如下所示:

tcp        0      0 0.0.0.0:8082            0.0.0.0:*               LISTEN      4163/centrifuge

@user4556274 引用的文档意味着,如果新连接使用本地 IP 地址为 123.456.78.9 的接口进入,则 REDIRECT 目标会将目标端口更改为 8082,将目标主机更改为 123.456.78.9(即不是 127.0.0.1)。 0.1)。由于您的配置仅侦听 127.0.0.1,因此它不会看到具有任何其他目标地址的数据包。地址 0.0.0.0 很特殊,意味着它将监听所有地址。

相关内容