如何从接收标记帧的接口设置到 tun 接口的路由

如何从接收标记帧的接口设置到 tun 接口的路由

我正在配置 Raspberry Pi 以通过 VPN 路由来自特定 VLAN 的流量,但遇到了路由问题。以下是我的设置概述以及我遇到的问题:

设置:

  • 树莓派
  • 管理型交换机
  • 连接至交换机的 PC。

PC、RPI 应位于同一个 VLAN 10 中。来自 PC 的流量应通过 RPI 进行路由

RPI 设置

网络接口:

  • eth0:连接到本地网络,IP 192.168.100.27/24
  • tun0:VPN接口,设置为所有出站流量的默认路由,网关10.0.0.1
  • eth0.10:VLAN 10 接口,IP 为 192.168.10.1/24

目标:通过 tun0 接口上的 VPN 专门路由来自 VLAN 10(192.168.10.0/24 网络)的所有流量。

当前配置和问题:

我已经为 VPN 配置了拆分隧道,通过 tun0 上的 10.0.0.1 具有路由 0.0.0.0/1 和 128.0.0.0/1。

尝试配置路由以让来自 eth0.10 的流量使用 tun0 会导致错误:“Nexthop 具有无效网关。”

从 eth0.10 到 10.0.0.1 或外部 IP(如 8.8.8.8)的直接 ping 操作失败,这表明流量从 VLAN 通过 VPN 路由的方式存在问题。

具体挑战:

无法有效地通过 tun0 路由来自 192.168.10.0/24 的流量。将 10.0.0.1 设置为 eth0.10 的网关时出错,尽管 tun0 已配置此网关用于 VPN 流量。

问题:

  • 如何确保来自 VLAN 10(eth0.10)的所有流量都通过 tun0 上的 VPN 正确路由?
  • 是否需要在 iptables 或路由表中进行特定配置或调整以促进此设置?

关于如何正确配置此网络设置的任何见解或指导都将不胜感激,特别是任何可以帮助解决这些路由问题的配置片段或诊断命令。

答案1

我在一家数据管理公司实习,我们最近确实遇到了类似(但更复杂)的问题,将本地服务器路由到公共服务器。

路线你的来自 VLAN 10 的流量通过 tun0 上的 VPN,需要配置基于策略的路由。

首先使用该iptables命令将来自 VLAN 10 的数据包标记为特定的 fwmark(例如 0x10):

iptables -A PREROUTE -i eth0.10 -t mangle -j MARK --set-x 0x10

现在创建一个新的路由表(例如vpn_route),其优先级比默认表更高:

ip rule add fwmark 0x10 table vpn_route

将路由添加到vpn_route表以引导来自 VLAN 10 的流量通过 VPN:

ip route add default via 10.0.0.1 dev tun0 table vpn_route
ip route add 192.168.10.0/24 via 192.168.10.1 dev eth0.10 table vpn_route

允许来自 VLAN 10 的流量到 VPN 接口:

iptables -A FORWARD -i eth0.10 -o tun0 -j ACCEPT

现在您要做的就是检查您的路由表和 iptables 规则,以确保一切配置正确:

ip rule show
ip route show table vpn_route
iptables -nvL

通过执行这些步骤,您应该能够通过 tun0 上的 VPN 路由来自 VLAN 10 的流量。如果您遇到问题或需要进一步的帮助,请在评论中告诉我 - 我知道这是一个令人讨厌的问题 - 并且网上没有太多关于它的信息,所以我的方法有效!

相关内容