什么是NAT?
NAT 全称是 Network Address Translation(网络地址转换),是一个用来在多个设备共享一个公网 IP上网的技术。
NAT 的核心作用:将一个网络中的私有 IP 地址,转换为公网 IP 地址,从而实现上网功能。
没有NAT的情况:
🌐 环境准备
🖥 VMware 创建两台 Linux 虚拟机:
server1:nat-router
- 作用: NAT 路由器,作为网络地址转换的中介。
- 网卡配置:
ens32
:NAT 模式(连接外网)ens33
:仅主机模式(与 server2 通信)
[root@nat-router ~]# cat /etc/sysconfig/network-scripts/ifcfg-ens32
BOOTPROTO=static
NAME=ens32
DEVICE=ens32
ONBOOT=yes
IPADDR=192.168.100.202
NEKMASK=255.255.255.0
GATEWAY=192.168.100.2
DNS1=223.5.5.5
DNS2=8.8.8.8[root@nat-router ~]# cat /etc/sysconfig/network-scripts/ifcfg-ens33
DEVICE=ens33
BOOTPROTO=static
ONBOOT=yes
IPADDR=192.168.200.253
NETMASK=255.255.255.0
server2:nat-client
- 作用: NAT 客户端,通过 server1 上网。
- 网卡配置:
ens32
:仅主机模式(连接 server1)
[root@nat-client ~]# cat /etc/sysconfig/network-scripts/ifcfg-ens32
BOOTPROTO=static
NAME=ens32
DEVICE=ens32
ONBOOT=yes
IPADDR=192.168.200.201
NEKMASK=255.255.255.0
GATEWAY=192.168.200.253
DNS1=223.5.5.5
🧱 NAT 实现原理
🔧 使用 iptables
实现 NAT 转换
iptables
是一个 防火墙工具,用于配置 Linux 内核的网络行为。- 本身不做 NAT 转换,它的作用是 告诉内核怎么做。
⚙️ 实际执行 NAT 转换的是 Linux 内核
- 负责对底层网络数据包进行管理、处理与转发。
- 管理网卡、路由、数据包过滤等功能。
NAT 数据包处理流程:
人(配置命令) -> iptables(设置规则) -> 内核(执行SNAT) -> 网络通信
🔐 防火墙(Firewall)概念
- 作用: 管控进出网络的数据,防止非法访问或数据泄露。
- Linux 中常见防火墙工具有:
iptables
(传统,功能强大)firewalld
(基于 zone 的新型防火墙,CentOS 7+ 默认)
server1
(NAT 路由器)上配置 SNAT(源地址转换)
# 清除规则
iptables -F
iptables -t nat -F
- 清除原有的 iptables 规则,避免旧规则干扰。
-F
:清空 filter 表(默认表)的所有规则。-t nat -F
:清空 nat 表的所有规则。
# 开启路由功能
echo 1 > /proc/sys/net/ipv4/ip_forward
- 启用 IP 转发,使 Linux 内核可以作为路由器转发数据包。
iptables -t nat -A POSTROUTING -s 192.168.200.0/24 -o ens32 -j SNAT --to-source 192.168.100.202
- 设置 SNAT 规则:
-t nat
:操作 NAT 表。-A POSTROUTING
:在数据包离开本机之前改变源地址。-s 192.168.200.0/24
:匹配从 nat-client 发来的内网地址段。-o ens32
:数据包从哪张网卡出去(外网网卡)。-j SNAT --to-source 192.168.100.202
:将源地址改成 server1 外网 IP。
[root@nat-router ~]# iptables -t nat -nL
Chain PREROUTING (policy ACCEPT)
target prot opt source destinationChain INPUT (policy ACCEPT)
target prot opt source destinationChain OUTPUT (policy ACCEPT)
target prot opt source destinationChain POSTROUTING (policy ACCEPT)
target prot opt source destination
SNAT all -- 192.168.200.0/24 0.0.0.0/0 to:192.168.100.202
nat-client测试网络情况
My traceroute [v0.85]
nat-client (0.0.0.0) Sat Apr 5 22:15:10 2025
Keys: Help Display mode Restart statistics Order of fields quitPackets PingsHost Loss% Snt Last Avg Best Wrst StDev1. 192.168.200.253 0.0% 7 0.5 0.5 0.4 0.7 0.02. 192.168.100.2 0.0% 7 0.5 0.7 0.4 1.3 0.03. ???
可以看到正常转发网络请求