我有两个网络接口,eth0是PC与软电话连接所需的内部网络,eth1连接到互联网。我在centos6.5上使用iptables将Freepbx(Asterisk)的所有输出引导到eth1,但我没有成功。
规则iptables -A PREROUTING -i eth1 -t mangle -p tcp --dport 5060 -j MARK --set-mark 1
查看sip.conf。在[general]部分,有一个绑定地址或udpbindaddress。将其设置为0.0.0.0以确保星号侦听所有接口。您可以通过以下方式进行检查:
netstat -lnap | grep 5060
udp 0 0 0.0.0.0:5060 0.0.0.0:* 30822/asterisk
然后使用iptables限制对不必要接口的访问,例如(注意顺序):
iptables -A INPUT -i eth1 -p udp --dport 5060 -j ACCEPT
iptables -A INPUT -p udp --dport 5060 -j DROP
iptables -A OUTPUT -o eth1 -p udp --sport 5060 -j ACCEPT
iptables -A OUTPUT -p udp --sport 5060 -j DROP
若公共ip位于同一服务器上,则需要使用INPUT表和ACCEPT目的地。
如果它在其他主机上,则必须使用DNAT。