本文全面介绍OpenVPN的路由配置,不再阐述理论。为了简单且不引入其它问题,以下的配置不考虑NAT。 零.介绍和声明以及拓扑图
- 以下的配置不再给出任何配置文件或者配置选项,比如iroute配置等;以下路由配置可以不使用默认网关,使用默认网关只是为了方便。正确的做法是配置指向确切网络的路由,变长掩码非0
- 由于OpenVPN支持tun和tap两种模式,在Tun中,路由指的是下一跳节点或者是一个虚拟网卡,在tap中,路由指的是从OpenVPN虚拟交换机出去的虚拟端口,这二者是截然不同的,协议也没有工作在同一个层,因此OpenVPN内部路由使用multi_instance代表这两者,tun模式中,multi_instance代表三层路由目标,tap模式中,multi_instance代表二层路由目标,即端口。 拓扑图如下:
一. TUN模式
A. TUN模式无NAT互访
1. VPN客户端访问NET0/NET1
1.1. 默认网关指向VPN服务器的虚拟地址;
2. VPN客户端后面的网络访问NET0/NET1:
2.1.解决VPN客户端后面网络和VPN客户端本身的可达性;
2.2. 参见1。
3. VPN客户端1访问VPN客户端2:
3.1. 默认网关指向VPN服务器的虚拟IP地址
4. VPN客户端2后面的网络访问VPN客户端1后面的网络
4.1. 通过路由解决VPN客户端后面网络和VPN客户端本身的可达性
4.2. 参见3
5. VPN服务器端访问VPN客户端
5.1. 直接访问。VPN服务器和VPN客户端之间有直连的点对点路由
6. VPN服务器端访问VPN客户端后面子网
6.1. 添加指向该子网的路由指向TUN网卡,确保系统路由可达性
6.2. 配置针对该VPN客户端的iroute内部路由,路由指向欲访问的子网
7. VPN服务器端后面的子网访问VPN客户端后面的子网
7.1. 通过路由解决VPN服务器后面子网到VPN服务器本身的可达性
7.2. 参见6
B. VPN服务器路由表
1. VPN服务器系统路由表:
NET4->tun0
NET3->tun0
NET2->tun0
2. VPN服务器点对点直连路由表:
VPN客户端1->tun0
VPN客户端2->tun0
3. VPN服务器内部路由表
NET2->VPN客户端1的multi_instance
NET3->VPN客户端2的multi_instance
NET4->VPN客户端3的multi_instance
二. TAP模式
A. TAP模式无NAT互访
1. VPN客户端访问NET0/NET1
1.1. 默认网关指向VPN服务器的虚拟地址;
2. VPN客户端后面的网络访问NET0/NET1:
2.1. 解决VPN客户端后面网络和VPN客户端本身的可达性;
2.2. 参见1。
3. VPN客户端1访问VPN客户端2:
3.1. 它们属于一个虚拟以太网,直接访问,通过链路层ARP解决IP可达性
4. VPN客户端2后面的网络访问VPN客户端1后面的网络
4.1. 通过路由解决VPN客户端后面网络和VPN客户端本身的可达性
4.2. VPN客户端2的默认网关指向VPN客户端1的虚拟IP地址
5. VPN服务器访问VPN客户端
5.1. 它们属于同一个以太网,链路层路由直接访问
6. VPN服务器端访问VPN客户端后面子网
6.1. 网关指向VPN客户端虚拟IP地址,类似以太网通过路由器访问外网,此时VPN客户端是路由器
7. VPN服务器端后面的子网访问VPN客户端后面的子网
7.1. 通过路由保证VPN服务器端后面网络到VPN服务器端的可达性
7.2. 参见6
B. 与任何子网没有Bridge时VPN服务器路由表
1. 系统路由表:
NET4->via VPN客户端2的虚拟IP
NET3->via VPN客户端2的虚拟IP
NET2->via VPN客户端1的虚拟IP
2. VPN服务器链路层直连路由表:
VPN客户端1->tap0
VPN客户端2->tap0
3. VPN服务器内部路由表(交换机映射表)
VPN客户端1的MAC地址<->VPN客户端1的multi_instance
VPN客户端2的MAC地址<->VPN客户端2的multi_instance
C. VPN客户端2与NET2 Bridge时VPN服务器路由表
1. 系统路由表
NET4->via VPN客户端2的虚拟IP
NET3->via VPN客户端2的虚拟IP
2. VPN服务器链路层直连路由表:
VPN客户端1->tap0
VPN客户端2->tap0
NET2->tap0
3. VPN服务器内部路由表(交换机映射表)
VPN客户端1的MAC地址<->VPN客户端1的multi_instance
VPN客户端2的MAC地址<->VPN客户端2的multi_instance
NET2中所有同链路层网段MAC地址<->VPN客户端1的multi_instance