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

news2025/4/1 10:53:42

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

脚本内容

这里以内网IP: 192.168.2.88

这里以外网IP: 10.3.3.3

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

#!/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

使用说明

启用端口转发

./forwarding.sh enable

停用端口转发

./forwarding.sh disable

列出当前的转发规则

./forwarding.sh list

注意事项

  1. 确保firewalld服务已启动:如果firewalld未启动,规则将无法生效。
  2. 检查内核IP转发功能:如果转发仍然无效,可能需要检查内核是否启用了IP转发功能。可以通过以下命令启用:
    sysctl -w net.ipv4.ip_forward=1
    sysctl -p
    
  3. 确保目标IP地址可访问:确认TARGET_IP在内部网络中是可访问的。

OK

这样,就可以去把 conf/vars.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 以下代码前后注释去掉,那么就通了

    <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>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2324262.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Linux中《进程状态--进程调度--进程切换》详细介绍

目录 进程状态Linux内核源代码怎么说运行&&阻塞&&挂起内核链表 进程状态查看Z(zombie)-僵尸进程僵尸进程危害孤儿进程 进程优先级进程切换Linux2.6内核进程O(1)调度队列 进程状态 Linux内核源代码怎么说 为了弄明白正在运⾏的进程是什么意思&#xff0c;我们…

蓝桥杯备考:多米诺骨牌

这道题要求上下方格子和之差要最小&#xff0c;其实就是算每个上下格子的差求和的最小值 这道题其实是动态规划01背包问题 我们直接按步骤做吧 step1:定义状态表示f[i][j]表示从1到i个编号的差值里选出刚好j个数的最小操作次数 step2:推导状态转移方程 如图这就是我们的状态…

AudioFlinger与AudioPoliceManager初始化流程

AF/APF启动流程 在启动AudioSeriver服务的过程中会对启动AF/APF。main_audioserver.cpp有如下代码&#xff1a; AudioFlinger::instantiate();AudioPolicyService::instantiate();AF初始化流程 1.AudioFlinger::instantiate() 1.1 AudioFlinger构造函数 void AudioFlinger:…

网路传输层UDP/TCP

一、端口号 1.端口号 1.1 五元组 端口号(port)标识了一个主机上进行通信的不同的应用程序. 如图所示, 在一个机器上运行着许多进程, 每个进程使用的应用层协议都不一样, 比如FTP, SSH, SMTP, HTTP等. 当主机接收到一个报文中, 网络层一定封装了一个目的ip标识我这台主机, …

Python大数据处理 基本的编程方法

目录 一、实验目的 二、实验要求 三、实验代码 四、实验结果 五、实验体会 一、实验目的 体会基本的python编程方法&#xff1b;学习python中的各类函数&#xff1b;了解python读取与写入文件的方法。 二、实验要求 输入2000年后的某年某月某日&#xff0c;判断这一天是…

STM32F103_LL库+寄存器学习笔记06 - 梳理串口与串行发送“Hello,World“

导言 USART是嵌入式非常重要的通讯方式&#xff0c;它的功能强大、灵活性高且用途广泛。只停留在HAL库层面上用USART只能算是入门&#xff0c;要加深对USART的理解&#xff0c;必须从寄存器层面入手。接下来&#xff0c;先从最简单的USART串行发送开始。 另外&#xff0c;在接…

硬件基础--14_电功率

电功率 电功率:指电流在单位时间内做的功(表示用电器消耗电能快慢的一个物理量)。 单位:瓦特(W)&#xff0c;简称瓦。 公式:PUI(U为电压&#xff0c;单位为V&#xff0c;i为电流&#xff0c;单位为A&#xff0c;P为电功率&#xff0c;单位为W)。 单位换算:进位为1000&#xff…

Vue.js 完全指南:从入门到精通

1. Vue.js 简介 1.1 什么是 Vue.js? Vue.js(通常简称为 Vue)是一个用于构建用户界面的渐进式 JavaScript 框架。所谓"渐进式",意味着 Vue 的设计是由浅入深的,你可以根据自己的需求选择使用它的一部分或全部功能。 Vue 最初由尤雨溪(Evan You)在 2014 年创…

在Git仓库的Readme上增加目录页

一般在编写Readme时想要增加像文章那样的目录&#xff0c;方便快速跳转&#xff0c;但是Markdown语法并没有提供这样的方法&#xff0c;但是可以通过超链接结合锚点的方式来实现&#xff0c;如下图是我之前一个项目里写的Readme&#xff1a; 例如有下面几个Readme内容&#xff…

C# SolidWorks 二次开发 -各种菜单命令增加方式

今天给大家讲一讲solidworks中各种菜单界面&#xff0c;如下图&#xff0c;大概有13处&#xff0c;也许还不完整哈。 1.CommandManager选项卡2.下拉选项卡3.菜单栏4.下级菜单5.浮动工具栏6.快捷方式工具栏7.FeatureManager工具栏区域8.MontionManager区域 ModelView?9.任务窗…

【RocketMQRocketMQ Dashbord】Springboot整合RocketMQ

【RocketMQ&&RocketMQ Dashbord】Springboot整合RocketMQ 【一】Mac安装RocketMQ和RocketMQ Dashbord【1】安装RocketMQ&#xff08;1&#xff09;下载&#xff08;2&#xff09;修改 JVM 参数&#xff08;3&#xff09;启动测试&#xff08;4&#xff09;关闭测试&…

《白帽子讲 Web 安全》之跨站请求伪造

引言 在数字化时代&#xff0c;网络已深度融入人们生活的方方面面&#xff0c;Web 应用如雨后春笋般蓬勃发展&#xff0c;为人们提供着便捷高效的服务。然而&#xff0c;繁荣的背后却潜藏着诸多安全隐患&#xff0c;跨站请求伪造&#xff08;CSRF&#xff09;便是其中极为隐蔽…

K8S学习之基础五十:k8s中pod时区问题并通过kibana查看日志

k8s中pod默认时区不是中国的&#xff0c;挂载一个时区可以解决 vi pod.yaml apiVersion: v1 kind: Pod metadata:name: counter spec:containers:- name: countimage: 172.16.80.140/busybox/busybox:latestimagePullPolicy: IfNotPresentargs: [/bin/sh,-c,i0;while true;do …

nginx代理前端请求

一&#xff0c;项目配置 我在 ip 为 192.168.31.177 的机器上使用 vue3 开发前端项目&#xff0c;项目中使用 axios 调用后端接口。 这是 axios 的配置&#xff1a; import axios from axios;const request axios.create({baseURL: http://192.168.31.177:8001,// 设置请求…

Android生态大变革,谷歌调整开源政策,核心开发不再公开

“开源”这个词曾经是Android的护城河&#xff0c;如今却成了谷歌的烫手山芋。最近谷歌宣布调整Android的开源政策&#xff0c;核心开发将全面转向私有分支。翻译成人话就是&#xff1a;以后Android的核心更新&#xff0c;不再公开共享了。 这操作不就是开源变节吗&#xff0c;…

银行分布式新核心的部署架构(两地三中心)

银行的核心系统对可用性和性能要求均非常严苛&#xff0c;所以一般都采用两地三中心部署模式。 其中&#xff1a; 同城两个主数据中心各自部署一套热备&#xff0c;平时两个中心同时在线提供服务&#xff0c;进行负载均衡假如其中一个数据中心出现异常&#xff0c;则由另外一个…

MantisBT在Windows10上安装部署详细步骤

MantisBT 是一款基于 Web 的开源缺陷跟踪系统&#xff0c;以下是在 Windows 10 上安装部署 MantisBT 的详细步骤&#xff1a; 1. 安装必要的环境 MantisBT 是一个基于 PHP 的 Web 应用程序&#xff0c;因此需要安装 Web 服务器&#xff08;如 Apache&#xff09;、PHP 和数据…

9.4分漏洞!Next.js Middleware鉴权绕过漏洞安全风险通告

今日&#xff0c;亚信安全CERT监控到安全社区研究人员发布安全通告&#xff0c;Next.js 存在一个授权绕过漏洞&#xff0c;编号为 CVE-2025-29927。攻击者可能通过发送精心构造的 x-middleware-subrequest 请求头绕过中间件安全控制&#xff0c;从而在未授权的情况下访问受保护…

OpenCV图像拼接(5)图像拼接模块的用于创建权重图函数createWeightMap()

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 cv::detail::createWeightMap 是 OpenCV 库中用于图像拼接模块的一个函数&#xff0c;主要用于创建权重图。这个权重图在图像拼接过程中扮演着重…

CTF类题目复现总结-[MRCTF2020]ezmisc 1

一、题目地址 https://buuoj.cn/challenges#[MRCTF2020]ezmisc二、复现步骤 1、下载附件&#xff0c;得到一张图片&#xff1b; 2、利用010 Editor打开图片&#xff0c;提示CRC值校验错误&#xff0c;flag.png应该是宽和高被修改了&#xff0c;导致flag被隐藏掉&#xff1b;…