我正在配置 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 的流量。如果您遇到问题或需要进一步的帮助,请在评论中告诉我 - 我知道这是一个令人讨厌的问题 - 并且网上没有太多关于它的信息,所以我的方法有效!