istoreos-portfwd
iStoreOS 端口转发 iptables 规则配置
补充说明
一份详尽的 iStoreOS(基于 OpenWrt)iptables 端口转发配置指南,帮助您实现内网服务的远程访问。
网络环境概述
| 设备 | IP 地址 | 角色 | 备注 |
|---|---|---|---|
| 主路由 OpenWrt | 10.10.10.253 | 网关/NAT | 主要网络入口 |
| 旁路由 OpenWrt | 10.10.10.252 | 辅助路由 | 特殊服务处理 |
| Windows 桌面 | 10.10.10.249:3389 | 目标服务 | 远程桌面服务 |
| Sun-panel 服务 | 10.10.10.251:3002 | Web 服务 | 内部 Web 应用 |
配置前准备
启用 IP 转发
# 编辑 sysctl.conf
vi /etc/sysctl.conf
# 确保以下行已启用
net.ipv4.ip_forward = 1
# 立即生效
sysctl -p
检查当前防火墙规则
# 查看现有 NAT 规则
iptables -t nat -L -n -v
# 查看 PREROUTING 链
iptables -t nat -L PREROUTING -n -v
# 查看 POSTROUTING 链
iptables -t nat -L POSTROUTING -n -v
# 查看 FORWARD 链(确保转发不被阻止)
iptables -L FORWARD -n -v
备份配置
# 备份防火墙配置
cp /etc/firewall.user /etc/firewall.user.backup.$(date +%Y%m%d)
# 备份网络配置
cp /etc/config/network /etc/config/network.backup.$(date +%Y%m%d)
# 备份当前 iptables 规则
iptables-save > /root/iptables.backup.$(date +%Y%m%d).rules
方案一:网关指向主路由
# 创建或覆盖防火墙配置
cat > /etc/firewall.user <<'EOF'
### iStoreOS 端口转发配置 ###
### PVE-Win11 桌面 - 主路由直接转发 ###
# 外部 3366 端口 -> 内部 3389 端口
iptables -t nat -A PREROUTING -p tcp --dport 3366 -j DNAT --to-destination 10.10.10.249:3389
iptables -t nat -A POSTROUTING -p tcp -d 10.10.10.249 --dport 3389 -j MASQUERADE
# 确保 FORWARD 链允许转发
iptables -A FORWARD -p tcp -d 10.10.10.249 --dport 3389 -j ACCEPT
EOF
# 重启防火墙
/etc/init.d/firewall restart
方案二:网关指向旁路由
步骤 1:旁路由端口转发配置
在旁路由 10.10.10.252 上执行:
cat > /etc/firewall.user <<'EOF'
### 旁路由端口转发配置 ###
### PVE-Win11 桌面 - 旁路由转发 ###
iptables -t nat -A PREROUTING -p tcp --dport 3389 -j DNAT --to-destination 10.10.10.249:3389
iptables -t nat -A POSTROUTING -p tcp -d 10.10.10.249 --dport 3389 -j MASQUERADE
iptables -A FORWARD -p tcp -d 10.10.10.249 --dport 3389 -j ACCEPT
EOF
/etc/init.d/firewall restart
步骤 2:主路由端口转发配置
在主路由 10.10.10.253 上执行:
cat > /etc/firewall.user <<'EOF'
### 主路由端口转发配置 ###
### PVE-Win11 桌面 - 主路由二次转发 ###
# 外部 3377 端口 -> 旁路由 3389 端口
iptables -t nat -A PREROUTING -p tcp --dport 3377 -j DNAT --to-destination 10.10.10.252:3389
iptables -t nat -A POSTROUTING -p tcp -d 10.10.10.252 --dport 3389 -j MASQUERADE
iptables -A FORWARD -p tcp -d 10.10.10.252 --dport 3389 -j ACCEPT
EOF
/etc/init.d/firewall restart
流量路径:公网IP:3377 → 主路由:3377 → 旁路由:3389 → Win桌面:3389
方案三:追加配置(不覆盖原有规则)
echo "" >> /etc/firewall.user
echo "### 新增端口转发规则 ###" >> /etc/firewall.user
echo "### 添加时间: $(date) ###" >> /etc/firewall.user
# Sun-panel 转发
echo "iptables -t nat -A PREROUTING -p tcp --dport 3002 -j DNAT --to-destination 10.10.10.251:3002" >> /etc/firewall.user
echo "iptables -t nat -A POSTROUTING -p tcp -d 10.10.10.251 --dport 3002 -j MASQUERADE" >> /etc/firewall.user
echo "iptables -A FORWARD -p tcp -d 10.10.10.251 --dport 3002 -j ACCEPT" >> /etc/firewall.user
/etc/init.d/firewall restart
高级配置
多端口范围转发
iptables -t nat -A PREROUTING -p tcp --dport 5000:5010 -j DNAT --to-destination 10.10.10.249:5000:5010
iptables -t nat -A POSTROUTING -p tcp -d 10.10.10.249 --dport 5000:5010 -j MASQUERADE
iptables -A FORWARD -p tcp -d 10.10.10.249 --dport 5000:5010 -j ACCEPT
指定源 IP 限制
iptables -t nat -A PREROUTING -p tcp -s 192.168.1.100 --dport 3366 -j DNAT --to-destination 10.10.10.249:3389
iptables -t nat -A POSTROUTING -p tcp -d 10.10.10.249 --dport 3389 -j MASQUERADE
iptables -A FORWARD -p tcp -s 192.168.1.100 -d 10.10.10.249 --dport 3389 -j ACCEPT
UDP 协议转发
iptables -t nat -A PREROUTING -p udp --dport 1194 -j DNAT --to-destination 10.10.10.249:1194
iptables -t nat -A POSTROUTING -p udp -d 10.10.10.249 --dport 1194 -j MASQUERADE
iptables -A FORWARD -p udp -d 10.10.10.249 --dport 1194 -j ACCEPT
删除规则
# 查看规则编号
iptables -t nat -L PREROUTING -n --line-numbers
iptables -t nat -L POSTROUTING -n --line-numbers
iptables -L FORWARD -n --line-numbers
# 按编号删除
iptables -t nat -D PREROUTING [编号]
iptables -t nat -D POSTROUTING [编号]
iptables -D FORWARD [编号]
验证与调试
检查规则
# 查看 NAT 表所有规则
iptables -t nat -L -n -v
# 查看 PREROUTING 规则
iptables -t nat -L PREROUTING -n -v
# 查看 FORWARD 规则
iptables -L FORWARD -n -v
测试连通性
# 内网测试
telnet 10.10.10.253 3366
nc -zv 10.10.10.253 3366
# 检查目标服务监听
netstat -tln | grep 3389
查看连接跟踪
cat /proc/net/ip_conntrack | grep 3389
conntrack -L | grep 3389
常见问题
规则不生效
# 检查防火墙状态
/etc/init.d/firewall status
# 重新加载配置
/etc/init.d/firewall reload
# 确认 IP 转发已开启
sysctl net.ipv4.ip_forward
能连接但无法通信
# 检查目标服务是否运行
netstat -tlnp | grep 3389
# 检查目标主机防火墙
# 检查 FORWARD 链规则
iptables -L FORWARD -n -v
重启后规则丢失
# 确保规则保存在 /etc/firewall.user
chmod 644 /etc/firewall.user
# 确认防火墙启动脚本加载该文件
grep firewall.user /etc/init.d/firewall
# 手动保存规则
iptables-save > /etc/iptables.rules
端口冲突
# 检查端口占用
netstat -tlnp | grep 3366
配置管理建议
版本控制
# 按时间备份
cp /etc/firewall.user /etc/firewall.user.$(date +%Y%m%d_%H%M%S)
# Git 管理
cd /etc && git init && git add firewall.user && git commit -m "初始防火墙配置"
添加配置说明头
cat > /etc/firewall.user <<'EOF'
##############################################
# iStoreOS 防火墙自定义规则
# 生成时间: $(date)
# 备注: 自定义端口转发规则
##############################################
### 规则说明 ###
# 端口 3366 -> Win 远程桌面 (10.10.10.249:3389)
# 端口 3002 -> Sun-panel 面板 (10.10.10.251:3002)
### 实际规则 ###
iptables -t nat -A PREROUTING -p tcp --dport 3366 -j DNAT --to-destination 10.10.10.249:3389
iptables -t nat -A POSTROUTING -p tcp -d 10.10.10.249 --dport 3389 -j MASQUERADE
iptables -A FORWARD -p tcp -d 10.10.10.249 --dport 3389 -j ACCEPT
EOF
定期检查脚本
cat > /usr/local/bin/check-firewall.sh <<'EOF'
#!/bin/sh
echo "=== 防火墙规则检查 ==="
echo "时间: $(date)"
echo "NAT 规则:"
iptables -t nat -L -n
echo ""
echo "连接跟踪:"
conntrack -L | head -20
EOF
chmod +x /usr/local/bin/check-firewall.sh
核心原理
iptables 端口转发涉及三条链:
- PREROUTING(DNAT) — 修改目标地址和端口,将发往本机特定端口的数据包转发到内网机器
- FORWARD — 允许数据包在接口之间转发
- POSTROUTING(SNAT/MASQUERADE) — 修改源地址,确保返回包正确路由
注意事项
- 端口转发会将内部服务暴露到外部网络,仅转发必要服务并设置强密码
- 确保转发设备是流量的必经之路
- 确认目标服务正在运行且监听正确端口
- 检查目标主机的防火墙设置
- 生产环境建议先在测试环境验证配置,再应用到主网络
- 配置适当的安全措施,如限制源 IP 地址