【学习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 小时前
在Ubuntu26上使用Docker部署Gitea
docker·容器·gitea
东宇科技2 小时前
我用docker创建了一个springboot4项目
阿里云·docker·容器
天空之城--2 小时前
Android Flutter行业最新动态与实用参考(2026年8月第2周)
android·flutter
三少爷的鞋3 小时前
预防远大于治理:Android 架构指南
android
恋猫de小郭3 小时前
Flutter 3.47 发布,快来看看有什么更新吧
android·前端·flutter
2501_937860945 小时前
MySQL表的操作:创建、查看、修改、删除完整实战
android·数据库·mysql
梦梦代码精12 小时前
连锁品牌数字化:从门店扩张到用户资产运营的技术底座
大数据·人工智能·低代码·docker·开源·代码规范
我就是妖怪14 小时前
KMP全栈开发:从Android到AI Agent的技术演进与实践
android·人工智能
InfinitePlus15 小时前
Docker MySQL搭建一主一从
mysql·docker
心平气和量大福大15 小时前
android-实例-蒲公英-更新与安装-5-签名与生成APK
android·java·开发语言