我有一个 FreePBX 服务器,需要添加第二个真实世界接口。如图所示,eth0 和 eth1 都有可路由的 IP 地址。根据快速谷歌搜索,设置第二个地址相对简单:
https://www.thomas-krenn.com/en/wiki/Two_Default_Gateways_on_One_System
编辑 /etc/iproute2/rt_tables 并添加条目“200 秒”
为名为“second”的表添加了路由:
ip route add ip.subnet.on.eth1/27 dev eth1 src ip.address.on.eth1 table second ip route add default via router.ip.for.eth1 dev eth1 table second
(其中“ip.subnet.on.eth1”“ip.address.on.eth1”和“router.ip.for.eth1”是所需的地址)
添加了通过源路由通过正确接口发送流量的规则:
ip rule add from ip.address.on.eth1/32 table second ip rule add to ip.address.on.eth1/32 table second
这给了我一些部分的成功:我现在可以路由到服务器的第二个 IP 地址,这样它就会立即响应正常请求(即 icmp、sshd、apache 等)。
但它完全无法与 Asterisk 所需的 udp 服务配合使用。任何客户端都可以正常连接到 eth0 上的“正常”IP 地址。但是尝试连接到 eth1 的 ip 时,客户端会超时。
我什至尝试将服务器设置为接受 sip 的 tcp,然后允许我登录;但最终没有成功,因为rtp(语音)流量也是udp。
现在,类似的设置确实可以工作,例如当第二个 eth1 设备不需要全局可路由时,即。对于内部 LAN。因此,如果 pbx 在 eth0 上有一个真实 IP,在 eth1 上有一个私有 IP,那么它只使用一个统一的路由表,一切都会正常工作。
我可以明确确认没有防火墙阻止进出 sip 服务器的流量。事实上,我什至有一组明确的条目,允许所有 tcp 和 udp 流量发送到我的 sip 客户端子网,绕过所有fail2ban 和其他恶作剧。
附言。如果我没有迂腐地表达清楚的话,最终目标是让 Freepbx/asterisk 在 eth0 和 eth1 两个接口上运行,这两个接口都有完全可路由的真实世界 IP 地址。就目前情况而言,只有 eth0 可用