新闻资讯

怎么在 Linux 系统上设置多层端口映射

2025-02-23

在 Linux 系统上设置多层端口映射,可通过多种工具实现。使用 iptables,通过添加 NAT 表规则,如iptables -t nat -A PREROUTING -p tcp --dport 外网端口 -j DNAT --to - destination 中间层IP:中间层端口,将外网请求转发到中间层,再在中间层设置类似规则转发到目标服务器。若用 Nginx,可在配置文件的stream模块中配置多层代理规则,如upstream middle_server { server 中间层IP:中间层端口; }和server { listen 外网端口; proxy_pass middle_server; } 。若是借助花生壳内网穿透,先注册安装客户端,再在端口映射配置页面依次设置外网到中间层、中间层到目标服务器的映射规则。

一、端口映射基础
端口映射原理
端口映射是将一个设备的某个端口接收的数据包转发到另一个设备的指定端口的过程。在网络通信中,每个设备通过 IP 地址和端口号来标识不同的服务或应用。例如,Web 服务通常使用 80 端口(HTTP)或 443 端口(HTTPS),SSH 服务使用 22 端口。当外部设备想要访问内部设备的某个服务时,如果内部设备处于内网,直接通过公网 IP 和端口无法访问,这时就需要端口映射。通过端口映射,将公网 IP 的某个端口(如 8080)映射到内网设备的对应服务端口(如 80),外部设备访问公网 IP 的 8080 端口时,数据包会被转发到内网设备的 80 端口,从而实现对内部服务的访问。
多层端口映射的应用场景
1.复杂网络架构中的服务访问:在大型企业网络中,可能存在多个子网和多层网络设备。例如,企业的核心业务服务器位于内网深处,前面有多级防火墙和路由器。为了让外部合作伙伴能够访问企业的特定服务,如企业的合作伙伴需要访问企业内部的订单管理系统,而订单管理系统服务器处于多层网络之后,通过设置多层端口映射,可将外部请求依次转发,实现对订单管理系统的远程访问。
2.安全隔离与访问控制:通过多层端口映射,可以将不同安全级别的网络进行隔离。例如,将对外公开的 Web 服务器放置在 DMZ(隔离区),通过多层端口映射,控制外部对 DMZ 区域 Web 服务器的访问,同时限制 Web 服务器对内部核心网络的访问,提高网络的安全性。假设企业的 Web 服务器主要提供产品展示和客户注册功能,通过多层端口映射,只允许外部用户访问 Web 服务器的特定端口和服务,防止外部恶意攻击渗透到企业内部核心网络。
3.多服务整合与管理:当企业有多个不同的服务需要对外提供,且这些服务分布在不同的服务器或子网中时,多层端口映射可以将这些服务整合到一个统一的访问入口。比如,企业同时提供文件共享服务(FTP)、邮件服务(SMTP、POP3 等)和 Web 服务,通过在不同层级设置端口映射,将这些服务的访问请求统一转发到相应的服务器,方便管理和维护。

二、使用 iptables 设置多层端口映射
iptables 简介
iptables 是 Linux 系统中常用的防火墙工具,同时也具备强大的网络地址转换(NAT)功能,可用于实现端口映射。它通过一系列规则来控制网络数据包的流向,这些规则被组织在不同的表中,如filter表用于过滤数据包,nat表用于网络地址转换。
基本端口映射规则
1.正向端口映射(DNAT):将外部网络对某个端口的访问转发到内部网络的指定 IP 和端口。例如,将公网 IP 的 8080 端口映射到内网服务器 192.168.1.100 的 80 端口,命令如下:
iptables -t nat -A PREROUTING -p tcp --dport 8080 -j DNAT --to - destination 192.168.1.100:80
这条命令中,-t nat指定使用nat表,-A PREROUTING表示在数据包进入路由决策之前的 PREROUTING 链中添加规则,-p tcp指定协议为 TCP,--dport 8080表示目标端口为 8080,-j DNAT表示执行目的网络地址转换,--to - destination 192.168.1.100:80表示将数据包转发到 192.168.1.100 的 80 端口。
2.反向端口映射(SNAT):当内部网络的设备访问外部网络时,将源 IP 地址转换为指定的 IP 地址。例如,让内网 192.168.1.0/24 网段的设备通过公网 IP 访问外部网络,命令如下:
iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -j SNAT --to - source 公网IP
其中,-A POSTROUTING表示在数据包离开路由决策之后的 POSTROUTING 链中添加规则,-s 192.168.1.0/24表示源地址为 192.168.1.0/24 网段,-j SNAT表示执行源网络地址转换,--to - source 公网IP表示将源地址转换为公网 IP。
多层端口映射设置步骤
假设我们有一个三层网络结构,公网设备要访问内网服务器,中间经过一台中间层服务器。
1.设置公网到中间层的端口映射:在连接公网的路由器或防火墙(假设其 IP 为公网 IP)上,将公网 IP 的 9000 端口映射到中间层服务器 192.168.1.101 的 8000 端口,命令如下:
iptables -t nat -A PREROUTING -p tcp --dport 9000 -j DNAT --to - destination 192.168.1.101:8000
1.设置中间层到内网服务器的端口映射:在中间层服务器 192.168.1.101 上,将其 8000 端口映射到内网服务器 192.168.2.100 的 80 端口,命令如下:
iptables -t nat -A PREROUTING -p tcp --dport 8000 -j DNAT --to - destination 192.168.2.100:80
同时,为了让内网服务器返回的数据包能够正确路由回公网设备,还需要在中间层服务器上设置反向端口映射(SNAT),将内网服务器 192.168.2.100 的源地址转换为中间层服务器的 IP 地址 192.168.1.101,命令如下:
iptables -t nat -A POSTROUTING -s 192.168.2.100 -j SNAT --to - source 192.168.1.101

三、使用 Nginx 设置多层端口映射
Nginx 的stream模块
Nginx 不仅是一个优秀的 Web 服务器和反向代理服务器,其stream模块还可以用于 TCP 和 UDP 协议的流量代理,从而实现端口映射。stream模块通过配置upstream和server块来定义后端服务器组和代理规则。
配置多层端口映射示例
1.配置公网到中间层的代理:在 Nginx 配置文件中,添加以下配置,将公网 IP 的 9000 端口代理到中间层服务器 192.168.1.101 的 8000 端口:
stream {
upstream middle_server {
server 192.168.1.101:8000;
}

server {
    listen 9000;
    proxy_pass middle_server;
}

}
1.配置中间层到内网服务器的代理:在中间层服务器的 Nginx 配置文件中,添加以下配置,将其 8000 端口代理到内网服务器 192.168.2.100 的 80 端口:
stream {
upstream inner_server {
server 192.168.2.100:80;
}

server {
    listen 8000;
    proxy_pass inner_server;
}

}
配置完成后,保存配置文件并重启 Nginx 服务,使配置生效。在 Linux 系统中,重启 Nginx 服务的命令通常为:
sudo systemctl restart nginx4

四、通过花生壳内网穿透实现多层端口映射(适用于内网环境)
花生壳功能概述
花生壳是一款常用的内网穿透工具,它可以帮助用户在没有公网 IP 或动态公网 IP 的情况下,将内网服务暴露到公网,实现远程访问。花生壳支持多种协议的端口映射,如 TCP、UDP、HTTP、HTTPS 等,并且操作简单,易于使用。
多层端口映射配置步骤
1.注册与安装花生壳客户端:访问花生壳官网(https://hsk.oray.com/),注册花生壳账号。在官网下载中心,根据 Linux 系统的类型,选择相应的花生壳客户端版本进行下载安装。安装完成后,使用注册的账号登录花生壳客户端。
2.设置公网到中间层的映射:登录花生壳客户端后,点击客户端界面右下角的 “+” 按钮,进入端口映射配置页面。填写应用名称(如 “公网到中间层映射”)、映射类型选择 TCP(根据实际服务协议选择)、外网域名(可以使用花生壳提供的免费壳域名,也可绑定自己的域名)、外网端口(如 9000)、内网主机(填写中间层服务器的内网 IP 地址,如 192.168.1.101)、内网端口(如 8000)。
3.设置中间层到内网服务器的映射:在中间层服务器上,再次登录花生壳客户端,添加新的端口映射。填写应用名称(如 “中间层到内网服务器映射”)、映射类型(同样根据实际服务协议选择)、外网域名(可与上一步相同或不同)、外网端口(如 8000)、内网主机(填写内网服务器的内网 IP 地址,如 192.168.2.100)、内网端口(如 80)。
通过以上多种方法,在 Linux 系统上能够成功设置多层端口映射,满足不同场景下的网络访问需求。


拓展阅读
1.什么是 NAT(网络地址转换):NAT 是一种将私有 IP 地址转换为公有 IP 地址的技术,可实现内网设备通过公网 IP 访问外部网络,以及外部网络对内网特定设备和服务的访问,分为静态 NAT、动态 NAT 和端口地址转换(PAT)等类型。
2.如何查看 iptables 当前规则:在 Linux 系统中,使用iptables -L命令可查看filter表的规则,使用iptables -t nat -L命令可查看nat表的规则,通过这些命令可以查看当前生效的 iptables 端口映射和其他规则。
3.花生壳的付费与免费服务区别:花生壳免费服务通常提供基本的内网穿透和端口映射功能,但在带宽、连接数、域名等方面存在限制;付费服务则提供更高的带宽、更多的连接数、自定义域名等高级功能,以及更稳定的服务保障 。

新闻资讯
热门专题
最新专题
友情链接