办公室的 CentOS7 服务器放在内网,没有公网 IP,回家想远程用 VNC 控制,输了局域网 IP 却连不上;问了 IT 同事,说没有公网 IP 就像 “没门牌号”,外面找不到这台服务器 —— 你是不是也被这问题卡过?做编程的小郑就遇到过,他们公司的 CentOS7 服务器在局域网里,他想在家远程调试代码,VNC 连接时总提示 “无法找到主机”,换了好几个客户端都没用。其实啊,没有公网 IP 也能远程连接,就是得用点 “中转” 的办法,比如路由器端口映射、内网穿透工具,步骤不算复杂,就是细节多。今天就把能用的方法说透,附具体操作步骤和新手常踩的坑,看完你也能在家控制内网的 CentOS7 服务器,一起往下看吧!
先明白:没有公网 IP,为啥 VNC 连不上?
其实啊,公网 IP 就像服务器的 “门牌号”,外面的设备通过这个号码才能找到它。没有公网 IP 的服务器,就像藏在小区深处的房子,没有门牌号,外面的人不知道怎么找。
VNC 连接需要 “外面的设备→公网→服务器” 这样的路径,没有公网 IP,路径就断了。小郑第一次尝试时,在家用 VNC 输服务器的局域网 IP(192.168.1.10),根本连不上,因为这个 IP 在外面的网络里不存在,只有小区(局域网)里的设备才认识。
但有些朋友会问:“同一局域网内就能连,为啥外面不行?” 因为局域网的 IP 是 “内部号码”(比如 192.168 开头),只能在小区里用,出了小区(外网)就失效了,这就是没有公网 IP 的麻烦。
方法 1:路由器端口映射,适合有路由器管理权限的情况
如果你的 CentOS7 服务器接在路由器后面,能登录路由器管理界面,这方法最直接。小郑他们公司的路由器有管理权限,他用这招成功在家连上了服务器。
步骤:
- 查服务器的局域网 IP 和 VNC 端口:登录 CentOS7,输 “ifconfig” 找 IP(比如 192.168.1.10),VNC 端口一般是 5901(对应桌面:1);
- 登录路由器管理界面:在浏览器输路由器 IP(比如 192.168.1.1),输管理员账号密码(一般路由器背面有);
- 找 “端口映射” 或 “虚拟服务器” 选项(不同路由器名字不一样,小郑的 TP-Link 叫 “虚拟服务器”);
- 添映射规则:
- 外部端口:随便设一个(比如 59001,别用默认的 5901,容易冲突);
- 内部 IP:填服务器的局域网 IP(192.168.1.10);
- 内部端口:VNC 的端口(5901);
- 协议选 “TCP”,保存设置。
- 查路由器的公网 IP:在路由器状态里找 “WAN 口 IP”,记下来(比如 223.5.5.5);
- 在家用 VNC 连接时,地址栏输 “路由器公网 IP: 外部端口”(比如 223.5.5.5:59001),输 VNC 密码就能连上。
小郑第一次设的时候,外部端口和内部端口都用了 5901,结果和其他设备冲突,换了 59001 就好了,他说 “端口别省事儿,多敲几个数字保险”。
方法 2:内网穿透工具,没路由器权限也能用
要是你没路由器管理权限(比如公司不让改路由器设置),可以用内网穿透工具,相当于找个 “中转站”,让服务器的数据先传到中转站,再到你的设备。小郑后来换了部门,没路由器权限,用 frp 工具成功连上了。
以 frp 为例的步骤:
- 准备一台有公网 IP 的服务器(可以租个云服务器,便宜的就行,比如阿里云学生机);
- 在云服务器上下载 frp(官网能下),解压后改配置文件 frps.ini:plaintext
[common] bind_port = 7000 # 中转端口,记好
- 启动云服务器的 frp 服务:
./frps -c ./frps.ini
; - 在 CentOS7 服务器上下载 frp,改配置文件 frpc.ini:plaintext
[common] server_addr = 云服务器公网IP # 比如123.45.67.89 server_port = 7000 # 和云服务器的bind_port一致 [vnc] type = tcp local_ip = 127.0.0.1 # 本地服务器IP local_port = 5901 # VNC端口 remote_port = 6001 # 云服务器的转发端口,记好
- 启动 CentOS7 的 frp 客户端:
./frpc -c ./frpc.ini
; - 在家用 VNC 连接时,地址栏输 “云服务器公网 IP:6001”,就能连上内网的 CentOS7 了。
小郑说,这方法唯一的缺点是得租个云服务器,但一个月就几十块,比跑办公室省事多了。
方法 3:VPN 组网,适合团队多人连接
如果是团队用,比如好几个人都要远程连接这台 CentOS7 服务器,建个 VPN 虚拟局域网更方便。小郑他们团队后来用了蒲公英 VPN,不用设置端口,直接组网。
简单步骤:
- 在 CentOS7 上装 VPN 客户端(比如蒲公英),按提示绑定设备;
- 自己的电脑或手机也装同款 VPN 客户端,加入同一个网络;
- 连接后,所有设备就像在同一个局域网,直接用 CentOS7 的局域网 IP(192.168.1.10)+VNC 端口连接,和在办公室一样。
小郑说这方法对新手友好,不用敲太多命令,图形化界面操作,团队里不懂技术的同事也能学会。
三种方法对比表:哪种适合你?
方法 | 适合场景 | 优点 | 缺点 | 小郑推荐指数 |
---|---|---|---|---|
路由器映射 | 有路由器权限,单人用 | 免费,速度快 | 路由器型号不同步骤不同 | ★★★★☆ |
内网穿透 | 无路由器权限,单人 / 小团队 | 灵活,不受路由器限制 | 需要租云服务器 | ★★★★★ |
VPN 组网 | 团队多人用 | 操作简单,像在局域网 | 部分功能收费 | ★★★☆☆ |
小郑自己常用内网穿透,他说 “租个云服务器,不光能连 VNC,传文件、远程调试都能用,性价比高”。
新手常踩的坑:这些地方容易出错
(1)端口冲突,换个端口就好
小郑第一次用路由器映射,5901 端口总连不上,后来发现被其他设备占用了,换成 5902 就好了。查端口是否被占用:CentOS7 里输 “netstat -tuln | grep 5901”,有结果就是被占用。
(2)服务没启动,VNC 或 frp 忘了开
有次小郑在家连不上,远程让同事看服务器,发现 frp 客户端没启动,重启后立马连上。建议设开机自启,CentOS7 里可以把启动命令加到 /etc/rc.local 里。
(3)防火墙没放行,内外都得开
不光 CentOS7 的防火墙要放通 5901 端口,云服务器、路由器的防火墙也得放行对应的中转端口,小郑就漏了云服务器的 6001 端口,导致连接被拒。
小编的心里话
没有公网 IP 的 CentOS7 服务器用 VNC 远程连接,其实就是解决 “外面怎么找到里面” 的问题 —— 路由器映射是 “直接指路”,内网穿透是 “找个中转站”,VPN 是 “建虚拟小路”。新手可以先从内网穿透试起,步骤相对固定,不容易出错。
小郑现在在家远程办公全靠这些方法,他说 “一开始觉得没有公网 IP 是死局,试过才知道办法挺多的,关键是敢动手试”。其实啊,远程连接的核心就是 “打通路径”,找到适合自己的路径,没有公网 IP 也能轻松搞定,你说对吧?