解决 OpenWrt 无法在内网中开启 NAT-PMP 的问题
条评论最近在路由器上刷了 OpenWrt,但是 OpenWrt 默认没有集成 UPnP 和 NAT-PMP 功能。我手动开启时遇到了一些问题,在此记录以帮助可能遇到同样问题的朋友。
开启 UPnP 和 NAT-PMP
首先说明一下我开启 UPnP 和 NAT-PMP 的步骤。
- 执行以下命令安装对应的软件:
1
2opkg update
opkg install miniupnpd luci-app-upnp - 编辑
/etc/config/upnpd
文件,修改下面几行1
2
3option enabled 1
option enable_natpmp 1
option enable_upnp 1 - 执行下列命令
1
2
3/etc/init.d/miniupnpd enable
/etc/init.d/miniupnpd start
/etc/init.d/firewall restart
出现错误
然而,完成配置,打开软件后,在 Web 控制台却找不到映射记录。查看日志却发现了错误信息。
1 | root@OpenWrt:/etc/init.d# logread | grep -i "\-pmp" |
部分解决
经过查找,我发现了曾经有人针对此问题在 GitHub 上提了个 Issue,尽管他是针对某个二次开发的固件提的。在 Issue 中提到了两条可能的原因:1. IPv6 的问题;2. WAN 口 IP 是内网 IP 的问题。很不幸,两条我都中了。
我验证发现,我的问题与 IPv6 没有关系。于是尝试了第二种方法,在 /etc/config/upnpd
配置文件中添加这么几行:
1 | option use_stun '1' |
添加后,却继续遇到错误:
1 | Wed Oct 13 12:37:15 2021 daemon.err miniupnpd[1942]: resolve_stun_host: getaddrinfo(stun.qq.com, 3478, ...) failed : Try again |
看起来是 STUN 过程中出现了什么错误。我尝试了很久,都无法使 STUN 成功。好在,开启了此选项后,NAT-PMP 正常工作了。同时官方文档也表明 UPnP 可能有安全风险,示例只开启了 NAT-PMP。我就先只启用 NAT-PMP,慢慢查找是哪里出了问题吧。