分类目录归档:Uncategorized

Freepbx安装chan_dongle asterisk

  1. Asterisk já foi. Vamos ao chan_dongle:

https://medium.com/@renatoelysiqueira/docker-asterisk-15-dongles-99657f21b680

#
#
git clone https://github.com/wdoekes/asterisk-chan-dongle.git
cd asterisk-chan-dongle
sudo apt-get install automake libsqlite3-dev
#
./bootstrap
./configure --with-astversion=16.11.1
make
make install
cp etc/dongle.conf /etc/asterisk/ 
asterisk start 
sleep 15
asterisk -cvvvvv
#asterisk -rvvvv


#asterisk -cvvvv#能够给出asterisk加载时的详细信息。

自动重启网卡

脚本内容:vi check_network.sh 

#!/bin/bash
date="`date '+%Y-%m-%d %H:%M:%S'`"
ip="173.208.x.x"
nic="eth0"
lost_rate=`ping -c 8 -w 8 $ip | grep 'packet loss' \
| awk -F'packet loss' '{ print $1 }' \
| awk '{ print $NF }' | sed 's/%//g'`
if [ $lost_rate -eq 0 ]
then
echo "network_ok $date $ip $nic" >>/root/network_ok.log
elif [ $lost_rate -le 100 ]
then
#echo "network_error $date $ip $nic"  //输出到窗口,因为不需要所以屏蔽了
#else
echo "network_error $date $ip $nic" >>/root/network_error.log
service network restart
fi  

chmod +x check_network.sh

然后在计划任务里添加

*/3 * * * * /bin/sh /opt/check_network.sh 

重启crond任务后,然后再创建

network_ok.log

network_error.log

这两个文件来查看网卡正常和有问题是什么时候了.

#!/bin/bash

ADDR1="192.168.1.101";
ADDR2="192.168.1.5";
ACCS1=$(ping -c 1 -s 1 -w 1 $ADDR1 | grep time | awk -F ',' '{print $2}' | awk '{print $1}');
ACCS2=$(ping -c 1 -s 1 -w 1 $ADDR2 | grep time | awk -F ',' '{print $2}' | awk '{print $1}');


if [[ $ACCS1 == 0* ]];
        then
                if [[ $ACCS2 == 0* ]];
                                echo "Host $ADDR2 is unavailable" >> $HOME/blackout_time.log
                        then
                                systemctl restart network
                                echo "Netwotk restart time by script1 - $(date +%Y-%m-%d_%k:%M:%S)" >> $HOME/blackout_time.log
                                sleep 20
                        fi
        fi

ping6 -c 1 -s 1 -w 1 ipv6.google.com | grep time | awk -F ‘,’ ‘{print $2}’ | awk ‘{print $1}’

ping6 -c 8 -w 8 ipv6.google.com | grep ‘packet loss’ | awk -F’packet loss’ ‘{ print $1 }’ | awk ‘{ print $NF }’ | sed ‘s/%//g’

#!/bin/bash
date="`date '+%Y-%m-%d %H:%M:%S'`"
ip="ipv6.google.com"
nic="eth1"

show=$(ping6 -c 8 -w 8 ipv6.google.com | grep 'packet loss' | awk -F'packet loss' '{ print $1 }' | awk '{ print $NF }' | sed 's/%//g')
if [[ $show == 0* ]];
then
updateip=`/usr/local/bin/ddns.sh`
echo "network_ok $date $ip $nic" >>/root/network_ok.log
elif [[ $show == *":"* ]];
then
echo "OK" >>/root/ok.log
elif [[ $show == 1* ]];
then
#echo "network_error $date $ip $nic"
#else
echo "network_error $date $ip $nic" >>/root/network_error.log
service network restart
fi

CentOS7网卡IPv6配置文件

TYPE=Ethernet        //网络类型:Ethernet以太网
BOOTPROTO=static        //引导协议:dhcp自动获取、static静态、none不指定
NM_CONTROLLED        //是否受network程序管理
USERCTL        //普通用户是否可以控制网卡
DEFROUTE=yes        //是否启用默认路由
IPV4_FAILURE_FATAL=no        //是否启用IPV4错误检测功能
IPV6INIT=no       //是否IPV6协议
IPV6_AUTOCONF=no        //是否自动配置IPV6地址
IPV6_DEFROUTE=no        //是否启用IPV6默认路由
IPV6_PEERDNS=no        //是否通过DHCP服务器获取DNS地址(IPV6)
IPV6_PEERROUTES=no        //是否通过DHCP服务器获取网关的路由信息(IPV6)
IPV6_PRIVACY=yes         //是否隱藏真實IPv6
IPV6_FAILURE_FATAL=no        //是否启用IPV6错误检测功能

在 nginx 反向代理中使用域名

引言

所谓代理(proxy),即中间人,它代替客户端发送请求给服务器,收到响应后再转给客户端。通常意义上的代理是从用户的角度讲的,用户通过某个代理可以访问多个网站,这个代理是靠近用户的,比如某些公司可能需要限制员工所访问的网站,就会在网络出口处放置一个代理来做过滤。

所谓反向代理(reverse proxy),本质上跟代理是一回事,只不过是从服务器的角度讲的,是靠近服务器的。比如某个网站有多个服务器,提供同样的功能,一般会在网络入口处放一个代理,接收客户端的请求,再基于某种策略(比如轮转)转发给后端服务器,这样可以提高整个系统的服务能力。nginx 就是一种常见的 HTTP 协议反向代理。

反向代理指令

nginx 中常见的反向代理指令有两个:proxy_pass 和 fastcgi_pass,前者使用标准的 HTTP 协议转发,后者使用 FastCGI 协议转发,用于 PHP 等架构的环境。在我要说的这个域名问题上,它们行为是一样的,所以下面仅以 proxy_pass 为例。

一个最简单的反向代理配置如下:

server {
    location / {
        proxy_pass https://github.com;
    }
}

域名解析

其作用是将所有请求转发到 github.com。注意此处写的是域名,而非 IP。我们知道在真正发起请求前,是需要将域名解析成 IP 的,对于 github.com 来说,在我的环境上它会被解析成两个 IP:192.30.253.112 和 192.30.253.113,TTL 都是 50s,如下图:

screen shot 2017-03-25 at 17 34 29

那么使用上面这个配置,nginx 是什么时候做这件事情的呢?答案是启动的时候,只做一次,解析结果会被缓存下来,也就是完全无视 TTL,后续所有的请求转发,都是直接使用缓存下来的 IP,不会再做任何域名解析。对于 github.com 这种返回多个 IP 的情况,nginx 在转发时会自动对 IP 列表进行轮转。

可以使用 sudo tcpdump -n -i any port 53 抓包来验证这个行为。注:53 是 DNS 服务的默认端口。

那么问题来了,IP 变了怎么办?有什么办法让 nginx 自动重新解析域名吗?

配置动态域名解析

resolver 8.8.8.8;

server {
    location / {
        set $servers github.com;
        proxy_pass http://$servers;
    }
}

如上,通过使用变量($servers)的方式可以强制 nginx 遵守域名解析结果的 TTL,过期后自动重新解析。不过这种写法有个副作用,如此配置后 nginx 不会自动使用系统 /etc/resolve.conf 的配置,此时必须使用 resolver 指令手动给它指定一个 DNS 服务器。

参考资料

linux7-firewalld防火墙禁止IP或端口访问

安装firewall后(LINUX7系统一般情况下默认已安装),防火墙默认配置是只打开SSH端口的,也就是22端口,如果SSH的端口已更改成别的端口了,请切记一定在启动firewall前先修改对应服务策略中SSH的端口为你的SSH端口,文件路径:/usr/lib/firewalld/services/ssh.xml 把22改成你的远程端口号,然后再启动firewall防火墙,如果防火墙已经启动,你再想更改自己的SSH端口号,那么请先把自己要修改SSH端口号,先添加进防火墙放行端口中,否则修改SSH端口后就会导致你的SSH远程登录不上,另外启动防火墙后如果更改配置文件,请一定运行重新加载配置文件(firewall-cmd –reload)命令,重新加载配置文件;

查看firewall状态,LINUX7默认是安装并开启的;
 firewall-cmd --state
 安装
 yum install firewalld
 启动,
 systemctl start firewalld 
 设置开机启动
 systemctl enable firewalld
 关闭
 systemctl stop firewalld
 取消开机启动
 systemctl disable firewalld
 禁止IP(123.44.55.66)访问机器
 firewall-cmd --permanent --add-rich-rule='rule family=ipv4 source address="123.44.55.66" drop'
 禁止一个IP段,比如禁止116.255..
 firewall-cmd --permanent --add-rich-rule='rule family=ipv4 source address="116.255.0.0/16" drop'
 禁止一个IP段,比如禁止116.255.196.*
 firewall-cmd --permanent --add-rich-rule='rule family=ipv4 source address="116.255.196.0/24" drop'
 禁止机器IP(123.44.55.66)从防火墙中删除
 firewall-cmd --permanent --remove-rich-rule='rule family=ipv4 source address="123.44.55.66" drop'
 允许http服务(对应服务策略目录:/usr/lib/firewalld/services/)
 firewall-cmd --permanent --add-service=http
 关闭http服务(对应服务策略目录:/usr/lib/firewalld/services/)
 firewall-cmd --permanent --remove-service=http
 允许端口:3389
 firewall-cmd --permanent --add-port=3389/tcp
 允许端口:1-3389
 firewall-cmd --permanent --add-port=1-3389/tcp
 关闭放行中端口:3389
 firewall-cmd --permanent --remove-port=3389/tcp
 查看firewall的状态
 firewall-cmd --state        
 查看防火墙规则(只显示/etc/firewalld/zones/public.xml中防火墙策略,在配置策略前,我一般喜欢先CP,以后方便直接还原)
 firewall-cmd --list-all 
 查看所有的防火墙策略(即显示/etc/firewalld/zones/下的所有策略)
 firewall-cmd --list-all-zones 
 重新加载配置文件
 firewall-cmd --reload
 更改配置后一定要重新加载配置文件:
 firewall-cmd --reload