我想概念化如何networking在使用TUN接口的Linux VPN的底层工作。
我目前最好的猜测如下(请纠正我):
但是,到远程客户端/服务器的数据包不会进入TUN接口并形成一个循环? VPN系统如何解决这个问题? 我的理解有什么差距?
你是正确的,纯粹的目的地为基础的路由这是一个问题,如果通过隧道到达的目的地与隧道build立所需的路由重叠等….
我经常看到这样做的方式,并且在各种路由器上自己完成,就是使用策略路由:
使用基于目标的路由也不难。
我通常看到的方式是加载到VPN服务器的路由,指定预先存在的网关和接口和距离(真正的路由优先级)设置为1. VPN的默认路由总是有至less2的距离。
想象一下带有1个物理适配器的系统:enp2s0。
它的路由表可能会开始,因为所有的stream量都出去了enp2s0。
一旦系统连接到一个VPN,一个TUN接口(tun0)被初始化,并且VPN更新路由表:在端口X(VPN服务器地址和端口)去往VPN服务器地址的所有通信stream出enp2s0。 所有其他stream量都通过tun0。
当然一个VPN不必路由所有的stream量。 例如,我已经build立VPN之前,只有通往某个私有子网的stream量才通过VPN,因此正常的互联网stream量将不会改变。 你如何做这个基于VPN程序的变化。