【学习VPN之路】路由表 和 NAT 的关系是什么?

92 阅读1分钟

路由表 和 NAT 的关系是什么?

它们都是 Linux 网络栈中处理 IP 包 的重要机制,但属于两个不同的阶段、目的不同:


✅ 路由表:决定 包往哪走

  • 路由表是操作系统的“导航图”。
  • 它根据 IP 包的 目标地址(Dst IP) 查找该往哪个接口(网卡)、哪个下一跳(gateway)发。
  • NAT和路由表的顺序:
    • 入站方向:必须先做 DNAT,再查路由表,因为目标地址可能会影响路由。
    • 出站方向:查完路由表之后再做 SNAT,因为源地址的改变不影响去哪(只影响回来时能不能回来)。

✅ NAT:改变 IP 包的地址

NAT(Network Address Translation)可以分为:

类型改动常见作用
SNAT修改源地址(Src IP)内网出网
DNAT修改目标地址(Dst IP)外网入内网
  • NAT 是通过 Netfilter 子系统 的钩子(如 PREROUTING、POSTROUTING)实现的。
  • NAT 并不决定包往哪走,它只改变 IP 包的源/目标地址。

🔄 它们在数据包处理链中的顺序是:

▶️ 入站方向(比如公网到内网):

  1. PREROUTING
    • DNAT 修改目标 IP
  1. Routing Decision(查路由表)
    • 修改后的目标 IP 查找路由表 → 决定包送到哪(本机、别的网卡等)
  1. Local Input / FORWARD

◀️ 出站方向(比如内网发往公网):

  1. Routing Decision(查路由表)
    • 用原始目标 IP 查路由表 → 决定发往哪个设备
  1. POSTROUTING
    • SNAT/MASQUERADE 修改源 IP(例如变成服务器公网 IP)