很多用户在配置OpenVPN路由推送时,习惯直接往服务端配置文件里添加push指令,最后要么客户端完全收不到路由条目,要么连完VPN之后本地内网访问直接冲突,排查半天都找不到根源。实际上OpenVPN路由推送的正常生效,完全建立在一系列前置校验步骤之上,跳过这些配置前提直接改推送规则,后续排障要花费数倍的时间,本文就把所有必须的前置准备环节拆解清楚,覆盖从服务端系统底层到客户端网络环境的全链路校验要求。

技术人员在OpenVPN路由推送配置前完成服务端内核转发功能的前置校验
服务端内核与转发功能的基础校验
OpenVPN的路由推送本质是让客户端把指定网段的流量导向VPN虚拟隧道,第一个核心的OpenVPN路由推送配置前提,就是服务端所在的服务器系统必须提前开启IP转发功能。绝大多数刚完成OpenVPN基础安装的Linux服务器,默认是关闭内核IP转发参数的,就算配置文件里写好了正确的push规则,跨网卡的转发流量到了系统内核层面也会被直接丢弃。
校验这个配置项的操作非常简单,直接在服务端命令行执行sysctl net.ipv4.ip_forward命令,输出值为1才符合要求,如果返回值是0,需要修改sysctl的系统配置文件把参数设为永久生效,只做临时修改的话服务器重启之后配置就会失效,这也是新手配置完路由完全不通的第一类高发诱因。
服务端防火墙规则的前置放行要求
不少用户误以为OpenVPN只需要放通默认的1194服务端口就足够运行,实际上要实现路由推送后的正常转发,还要在服务端的iptables或者firewalld防火墙里配置对应的SNAT地址伪装规则,把从VPN隧道过来的、clash mate访问目标网段的流量,伪装成服务端物理出口网卡的地址发往下一跳网络。
这里还要注意防火墙的区域优先级,如果是用firewalld管理的CentOS、RHEL类系统,要把OpenVPN生成的tun虚拟网卡所在的网段加到信任区域,同时开启全局的masquerade地址伪装功能,不能只放通入站的1194端口,不然就算客户端成功收到了推送的路由,发出去的流量抵达服务端之后也会被防火墙策略丢弃,根本没法抵达预设的目标网段。
推送路由与现有网段的冲突排查
这是很多教程不会特意提及的隐性OpenVPN路由推送配置前提,你计划推送给客户端的所有目标网段,绝对不能和三类已存在的网段出现大范围重合:OpenVPN服务端自身物理网卡所在的本地网段、VPN隧道自身的虚拟地址池网段、绝大多数客户端本地默认使用的私网网段。
比如服务端本地办公内网网段是192.168.1.0/24,clash mate你要推送的路由也写了完全相同的网段,服务端本身的本地路由就已经指向物理内网,推送规则本身不会出错,但如果接入的客户端本地家用WiFi网段刚好也是192.168.1.0/24,那客户端连完VPN之后自己家里的智能设备、本地打印机就会完全无法访问,这类网段冲突问题要提前在规划阶段就规避,优先选择不常用的私网网段作为VPN专属推送网段。
客户端侧的路由接收权限校验
很多桌面端或者移动端的操作系统,默认是不允许普通应用直接修改系统全局路由表的,这也是路由推送配置容易被忽略的隐性前提,clash mateOpenVPN客户端运行的时候必须拿到系统的管理员或者最高权限,才能把服务端推送过来的路由条目写入系统路由表。
比如Windows系统下,如果你直接双击打开OpenVPN客户端,没有选择以管理员身份运行,就算服务端的所有配置都完全正确,客户端也没法正常写入推送的路由,连接完成之后执行route print命令看不到对应推送的网段,就说明权限校验环节没有通过。macOS和Linux系统下也要给OpenVPN客户端开启必要的系统扩展权限,不然路由推送会静默失败,控制台没有任何明确的报错提示。
前置配置完成后的验证方法与常见误区
所有前置步骤做完之后,不要直接连接客户端测试业务访问,先在服务端本地执行ip route命令,确认你要推送的所有网段,在服务端本地都有可达的路由条目,比如你要推送公司内部的办公服务器网段,那OpenVPN服务端本身得能正常连通这个网段的网关,不然就算路由成功推送给客户端,服务端自己都不知道往哪转发流量。
非常常见的配置误区是很多用户会直接配置redirect-gateway类的规则,把客户端所有流量都走VPN隧道,但是之前没有确认服务端本身的公网出口和DNS服务正常,结果客户端连完VPN之后直接整个网络断网。这类全流量推送的场景下,还要提前确认服务端的DNS转发配置正常,clash避免客户端出现全局域名解析失败的问题。
所有前置准备都校验通过之后,再往OpenVPN的server.conf里添加对应的push路由指令,配置完成之后重启OpenVPN服务,连接客户端之后查看本地路由表,能看到对应推送的网段指向tun类虚拟网卡,就说明前置环节全部校验通过,后续就算出现连通性问题,也只需要排查目标网段的访问权限,不用再回头反复校验基础配置。


