在家或者公司内网里搭个服务器,比如放个网站、做个文件共享,挺常见的事儿。很多人直接用私网地址来配置,比如 192.168.1.100 或者 10.0.0.5 这类地址,确实方便,但用着用着就发现外网访问不了,设备之间也连不上,问题出在哪?
私网地址到底能不能用来搭服务器?
能,但有前提。私网地址本身是为局域网设计的,像 192.168.x.x、172.16.x.x~172.31.x.x、10.x.x.x 这些段,路由器不会把它们直接转发到公网。你在家里给一台主机分配 192.168.1.100,然后装个 Nginx 挂个页面,同个 Wi-Fi 下的手机电脑能打开,这没问题。但换个网络,比如用手机流量去访问,大概率打不开。
为什么别人访问不了我的私网服务器?
核心原因是:公网不知道你的私网地址在哪。数据包从外网发过来,运营商的路由器一看目标是 192.168.1.100,这种地址属于“内部专用”,直接丢弃。就像寄快递写了个“我家书房第三格抽屉”,快递员根本找不到地方。
要让外网能访问,得靠 NAT(网络地址转换)。你家路由器通常做了动态 NAT,把内网请求自动映射到公网 IP 出去,回来的数据也能正确转给你。但反过来——别人主动打进来——默认是不通的。
怎么让外网访问私网服务器?
最常用的法子是端口映射,也就是在路由器上设置“端口转发”。比如你的服务器在 192.168.1.100 上跑了个 Web 服务,监听 80 端口,那你可以在路由器后台添加一条规则:
外部端口: 8080
内部 IP: 192.168.1.100
内部端口: 80
协议: TCP
保存后,别人通过你家宽带的公网 IP 加上 :8080,比如 http://123.123.123.123:8080,就能访问到你那台机器上的网页了。
可我填了端口转发还是不行?
先别急,一步步查。第一个坑:你有没有公网 IP?现在大多数家庭宽带给的是私网 IP 或者做了多层 NAT(比如运营商级 NAT,即 CGNAT),你自己这层路由器拿到的其实也不是真正的公网地址。这时候就算设了端口转发也没用,因为外网根本打不到你这个“公网 IP”。
怎么判断?登录路由器管理页,看外网状态里的“公网 IP”是不是以 100.64 开头,或者是 192.168、10、172.16 这些私网段。如果是,那你没真正公网 IP,得联系运营商申请,或者考虑换线路。
防火墙也可能是拦路虎
就算 IP 和端口都对了,还可能被防火墙挡住。服务器本机的操作系统防火墙(比如 Windows 防火墙、iptables)可能没放行对应端口。CentOS 上如果开了 firewalld,记得加规则:
firewall-cmd --permanent --add-port=80/tcp
firewall-cmd --reload
另外,有些路由器自带安全策略,默认禁止所有入站连接,得在设置里手动开启“允许外部访问”或关闭“SPI 防火墙”测试一下。
动态 IP 导致访问中断怎么办?
家庭宽带的公网 IP 通常是动态的,重启路由器就变。别人记的 IP 地址过两天就不能用了。解决办法是上 DDNS(动态域名解析)。注册个域名,比如用花生壳、阿里云 DNS,再在路由器或服务器上运行客户端,定时上报当前 IP。别人通过一个固定域名(如 myserver.vicp.io)就能一直访问你。
要不要改用云服务器?
如果你的服务需要稳定对外,比如团队协作、客户访问,私网搭服务器终究受限。不如直接租个云主机,阿里云、腾讯云几十块钱一个月,公网 IP 直接配好,安全组自己控制,省心不少。本地私网服务器更适合内部测试、学习练手或者临时分享文件。
说白了,私网地址能搭服务器,但本质是“局域网可用”。想对外服务,得打通 NAT、搞定公网 IP、绕开防火墙。每一步都可能卡住,排查时别慌,从 IP 层层往外推,先确认能不能被访问,再看数据通不通,最后查应用有没有响应,问题自然浮出水面。