OpenWrt路由器iptables设置IP重定向的方法,MASQUERADE有什么用?
问题背景
想通过路由器把访问104.16.0.0/12地址段的请求都转到172.67.69.102?明明在hosts文件里改能正常访问网站,但用iptables设置后反而失效?这种情况多半是NAT转发链条没接完整!
终极解决方案
在SSH中依次执行这些命令(建议复制粘贴):
# 开启内核转发功能(关键开关!) echo 1 > /proc/sys/net/ipv4/ip_forward # 核心转发规则(接收入站请求) iptables -t nat -A PREROUTING -d 104.16.0.0/12 -j DNAT --to-destination 172.67.69.102 # 隐藏发送者身份(让回包能找到路) iptables -t nat -A POSTROUTING -d 172.67.69.102 -j MASQUERADE
为什么必须加MASQUERADE?
想象你请代购帮忙买东西:
1. 你(客户端)把需求发给代购(路由器)
2. 代购把需求改成自己的地址发给商家(DNAT)
3. 商家必须把货物回寄给代购(MASQUERADE伪装发件人)
4. 代购再转交给你
不加MASQUERADE就像让商家直接给你寄国际快递,很可能被防火墙拦截!
常见翻车点排查
1. IP转发未开启:检查 cat /proc/sys/net/ipv4/ip_forward 是否返回1
2. 规则顺序冲突:用 iptables -t nat -L --line-numbers 查看规则优先级
3. 目标服务器拒接:目标IP的80/443端口是否真的开放?用 telnet 172.67.69.102 80 测试
4. IP段范围过大:/12对应104.16.0.0-104.31.255.255,确认是否误包含非常用IP
高级技巧
- 临时测试可追加`-I`参数将规则置顶:
iptables -t nat -I PREROUTING 1 -d 104.16.0.0/12 -j DNAT --to 172.67.69.102
- 查看实时NAT记录:
cat /proc/net/nf_conntrack | grep 172.67.69.102
- 嵌入式设备保存配置建议:
iptables-save > /etc/iptables.rules echo "iptables-restore < /etc/iptables.rules" >> /etc/rc.local
效果验证
执行后打开浏览器访问:
curl -v http://example.com(替换成你的域名)
观察是否出现 Connected to 172.67.69.102 的提示
适用场景
本方案特别适合:
- 老旧嵌入式设备无ipset支持
- 需要快速屏蔽/替换CDN节点
- 临时解决DNS污染问题
- 内网服务伪装(把多个IP映射到单台服务器)
建议操作前备份原有规则 iptables-save > iptables.bak ,翻车时可快速恢复。
点击链接加入群聊四群:722808830
点击链接加入群聊三群:751529538(已满)
点击链接加入群聊二群:376877156(已满)
点击链接加入群聊一群:622891808(已满)
饿了么红包
本站附件分享,如果附件失效,可以去找找看