Home | 简体中文 | 繁体中文 | 杂文 | Github | 知乎专栏 | Facebook | Linkedin | Youtube | 打赏(Donations) | About
知乎专栏

168.8. RTP

168.8.1. RTPProxy

编译安装

		
[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		
		
		

168.8.2. rtpengine

		
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"