讓 Asterisk 為另一個子網提供服務
我有Linux Ubuntu 12.04伺服器。它有兩個子網 - 192.168.0.1(eth0)和192.168.1.1 (eth1)。
有一個Asterisk 伺服器(IP PBX)連接到第一個子網,假設它的 IP 地址為192.168.0.28。
我需要來自 192.168.1.x子網的 SIP 客戶端能夠連接到該 Astersik 伺服器。
我的想法是讓所有SIP 客戶端連接到網關伺服器(位於兩個子網中的一個,即位於其子網的192.168.1.1的那個)並將所有 UDP 5060連接埠轉發到192.168.0.28( IP BPX)。
這是我的想法:
echo "1" > /proc/sys/net/ipv4/ip_forward iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT iptables -A FORWARD -i eth1 -d 192.168.0.28 -p udp --dport 5060 -m state \ --state NEW -j ACCEPT iptables -t nat -A PREROUTING -i eth1 -p udp --dport 5060 -j DNAT \ --to-destination 192.168.0.28 iptables -t nat -A POSTROUTING -p tcp --dport 5060 -d 192.168.0.28 \ -o eth0 -j MASQUERADE
但是來自 192.168.1.x 的 SIP 客戶端(軟電話)無法註冊。我試圖埠轉發http埠只是為了測試它:
iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT iptables -A FORWARD -i eth1 -d 192.168.0.28 -p tcp --dport 80 -m state \ --state NEW -j ACCEPT iptables -t nat -A PREROUTING -i eth1 -p tcp --dport 80 -j DNAT \ --to-destination 192.168.0.28:80 iptables -t nat -A POSTROUTING -p tcp --dport 80 -d 192.168.0.28 \ -o eth0 -j MASQUERADE
這很好用,但是第一個帶有 UDP 轉發的我無法讓客戶端在 Asterisk 伺服器上註冊。
升級版:
正如commnets中所建議的那樣,我需要使用
route
而不是iptables
所以我猜該命令將是這樣的:route add -net 192.168.1.0 netmask 255.255.255.0 gw 192.168.0.28 dev eth0
但這並沒有真正奏效。另外,我不想將整個 IP PBX 主機暴露給 192.168.1.x 網路,只有 5060 埠用於 SIP 客戶端(軟電話)。
為什麼要使用 NAT?在這種情況下,您可以直接在兩個 LAN 之間路由,根本不需要埠轉發。
無論如何,如果您真的想使用 NAT,如果您的客戶端是標準 SIP 客戶端,那麼埠 5060 就足夠了。如果它們是混合/自定義協議客戶端(例如:Cisco H323 和/或 SCTP/SCCP 實施),您將需要打開其他埠範圍。
**編輯:**您添加的路線是錯誤的。讓我來說明您的網路設置:
區域網路 192.168.0.x/24 區域網路 192.168.1.x/24 ---------------- ---------------- | | | | | | | | | | | | | | | | | | | | 集團電話 | Ubuntu 伺服器 | SIP客戶端 192.168.0.28 192.168.0.1 192.168.1.1 例如:192.168.1.10 | | |________________|
根據您的描述,Ubuntu 伺服器是一個多宿主主機 - 它在 LAN 192.168.0.x 上有一個介面,在 LAN 192.168.1.x 上有另一個介面。為了在網路之間進行路由,您需要向客戶端宣布Ubuntu 機器充當另一個 LAN 的網關。假設所有涉及的機器都是 Linux 客戶端,您需要:
- 在您發出的每台 192.168.0.x 機器上
route add -net 192.168.1.0/24 gw 192.168.0.1
- 在您發出的每台 192.168.1.x 機器上
route add -net 192.168.0.x/24 gw 192.168.1.1
- 在 Ubuntu 伺服器上,您可以設置防火牆規則以僅轉發/路由 192.168.0.28 發出的數據包
iptables -A FORWARD -d 192.168.0.28 -j ACCEPT
和iptables -A FORWARD -s 192.168.0.28 -j ACCEPT
請注意,上述步驟僅用於說明目的,並非最佳實踐:例如,您可以(並且應該)在 LAN 的各個網關上插入正確的路由,而不是在每個客戶端內發出特定的路由命令。
但是,這是非常基本的網路 - 如果您要這樣問,您確實需要記錄自己的路由/NAT 是什麼以及如何有效地使用它們。