【学习VPN之路】路由表

1. 什么是路由表(Routing Table)?

路由表是操作系统或路由器中用于决定数据包应该被发送到哪里(网卡、接口)数据结构

它是一个 查找表,记录了:

  • 不同网络地址(目的地址段)
  • 到这些地址的下一跳(网关)
  • 下一跳的接口(如 en0、tun0 等)
  • 其他辅助信息(如 metric、flags)

2. 路由表解决了什么问题?

  • 核心问题: 网络数据包发出去时,该往哪个接口发?该发给谁?
  • 例如:
    • 当前设备有2个物理网卡,链接者两个不同的网络。当这台设备上的应用程序发送一个IP包,这个IP包应该从哪个网卡中发送呢?路由表就可以帮助操作系统决定用哪个网卡发送。下面是两个网卡的地址和路由表:
      • 网卡 1 (连接到网络 A):192.168.1.100
      • 网卡 2 (连接到网络 B):10.0.0.100
    • 假设该设备的路由表如下所示:
目标网络 子网掩码 网关地址 接口 备注
192.168.1.0 255.255.255.0 直接连接 eth0 目标网络 192.168.1.0/24 :这个网络是直接连接的,意味着任何发送到这个子网的数据包都应该通过 网卡 eth0(连接到网络 A)发送。
10.0.0.0 255.0.0.0 直接连接 eth1 目标网络 10.0.0.0/8 :这个网络也是直接连接的,数据包应该通过 网卡 eth1(连接到网络 B)发送。
0.0.0.0 0.0.0.0 192.168.1.1 eth0 默认路由 0.0.0.0/0 :这个路由表示,当数据包的目标不在前两个网络中时(例如访问外部互联网),数据包应该通过 网卡 eth0 发送,并且需要经过网关 192.168.1.1
    • 当设备的应用程序需要发送一个目标 IP 为 10.0.0.150 的数据包时,操作系统需要根据路由表来决定哪个网卡用于发送数据包。
      • 检查路由表
        • 首先,它会检查目标地址 10.0.0.150 是否属于路由表中的某个网络。
        • 在此情况下,目标 10.0.0.150 属于 10.0.0.0/8 网络,因此匹配到第二条路由记录。
      • 选择网络接口
        • 根据路由表中的第二条记录,目标地址 10.0.0.15010.0.0.0/8 网络内,因此它应该通过 网卡 eth1(连接到网络 B)发送。
      • 数据包转发
        • 由于 10.0.0.0/8 网络是直接连接的,操作系统将直接通过 eth1 将数据包发送出去。

3. 路由表在VPN中的应用

3.1. wireguard客户端

wg客户端需要拦截所有的发往外网的IP包,需要建立一个tun虚拟网卡,比如名字是utun5网卡(IP 192.168.3.1/16)。然后再建立一个路由规则:

目标网络 子网掩码 网关 接口
0.0.0.0 0.0.0.0 192.168.1.1 utun5

那么发往外网的全部IP包都传给utun5发送,而tun网卡可以让开发者在用户空间拦截到这些IP包,并做相应的业务逻辑。这里需要注意被拦截的IP包的源IP被设置为utun5的IP地址,也就是192.168.3.1。

3.2. wireguard后端

wg后端需要拦截所有目标服务器的响应IP包,然后将拦截的IP包转发给wg客户端。比如tun网卡utun5的IP地址为10.0.0.1/16,转发发的客户端IP的源IP是虚拟IP 10.0.0.2。当目标服务器返回的IP包经过wg后端OS的NET服务后,IP的目标IP被转换为10.0.0.2,这个IP就会命中下面的路由规则:

目标网络 子网掩码 网关 接口
10.0.0.1 255.255.0.0 utun5

这个IP就会被转给utun5接口,然后ip包就会被wg拦截到。

4. 路由表在哪些场景下使用?

✅ 操作系统层的常见使用场景:
场景 路由表的作用
📱 应用程序访问互联网 系统查路由表决定数据包要从哪张网卡(如 en0)发出,是否通过网关转发
🔁 回环通信(127.0.0.1) 路由表中指定 127.0.0.0/8的数据包走 lo0(loopback)接口
🌐 多网卡设备 路由表用于区分数据包该从 Wi-Fi、以太网、还是 VPN 发出
🔒 VPN/TUN 应用 拦截系统数据包后,转发给虚拟网卡(如 tun0),实现加密/代理等功能
🛜 本机网络服务监听 系统判断是本地连接(走 lo0)还是远程连接(走 en0/tun0)
✅ 网络设备(如路由器)中的使用场景:
场景 路由表的作用
🛣️ 网络转发(L3 路由) 路由器转发来自其它网络的数据包,查表决定往哪个下一跳发
🔁 连接多个子网 路由器连接 192.168.1.0/24 和 10.0.0.0/24,就需要路由表条目区分
📶 家庭网关 家用路由器转发内网设备的数据到公网 ISP 网关
📡 BGP/OSPF 大型网络自动生成复杂路由表来支持全球互联网路由

相关推荐
东风西巷2 小时前
X-plore File Manager v4.34.02 修改版:安卓设备上的全能文件管理器
android·网络·软件需求
yzpyzp2 小时前
Android 15中的16KB大页有何优势?
android
安卓开发者2 小时前
Android Room 持久化库:简化数据库操作
android·数据库
贺贺丿2 小时前
Docker4-容器化企业级应用
linux·nginx·docker·云原生·eureka·tomcat·ssh
程序视点2 小时前
FadCam安卓后台录制神器:2025最全使用指南(开源/免费/息屏录制)
android
猿小蔡3 小时前
Android ADB命令之内存统计与分析
android
NorthCastle4 小时前
Dockerfile 文件及指令详解
docker·指令·dockerfile
Linux运维技术栈4 小时前
从零构建 Node20+pnpm+pm2 环境镜像:基于 Dockerfile 的两种方案及持久化配置指南
运维·docker·容器
游戏开发爱好者84 小时前
没有 Mac,如何上架 iOS App?多项目复用与流程标准化实战分享
android·ios·小程序·https·uni-app·iphone·webview
你过来啊你5 小时前
Android开发中nfc协议分析
android