一台服务器,服务内网IP是器内192.168.1.10,跑着MySQL,网端外网端口3306。口映你想在办公室用Navicat连上去,端口直接敲公网IP加3306——大概率连不上。服务这不是器内你密码错了,是网端外网流量根本没路可走。
内网端口映射,口映干的端口事就是在这条死路上开一扇门。路由器或者防火墙收到发往公网IP某个端口的服务包,看一眼规则表,器内然后原封不动转给内网那台机器的网端外网指定端口。听起来像快递柜代收,口映其实本质就是端口NAT(网络地址转换)的一个变种,专业点叫DNAT,目标地址转换。
拿我手头一个真实场景说吧。客户机房有台监控服务器,内网地址10.0.0.8,Web管理界面跑在8080端口。他们要求外网能访问,但不想暴露整个内网。我登录路由器,加了一条映射:公网IP的18080端口 → 10.0.0.8的8080端口。保存,生效。外网用户访问
http://公网IP:18080,路由器把目标地址改成10.0.0.8:8080,响应回来再原路返回。整个过程对客户端透明,它根本不知道自己在跟内网机器说话。配置方式因设备而异。家用路由器一般有“虚拟服务器”或“端口转发”菜单,填个外部端口、内部IP、内部端口完事。企业级防火墙麻烦点,比如华为USG系列,要写安全策略、NAT策略、还要保证域间流量方向对。我见过不少人只配了NAT忘了放行安全策略,外网包到了防火墙直接被丢,还在那反复查端口有没有写错。
有个坑必须提醒:如果公网IP是动态的,比如PPPoE拨号每次都不一样,那映射的“公网IP”就得跟着变。要么用DDNS(动态域名解析),把域名绑到当前IP上,要么写映射时用接口而不是具体IP地址。有些老设备只认IP,你就得写个脚本定时更新,麻烦但没办法。
还有更隐蔽的问题——端口冲突。你内网有台机器占了80端口做网站,另一台想映射公网80到自己的8080,不行,公网IP的80端口只能映射一次。这时候要么换外部端口,要么做端口复用(比如用HAProxy按域名分流),但后者复杂度直接上一个台阶,小场景不推荐。
安全方面,别把所有端口都敞着。我见过有人图省事,把1到65535全部映射到一台内网机器上,结果扫描器一探一个准,三天后被拿去挖矿。正确做法是只映射必要端口,并且外部端口尽量别用默认的。比如SSH的22改成外部2222,虽然防不了专业扫描,但能挡掉大半脚本小子。
映射做完,记得从外网实际测一遍。别在局域网里假装自己在外网——很多路由器支持NAT回流,内网访问公网IP也能通,但这不代表外网真的通了。拿手机切4G测一次,或者用在线端口检测工具扫一下,这才是真验证。
最后说句实在话:端口映射是临时方案,不是长久之计。真要长期暴露服务,上VPN或者用frp、ngrok这类内网穿透工具,安全性和灵活性都高一个档次。但如果你只是偶尔远程连一下数据库,或者给客户演示个页面,映射一下,够用,别折腾。
顶: 8964踩: 2






评论专区