办公室的个外个内网络拓扑图上,那台老掉牙的网i网思科路由器后面,只挂着一个公网IP。射多可我们部门有六台服务器,个外个内每台都要跑不同的网i网服务,对外还得用不同的射多域名。这事儿搁谁身上都头疼。个外个内
外网IP就一个,网i网好比一栋楼只有一个门牌号。射多可楼里住了六户人家,个外个内快递小哥怎么知道哪件包裹该递给谁?网i网答案就在路由器上做手脚。用端口映射,射多就像在楼门口摆了个分拣台——访问者敲门的个外个内端口号不同,分拣员就把请求塞给不同的网i网住户。
具体怎么玩?射多拿我手头的配置举例。公网IP是203.0.113.7,内网有三台机器:192.168.1.10跑着Web服务,192.168.1.11是FTP,192.168.1.12是个内部监控系统。我在路由器上这么写:把公网80端口映射到192.168.1.10的80端口,21端口甩给192.168.1.11,8080端口则指向192.168.1.12的80端口。
这样用户访问http://203.0.113.7,实际打开的是10号机的网站;ftp://203.0.113.7连上的是11号机的文件服务;http://203.0.113.7:8080看到的则是12号机的监控画面。同一个IP,三个完全不同的后台,互不干扰。
但端口映射有个天生缺陷——非标准端口号得写在URL里,普通用户记不住。更聪明的做法是用反向代理。我在内网加了一台Nginx服务器,让它独占80端口,然后把所有请求按域名分流。比如访问erp.company.com,Nginx就把请求转发给192.168.1.10;访问files.company.com,则转到192.168.1.11。
这么做的好处显而易见。用户根本不用关心IP后面跟什么端口,域名就是最直观的门牌号。而且Nginx还能做负载均衡、HTTPS终结、缓存静态文件,等于在楼门口加了个智能管家,比单纯的分拣台高级多了。
不过,反向代理也有软肋。所有流量都得先过它这一关,一旦这台机器挂了,整栋楼都得停电。我去年就吃过这个亏——半夜Nginx的日志文件把磁盘塞满了,第二天早上全公司的人都打不开系统。后来我加了定时清理脚本,又做了双机热备,才算踏实。
还有一种极端情况:如果你连端口都不想占用,那就得靠IP本身做文章。IPv4资源枯竭,但有些运营商提供IP别名的玩法,一个物理接口上绑定多个公网IP。比如203.0.113.7、203.0.113.8、203.0.113.9都指向同一台路由器,再让路由器按目的IP分别转发到不同内网机器。这招在设备支持的情况下最干净,每个内网服务都有自己独立的公网IP,互不干扰。但问题是公网IP得花钱买,而且还得看运营商给不给分配。
三种方案我都实际用过。端口映射最简单,适合临时调试;反向代理最灵活,适合生产环境;多IP绑定最直观,但成本高。要是你手头只有一台破路由器,连Nginx都跑不动,那就老老实实用端口映射——虽然丑点,但至少能用。
说到底,技术选型永远得看场景。我见过有人为了省事,把所有服务全塞到同一台机器上,结果某个服务崩溃就把整台服务器拖垮。也见过为了追求“规范”,强行上Kubernetes,结果运维团队连Pod都排不明白。一个外网IP映射多个内网IP,本质是资源受限时的妥协方案,但妥协也有妥协的艺术。关键在于想清楚:你的瓶颈是CPU、内存、带宽,还是单纯懒得维护多台机器?答案不同,最优解就完全不同。