VoIP 單向音頻,僅當從一側發起呼叫時
我正在設置一些新的交換機和 VLAN,但我在使用我們預先存在的 Asterisk VoIP 設置時遇到了麻煩。
大多數電話工作正常。有些只是單向音頻。我試圖將其縮小到這個特定的測試情況:
Asterisk 伺服器是 10.0.10.10。
呼叫正常:
如果電話 10.0.2.183 呼叫 10.0.10.47 上的電話,則音頻雙向流動良好。此 Wireshark 圖中描述了此工作呼叫:
僅獲得單向音頻的呼叫:
如果相反,我交換情況並從另一部電話啟動,即電話 10.0.10.47 呼叫 10.0.2.183 上的電話,音頻僅單向流動:10.0.2.183 聽不到 10.0.10.47。此 Wireshark 圖中描述了此錯誤呼叫:
NAT?
我在網上看到很多東西表明單向音頻的典型原因是 NAT。我不認為我正在使用 NAT。我該如何檢查?這都是我區域網路內部的。
防火牆?
我花了很多時間修補 10.0.10.10 上的iptables防火牆,打開所有東西(即使只是暫時的,作為測試)。我不明白它是如何阻止這一特定流量的,同時又讓這麼多流量通過。但我謙虛地認為iptables是我無法完全馴服的野獸。這裡有什麼想法嗎?
路由?
我還懷疑可能存在路由問題,因為我正在移動伺服器並將 VLAN 彼此隔離(VoIP VLAN 除外,它是 10.0.10.*,並且應該可供所有其他 VLAN 訪問)。我不得不使用 10.0.10.10 上的路由表來讓一些流量按照我想要的方式進行:
:/home1/_locals/operator# ip route (1) 192.168.1.248/29 dev eth1 proto kernel scope link src 192.168.1.250 (2) 10.0.0.0/24 dev eth0 proto kernel scope link src 10.0.0.1 (3) 10.0.1.0/24 dev eth3 proto kernel scope link src 10.0.1.1 (4) 10.0.10.0/24 dev eth2 proto kernel scope link src 10.0.10.10 (5) 10.0.0.0/8 via 10.0.10.1 dev eth2 (6) default via 192.168.1.254 dev eth1
我已經對規則進行了編號,因此您可以根據需要對其進行評論。
有關如何解決此問題的任何想法?為什麼除了一些非常特定的 RTP 流量之外,一切都在進行?提前感謝您的幫助。
額外要求的資訊
10.0.10.0/24 網路中的 DHCP 配置:
這應該在電話上提供直接的路由表,只有 10.0.10.10 具有靜態 IP 和上面提供的更改後的路由表。
簡化的網路拓撲:
實際上,這更時髦,我在兩種拓撲之間移動的一半。例如,我有兩個 10.0.0.0 子網。但據說它們是分開的。我的問題可能源於這種時髦,但我需要準確指出缺少哪些配置才能使其正常工作。
10.0.10.1 上的路由表,即 Ubiquiti UDM
# ip route 10.0.0.0/24 dev br3 proto kernel scope link src 10.0.0.1 10.0.1.0/24 dev br5 proto kernel scope link src 10.0.1.1 10.0.2.0/24 dev br6 proto kernel scope link src 10.0.2.1 10.0.3.0/24 dev br4 proto kernel scope link src 10.0.3.1 10.0.10.0/24 dev br8 proto kernel scope link src 10.0.10.1 10.1.1.0/24 dev br0 proto kernel scope link src 10.1.1.1 10.2.2.0/24 dev br2 proto kernel scope link src 10.2.2.1 192.168.1.0/24 dev eth4 proto kernel scope link src 192.168.1.86
同一主機上的防火牆:
# iptables-save # Generated by iptables-save v1.6.1 on Fri May 7 22:04:20 2021 *nat :PREROUTING ACCEPT [30400:5954281] :INPUT ACCEPT [9407:875595] :OUTPUT ACCEPT [31671:2057109] :POSTROUTING ACCEPT [25363:1582041] :UBIOS_INPUT_JUMP - [0:0] :UBIOS_OUTPUT_JUMP - [0:0] :UBIOS_POSTROUTING_JUMP - [0:0] :UBIOS_POSTROUTING_USER_HOOK - [0:0] :UBIOS_PREROUTING_JUMP - [0:0] -A PREROUTING -j LOG --log-prefix "::PREROUTING:" -A PREROUTING -j UBIOS_PREROUTING_JUMP -A INPUT -j LOG --log-prefix "::INPUT:" -A INPUT -j UBIOS_INPUT_JUMP -A OUTPUT -j LOG --log-prefix "::OUTPUT:" -A OUTPUT -j UBIOS_OUTPUT_JUMP -A POSTROUTING -j LOG --log-prefix "::POSTROUTING:" -A POSTROUTING -j UBIOS_POSTROUTING_JUMP -A UBIOS_POSTROUTING_JUMP -j UBIOS_POSTROUTING_USER_HOOK -A UBIOS_POSTROUTING_USER_HOOK -o eth4 -m comment --comment 00000001095216660481 -j MASQUERADE COMMIT # Completed on Fri May 7 22:04:20 2021 # Generated by iptables-save v1.6.1 on Fri May 7 22:04:20 2021 *mangle :PREROUTING ACCEPT [5740653266:1557524250007] :INPUT ACCEPT [5729417629:1548285462113] :FORWARD ACCEPT [11076849:9225341544] :OUTPUT ACCEPT [5729656413:1548109771107] :POSTROUTING ACCEPT [5741373562:1557359586630] :UBIOS_FORWARD_JUMP - [0:0] :UBIOS_FORWARD_TCPMSS - [0:0] :UBIOS_FORWARD_USER_HOOK - [0:0] :UBIOS_INPUT_JUMP - [0:0] :UBIOS_INPUT_USER_HOOK - [0:0] :UBIOS_OUTPUT_JUMP - [0:0] :UBIOS_OUTPUT_USER_HOOK - [0:0] :UBIOS_POSTROUTING_JUMP - [0:0] :UBIOS_POSTROUTING_SHAPER - [0:0] :UBIOS_POSTROUTING_USER_HOOK - [0:0] :UBIOS_PREROUTING_JUMP - [0:0] :UBIOS_PREROUTING_USER_HOOK - [0:0] -A PREROUTING -j UBIOS_PREROUTING_JUMP -A INPUT -j UBIOS_INPUT_JUMP -A FORWARD -j UBIOS_FORWARD_JUMP -A OUTPUT -j UBIOS_OUTPUT_JUMP -A POSTROUTING -j UBIOS_POSTROUTING_JUMP -A UBIOS_FORWARD_JUMP -j UBIOS_FORWARD_TCPMSS -A UBIOS_POSTROUTING_JUMP -j UBIOS_POSTROUTING_SHAPER COMMIT # Completed on Fri May 7 22:04:20 2021 # Generated by iptables-save v1.6.1 on Fri May 7 22:04:20 2021 *filter :INPUT ACCEPT [3169950958:856215960609] :FORWARD ACCEPT [4175578:2973708433] :OUTPUT ACCEPT [3170232928:856108555985] :UBIOS_FORWARD_IN_USER - [0:0] :UBIOS_FORWARD_JUMP - [0:0] :UBIOS_FORWARD_OUT_USER - [0:0] :UBIOS_FORWARD_USER_HOOK - [0:0] :UBIOS_INPUT_JUMP - [0:0] :UBIOS_INPUT_USER_HOOK - [0:0] :UBIOS_IN_GEOIP - [0:0] :UBIOS_LAN_IN_USER - [0:0] :UBIOS_LAN_LOCAL_USER - [0:0] :UBIOS_LAN_OUT_USER - [0:0] :UBIOS_OUTPUT_JUMP - [0:0] :UBIOS_OUTPUT_USER_HOOK - [0:0] :UBIOS_OUT_GEOIP - [0:0] :UBIOS_WAN_IN_USER - [0:0] :UBIOS_WAN_LOCAL_USER - [0:0] :UBIOS_WAN_OUT_USER - [0:0] -A INPUT -j LOG --log-prefix "::INPUT1:" -A INPUT -j UBIOS_INPUT_JUMP -A FORWARD -j LOG --log-prefix "::INPUT2:" -A FORWARD -j UBIOS_FORWARD_JUMP -A OUTPUT -j LOG --log-prefix "::INPUT3:" -A OUTPUT -j UBIOS_OUTPUT_JUMP -A UBIOS_FORWARD_IN_USER -i eth4 -m comment --comment 00000001095216663481 -j UBIOS_WAN_IN_USER -A UBIOS_FORWARD_IN_USER -i br0 -m comment --comment 00000001095216663482 -j UBIOS_LAN_IN_USER -A UBIOS_FORWARD_IN_USER -i br2 -m comment --comment 00000001095216663483 -j UBIOS_LAN_IN_USER -A UBIOS_FORWARD_IN_USER -i br3 -m comment --comment 00000001095216663484 -j UBIOS_LAN_IN_USER -A UBIOS_FORWARD_IN_USER -i br4 -m comment --comment 00000001095216663485 -j UBIOS_LAN_IN_USER -A UBIOS_FORWARD_IN_USER -i br5 -m comment --comment 00000001095216663486 -j UBIOS_LAN_IN_USER -A UBIOS_FORWARD_IN_USER -i br6 -m comment --comment 00000001095216663487 -j UBIOS_LAN_IN_USER -A UBIOS_FORWARD_IN_USER -i br8 -m comment --comment 00000001095216663488 -j UBIOS_LAN_IN_USER -A UBIOS_FORWARD_JUMP -j UBIOS_FORWARD_USER_HOOK -A UBIOS_FORWARD_OUT_USER -o eth4 -m comment --comment 00000001095216663481 -j UBIOS_WAN_OUT_USER -A UBIOS_FORWARD_OUT_USER -o br0 -m comment --comment 00000001095216663482 -j UBIOS_LAN_OUT_USER -A UBIOS_FORWARD_OUT_USER -o br2 -m comment --comment 00000001095216663483 -j UBIOS_LAN_OUT_USER -A UBIOS_FORWARD_OUT_USER -o br3 -m comment --comment 00000001095216663484 -j UBIOS_LAN_OUT_USER -A UBIOS_FORWARD_OUT_USER -o br4 -m comment --comment 00000001095216663485 -j UBIOS_LAN_OUT_USER -A UBIOS_FORWARD_OUT_USER -o br5 -m comment --comment 00000001095216663486 -j UBIOS_LAN_OUT_USER -A UBIOS_FORWARD_OUT_USER -o br6 -m comment --comment 00000001095216663487 -j UBIOS_LAN_OUT_USER -A UBIOS_FORWARD_OUT_USER -o br8 -m comment --comment 00000001095216663488 -j UBIOS_LAN_OUT_USER -A UBIOS_FORWARD_USER_HOOK -m comment --comment 00000001095216663481 -j UBIOS_FORWARD_IN_USER -A UBIOS_FORWARD_USER_HOOK -m comment --comment 00000001095216663482 -j UBIOS_FORWARD_OUT_USER -A UBIOS_INPUT_JUMP -j UBIOS_INPUT_USER_HOOK -A UBIOS_INPUT_USER_HOOK -i eth4 -m comment --comment 00000001095216663481 -j UBIOS_WAN_LOCAL_USER -A UBIOS_INPUT_USER_HOOK -i br0 -m comment --comment 00000001095216663482 -j UBIOS_LAN_LOCAL_USER -A UBIOS_INPUT_USER_HOOK -i br2 -m comment --comment 00000001095216663483 -j UBIOS_LAN_LOCAL_USER -A UBIOS_INPUT_USER_HOOK -i br3 -m comment --comment 00000001095216663484 -j UBIOS_LAN_LOCAL_USER -A UBIOS_INPUT_USER_HOOK -i br4 -m comment --comment 00000001095216663485 -j UBIOS_LAN_LOCAL_USER -A UBIOS_INPUT_USER_HOOK -i br5 -m comment --comment 00000001095216663486 -j UBIOS_LAN_LOCAL_USER -A UBIOS_INPUT_USER_HOOK -i br6 -m comment --comment 00000001095216663487 -j UBIOS_LAN_LOCAL_USER -A UBIOS_INPUT_USER_HOOK -i br8 -m comment --comment 00000001095216663488 -j UBIOS_LAN_LOCAL_USER -A UBIOS_LAN_IN_USER -d 10.0.10.10/32 -j LOG -A UBIOS_LAN_IN_USER -d 10.0.10.10/32 -m comment --comment 00000001095216662480 -j RETURN -A UBIOS_LAN_IN_USER -s 10.0.10.10/32 -j LOG -A UBIOS_LAN_IN_USER -s 10.0.10.10/32 -m comment --comment 00000001095216662481 -j RETURN -A UBIOS_LAN_IN_USER -s 10.0.2.0/24 -m comment --comment 00000001095216666481 -j RETURN -A UBIOS_LAN_IN_USER -s 10.0.3.0/24 -m comment --comment 00000001095216666482 -j RETURN -A UBIOS_LAN_IN_USER -s 10.0.1.0/24 -m comment --comment 00000001095216666483 -j RETURN -A UBIOS_LAN_IN_USER -s 10.2.2.0/24 -m comment --comment 00000001095216666484 -j RETURN -A UBIOS_LAN_IN_USER -s 10.0.10.0/24 -m comment --comment 00000001095216666485 -j RETURN -A UBIOS_LAN_IN_USER -s 10.1.1.0/24 -m comment --comment 00000001095216666486 -j RETURN -A UBIOS_LAN_IN_USER -s 10.0.0.0/24 -m comment --comment 00000001095216666487 -j RETURN -A UBIOS_LAN_IN_USER -j LOG -A UBIOS_LAN_IN_USER -m comment --comment 00000001097364144127 -j RETURN -A UBIOS_LAN_LOCAL_USER -j LOG -A UBIOS_LAN_LOCAL_USER -m comment --comment 00000001097364144127 -j RETURN -A UBIOS_LAN_OUT_USER -d 10.0.2.0/24 -m comment --comment 00000001095216666481 -j RETURN -A UBIOS_LAN_OUT_USER -d 10.0.3.0/24 -m comment --comment 00000001095216666482 -j RETURN -A UBIOS_LAN_OUT_USER -d 10.0.1.0/24 -m comment --comment 00000001095216666483 -j RETURN -A UBIOS_LAN_OUT_USER -d 10.2.2.0/24 -m comment --comment 00000001095216666484 -j RETURN -A UBIOS_LAN_OUT_USER -d 10.0.10.0/24 -m comment --comment 00000001095216666485 -j RETURN -A UBIOS_LAN_OUT_USER -d 10.1.1.0/24 -m comment --comment 00000001095216666486 -j RETURN -A UBIOS_LAN_OUT_USER -d 10.0.0.0/24 -m comment --comment 00000001095216666487 -j RETURN -A UBIOS_LAN_OUT_USER -j LOG -A UBIOS_LAN_OUT_USER -m comment --comment 00000001097364144127 -j RETURN -A UBIOS_WAN_IN_USER -m conntrack --ctstate RELATED,ESTABLISHED -m comment --comment 00000001095216663481 -j RETURN -A UBIOS_WAN_IN_USER -m conntrack --ctstate INVALID -m comment --comment 00000001095216663482 -j DROP -A UBIOS_WAN_IN_USER -m comment --comment 00000001097364144127 -j DROP -A UBIOS_WAN_LOCAL_USER -m conntrack --ctstate RELATED,ESTABLISHED -m comment --comment 00000001095216663481 -j RETURN -A UBIOS_WAN_LOCAL_USER -m conntrack --ctstate INVALID -m comment --comment 00000001095216663482 -j DROP -A UBIOS_WAN_LOCAL_USER -m comment --comment 00000001097364144127 -j DROP -A UBIOS_WAN_OUT_USER -m comment --comment 00000001097364144127 -j RETURN COMMIT
我沒有配置任何埠轉發。我不精通 NAT,所以如果還有其他地方我應該檢查,請在評論中提出建議。
只是留下一些關於我最終如何解決這個問題的資訊……
我的理由是:如果 SIP 協商成功,正如數據包擷取所表明的那樣,那麼它確實不是路由或防火牆問題。我的意思是,它仍然可能是一個防火牆問題,如果它讓某些東西通過但不讓其他東西通過(如其他埠等)。但是因為我知道我的規則足夠通用,如果這些設備可以找到彼此的路由並互相交談,這不是我問題的原因。
通過從另一部電話開始通話,這一點變得顯而易見。RTP 流量流動、路由、通過防火牆。
所以我應該關注 SIP 問題,如何選擇 RTP 流量目的地。最終我通過認為數據包被發送到某個地方而獲得了突破,那麼它們被發送到哪裡?. 我去尋找(用
tcpdump
),我發現他們到達 UDM10.0.0.1
而不是10.0.10.10
.檢查
SIP INVITE
您在上面的 Wireshark 圖中看到的那些數據包的內容,我實際上發現了對10.0.0.1
. 為什麼?因為我的 Asterisk 伺服器認為它是10.0.0.1
和10.0.10.10
(兩個介面),但這僅適用於舊拓撲,而不適用於新拓撲。因此,儘管我已將兩部電話都配置為使用 10.0.10.10 作為其 SIP 伺服器,並且儘管它們在從一側開始呼叫時服從,並且儘管事實上從另一側開始呼叫時它們能夠服從對於 SIP 協商,一方仍然(!!!)最終將 RTP 流量發送到錯誤的地址。如何正確解決此問題:修復 Asterisk 配置。我不知道怎麼做,而且由於這是一個即將被棄用的伺服器,而且我沒有完全訪問權限,所以我決定不嘗試這條路線。
我實際上是如何修復它的:在此星號伺服器將逐步淘汰期間,我將這些特定 RTP 埠上的 UDP 流量從 重新路由
10.0.0.1
到10.0.10.10
. 這很難實現,但它確實有效!在此處閱讀:特定埠範圍的路由流量