Linux 学习笔记(五十三):NAT 技术与代理服务——正反向代理的本质区别 核心结论TL;DRNAT 技术将私有 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内网 IPip addr show 假设你看到的是10.0.x.x或172.16.x.x或192.168.x.x。查看你上网时的真实公网 IPcurl ifconfig.me # 或者 curl cip.cc现象你会发现ip addr里的 IP内网和curl查到的 IP公网完全不一样这说明你的流量在出口被路由器或云厂商的 NAT 网关“偷梁换柱”了。实战 2测试反向代理本地模拟如果你机器上装了 Nginx咱们可以马上体验一下反向代理的威力安装并启动 Nginxsudo apt install nginx -y sudo systemctl start nginx修改 Nginx 配置模拟把请求转发给百度sudo vim /etc/nginx/sites-available/default找到location / { ... }改成location / { proxy_pass https://www.baidu.com; }重启 Nginxsudo systemctl restart nginx见证奇迹在浏览器访问你的服务器 IP。你会发现页面上赫然显示着百度的首页这就是反向代理你访问的是你的服务器但你的服务器偷偷帮你把百度的页面拿回来了。