You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何配置路由使VLAN接口的标记流量转发至tun VPN接口

如何配置路由使VLAN接口的标记流量转发至tun VPN接口

嘿,我来帮你搞定这个VLAN流量专属走VPN的路由问题!先理清楚你的现有环境:树莓派有三个网络接口——eth0连本地局域网(192.168.100.27/24)、tun0是VPN接口且当前默认路由指向它、eth0.10是VLAN10的网关(192.168.10.1/24),目标是让VLAN10(192.168.10.0/24)的所有流量都强制走tun0,对吧?

下面是一步步的实操配置方案,跟着来就行:

1. 先开启IP转发(必做基础)

树莓派默认没开启IP转发,得先打开,不然没法做路由转发:

  • 临时生效(重启后失效):
    echo 1 > /proc/sys/net/ipv4/ip_forward
    
  • 永久生效(修改配置文件):
    编辑/etc/sysctl.conf,找到net.ipv4.ip_forward=0这行,改成net.ipv4.ip_forward=1,然后执行:
    sysctl -p
    
    这样重启后也会保持开启状态。

2. 配置策略路由(核心步骤)

普通路由表没法针对特定来源的流量指定路由,所以我们用策略路由来实现精准控制:

2.1 创建专属路由表

先给VLAN10的流量建一个单独的路由表,比如命名为vpnroute

echo "10 vpnroute" >> /etc/iproute2/rt_tables

这里的10是路由表的编号,只要是没被系统占用的数字就行(你可以看/etc/iproute2/rt_tables里的现有编号避开)。

2.2 给专属路由表添加VPN默认路由

把这个路由表的默认网关指向tun0的VPN网关(你提到的10.0.0.1):

ip route add default via 10.0.0.1 dev tun0 table vpnroute

2.3 添加路由规则,匹配VLAN10流量

让来自VLAN10网段(192.168.10.0/24)的所有流量都使用我们刚创建的vpnroute表:

ip rule add from 192.168.10.0/24 table vpnroute

3. 配置防火墙允许转发

得让iptables允许VLAN10和tun0之间的流量转发:

# 允许从VLAN10到VPN的出站流量
iptables -A FORWARD -i eth0.10 -o tun0 -j ACCEPT
# 允许从VPN返回VLAN10的关联/已建立连接的流量
iptables -A FORWARD -i tun0 -o eth0.10 -m state --state RELATED,ESTABLISHED -j ACCEPT

如果用的是nftables,对应调整规则就行,原理一致。

4. 验证配置是否生效

现在你可以在VLAN10的PC上做测试:

  • 执行traceroute 8.8.8.8(或者任意公网IP),看第一跳是不是10.0.0.1(tun0的VPN网关),而不是你本地局域网的网关。
  • 在树莓派上查看路由规则和路由表:
    ip rule show  # 应该能看到我们添加的from 192.168.10.0/24 table vpnroute的规则
    ip route show table vpnroute  # 应该显示default via 10.0.0.1 dev tun0
    

5. 处理VPN重连的问题

如果你的VPN断开后重连,tun0的接口信息可能会变化,这时候之前加的路由规则可能失效。你可以写个简单的脚本,让VPN客户端在连接成功后自动重新配置路由:
比如OpenVPN的话,在你的.ovpn配置文件里加一行:

up /etc/openvpn/up-vlan-routes.sh

然后创建/etc/openvpn/up-vlan-routes.sh脚本,内容如下(记得给脚本加执行权限chmod +x /etc/openvpn/up-vlan-routes.sh):

#!/bin/bash
# 删除旧的路由规则和路由
ip rule del from 192.168.10.0/24 table vpnroute 2>/dev/null
ip route del default table vpnroute 2>/dev/null
# 添加新的路由和规则
ip route add default via $route_vpn_gateway dev $dev table vpnroute
ip rule add from 192.168.10.0/24 table vpnroute

这样VPN每次连接都会自动更新路由配置了。

备注:内容来源于stack exchange,提问作者Aleksei

火山引擎 最新活动