我目前负责设置我们办公室的 Linux 路由器。我们一直使用两个 VLAN(一个用于数据,一个用于语音)和一个 WAN 连接。最近,我们的主要 WAN 提供商出现了问题,因此我们获得了一个更稳定的通道,专门用于 VOIP 流量的带宽大大减少。我在设置 CentOS 机器以正确进行多宿主时遇到了一些问题。这是我们当前的布局:
eth0 - 硬件 NIC
eth0.2 - 数据 WAN 提供商
eth0.3 - 语音 WAN 提供商
eth0.4 - 内部数据 LAN
eth0.5 - 内部 VoIP LAN
我目前已将所有流量路由到 eth0.2 的默认网关。我想要做的是确保用于我们的 VoIP 系统的流量被路由到 eth0.5,并且所有 VoIP 流量随后都从 eth0.3 发出。我可能把这复杂化了,但我确实需要在我们的数据设备和语音设备之间进行 VLAN 分离,而且我不确定有没有更好的方法来实现这一点。我的理解是,使用 iproute2,我需要为特定路由创建两个表,然后确保语音流量明确设置为从 eth0.3 发出。我不确定从哪里开始寻找资源,而且我对 CentOS 世界还比较陌生,所以我希望得到一些关于从哪里寻找的基本入门知识(我已经阅读了 iproute2、iptables 和 tc 的 man,但这些都有点超出我的理解范围)。提前致谢!
答案1
首先设置基本的多宿主:
echo -e "200\tuplink2" >> /etc/iproute2/rt_tables
echo "default table uplink2 via GA.TE.WA.Y2" > /etc/sysconfig/network-scripts/route-eth1
echo "from IP.AD.DR.ES table uplink2" > /etc/sysconfig/network-scripts/rule-eth1
之后您需要创建 iptables 规则来匹配和标记您的 VOIP 流量:
iptables -A PREROUTING -t mangle <some voip matching> -j MARK --set-mark 0x1
并添加此规则以实际路由标记的数据包
echo "ip rule add from all fwmark 0x1 table uplink2" > /etc/sysconfig/network-scripts/rule-eth1
并且不要忘记重新启动网络:
service network restart