![無法讓 FreePBX 使用雙 NIC 進行路由](https://rvso.com/image/192232/%E7%84%A1%E6%B3%95%E8%AE%93%20FreePBX%20%E4%BD%BF%E7%94%A8%E9%9B%99%20NIC%20%E9%80%B2%E8%A1%8C%E8%B7%AF%E7%94%B1.png)
我有一個 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 可用