利用PowerDNS架设自己的解析服务器

之前白嫖的DNS服务器因为种种原因不能再继续利用了(虽然解析还在)
考虑到要用GeoIP+低于5分钟的缓存,又不想花钱买服务,那么就只有自建了

另外:PowerDNS不支持CNAMEX,对此有需求的人需要考虑别的解决方案(之前白嫖的DNS服务是支持的,CNAMEX可以在DNS层通过调整比例的方式,变相的来实现负载均衡,这在给一个地区部署多台CDN,或者利用多个CDN商家的服务时相当方便,可以从带宽、性能、流量价格的角度来直接调整比例)

GUI选择了PowerDNS-Admin,主要是因为好看,没别的理由

使用的环境和所需的各种:
Debian 10
MariaDB
GeoIP
PowerDNS
pdns-backend-mysql
pdns-backend-geoip
PowerDNS-Admin GUI
Nginx
Git

参考资料:官方文档 官方文档-Backend支持列表 久しぶりにPowerDNSをさわる PowerDNS-Admin GitHub PowerDNS-Admin – Roll Your Own Network

1、安装pdns+配置数据库

apt-get install mariadb-server pdns-server pdns-backend-geoip pdns-backend-mysql

已经安装过mariadb的话从里面删掉mariadb即可
然后做一下数据库的安全设置、建表和创建一个用户给pdns用

mysql_secure_installation

Change the root password? [Y/n] y
Remove anonymous users? [Y/n] y
Disallow root login remotely? [Y/n] y
Remove test database and access to it? [Y/n] y
Reload privilege tables now? [Y/n] y

mysql -u root -p

create database pdns character set utf8 collate utf8_bin;
grant all privileges on pdns.* to [email protected] identified by 'YOURPASSWORD';
FLUSH PRIVILEGES;
quit;

安全设置上,大致就是修改root账户密码,删除匿名用户,禁用root远程登录,删除测试库,重新加载表等,详细的解释会在每条确认的上面有输出。

测试一下登陆,顺便把表建立一下。
PS:务必去从官方文档复制,版本更新后有可能所需要的表也会更新

mysql -u pdns -p

use pdns;

CREATE TABLE domains (
  id                    INT AUTO_INCREMENT,
  name                  VARCHAR(255) NOT NULL,
  master                VARCHAR(128) DEFAULT NULL,
  last_check            INT DEFAULT NULL,
  type                  VARCHAR(6) NOT NULL,
  notified_serial       INT DEFAULT NULL,
  account               VARCHAR(40) CHARACTER SET 'utf8' DEFAULT NULL,
  PRIMARY KEY (id)
) Engine=InnoDB CHARACTER SET 'latin1';

CREATE UNIQUE INDEX name_index ON domains(name);

CREATE TABLE records (
  id                    BIGINT AUTO_INCREMENT,
  domain_id             INT DEFAULT NULL,
  name                  VARCHAR(255) DEFAULT NULL,
  type                  VARCHAR(10) DEFAULT NULL,
  content               VARCHAR(64000) DEFAULT NULL,
  ttl                   INT DEFAULT NULL,
  prio                  INT DEFAULT NULL,
  change_date           INT DEFAULT NULL,
  disabled              TINYINT(1) DEFAULT 0,
  ordername             VARCHAR(255) BINARY DEFAULT NULL,
  auth                  TINYINT(1) DEFAULT 1,
  PRIMARY KEY (id)
) Engine=InnoDB CHARACTER SET 'latin1';

CREATE INDEX nametype_index ON records(name,type);

CREATE INDEX domain_id ON records(domain_id);

CREATE INDEX ordername ON records (ordername);

CREATE TABLE supermasters (
  ip                    VARCHAR(64) NOT NULL,
  nameserver            VARCHAR(255) NOT NULL,
  account               VARCHAR(40) CHARACTER SET 'utf8' NOT NULL,
  PRIMARY KEY (ip, nameserver)
) Engine=InnoDB CHARACTER SET 'latin1';

CREATE TABLE comments (
  id                    INT AUTO_INCREMENT,
  domain_id             INT NOT NULL,
  name                  VARCHAR(255) NOT NULL,
  type                  VARCHAR(10) NOT NULL,
  modified_at           INT NOT NULL,
  account               VARCHAR(40) CHARACTER SET 'utf8' DEFAULT NULL,
  comment               TEXT CHARACTER SET 'utf8' NOT NULL,
  PRIMARY KEY (id)
) Engine=InnoDB CHARACTER SET 'latin1';

CREATE INDEX comments_name_type_idx ON comments (name, type);

CREATE INDEX comments_order_idx ON comments (domain_id, modified_at);

CREATE TABLE domainmetadata (
  id                    INT AUTO_INCREMENT,
  domain_id             INT NOT NULL,
  kind                  VARCHAR(32),
  content               TEXT,
  PRIMARY KEY (id)
) Engine=InnoDB CHARACTER SET 'latin1';

CREATE INDEX domainmetadata_idx ON domainmetadata (domain_id, kind);

CREATE TABLE cryptokeys (
  id                    INT AUTO_INCREMENT,
  domain_id             INT NOT NULL,
  flags                 INT NOT NULL,
  active                BOOL,
  content               TEXT,
  PRIMARY KEY(id)
) Engine=InnoDB CHARACTER SET 'latin1';

CREATE INDEX domainidindex ON cryptokeys(domain_id);

CREATE TABLE tsigkeys (
  id                    INT AUTO_INCREMENT,
  name                  VARCHAR(255),
  algorithm             VARCHAR(50),
  secret                VARCHAR(255),
  PRIMARY KEY (id)
) Engine=InnoDB CHARACTER SET 'latin1';

CREATE UNIQUE INDEX namealgoindex ON tsigkeys(name, algorithm);

quit;

然后改配置文件,把数据库相关的内容写进去

vim /etc/powerdns/pdns.conf

launch=gmysql
gmysql-host=127.0.0.1
gmysql-user=pdns
gmysql-dbname=pdns
gmysql-password=YOURPASSWORD
gmysql-dnssec=yes

保存退出后,执行一次pdns来初始化一下,在这之前需要先把pdns关闭(装好后会默认以服务的形式启动了)

systemctl stop pdns.service

pdns_server

只要没有报错的话Ctrl+C退出即可,然后再启动服务即可

2、安装并配置PowerDNS-Admin

PowerDNS-Admin目前为止只支持Python 2,根据公开的资料来看有支持Python 3的计划。
以及PowerDNS-Admin使用API和PDNS通讯,所以两边都需要配置一番。
另外,他还需要单独用数据库,所以也需要给他配置一个账号和表。

先把PowerDNS-Admin拉下来

git clone https://github.com/ngoduykhanh/PowerDNS-Admin.git /opt/web/powerdns-admin

准备一个api来给pdns-admin用

vim /etc/powerdns/pdns.conf

api=yes
api=key=YOURAPIKEY
webserver=yes

systemctl restart pdns.service

curl -v -H 'X-API-Key: YOURAPIKEY' http://127.0.0.1:8081/api/v1/servers/localhost | jq .

准备一个数据库的用户
在参考其他教程的时候发现有一部分有提及需要自己建表,然而参照和测试后确认目前的版本只需要写好数据库账号密码到配置文件里,之后执行一下即可自动初始化,所以这里只需要配置用户和库。

mysql -u root -p

CREATE DATABASE pdnsadmin character set utf8 collate utf8_bin;
GRANT ALL PRIVILEGES ON pdnsadmin.* TO 'pdnsadmin'@'localhost' IDENTIFIED BY 'YOURPASSWORD';
FLUSH PRIVILEGES;
quit;

然后准备一下依赖
从debian9开始,libmysqlclient-dev变成了default-libmysqlclient-dev,这里也跟着改变

apt-get install python3-dev default-libmysqlclient-dev libsasl2-dev libldap2-dev libssl-dev libxml2-dev libxslt1-dev libxmlsec1-dev libffi-dev pkg-config apt-transport-https virtualenv build-essential

curl -sL https://deb.nodesource.com/setup_10.x | bash -
apt-get install nodejs

curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | apt-key add -
echo "deb https://dl.yarnpkg.com/debian/ stable main" | tee /etc/apt/sources.list.d/yarn.list
apt-get update
apt-get install yarn

需要设置一下config,复制一下模版然后修改内容

cd /opt/web/powerdns-admin

cp config_template.py config.py

vim config.py

# BASIC APP CONFIG
SECRET_KEY = 'YOURSECRETKEY'

# DATABASE CONFIG
SQLA_DB_USER = 'pdnsadmin'
SQLA_DB_PASSWORD = 'YOURPASSWD'
SQLA_DB_HOST = '127.0.0.1'
SQLA_DB_PORT = 3306
SQLA_DB_NAME = 'pdnsadmin'

# POWERDNS CONFIG
PDNS_STATS_URL = 'http://127.0.0.1:8081/'
PDNS_API_KEY = 'YOURAPIKEY'
PDNS_VERSION = 'YOURPDNSVER'

保存退出,然后继续

virtualenv -p python3 flask
source ./flask/bin/activate

这时候最左侧会多出来一个“(flask)”,继续操作

pip install -r requirements.txt
pip install python-dotenv

flask db upgrade
yarn install --pure-lockfile
flask assets build

./run.py

如果一切正常的话那么run之后就会自动启动pdns-admin,可以通过http://127.0.0.1:8081/来访问。
进入后需要手动创建一个账户,第一个账户默认为管理员,之后跟随者GUI的指示进行操作即可。

3、配置systemctl和nginx

官方文档在这啦,懒的人复制粘贴就可以了……(路径要和你实际放着的位置统一)
如果你懒得点开的话就复制下面的吧(我帮你复制到这里了)

vim /etc/systemd/system/powerdns-admin.service


[Unit]
Description=PowerDNS-Admin
After=network.target

[Service]
User=root
Group=root
WorkingDirectory=/opt/web/powerdns-admin
ExecStart=/opt/web/powerdns-admin/flask/bin/gunicorn --workers 2 --bind unix:/opt/web/powerdns-admin/powerdns-admin.sock app:app

[Install]
WantedBy=multi-user.target


systemctl daemon-reload
systemctl enable powerdns-admin
systemctl start powerdns-admin

nginx的官方文档部分(只复制了使用SSL证书的参考)
这里使用了sock,路径如果有变动的话要改的地方比较多,要注意

server {
        listen                  80 default_server;
        server_name             "";
        return 301 https://$http_host$request_uri;
}

server {
        listen                  443 ssl http2 default_server;
        server_name             _;
        index                   index.html index.htm;
        error_log               /var/log/nginx/error_powerdnsadmin.log error;
        access_log              off;

        ssl_certificate                 path_to_your_fullchain_or_cert;
        ssl_certificate_key             path_to_your_key;
        ssl_dhparam                     path_to_your_dhparam.pem;
        ssl_prefer_server_ciphers       on;
        ssl_ciphers                     'EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH';
        ssl_session_cache               shared:SSL:10m;

        client_max_body_size            10m;
        client_body_buffer_size         128k;
        proxy_redirect                  off;
        proxy_connect_timeout           90;
        proxy_send_timeout              90;
        proxy_read_timeout              90;
        proxy_buffers                   32 4k;
        proxy_buffer_size               8k;
        proxy_set_header                Host $http_host;
        proxy_set_header                X-Scheme $scheme;
        proxy_set_header                X-Real-IP $remote_addr;
        proxy_set_header                X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_headers_hash_bucket_size  64;

        location ~ ^/static/  {
                include         mime.types;
                root            /opt/web/powerdns-admin/app;
                location        ~* \.(jpg|jpeg|png|gif)$ { expires 365d; }
                location        ~* ^.+.(css|js)$ { expires 7d; }
        }

        location ~ ^/upload/  {
                include         mime.types;
                root            /opt/web/powerdns-admin;
                location        ~* \.(jpg|jpeg|png|gif)$ { expires 365d; }
                location        ~* ^.+.(css|js)$ { expires 7d; }
        }

        location / {
                proxy_pass              http://unix:/opt/web/powerdns-admin/powerdns-admin.sock;
                proxy_read_timeout      120;
                proxy_connect_timeout   120;
                proxy_redirect          http:// $scheme://;
        }
}

4、安装并配置GeoIP(未写完,先挖个坑)

访问GeoIP2并下载免费版数据库

wget https://geolite.maxmind.com/download/geoip/database/GeoLite2-Country.tar.gz

tar -xzvf GeoLite2-Country.tar.gz

mkdir -p /usr/share/GeoIP

mv GeoLite2-Country.mmdb /usr/share/GeoIP/

然后写一下配置文件

vim /etc/powerdns/pdns.d/geoip.conf

launch=geoip
geoip-database-files=/usr/share/GeoIP/GeoLite2-Country.mmdb
geoip-database-cache=memory
geoip-zones-file=/share/zone.yaml

Syncthing部署相关

1、下载和部署

这里推荐去官网下载而不是走apt-get,官网获取的版本可以开启自动更新,其他功能都一样

wget https://github.com/syncthing/syncthing/releases/download/v1.1.3/syncthing-linux-amd64-v1.1.3.tar.gz

tar -xzvf syncthing-linux-amd64-v1.1.3.tar.gz

mv syncthing-linux-amd64-v1.1.3/ /usr/local/bin

ln -s /usr/local/bin/syncthing/syncthing /usr/bin/syncthing

syncthing
#执行一下来创建配置文件

执行后可以直接关闭,然后对配置文件动手

vim ~/.config/syncthing/config.xml

#由于我是公网服务器上运行,所以寻找下面这一段

<address>127.0.0.1:8384</address>

#修改为

<address>0.0.0.0:8384</address>

#本机直接访问的不需要修改

启动后可以修改登陆密码等,页面支持中文所以GUI操作不再做说明

2、开机自动启动

syncthing的程序里提供了一个现成的模版,直接复制后启动即可使用

cp /usr/local/bin/syncthing/etc/linux-systemd/system/[email protected] /etc/systemd/system/

systemctl enable [email protected]

systemctl start [email protected]

#这里的myuser请设置为本机存在的账户,可以是root但官方不推荐

3、用nginx进行反代来访问

可以利用nginx反代来加证书、ip白名单等,下面的nginx配置供参考

server {
    listen 443 ssl http2;
    listen [::]:443 ssl http2;
    server_name syncthing.domain.com;

    ssl_certificate /var/www/cert/domain.com.crt;
    ssl_certificate_key /var/www/cert/domain.com.key;

    location / {
        proxy_pass http://127.0.0.1:8384;
    }
}

另外,设置好反代后,之前第2步中设置的监听全部端口的地方记得改回127.0.0.1然后重启服务。

zabbix+nginx+php7.0+debian9的部署方法

RT 官方建议apache2,然而并不想用apache2
数据库保持使用MySql,量小暂时没有PostgreSQL的需求
依旧是root账号,所以不带sudo

1、安装基础
这里比较偷懒就直接apt装nginx了,有版本需求自行编译,apt装好的nginx config在/etc/nginx下面,请注意

apt-get update
apt-get install nginx php7.0-fpm php7.0-mysql mysql-server

装完先放着

2、安装zabbix-server和anget(可选)

wget http://repo.zabbix.com/zabbix/3.4/debian/pool/main/z/zabbix-release/zabbix-release_3.4-1%2Bstretch_all.deb
dpkg -i zabbix-release_3.4-1+stretch_all.deb
apt-get update
apt-get install zabbix-server-mysql zabbix-frontend-php zabbix-agent

安装完后可能会把apache2也给你装上了,删了删了

systemctl stop apache2.service
apt-get remove apache2
apt autoremove

然后继续放着

3、配置数据库

mysql -uroot -p
create database zabbix character set utf8 collate utf8_bin;
grant all privileges on zabbix.* to [email protected] identified by '***YOURPASSWORD***';
quit;
cd /usr/share/doc/zabbix-server-mysql
zcat create.sql.gz | mysql -uzabbix -p zabbix

配置zabbix-server用的数据库,然后导入初始架构数据
mysql的root的密码默认跟随系统的root密码,而不再是安装的时候另外设置了

4、配置nginx和php-fpm

vim /etc/nginx/sites-enabled/zabbix.conf

server {
       listen 80;
        server_name  localhost;
        root   /usr/share/zabbix;


        location / {
                index  index.html index.htm index.php;
        }
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
                root   /usr/share/nginx/html;
        }
        location ~ \.php$ {
                include snippets/fastcgi-php.conf;
                fastcgi_pass unix:/run/php/php7.0-fpm.sock;
                include        fastcgi_params;
        }
}

php-fpm在apt安装的情况下默认就用的sock,所以不用改动,如果是其他安装方法的话请自行检查和修改

vim /etc/php/7.0/fpm/php.ini

max_execution_time = 300
max_input_time = 600
post_max_size = 32M
date.timezone = Asia/Tokyo

以上4条请用搜索功能寻找并修改

5、配置zabbix-server和agent

vim /etc/zabbix/zabbix_server.conf

DBHost=
DBName=
DBPassword=

以上3条请自行搜索并修改

vim /etc/zabbix/zabbix_agentd.conf

Server=
Hostname=

以上2条请自行搜索并修改

6、开机自动启动和启动服务并访问

systemctl enable nginx
systemctl enable php7.0-fpm
systemctl enable mysql
systemctl enable zabbix-server
systemctl enable zabbix-agent
systemctl restart nginx
systemctl restart php7.0-fpm
systemctl restart mysql
systemctl restart zabbix-server
systemctl restart zabbix-agent

写的比较糙,有些可能是需要restart

然后打开浏览器,http://yourdomain/setup.php 进入zabbix的配置页面,剩下的跟着流程走一遍即可~

PS:初始账号密码是 Admin和zabbix(账号注意大小写)

参考资料:
从部署包安装 Zabbix Documentation 3.4
ubuntu16.04 + ZABBIX + nginx & php-fpm

Debian9下部署OpenLDAP+slapd+phpLDAPadmin(nginx+php7环境)

RT 需要研究一下这个东西所以就装一下

1、改计算机名
debian下安装的时候默认会取机器名作为domain name,所以为了方便我们先改一下机器名称为所需的
在hosts里也可以添加一下机器名称,以及对应的外部ip地址到机器名称上

vim /etc/hostname

vim /etc/hosts

2、安装组件

apt-get install slapd ldap-utils

安装完成后去改一下配置文件,添加base和uri两个数值到文件的底部即可

vim /etc/ldap/ldap.conf

BASE     dc=domain,dc=com
URI     ldap://1.1.1.1:389

保存后我们再对slapd进行配置

dpkg-reconfigure slapd

依次问的问题是:
是否忽略OpenLDAP的设置
DNS Domain name (DN)
Organization name (ON)
管理员密码
重复密码
选择数据库
slapd被删除时是否要删除数据库
移走老数据库
(可能会有)是否兼容LDAPv2协议

全部配置完毕后可以输入slapcat查看一下输出信息来确认是否正确

3、安装nginx和php7.0
nginx可参照这里:编译安装带有RTMP模块的nginx
或者直接apt-get安装也可(如果没啥特殊需求的话)

apt-get install nginx

php就比较简单了,直接安装即可

apt-get install php7.0-fpm

4、安装phpLDAPadmin

查了一下本来是可以apt安装的,但是因为某些原因debian9的库里剔除了这个包,所以我们需要手动下载,这里先留一下apt的安装方式,然后下面跟着手动安装的方式

apt-get install phpldapadmin

访问http://ftp.jp.debian.org/debian/pool/main/p/phpldapadmin/来查看最新版本,目前是1.2.2-6.1
	
wget http://ftp.jp.debian.org/debian/pool/main/p/phpldapadmin/phpldapadmin_1.2.2-6.1_all.deb

dpkg -i phpldapadmin_1.2.2-6.1_all.deb

5、配置phpLDAPadmin

修改配置文件:

vim /etc/phpldapadmin/config.php

(1) $servers->setValue('server'. 'host', '127.0.0.1')
#修改为某个内网可访问的IP地址

(2) $servers->setValue('server'. 'base', array('dc=example,dc=com')) 
#修改为baseDN

(3) $servers->setValue('login', 'bind_id', 'cn=admin,dc=example,dc=com')
#修改为baseDN下的admin

(4) $config->custom->appearance['hide_template_warning'] = false 
#false修改为true(这一行可能是注释着的,记得删掉开头的注释)

6、写nginx和php配置文件

vim /etc/php/7.0/fpm/php-fpm.conf

结尾加上:
listen = 127.0.0.1:9000
listen.allowed_clients = 127.0.0.1
listen.backlog = -1

可以选择使用套接字来降低TCP的利用:
listen = /run/php/php7.0-fpm.sock


vim /etc/nginx/nginx.conf

server {
server_name ldap.yourdomain.com 1.1.1.1;
listen 80;

# document root
root /usr/share/nginx/html/;
index index.php index.html index.htm;
#
#  # application: phpldapadmin
  location /phpldapadmin {
  alias /usr/share/phpldapadmin/htdocs;
  index index.php index.html index.htm;
  }
  location ~ ^/phpldapadmin/.*\.php$ {
  root /usr/share;
  if ($request_filename !~* htdocs) {
  rewrite ^/phpldapadmin(/.*)?$ /phpldapadmin/htdocs$1;
  }
# fastcgi_pass unix:/run/php/php7.0-fpm.sock; #这里可选使用套接字,需要配合php-fpm一起修改
  fastcgi_pass 127.0.0.1:9000;
  fastcgi_index index.php;
  fastcgi_param SCRIPT_FILENAME $request_filename;
  include fastcgi_params;
  }

#  # logging
  error_log /var/log/nginx/phpldapadmin.error.log;
  access_log /var/log/nginx/phpldapadmin.access.log;
  }


systemctl restart php7.0-fpm.service
systemctl restart nginx.service

一切正常的话应该就可以通过浏览器访问了,地址是:http://yourdomain.com/phpldapadmin/

7、检查和添加数据
可以通过ldapseach来检查结构,例如

ldapsearch -x -LLL -H ldap:/// -b dc=yourdomain,dc=com
ldapsearch -x -LLL -h 1.1.1.1 -p 389 -b dc=yourdomain,dc=com

创建一个新的结构,保存成.ldif文件并利用ldapadd命令将数据添加入数据库

vim structure.ldif

dn: ou=office,dc=yourdomain,dc=com
objectClass: organizationalUnit
ou: office

ldapadd -x -D cn=admin,dc=yourdomain,dc=com -W -f structure.ldif

会提示输入密码,导入完成后可以查询来验证一下

ldapsearch -x -LLL -h 1.1.1.1 -p 389 -b dc=yourdomain,dc=com objectClass=*

参考:
Ubuntu下OpenLDAP的安装及配置
https://linoxide.com/linux-how-to/install-openldap-phpldapadmin-nginx-server/
完整版的OpenLDAP搭建全过程

debian9下部署Asterisk

社内需要使用这个东西来升级一下电话系统,所以研究了一下
目前只设定到了内线部分,外线目前还未测试

依旧是root下设置,不带sudo命令

1、安装Asterisk
已经很简单了,apt-get即可满足,但是会安装很多依赖,约330M,需要一点时间
另外,这里面有一个不小的坑:如果考虑复用服务器的话,强烈建议先安装openssl,asterisk需要的其中一个依赖是libssl1.1,这个包含在openssl里

apt-get install openssl
apt-get install asterisk

2、配置Asterisk
先跳到配置文件夹并备份默认配置,我们自己写即可

cd /etc/asterisk
mv sip.conf sip.conf.bak
mv extensions.conf extensions.conf.bak

然后我们自己写一个简单的配置

vim sip.conf

[general]
context=default
port=5060
bindaddr=0.0.0.0
;nat=yes

[101]
type=friend
defaultuser=101
secret=password1
host=dynamic
canreinvite=no

[102]
type=friend
defaultuser=102
secret=password2
host=dynamic
canreinvite=no

这里user直接以内线编号为账号方便记忆,而且考虑到最后设置ip话机的时候是直接在座位上配置所需的内线,所以也好配置

vim extensions.conf

[default]

exten => 101,1,Dial(SIP/101,30,r)
exten => 101,2,Hangup()

exten => 102,1,Dial(SIP/102,30,r)
exten => 102,2,Hangup()

这里是设置被呼叫到后的规则,可以设置等待时间、呼叫时播放的声音等,也可以用一些标志来指代部分或者全体,例如:

exten => _10X,1,Dial(SIP/${EXTEN},30,r)
exten => _10X,2,Hangup()

这里指100~109之间的所有号码,同理,改成1XX的话则是指100~199之间的所有号码

另附:Asterisk的命令行管理相关

进入控制台:asterisk -crvvv
查看已登录用户:sip show peers
查看详细信息:sip show ****
重新加载sip:sip reload

参考:
UbuntuでAsteriskを構築し「ブラステル」を登録する(CuBox-i2使用)
もうハマらない!Twilio × Asteriskで普通の外線電話を作る
Asterisk chinese voicemail intro
Asterisk multi-language
asterisk 之 IVR 设置中英文语言选择 (dialplan)
Asterisk基本設定ガイド!

debian 9 安装GNOME&VNC环境

RT 为了方便划水工作,需要装一个GUI和一个VNC服务端

参考了这篇文章,并根据实际情况进行了调整(允许root登陆),顺带一提,这里也有CentOS的操作指南。

全程依旧使用root账号,所以不带sudo命令

1、安装gnome3 vncserver和ibus

apt-get install gnome-core ibus vnc4server

即使是core下也需要300M和较长时间来完成,可以先喝杯水,休息一下。

2、配置gnome
在home下多了一个.vnc文件夹,进去编辑一下配置文件后保存退出。

vim xstartup
unset DBUS_SESSION_BUS_ADDRESS
/usr/bin/ibus-daemon -d

[ -x /etc/vnc/xstartup ] && exec /etc/vnc/xstartup
[ -r $HOME/.Xresources ] && xrdb $HOME/.Xresources
xsetroot -solid grey
vncconfig -iconic &
x-terminal-emulator -geometry 80x24+10+10 -ls -title "$VNCDESKTOP Desktop" &
gnome-session &

配置一下来允许root登陆

vim /etc/gdm3/daemon.conf

找到[security]这一行
添加以下内容后保存退出:

AllowRoot=true

然后编辑一下策略:

vim /etc/pam.d/gdm-password

找到这一行,注释掉,保存退出:

#auth required pam_succeed_if.so user != root quiet_success

最后重起服务,顺带一提,都debian9了,习惯一下新的命令吧:

systemctl restart gdm3

3、配置vnc

vim /etc/vnc.conf

最末尾有一个”1;”删掉
然后找到如下并修改成所需后保存退出(修改了分辨率,以及默认不只有localhost可以访问vnc)。

$geometry = "1280x720"
$localhost = "no"

4、启动vnc
默认端口是从5901开始,如果什么参数都不加的话则从5901依次开始。

vncserver

第一次启动会要求设置vnc访问密码

5、停止vnc

vncserver -kill :1

编译安装带有RTMP模块的nginx

RT,这个参照了obs的论坛上的帖子,然后把其中可能遇到的坑也总结了进来,从0开始编译,系统为Debian9,root账户
1、搞一下编译环境

apt-get install git build-essential openssl libpcre3 libpcre3-dev unzip libssl-dev

编译并安装zlib

wget http://zlib.net/zlib-1.2.11.tar.gz
tar -zxvf zlib-1.2.11.tar.gz
cd zlib-1.2.11
./configure
make
make install

编译并安装nginx

wget https://nginx.org/download/nginx-1.14.0.tar.gz #nginx
wget https://github.com/arut/nginx-rtmp-module/archive/master.zip #nginx-rtmp模块
tar -zxvf nginx-1.14.0.tar.gz
unzip master.zip
cd nginx-1.14.0
./configure --with-http_ssl_module --add-module=../nginx-rtmp-module-master --with-http_v2_module
make
make install

(你问我为啥要编译http2?万一以后你要用咋办,以后要用的时候省事啊)
写配置文件,这一行直接在nginx.conf的最后一个大括号之外贴上即可,具体功能可按照git上的说明来进行调整

rtmp {
        server {
                listen 1935;
                chunk_size 4096;
                application live {
                        live on;
                        record off;
                }
        }
}

实际使用方法:
按照上面的参数,URL默认格式是rtmp://yourdomain/live/***
星号内是自定义内容,可以理解为部分应用上所说的密码
另外,部分推流软件不允许密码空着(例如obs,空着会推不上去流),这时候就应该把地址拆成两份填写

流媒体地址:rtmp://yourdomain/live
密码:***

注意:流媒体地址的最后结尾不要加斜杠,系统会自动帮你加
最后,加一个nginx自启动吧

vim /lib/systemd/system/nginx.service 

[Unit]
Description=nginx
After=network.target

[Service]
Type=forking
ExecStart=/usr/local/nginx/sbin/nginx
ExecReload=/usr/local/nginx/sbin/nginx -s reload
ExecStop=/usr/local/nginx/sbin/nginx -s quit
PrivateTmp=true

[Install]
WantedBy=multi-user.target

保存退出,然后

systemctl enable nginx.service #开启自启动
systemctl disable nginx.service #关闭自启动

参考链接:
How to set up your own private RTMP server using nginx
Installing NGINX Open Source
nginx-rtmp-module

debian下搞个smb服务(samba)

RT 总归有这方面需求 一如既往搞完后就写个博客做个笔记
系统依旧root,就不sudo了,debian 8.6的系统~
smb安装和配置其实异常的简单,配置文件也很容易懂~
安装还是蛮简单的 反正需要的都会一并帮你装好

apt-get install samba

装完后直接vim /etc/samba/smb.conf
这里面有详细的设置说明,或者也可以复制粘贴我下面提供的一个比较基本但是可以起来的配置:

[global]
workgroup = WORKGROUP
encrypt passwords = yes
public = no
security = user
log file = /var/log/samba/log.%m
[storage]
comment = Storage
path = /var/storage
public = no
writable = yes

这个感觉写得很简单了,基本都能看得懂上面的意思吧。。。按需修改就好了,完事保存退出
然后创建个user,这一步比较蛋疼 需要先建立一个实体账户,然后添加到允许列表里才能使用,也可能是我姿势不对没创建成功虚拟账户。。。如果有大佬可以解释一下的话还请说明~

useradd storage

为了安全,创建好后vim /etc/passwd
找到storage账户 改成/usr/sbin/nologin 保存退出
然后smbpasswd -a storage
输入一个smb用的登录密码 需要输入两次
最后重启一下服务器就好了,这里我遇到了service不可用的情况 所以用了如下:

/etc/init.d/samba restart

都ok了后就可以使用了,测试一下吧~

debian下搞个CSGO服务端

RT 闲着蛋疼 正好坑都踩完了 就留个记录 这次除了运行SteamCMD之前有一个前置需要安装会用到root,其它时候都不需要root也不需要sudo 所以还是很方便的
一、部署SteamCMD
按照官方wiki,先安装一个前置
apt-get install lib32gcc1
然后安装SteamCMD,这里有两种方式
1、用apt-get 也就是直接

apt-get install steamcmd

但是这个要求你的apt源要有这个包,国内的源似乎很多都没有,所以要用第二种方式
2、直接wget然后解压缩 这里就不需要解释了,官方留了个下载地址:https://steamcdn-a.akamaihd.net/client/installer/steamcmd_linux.tar.gz
这里因为我的apt源没有 所以我也选择了第二种方式,唯一的区别是启动steamcmd,后者是运行sh,前者直接steamcmd即可
二、下载CSGO服务端
先准备好一个文件夹,一会我们下载的时候要设置路径,否则设置的路径如果不存在的话并不会自动创建,而是下载到你用户的home下,这里假设我们丢到/var/csgo下,且文件夹已经创建好
然后启动SteamCMD

./steamcmd.sh

之后登陆一下

login anonymous

登陆后设置下载路径

force_install_dir /var/csgo

然后下载 

app_update 740 validate

由于G胖的服务器也不怎么好 所以有时候会断,这种时候可以尝试继续执行下载的命令,如果不能执行的话就只能直接退出,然后重启SteamCMD,重启后有一个巨坑要注意,就是你需要完整的重新执行登陆–>设置路径–>下载,缺一不可,如果不重新设置路径的话,会自动下载到home,然后就会变成重新下载的情形
顺便提一下 以后服务端升级,也是用同样的步骤和命令,CMD会自动检测升级并更新
三、塞点自定义地图
这个挺简单的 /根目录/csgo/maps/ 这里 丢进去就好~
四、配置下服务端
这里有以下几点要配置,首先需要申请一个key。。。
我们访问一下这里:https://steamcommunity.com/dev/managegameservers
登陆你的账号 然后游戏ID输入进去(csgo是730),设置一个好记的名字,然后生成
之后我们创建一个sh在根目录 写如下内容:

Classic Casual(经典休闲模式):
./srcds_run -game csgo -console -usercon +game_type 0 +game_mode 0 +mapgroup mg_bomb +map de_dust2
Competitive(经典竞技模式):
./srcds_run -game csgo -console -usercon +game_type 0 +game_mode 1 +mapgroup mg_bomb +map de_dust2
Arms Race(军备竞赛模式):
./srcds_run -game csgo -console -usercon +game_type 1 +game_mode 0 +mapgroup mg_armsrace +map ar_shoots
Demolition(爆破模式):
./srcds_run -game csgo -console -usercon +game_type 1 +game_mode 1 +mapgroup mg_demolition +map de_lake

总之按照你需要的去贴进去,或者干脆四个都创建也不是不可以
之后进入~/csgo/cfg/文件夹内 创建一个cfg

vim autoexec.cfg
log on //This is set to turn on logging! Don't put this in your server.cfg
hostname "<服务器名称>"
rcon_password "<op密码>"
sv_password "<服务器密码,默认为空>" //Only set this if you intend to have a private server!
sv_cheats 0 //This should always be set, so you know it's not on
sv_lan 0 //This should always be set, so you know it's not on
sv_setsteamaccount <你申请到的token>
exec banned_user.cfg
exec banned_ip.cfg

保存退出

vim server.cfg
exec autoexec.cfg

保存退出
最后启动服务器 理论上就能直接启动了~反正我是能用了

Debian 8下配置桌面(GNOME)的安装与VNC访问

RT 需要迁移一些文件到另一台机器上,文件量太大(几百G、超过300w个文件,过于零散的文件打包后仍有2000+的文件),而且想保持文件夹结构不变,且我懒(其实这大概是最重要的原因)
一、安装GNOME
这里参考了debian官方的wiki
https://wiki.debian.org/zh_CN/Gnome
注意描述:“Debian 选择安装的软件包 (含有新装系统时默认安装的软件,它会安装一些不集成在 GNOME 桌面的应用程序,比如 LibreOffice 和 Firefox 等。)”
各位也可以自行选择自己所需的,我的话因为真的很懒,所以直接用默认推荐的版本好了
先日常更新一下apt源,然后安装

apt-get update
apt-get install task-gnome-desktop

文件挺大的,安装完后占用了2个G左右,下载也要几百兆,网速慢、配置低的可以先休息下了,网络不稳定的建议起一个screen,防止网络断掉导致安装中断
装好后不需要管他了
 
二、安装VNCServer
这里有两种,都可以用,比较明显的区别是:启动方式的不同,其次就是对客户端的兼容略有区别(其实新的客户端兼容性都挺好的,基本也遇不到了)
这里参考了这篇博文:http://www.laozuo.org/2932.html

apt-get install tightvncserver

装完后先设置个vnc的访问密码吧

tightvncserver :1

这样会起来一个vncserver,第一次启动的时候就会提示你设置密码(记得输入两次)
设置完后会问你是否要设置一个仅允许观看的密码,各位看自己的需求,不要的话就直接N掉好了
完事后我们先停掉进程

tightvncserver -kill :1

之后配置一下配置文件(这时候请保持在你的账号的home文件夹)

vim ~/.vnc/xstartup

打开后将文件清空,粘贴如下内容:

#!/bin/sh
# Uncomment the following two lines for normal desktop:
unset SESSION_MANAGER
#exec /etc/X11/xinit/xinitrc
[ -x /etc/vnc/xstartup ] && exec /etc/vnc/xstartup
[ -r $HOME/.Xresources ] && xrdb $HOME/.Xresources
xsetroot -solid grey
vncconfig -iconic &
x-terminal-emulator -geometry 80x24+10+10 -ls -title "$VNCDESKTOP Desktop" &
gnome-session-fallback &
lxterminal &
/usr/bin/lxsession -s LXDE &

:wq保存退出
最后起vnc服务

tightvncserver :1

然后可以用vnc客户端访问一下了,:1的话端口应该是5901(5900+1)
 
PS:我需要用fz客户端,但是默认没有,建议直接在ssh上:apt-get install filezilla 即可,装完后在开始菜单–>internet里面就能看到了