You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何利用IPTables在DMZ环境下实现端口转发至本地其他IP?

如何利用IPTables在DMZ环境下实现端口转发至本地其他IP?

当然可以这么操作!把DMZ指向你的Linux服务器绝对是个巧妙的 workaround,完美解决路由器端口转发限制的问题。我之前也碰到过同款垃圾路由器,这套方法亲测有效,接下来一步步教你实现(以转发RDP默认3389端口到内网机器为例):

一、先开启Linux的IP转发功能

IP转发是端口转发的前提,必须先打开:

  • 编辑sysctl配置文件,永久开启IP转发:
    nano /etc/sysctl.conf
    
    找到net.ipv4.ip_forward=1这一行,如果前面有#注释符号,把它删掉,保存退出。
  • 让配置立即生效:
    sysctl -p
    
    (如果只是临时测试,也可以直接执行echo 1 > /proc/sys/net/ipv4/ip_forward,但重启服务器后会失效,建议修改配置文件做永久设置)

二、用iptables配置端口转发规则

假设你的Linux服务器内网IP是192.168.1.5,要转发的目标RDP机器内网IP是192.168.1.100,执行以下命令:

  • 添加DNAT规则,把外部访问Linux的3389端口流量转发到目标机器:
    iptables -t nat -A PREROUTING -p tcp --dport 3389 -j DNAT --to-destination 192.168.1.100:3389
    
  • 添加SNAT规则,让目标机器返回的流量能正确回到外部客户端:
    iptables -t nat -A POSTROUTING -d 192.168.1.100 -p tcp --dport 3389 -j SNAT --to-source 192.168.1.5
    
  • 确保iptables允许转发的流量通过:
    iptables -A FORWARD -p tcp -d 192.168.1.100 --dport 3389 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
    

三、保存iptables规则,防止重启失效

不同Linux发行版保存规则的方法略有不同:

  • 如果你用的是Debian/Ubuntu系列:
    iptables-save > /etc/iptables/rules.v4
    # 确保开机自动加载规则
    systemctl enable iptables-persistent
    
  • 如果你用的是CentOS/RHEL系列:
    service iptables save
    
    (如果用的是firewalld,建议将这些规则导入到firewalld的自定义规则中,避免被覆盖)

关键注意事项

  • 先去路由器后台,把DMZ主机设置为你的Linux服务器的内网IP,确保外部流量能全部转发到Linux服务器上;
  • 目标RDP机器要允许来自Linux服务器的3389端口连接,记得检查目标机器的本地防火墙设置;
  • 如果要转发其他端口,只需要把所有命令里的3389换成对应的端口号即可,比如转发SSH的22端口操作逻辑完全一致;
  • 如果你的Linux服务器装了ufw、firewalld这类上层防火墙管理工具,要确保它们不会拦截刚才添加的iptables规则,或者直接将这些规则整合到对应工具的配置里。

备注:内容来源于stack exchange,提问作者Zribe

火山引擎 最新活动