openwrt内网设备无法通过外网域名/ip访问的解决

默认情况下,直接在openwrt配置端口转发,会自动启用 NAT 环回。 但是在部分固件下,尤其是存在docker 和ipsec等服务的时候 就会失效。

在帮多个网友排查处理的时候 总结出来的小经验:不讲复杂的原理,只说实现方法

# 常见解决方法

  • 修改 wan=> lan的防火墙配置 ( 旧版有效)
  • 在对应的端口转发的位置 关闭重新打开启用 NAT 环回 (看脸)
  • 修改/etc/sysctl.conf (部分固件有效)
  • /etc/dnsmasq.hosts 即 dnsmasq 在科学软件劫持dns后概率失效 且仅限基于域名的业务
  • 内网机器hosts大法 (肯定有效,但是仅限域名业务)
  • 别名主机大法 (有效,但是仅限域名业务)

前面几种方法 网上都有对应的教材不用细说,在不同的源码固件下不太通用,在更新内核后也有可能失效。这里只说 最后一种方法。

# 最通用的解决方法

别名主机

# luci

根据版本不同,入口位置不同 一般在 http:///cgi-bin/luci/admin/network/dhcp 别名主机 的位置

# uci

和luci一样,但是可以直接shell运行,更简单直观。

1
2
3
4
5
uci add dhcp domain
uci set dhcp.@domain[-1].name='域名地址'
uci add_list dhcp.@domain[-1].ip='10.1.1.50'
uci commit dhcp
/etc/init.d/dnsmasq restart

注意 如论是别名主机 还是 hosts 都不支持泛域名,要支持泛域名只有dnsmasq。

# 最后

# 月经bug

openwrt 这个问题,在不同的版本,包括官方版都反复出现。 用的还算稳定的情况下,尽量不折腾。浪费青春。

# 建议

不是太特殊的情况下,建议用别名主机的来处理。如果有特殊需求,建议弃用docker ,opkg的软件还是蛮多的,部分没有的可以用可以在其他机器上用 docker导出后 在openwrt chroot使用。

Licensed under CC BY-NC-SA 4.0
comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计