使用firewall-cmd配置SIP端口转发,实现双网卡互通,内外网方式

使用firewall-cmd配置SIP端口转发,实现双网卡,内外网方式

脚本内容

这里以内网IP: 192.168.2.88

这里以外网IP: 10.3.3.3

以下是一个用于启用和停用端口转发的Shell脚本:

bash 复制代码
#!/bin/bash

# 配置变量
ZONE="public"
TARGET_IP="192.168.2.88"
PORT="5060"
PROTO_TCP="tcp"
PROTO_UDP="udp"
RANGE_PORT_START="16384"
RANGE_PORT_END="32768"

function enable_forwarding() {
    # 启用IP伪装
    firewall-cmd --permanent --zone=$ZONE --add-masquerade
    # 添加5060 TCP端口转发规则
    firewall-cmd --permanent --zone=$ZONE --add-forward-port=port=$PORT:proto=$PROTO_TCP:toaddr=$TARGET_IP
    # 添加5060 UDP端口转发规则
    firewall-cmd --permanent --zone=$ZONE --add-forward-port=port=$PORT:proto=$PROTO_UDP:toaddr=$TARGET_IP
    # 添加16384-32768 UDP端口范围转发规则
    firewall-cmd --permanent --zone=$ZONE --add-rich-rule="rule family='ipv4' forward-port port='$RANGE_PORT_START-$RANGE_PORT_END' protocol='udp' to-addr='$TARGET_IP'"
    # 重新加载防火墙配置
    firewall-cmd --reload
    # 验证配置
    firewall-cmd --zone=$ZONE --list-forward-ports
    firewall-cmd --zone=$ZONE --list-rich-rules
    echo "端口转发已启用,将5060端口的TCP和UDP流量以及16384-32768端口范围的UDP流量转发到$TARGET_IP"
}

function disable_forwarding() {
    # 移除5060 TCP端口转发规则
    firewall-cmd --permanent --zone=$ZONE --remove-forward-port=port=$PORT:proto=$PROTO_TCP:toaddr=$TARGET_IP
    # 移除5060 UDP端口转发规则
    firewall-cmd --permanent --zone=$ZONE --remove-forward-port=port=$PORT:proto=$PROTO_UDP:toaddr=$TARGET_IP
    # 移除16384-32768 UDP端口范围转发规则
    firewall-cmd --permanent --zone=$ZONE --remove-rich-rule="rule family='ipv4' forward-port port='$RANGE_PORT_START-$RANGE_PORT_END' protocol='udp' to-addr='$TARGET_IP'"
    # 移除IP伪装
    firewall-cmd --permanent --zone=$ZONE --remove-masquerade
    # 重新加载防火墙配置
    firewall-cmd --reload
    # 验证配置
    firewall-cmd --zone=$ZONE --list-forward-ports
    firewall-cmd --zone=$ZONE --list-rich-rules
    echo "端口转发已停用"
}

function list_forwarding() {
    # 列出当前的转发规则
    firewall-cmd --zone=$ZONE --list-forward-ports
    firewall-cmd --zone=$ZONE --list-rich-rules
}

case "$1" in
    enable)
        enable_forwarding
        ;;
    disable)
        disable_forwarding
        ;;
    list)
        list_forwarding
        ;;
    *)
        echo "用法: $0 {enable|disable|list}"
        echo "  enable - 启用端口转发"
        echo "  disable - 停用端口转发"
        echo "  list - 列出当前的转发规则"
        exit 1
        ;;
esac

exit 0

使用说明

启用端口转发

bash 复制代码
./forwarding.sh enable

停用端口转发

bash 复制代码
./forwarding.sh disable

列出当前的转发规则

bash 复制代码
./forwarding.sh list

注意事项

  1. 确保firewalld服务已启动 :如果firewalld未启动,规则将无法生效。

  2. 检查内核IP转发功能 :如果转发仍然无效,可能需要检查内核是否启用了IP转发功能。可以通过以下命令启用:

    bash 复制代码
    sysctl -w net.ipv4.ip_forward=1
    sysctl -p
  3. 确保目标IP地址可访问 :确认TARGET_IP在内部网络中是可访问的。

OK

这样如果你是用freeSwitch就可以去把 conf/vars.xml里的变量改一下,就可以注册使用呼叫了 :

xml 复制代码
  <X-PRE-PROCESS cmd="stun-set" data="external_rtp_ip=10.3.3.3"/> 
   <X-PRE-PROCESS cmd="stun-set" data="external_sip_ip=10.3.3.3"/>

以上配置完后,你就可以通过 originate user/1003 3503 直接接入会了

但这里默认freeswitch还不允许外网直接呼叫内网,还要把:

conf/dialplan/public.xml 以下代码前后注释去掉,那么就通了

xml 复制代码
    <extension name="check_auth" continue="true">
      <condition field="${sip_authorized}" expression="^true$" break="never">
        <anti-action application="respond" data="407"/>
      </condition>
    </extension>

    <extension name="transfer_to_default">
      <condition>
        <action application="transfer" data="${destination_number} XML default"/>
      </condition>
    </extension>
相关推荐
贾宝玉的玉宝贾24 天前
FreeSWITCH 简单图形化界面40 - 使用mod_curl模块进行http请求
python·http·voip·freeswitch·sip
狂爱代码的码农1 个月前
FreeSwitch之mod_cidlookup 和 mod_blacklist和mod_curl的抉择
freeswitch
狂爱代码的码农1 个月前
FreeSwitch 的 `mod_blacklist` 模块详解
freeswitch
狂爱代码的码农2 个月前
freeswitch在centos上编译过程
freeswitch
狂爱代码的码农2 个月前
debian12.9编译freeswitch1.10.12【默认安装】
freeswitch
Mike_Zhang3 个月前
FreeSWITCH日志功能分析及apr模拟
voip·freeswitch
贾宝玉的玉宝贾3 个月前
FreeSWITCH 简单图形化界面39 - Windows安装FreeSWITCH For IPPBX(WSL环境)
windows·voip·freeswitch·ippbx·sip测试
贾宝玉的玉宝贾3 个月前
FreeSWITCH 简单图形化界面38 - 使用uniapp中使用JsSIP进行音视频呼叫
uni-app·音视频·voip·freeswitch·ippbx·jssip
代码浪人4 个月前
docker 基于Debian镜像安装FreeSwitch1.10.7
docker·容器·debian·freeswitch