知乎专栏 |
编译安装
[root@netkiller ~]# cd /usr/local/src/ $ git clone -b master https://github.com/sippy/rtpproxy.git $ git -C rtpproxy submodule update --init --recursive $ cd rtpproxy $ ./configure $ make && make install
创建启动用户
groupadd --system rtpproxy useradd -s /sbin/nologin --system -g rtpproxy rtpproxy
配置 systemd 服务
[root@production rtpproxy]# cp rpm/rtpproxy.sysconfig /etc/sysconfig/rtpproxy [root@production rtpproxy]# ifconfig eth0 eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 inet 192.168.0.230 netmask 255.255.255.0 broadcast 192.168.0.255 inet6 fe80::f816:3eff:feda:3218 prefixlen 64 scopeid 0x20<link> ether fa:16:3e:da:32:18 txqueuelen 1000 (Ethernet) RX packets 324462878 bytes 134919677548 (125.6 GiB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 377750798 bytes 112915670453 (105.1 GiB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 [root@production rtpproxy]# vim /etc/sysconfig/rtpproxy OPTIONS="-A 121.37.215.250 -l 192.168.0.230 -s udp:127.0.0.1:7722 -m 16384 -M 32768"
rtpproxy 参数解释如下:
-A 本机外网地址 -l 本机内网侦听地址 -s 本机侦听opensips通知端口 -n 超时通知接收端口 -F 不检查是否为超级用户模式 -d 调试消息输出级别 -m rtp最小端口 -M rtp最大端口 -d log_level为日志级别,值如下 DBUG INFO WARN ERR CRIT log_facility为日志输出到哪,利用的系统日志
[root@production rtpproxy]# cp rpm/rtpproxy.socket /etc/systemd/system/sockets.target.wants/ [root@production rtpproxy]# vim /etc/systemd/system/sockets.target.wants/rtpproxy.socket ListenStream=127.0.0.1:22222
[root@production rtpproxy]# cp rpm/rtpproxy.service /etc/systemd/system/ [root@production rtpproxy]# vim /etc/systemd/system/rtpproxy.service ExecStart=/usr/bin/rtpproxy -f -p /var/run/rtpproxy/rtpproxy.pid $OPTIONS 改为 ExecStart=/usr/local/bin/rtpproxy -f -p /var/run/rtpproxy/rtpproxy.pid $OPTIONS #Type=notify 改为 Type=simple 注释 #Also=rtpproxy.socket [root@production yate]# cat /etc/systemd/system/rtpproxy.service [Unit] Description=A symmetric RTP proxy After=network.target [Service] #Type=notify Type=simple User=rtpproxy Group=rtpproxy EnvironmentFile=/etc/sysconfig/rtpproxy PIDFile=/var/run/rtpproxy/rtpproxy.pid ExecStart=/usr/local/bin/rtpproxy -f -p /var/run/rtpproxy/rtpproxy.pid $OPTIONS [Install] #Also=rtpproxy.socket WantedBy=multi-user.target
[root@production yate]# mkdir /var/run/rtpproxy [root@production yate]# chown rtpproxy:rtpproxy /var/run/rtpproxy [root@production yate]# systemctl restart rtpproxy
vim /etc/rsyslog.d/50-default.conf local5.* /var/log/rtpproxy.log
vim /etc/logrotate.d/rtpproxy /var/log/rtpproxy.log { missingok compress delaycompress notifempty copytruncate rotate 5 daily }
UNIX Socket
[Unit] Description=RTPProxy media server After=network.target Requires=network.target [Service] Type=simple PIDFile=/var/run/rtpproxy/rtpproxy.pid Environment='OPTIONS= -f -L 4096 -l 0.0.0.0 -m 10000 -M 20000 -d INFO:LOG_LOCAL5' Restart=always RestartSec=5 ExecStartPre=-/bin/mkdir /var/run/rtpproxy ExecStartPre=-/bin/chown rtpproxy:rtpproxy /var/run/rtpproxy ExecStart=/usr/local/bin/rtpproxy -p /var/run/rtpproxy/rtpproxy.pid -s unix:/var/run/rtpproxy/rtpproxy.sock \ -u rtpproxy rtpproxy -n unix:/var/run/rtpproxy/rtpproxy_timeout.sock $OPTIONS ExecStop=/usr/bin/pkill -F /var/run/rtpproxy/rtpproxy.pid ExecStopPost=-/bin/rm -R /var/run/rtpproxy StandardOutput=syslog StandardError=syslog SyslogIdentifier=rtpproxy SyslogFacility=local5 TimeoutStartSec=10 TimeoutStopSec=10 [Install] WantedBy=multi-user.target
/etc/systemd/system/sockets.target.wants/rtpproxy.socket
[Socket] ListenStream=/var/run/rtpproxy/rtpproxy.sock SocketUser=rtpproxy SocketGroup=rtpproxy SocketMode=755 ExecStartPost=-/bin/chown rtpproxy:rtpproxy /var/run/rtpproxy [Install] WantedBy=sockets.target
systemctl start rtpproxy.socket systemctl start rtpproxy.service
hostnamectl set-hostname netkiller --static cd /usr/local/src/ git clone https://github.com/sipwise/rtpengine.git cd rtpengine/daemon make && make install cd rtpengine/kernel-module make make install modprobe xt_RTPENGINE cd rtpengine/ iptables-extension make && make install cp libxt_RTPENGINE.so /usr/lib64/xtables/ rtpengine -n 127.0.0.1:7722 --interface=pub/10.10.28.131 --interface=priv/192.168.28.131 --log-facility=local3 --num-threads=32 --tos=184
echo "local1.* -/var/log/rtpengine/rtpengine.log;clean_template" >> /etc/rsyslog.conf mkdir -p /var/log/rtpengine touch /var/log/rtpengine/rtpengine.log echo "/var/log/rtpengine/rtpengine.log { daily rotate 4 missingok dateext copytruncate compress }" > /etc/logrotate.d/rtpengine
111.111.111.111 改为 WAN IP
echo "OPTIONS=\"-i 111.111.111.111 -n 127.0.0.1:2223 -m 10000 -M 60000 -L 4 --log-facility=local1 --table=8 --delete-delay=0 --timeout=60 --silent-timeout=600 --final-timeout=7200 –offer-timeout=60 --num-threads=12 --tos=184 –no-fallback\"" > /etc/sysconfig/rtpengine echo "[Unit] Description=Kernel based rtp proxy After=syslog.target After=network-online.target After=iptables.service Requires=network-online.target [Service] Type=forking PIDFile=/var/run/rtpengine.pid EnvironmentFile=-/etc/sysconfig/rtpengine ExecStart=/usr/local/bin/rtpengine -p /var/run/rtpengine.pid \$OPTIONS Restart=on-abort [Install] WantedBy=multi-user.target" > /etc/systemd/system/rtpengine.service
echo 'add 8' > /proc/rtpengine/control iptables -I INPUT -p udp -j RTPENGINE --id 8 ip6tables -I INPUT -p udp -j RTPENGINE --id 8 service iptables save service ip6tables save
启动 rtpengine.service
systemctl enable rtpengine.service systemctl start rtpengine.service systemctl status rtpengine.service
rtpengine --codecs | grep "G729"