我有一个带路由器的小型网络,它维护与Internet,服务器和本地网络中的一些工作站的连接.
服务器应该从Internet访问,并且在路由器iptables中设置了几个DNAT条目,如下所示:
-A PREROUTING -i ppp0 -p tcp -m multiport --dports 22,25,80,443 -j DNAT --to-destination 192.168.2.10
外部数据包通过ppp0接口进入路由器,内部数据包来自br-lan,实际上包括交换机和WLAN适配器.问题是,虽然外部访问工作正常,但尝试通过DNS解析的外部IP(分配给ppp0)从LAN内部访问服务器失败.
我能够发明的唯一解决方案是向路由器的/ etc / hosts添加静态条目,指向内部IP,但由于没有通配符(我至少有三个顶级域分配给该系统,不计算数十子域名),这是相当脆弱和容易出错的.你能提出更好的建议吗?
我只找到了这个question,这不是很有用.
如果这是相关的,路由器使用dnsmasq运行OpenWRT 10.03 Kamikaze.
解决方法
我很惊讶,在将近8年后,没有人使用OpenWRT中默认使用的UCI配置系统解释如何以正确的方式执行此操作.
Steven Monday的答案是正确的,但它直接使用iptables命令,这是一个比UCI配置系统更低的层,如果可能的话,大多数OpenWRT用户最好不要使用它.
通过UCI中另一个内部主机的公共IP /端口组合访问内部服务器的正确方法是在文件/ etc / config / firewall中的每个特定DNAT目标下启用配置选项反射.记录此行为here.
例如:
配置重定向
期权目标’DNAT’
选项src’wan’
选项dest’lan’
选项proto’tcp’
选项src_dport’44322′
选项dest_ip’192.168.5.22′
选项dest_port’443′
选项名称’apache HTTPS server’
选项反射’1′
注意:根据指示的OpenWRT文档,默认情况下启用反射.在我的测试中,情况并非如此.