课题来源
我使用java写了一个简单的chat聊天室(分为服务端和客户端),同时白嫖了30天的腾讯云服务器(doge),故想试试将服务端部署在云服务器,然后通过自己电脑用客户端连接服务器上的服务端。
资料搜索
NAT
概念
腾讯云服务器有两个IP,一个是公网IP(记为42.x.x.x),另外一个是内网IP(记为192.x.x.x),他俩之间的纽带就是NAT。
NAT工作原理
NAT就是通过端口号将公网IP和内网IP做一个映射,这样外网访问公网IP的某个端口号时,NAT就会将消息转发给映射的某个内网主机的某个端口号。内网主机想访问公网也需要将自己的IP映射成为公网IP。外网可以访问公网IP但是不能访问内网IP。NAT示意表如下表。
| 公网 | 内网 |
|---|---|
| 42.x.x.x:8081 | 192.x.x.x:8081 |
云服务器配置NAT
- 开启转发功能
echo 1 > /proc/sys/net/ipv4/ip_forward
- DNAT(destination NAT)配置,42.x.x.x为公网路由器IP,dport为公网路由器端口,192.x.x.x:8081为内网IP和端口
iptables -t nat -A PREROUTING --dst 42.x.x.x -p tcp --dport 8081 -j DNAT --to-destination 192.x.x.x:8081
- SNAT(source NAT)配置
iptables -t nat -A POSTROUTING --dst 192.x.x.x -p tcp --dport 8081 -j SNAT --to-source 42.x.x.x
- DNAT(destination NAT)和SNAT(source NAT)关系
外网访问内网,数据包到公网路由器,会将数据包的公网IP转化为内网IP和端口,这种变更行为就是DNAT;反之,内网访问外网,数据包的内网IP也会转化为外网IP,这种转换叫SNAT
配置防火墙
通过上面的配置,还是无法通过我的电脑访问云服务器的8081端口,解决方法如下:
进入腾讯云控制台

点击防火墙 -> 点击添加规则

总结
通过上面的配置,可以延伸出其他工作,比如部署一个自己的网站通过IP:端口访问,尝试其他协议的应用部署到服务器等
参考资料
[1] 配置服务器NAT转发功能
[2] 为什么我的云服务器不能绑定公网 ip ?
更新之再嫖服务器
在2025年10月30号我又嫖了一台腾讯云服务器,服务器操作系统是Ubuntu Server 24.04 LTS 64位…
输入下面命令发现没有权限。
echo 1 > /proc/sys/net/ipv4/ip_forward
现在不用设置NAT了,具体操作如下:
1. 打开实例界面,点击 安全组

2. 点击 修改规则

3. 点击 教我设置
这里介绍了很多场景,场景六介绍了如何允许外部IP访问指定端口。

4. 场景六:允许外部 IP 访问指定端口

下面是我根据教程设置所有IP能访问8081端口的例子,点击添加规则出现下面页面。

复制:
0.0.0.0/0
TCP:8081
博主用Java写了chat聊天室,想将服务端部署在白嫖的腾讯云服务器上。介绍了腾讯云服务器NAT概念、工作原理及配置方法,包括开启转发功能、DNAT和SNAT配置。还说明了配置防火墙的步骤,最终可延伸到网站部署等工作。
3135

被折叠的 条评论
为什么被折叠?



