在现代网络环境中,用户常常需要通过虚拟私人网络(VPN)访问特定资源,同时又希望本地网络(如公司内网或家庭局域网)保持直接连通,这种需求在远程办公、多租户环境或跨境业务中尤为常见,Linux作为开源操作系统中的佼佼者,提供了强大的网络功能,尤其适合进行细粒度的流量控制,本文将深入讲解如何在Linux系统中配置VPN网卡分流,实现“部分流量走VPN,其余流量走本地网络”的智能路由策略。
理解基本概念至关重要,所谓“网卡分流”,是指根据目标IP地址或域名,将数据包定向到不同的网卡接口(物理网卡eth0用于本地流量,TUN/TAP设备用于VPN流量),这依赖于Linux内核的路由表和策略路由(Policy Routing)机制,当使用OpenVPN、WireGuard等工具时,它们会自动创建一个名为tun0或wg0的虚拟接口,并设置默认路由指向该接口,从而让所有流量都经过VPN隧道——这正是我们想要避免的。
要实现分流,关键步骤如下:
-
识别并标记流量:使用iptables或nftables为特定目标IP或子网打上标记(mark),若想让访问百度的流量走本地网卡,而访问境外网站的流量走VPN,则可执行:
iptables -t mangle -A OUTPUT -d 14.215.177.38 -j MARK --set-mark 1
这里14.215.177.38是百度服务器IP,标记值1表示“走本地”。
-
创建自定义路由表:编辑
/etc/iproute2/rt_tables文件,添加自定义表名,如:100 local_vpn_table然后配置该表的路由规则,使标记为1的流量优先走本地网卡:
ip route add default via 192.168.1.1 dev eth0 table local_vpn_table
-
绑定标记到路由表:使用
ip rule命令建立规则,将带有标记的流量导向指定路由表:ip rule add fwmark 1 table local_vpn_table
-
处理DNS问题:确保DNS查询也按需分流,否则可能泄露真实IP,建议在/etc/resolv.conf中配置本地DNS服务器,并结合dnsmasq或systemd-resolved进行过滤。
-
动态调整:对于动态IP或复杂场景,可编写脚本定期更新iptables规则,或使用wireguard的内置分流支持(如wg-quick配置中的
AllowedIPs字段)。
需要注意的是,此方案适用于大多数Linux发行版(Ubuntu、CentOS、Debian等),但具体操作需根据系统版本调整命令语法(如从iptables迁移到nftables),安全性方面应确保标记规则不被恶意程序篡改,建议结合selinux或apparmor进一步加固。
Linux下的VPN网卡分流不仅提升了网络效率,还增强了隐私保护,掌握这一技术,无论是企业IT管理员还是个人开发者,都能灵活应对复杂的网络需求,真正做到“想上哪就上哪”。

VPN加速器|半仙VPN加速器-免费VPN梯子首选半仙VPN

