Openwrt 端口映射的常见问题

您所在的位置:网站首页 openwrt内网端口转发 Openwrt 端口映射的常见问题

Openwrt 端口映射的常见问题

2023-08-25 13:18| 来源: 网络整理| 查看: 265

在使用Openwrt路由器的时候,有时候我并不把它当作一个路由器来上网用,而是把装有Openwrt系统的路由器当成一个低功耗的Linux的嵌入式系统使用。Openwrt的官网给了很多很多软件的预编译包,其数量之多几乎可以与Ubuntu的官方源媲美,比如我们可以在Openwrt上搭建apache的网页服务,代理,NAS服务器等很多功能,要比开启一台Linux笔记本电脑省电的多。

如果要把Openwrt当成服务器来使用,一个很重要的节点是端口映射,必须把我的公网IP的端口映射到Openwrt路由器上去,我的路由器才能收到公网发来的请求,并将结果返回到公网。

然而Openwrt相比Ubuntu有很坑的地方,让我折腾了一晚上才弄明白

1、Openwrt默认拒绝公网发来的未建立连接的请求,所以端口映射的再多也没有用

2、Openwrt里的服务监听端口必须是路由器的WAN口地址,才能被端口映射后访问

首先来解释一下第一点

在Openwrt默认配置下luci的界面上,找到“网络”-“防火墙”可以看到来自WAN口的请求是被REJECT的,如下图

如果你的防火墙的配置如上,那么恭喜你做再多的端口映射都没有用

所以我们可以通过luci界面修改或者修改配置文件的方式支持WAN口的请求接入

或修改/etc/config/firewall

注意,这两种方式修改完毕后都需要重启路由器才能生效

下面开始配置端口转发,我们可以先把路由器后台luci界面的端口80给映射出去,然后就可以在外网进路由器后台控制了。

如果你没有添加别的防火墙机制,现在应该已经可以在外网访问路由器的管理界面了

而且现在可以像普通路由器一样对内网的其他电脑进行端口映射,此时router->client的映射没有什么问题,但是能不能对路由器自己进行映射呢,也就是router->router的映射。

那么我们来试试其他的服务,这里以HTTP代理服务Privoxy为例,让Privoxy监听在192.168.1.1也就是路由器的内网地址

首先编辑Privoxy的配置文件如下

### AUTO-GENERATED CONFIGURATION ### USED BY PRIVOXY ### DO NOT EDIT ### SEE /etc/config/privoxy INSTEAD confdir /etc/privoxy logdir /var/log logfile privoxy.log filterfile default.filter actionsfile match-all.action actionsfile default.action listen-address 192.168.1.1:9999 toggle 1 enable-remote-toggle 1 enable-remote-http-toggle 0 enable-edit-actions 1 enforce-blocks 0 buffer-limit 4096 forwarded-connect-retries 0 accept-intercepted-requests 0 allow-cgi-request-crunching 0 split-large-forms 0 keep-alive-timeout 300 socket-timeout 300 #permit-access 192.168.1.0/16 不做IP连入的限制 forward-socks5 / 192.168.1.1:1080 . debug 512 debug 4096 debug 8192然后配置端口转发,注意我转发的内部地址是192.168.1.1,路由器的公网地址是10.42.1.52

此时,路由器自身访问192.168.1.1:9999是没有问题的,连接在路由器上的设备如192.168.1.2访问192.168.1.1:9999也是没有问题的,但是使用外网访问就不通,但此时路由器后台是能从外网进的,SSH也可从外网连,内网设备的端口映射也是正常,唯独Privoxy这个服务不能用。这是为什么呢,明明已经把外网的请求转发到了192.168.1.1:9999呀,于是我把监听端口改成0.0.0.0(也就是让该程序在路由器的所有网卡所有网段上进行监听)如下

listen-address 0.0.0.0:9999 这样内网用户访问192.168.1.1:9999是可以的,路由器自己访问 192.168.1.1:9999或者路由器公网地址如10.42.1.52:9999也是可以的,现在外网访问这个地址成功了,那么刚才为什么不行呢.于是我把privoxy监听的端口改为公网地址10.42.1.52:9999

listen-address 10.42.1.52:9999此时内网访问192.168.1.1:9999是不行的,但是公网是可以访问9999的,于是现在可以得出结论

1、在Openwrt配置端口转发时配置目标内网地址为路由器地址时(假设192.168.1.1)监听在192.168.1.1的程序并不会受到端口转发的数据

所以路由器上的程序必须监听在0.0.0.0或者路由器的公网地址。

2、如果程序监听在路由器公网地址,那么内网用户就会不能访问,但是公网用户可以,如果想要内网公网用户可以同时访问,可以监听在0.0.0.0也就是所有网卡的所有网段上,或者针对内网和公网用户使用两个进程。



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3