Iptables

讓 Asterisk 為另一個子網提供服務

  • May 12, 2015

我有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 ACCEPTiptables -A FORWARD -s 192.168.0.28 -j ACCEPT

請注意,上述步驟僅用於說明目的,並非最佳實踐:例如,您可以(並且應該)在 LAN 的各個網關上插入正確的路由,而不是在每個客戶端內發出特定的路由命令。

但是,這是非常基本的網路 - 如果您要這樣問,您確實需要記錄自己的路由/NAT 是什麼以及如何有效地使用它們。

引用自:https://serverfault.com/questions/690957