Openwrt 端口映射的常见问题

在使用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也就是所有网卡的所有网段上,或者针对内网和公网用户使用两个进程。


评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值