【学习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.150 在 10.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 大型网络自动生成复杂路由表来支持全球互联网路由

相关推荐
像风一样自由202012 小时前
52.Docker部署大模型应用从本地开发到服务化运行
运维·人工智能·docker·容器·大模型·智能体
江湖有缘16 小时前
Docker实战 | 使用Docker部署rmoments社交平台
jvm·docker·oracle
geovindu17 小时前
sql:Search-Optimized SQL Queries using mysql 9.0
android·数据库·sql·mysql·数据库开发·数据库架构
知之则吱吱18 小时前
Android 开发者验证机制迎来新变化:核心要求、实施时间与开发者应对指南
android·google
墨天梦20 小时前
D09_Retrofit接口与数据转换
android·kotlin·retrofit
电商API_1800790524721 小时前
闲鱼商品列表API接口商品详情API接口请求示例(含一份真实响应数据示例)
android·数据挖掘·网络爬虫·跨境电商·反向海淘
我命由我1234521 小时前
Android 广播 - 组件通信
android·java·开发语言·android studio·android jetpack·android-studio·android runtime
阿俊-全栈开发21 小时前
LikeShop 单商户标准版商品管理二开:分类、SKU 规格与库存联动实现
android·likeshop·likeshop开源商城
灯澜忆梦21 小时前
【docker】#4 | Docker 自定义镜像与 Dockerfile
运维·docker·容器