1. 向"PORT_FORWARD"链(此处名称可变)插入端口转发规则,对于发送至路由器的目标端口为5001/tcp的数据包,改写其目标地址,指向内网主机192.168.1.10的5001/tcp端口
iptables -t nat -I "PORT_FORWARD" 1 -p "tcp" --dport "5001" -j DNAT --to-destination "192.168.1.10:5001"
2. 对于目标地址为"<路由器公网IP地址>"的数据包,在数据包刚进入路由器网口时,按照上述规则进行NAT转换,之后,数据包进入FORWORD链,不进入INPUT链
iptables -t nat -I PREROUTING 1 -d "<路由器公网IP地址>" -j "PORT_FORWARD"
由此可得,只有直接发送至<路由器公网IP地址>:<路由器侧目标端口>的数据包会被转发至<内网目标主机IP地址>:<内网主机侧目标端口>。你通过DDNS服务,把域名指向<路由器公网IP地址>,所以可以访问。数据包转发路径:
浏览器访问“nas.abc.com:5001”->DNS解析为“路由器公网IP地址:5001”->发送至路由器->路由器转发至“<内网目标主机IP地址>:<内网主机侧目标端口>”
你在内网使用hosts写死nas.abc.com到192.168.1.0(此处存疑,根据规范“192.168.1.0”是网络地址,不能用作目的地址/源地址,应使用主机地址192.168.1.1-192.168.1.254,故以下假设你路由器的内网IP地址为192.168.1.1)
你在内网使用hosts写死nas.abc.com至192.168.1.1,或者内网架设DNS服务器,将域名nas.abc.com解析至192.168.1.1,数据包转发路径:
浏览器访问“nas.abc.com:5001”->DNS解析为“192.168.1.1:5001”->发送至路由器->针对目标地址为192.168.1.1:5001的数据包,路由器没有转发规则,故数据包进入INPUT链,发送至本机,不会被转发至内网主机192.168.1.10的5001/tcp端口,访问失败
综上,你需要检查路由器是否能自定义iptables或者提供相关的设置项,否则,仅靠普通“端口转发”功能,无法实现你的需求。 tp家用版的后台,叫做虚拟服务器……在里面配置好了默认就回环了 trusty 发表于 2024-1-24 09:25
你遇到的情况是正常的。以你的情况为例,一般情况下路由器按照如下方法实现端口映射:
1. 向"PORT_FORWARD ...
这个TP没有自定义iptables的功能,没办法 目前看起来思路清晰了些,TP自己带的DDNS也不支持dnspod的DDNS,这点写的很死没办法
1、换路由,支持其他第三方的DDNS应该可以实现,或者支持自定义DNS指向的
2、内网做个DNS劫持,楼上有兄弟提的adguardhome也是个办法,在局域网内网的域名直接解析成内网地址
3、等TP升级。。。这个应该是不现实了
页:
1
[2]