📌 核心结论(TL;DR):
NAT 技术:将私有 IP 替换为公网 IP,利用端口号区分不同主机(NAPT),拯救了 IPv4。
正向代理:代表客户端,隐藏客户端身份。如翻墙、加速器。
反向代理:代表服务器,隐藏服务器真实 IP。如 Nginx 负载均衡、CDN。
本质区别:NAT 工作在网络层,代理工作在应用层。正向代理防服务器查你,反向代理防你查服务器。
一、 NAT 与 NAPT:局域网的上网魔法
由于 IPv4 地址枯竭,家里和公司内部普遍使用私有 IP(如 192.168.x.x)。当你上网时,NAT 路由器会把你的私有 IP 替换成公网 IP。
如果家里有多台设备,路由器会使用NAPT(网络地址端口转换),用不同的源端口来区分不同的内网设备,并在内部维护一张映射表。
二、 代理服务的两种形态
正向代理(Forward Proxy)
方向:客户端 -> 代理 -> 服务器。
特点:代理服务器知道真实客户端是谁,但服务器不知道。代表客户端发起请求。
场景:科学上网(翻墙)、公司内网限制访问外网、隐藏爬虫真实 IP。
反向代理(Reverse Proxy)
方向:客户端 -> 代理 -> 后端真实服务器。
特点:客户端以为代理就是服务器,不知道背后的真实服务器。
场景:Nginx 负载均衡、CDN 缓存加速、保护后端服务器免受直接攻击。
三、 实战验证
# 查看本机内网 IP ip addr # 查看出口公网 IP curl ifconfig.me运行这两个命令会发现,内网 IP 和公网 IP 完全不同。这证明了流量的出口存在 NAT 网关在进行 IP 替换,这也解释了为什么我们在写服务器代码bind时只能写INADDR_ANY,而不能写死公网 IP。
自我实战操作
这部分主要用命令来验证你身边的 NAT 现象。
cd ~/linux_study/network_test实战 1:亲眼见证 NAT 的存在
你的云服务器或家里的电脑,大概率是在 NAT 后面的。
查看本机网卡 IP(内网 IP):
ip addr show👉 假设你看到的是10.0.x.x或172.16.x.x或192.168.x.x。
查看你上网时的真实公网 IP:
curl ifconfig.me # 或者 curl cip.cc👉现象:你会发现ip addr里的 IP(内网)和curl查到的 IP(公网)完全不一样!这说明你的流量在出口被路由器或云厂商的 NAT 网关“偷梁换柱”了。
实战 2:测试反向代理(本地模拟)
如果你机器上装了 Nginx,咱们可以马上体验一下反向代理的威力:
安装并启动 Nginx:
sudo apt install nginx -y sudo systemctl start nginx修改 Nginx 配置(模拟把请求转发给百度):
sudo vim /etc/nginx/sites-available/default找到location / { ... },改成:
location / { proxy_pass https://www.baidu.com; }重启 Nginx:sudo systemctl restart nginx
见证奇迹:在浏览器访问你的服务器 IP。你会发现,页面上赫然显示着百度的首页!
这就是反向代理:你访问的是你的服务器,但你的服务器偷偷帮你把百度的页面拿回来了。