随机
Enter 搜索 ↑↓ 切换 Esc 清空

istoreos-portfwd

命令

iStoreOS 端口转发 iptables 规则配置

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 端口转发涉及三条链:

  1. PREROUTING(DNAT) — 修改目标地址和端口,将发往本机特定端口的数据包转发到内网机器
  2. FORWARD — 允许数据包在接口之间转发
  3. POSTROUTING(SNAT/MASQUERADE) — 修改源地址,确保返回包正确路由

注意事项