月度归档:2021年06月

项目编号~/project/PAF5 之 PostgreSQL 13.3数据库设计 核心数据表设计 2021-6-22

项目编号~/project/PAF5 之 数据库设计
项目数据库 PostgreSQL 13.3
核心数据表设计

CREATE TABLE mdata (
idx bigserial not null primary key,         // 自增的大范围整数 大序列数字 1 到 9223372036854775807
server_ip inet not null,                    // 重要★ 服务器IP地址 网络地址inet类型  xx.xx.xx.xx/32 如果其他类型的数据库 该字段修改为text
server_port integer not null,               // 重要★ 服务器端口 数字 -2147483648 到 +2147483647
vtype varchar(6) not null,                  // 重要★ 限制长度为6个字符 字符串 枚举 http https socks4 socks5 
auth varchar(6) not null default 'NoAuth',  // 是否需要认证 长度为6个字符 枚举 NoAuth Auth 暂时不考虑需要认证的数据
auth_name text,                             // 认证需要的用户名 可为空 类型文本
auth_pass text,                             // 认证需要的密码 可为空 类型文本
status varchar(1) not null default 'N',     // 重要★ 限制长度为1个字符 表示可用状态 字符串 枚举 Y N 默认值为N 
cnt integer not null default 0,             // 重要★ 检测总次数 数字 1 到 +2147483647
y_cnt integer not null default 0,           // 重要★ 检测成功次数 数字 1 到 +2147483647
n_cnt integer not null default 0,           // 重要★ 检测失败次数 数字 1 到 +2147483647
constncnt integer not null default 0,       // 重要★ 连续检测到失败的次数 如果当次检测status是Y 该值置0 如果是N 该值减1
rsp_time real default 0.0,                  // 响应时间 单位ms 默认值 0.0
download_speed real default 0.0,            // 下载速度 单位kB/s 参考值 86.32KB/s 默认值 0.0
upload_speed real default 0.0,              // 下载速度 单位kB/s 默认值 0.0
location varchar(6),                        // 重要★ 国家地区 参考ISO-3166-1 两位字母代码  https://zh.wikipedia.org/wiki/%E5%9C%8B%E5%AE%B6%E5%9C%B0%E5%8D%80%E4%BB%A3%E7%A2%BC
location_more text,                         // 国家地区 更多信息的说明 比如标记城市的信息
isp text,                                   // IP所属的运营商信息
anonymity varchar(1) default 'N',           // 是否为高匿名 字符串 枚举 Y N  默认值为N 
insert_time timestamp without time zone default (now()),   // 重要★ 记录数据记录入库的时间 格式样式 YYYY-MM-DD HH-MI-SS
update_time text,                           // 重要★ 记录数据记录更新的时间 格式样式 YYYY-MM-DD HH-MI-SS
remark text                                 // 其他必要的备注信息
);

增加表的归属,数据唯一索引等关键权限步骤

CREATE UNIQUE INDEX idx_mdata_main on mdata (server_ip, server_port, vtype);   // 创建唯一的关键字段索引
ALTER TABLE public.mdata OWNER TO apguser;  // 安全需要 更改数据到普通用户

实际落地的操作

postgres@pve-debian-server-02:~$ psql -d apgdb
psql (13.3 (Debian 13.3-1.pgdg100+1))
apgdb=# \d
Did not find any relations.
apgdb=# CREATE TABLE mdata (
apgdb(# idx bigserial not null primary key,
apgdb(# server_ip inet not null,
apgdb(# server_port integer not null,
apgdb(# vtype varchar(6) not null,
apgdb(# auth varchar(6) not null default 'NoAuth',
apgdb(# auth_name text,
apgdb(# auth_pass text,
apgdb(# status varchar(1) not null default 'N',
apgdb(# cnt integer not null default 0,
apgdb(# y_cnt integer not null default 0,
apgdb(# n_cnt integer not null default 0,
apgdb(# constncnt integer not null default 0,
apgdb(# rsp_time real default 0.0,
apgdb(# download_speed real default 0.0,
apgdb(# upload_speed real default 0.0,
apgdb(# location varchar(6),
apgdb(# location_more text,
apgdb(# isp text,
apgdb(# anonymity varchar(1) default 'N',
apgdb(# insert_time timestamp without time zone default (now()),
apgdb(# update_time text,
apgdb(# remark text
apgdb(# );
CREATE TABLE
apgdb=# \d
 public | mdata         | table    | postgres
 public | mdata_idx_seq | sequence | postgres

apgdb=# CREATE UNIQUE INDEX idx_mdata_main on mdata (server_ip, server_port, vtype);
CREATE INDEX
apgdb=# ALTER TABLE public.mdata OWNER TO apguser;
ALTER TABLE
apgdb=# 
apgdb=# 
apgdb=# \d
 public | mdata         | table    | apguser
 public | mdata_idx_seq | sequence | apguser

apgdb=# 
apgdb=# insert into mdata(server_ip, server_port, vtype) values('37.49.127.234',1080,'socks5');
INSERT 0 1
apgdb=# select server_ip, server_port, vtype, status, cnt, y_cnt, n_cnt, constncnt, location, insert_time, update_time from mdata limit 3;
   server_ip   | server_port | vtype  | status | cnt | y_cnt | n_cnt | constncnt | location |        insert_time         | update_time 
---------------+-------------+--------+--------+-----+-------+-------+-----------+----------+----------------------------+-------------
 172.21.22.3   |        8080 | socks5 | N      |   0 |     0 |     0 |         0 |          | 2021-06-22 12:12:59.439876 | 
 175.1.22.3    |        8080 | http   | N      |   0 |     0 |     0 |         0 |          | 2021-06-22 12:12:59.447857 | 
 24.249.199.12 |        4145 | socks5 | N      |   0 |     0 |     0 |         0 |          | 2021-06-22 12:12:59.451406 | 
(3 rows)

apgdb=# 

注释1 如果需要学习PostgreSQL的安装,则请参考”在Debian10系统上,安装和使用PostgreSQL数据库 2021-06-15 https://dasmz.com/?p=168

Donate
云乞讨

Ubuntu和Debian系统上编译安装proxychains4,使用proxychains4进行多IP跳转 2021-6-21

需求说明
SOCKS5-SG,服务器位于新加坡SG,承载SOCKS5/NoAuth业务,面向亚太地区
SOCKS5-CA,服务器位于加拿大CA,承载SOCKS5/NoAuth业务,面向美欧地区
本地系统上使用proxychains4 进行多IP跳转

编译安装proxychains4
root@local:~# apt-get update
root@local:~# apt-get install gcc make git
root@local:~# mkdir $HOME/src
root@local:~# cd $HOME/src
root@local:~# git clone https://github.com/rofl0r/proxychains-ng.git
root@local:~# cd proxychains-ng
root@local:~# ./configure --prefix=/usr --sysconfdir=/etc
root@local:~# make
root@local:~# make install
root@local:~# make install-config
root@local:~# /etc/proxychains.conf #默认的配置文件

加拿大和新加坡两台服务器的SOCKS5配置

配置加拿大服务器
root@server:~# wget -N --no-check-certificate -O /root/gost-linux-amd64-2.11.1 https://github.com/ginuerzh/gost/releases/download/v2.11.1/gost-linux-amd64-2.11.1.gz 
root@server:~# apt-get update
root@server:~# apt-get -y install screen
root@server:~# chmod +x /root/gost-linux-amd64-2.11.1
root@server:~# screen -dmS okSocks5 /root/gost-linux-amd64-2.11.1 -L=socks5://:6402

配置新加坡服务器
root@server:~# wget -N --no-check-certificate -O /root/gost-linux-amd64-2.11.1 https://github.com/ginuerzh/gost/releases/download/v2.11.1/gost-linux-amd64-2.11.1.gz
root@server:~# apt-get update
root@server:~# apt-get -y install screen
root@server:~# chmod +x /root/gost-linux-amd64-2.11.1
root@server:~# screen -dmS okSocks5 /root/gost-linux-amd64-2.11.1 -L=socks5://:16802


修改本地的配置文件 /etc/proxychains.conf 
socks5 127.0.0.1 10808
socks5 192.99.6.25 6402
socks5 103.159.8.173 16802

验证是否OK
proxychains4 curl https://ipv4.icanhazip.com/
Donate
云乞讨

使用Nginx 1.18.0对HTTP业务进行负载均衡的配置 2021-6-16

需求说明
WEB-SG,服务器位于新加坡SG,承载HTTP/WEB业务,面向亚太地区
WEB-CA,服务器位于加拿大CA,承载HTTP/WEB业务,面向美欧地区
两个地区的WEB服务器,提供相同的功能和数据
本次使用的Nginx版本为1.18.0,使用面向大中华区域路由更好的阿里云/腾讯云服务器,对HTTP业务进行负载均衡的配置

root@server:~# nginx -v
nginx version: nginx/1.18.0
root@server:~# 

1. 写入如下的配置到 /etc/nginx/conf.d/webHTTP.conf

upstream backends {
    server 103.159.3.51:16801;
    server 192.99.101.19:6401;
}

server {
    listen       8080;
    server_name  localhost;

    location / {
        proxy_pass http://backends;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
}

2. 完成配置后,重启Nginx服务,从本机进行验证测试

fd@PC:~$ curl http://121.4.1.101:8080/
No.CA
fd@PC:~$ curl http://121.4.1.101:8080/
No.SG
fd@PC:~$ 
Donate
云乞讨

配置PostgreSQL 13.3的远程连接 2021-6-15

需求描述
PostgreSQL 13.3默认是监听在本地的5432端口的,现在修改其监听到同VLAN其他机器可访问

1. 修改 配置文件 /etc/postgresql/13/main/postgresql.conf
修改

listen_addresses = '0.0.0.0'		# what IP address(es) to listen on;

2. 修改 认证文件 /etc/postgresql/13/main/pg_hba.conf
# TYPE DATABASE USER CIDR-ADDRESS METHOD
# host 需要访问的数据库名字 数据库对应的用户名 对应的网段 md5

host    pdatabase             puser           10.11.11.0/24           md5

# 意味着在10.11.11.0/24这个网段可以通过用户puser访问数据库pdatabase

3. 重启服务,并从同网段其他机器进行连接验证

root@server:~# systemctl restart postgresql 
root@server:~# psql -d pdatabase -h 10.11.11.240 -p 5432 -U puser -W 
Donate
云乞讨

在Debian10系统上,安装和使用PostgreSQL数据库 2021-06-15


官网 https://www.postgresql.org/
安装 https://www.postgresql.org/download/
Debian系统的安装 https://www.postgresql.org/download/linux/debian/
英文教程,多版本 https://www.postgresql.org/docs/
中文教程才到12的版本 http://www.postgres.cn/docs/12/

# Update and install the basic 
root@debian-server:~# apt update
root@debian-server:~# apt install lsb-release
root@debian-server:~# apt install gnupg2
root@debian-server:~# apt install wget
root@debian-server:~# apt install curl

# Create the file repository configuration
root@debian-server:~# sh -c 'echo "deb http://apt.postgresql.org/pub/repos/apt $(lsb_release -cs)-pgdg main" > /etc/apt/sources.list.d/pgdg.list'

# Import the repository signing key
root@debian-server:~# wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | apt-key add -

# Update the package lists
root@debian-server:~# apt-get update

# Install the latest version of PostgreSQL
root@debian-server:~# apt-get -y install postgresql


root@pve-debian-server-02:~# su - postgres
postgres@pve-debian-server-02:~$ psql -c "SELECT version();"
                                                     version                                                      
------------------------------------------------------------------------------------------------------------------
 PostgreSQL 14.0 (Debian 14.0-1.pgdg100+1) on x86_64-pc-linux-gnu, compiled by gcc (Debian 8.3.0-6) 8.3.0, 64-bit
(1 row)
// 2021-11-04 安装到的14.0的最新版本的,真棒!

postgres@pve-debian-server-02:~$ pg_isready 
/var/run/postgresql:5432 - accepting connections
postgres@pve-debian-server-02:~$ 
postgres@pve-debian-server-02:~$ psql --version
psql (PostgreSQL) 13.3 (Debian 13.3-1.pgdg100+1)
postgres@pve-debian-server-02:~$ 
postgres@pve-debian-server-02:~$ createdb apgdatabase
postgres@pve-debian-server-02:~$ 
postgres@pve-debian-server-02:~$ createuser apguser
postgres@pve-debian-server-02:~$ 
postgres@pve-debian-server-02:~$ psql
psql (13.3 (Debian 13.3-1.pgdg100+1))
Type "help" for help.

postgres=# alter user apguser with password 'YourPasswd';
ALTER ROLE
postgres=# GRANT ALL PRIVILEGES ON DATABASE apgdatabase TO apguser;
GRANT
postgres=# \q
postgres@pve-debian-server-02:~$ 
postgres@pve-debian-server-02:~$ psql -d apgdatabase
psql (13.3 (Debian 13.3-1.pgdg100+1))
Type "help" for help.

apgdatabase=# SELECT current_date;
 current_date 
--------------
 2021-06-14
(1 row)

apgdatabase=# 
apgdatabase=# 
apgdatabase=# \q
postgres@pve-debian-server-02:~$ 


2021-11-1 增加,使用root重置一次postgres账户的密码,到一个复杂密码
root@server# passwd postgres
Donate
云乞讨

安装并配置Wireguard,用做一个自用的管理用途VPN 2021-6-6

需求描述
日常使用Wireguard,用于在外面登录自己家里,管理家庭内部的网络设备,非常稳定可靠,下面介绍配置和用法

Wireguard官网https://www.wireguard.com/

安装也都是比较简单的,参考https://www.wireguard.com/install/,有详细的步骤

我这里的家里的主机用的Debian 10,配置过程如下:

第一步, 添加backports源

添加deb http://deb.debian.org/debian buster-backports main 到/etc/apt/sources.list

第二步, 执行更新

root@ServerX:~# apt-get update

第三步, 执行安装

root@ServerX:~# apt install wireguard

第四步, 生成密钥

root@ServerX:~# cd ~
root@ServerX:~# umask 077
root@ServerX:~# wg genkey > server_privatekey
root@ServerX:~# wg pubkey < server_privatekey > server_publickey
root@ServerX:~# wg genkey > client_privatekey
root@ServerX:~# wg pubkey < client_privatekey > client_publickey

第五步, 开启系统转发

root@ServerX:~# 添加 net.ipv4.ip_forward = 1 到 /etc/sysctl.conf
root@ServerX:~# sysctl -p

第六步, 添加服务端的配置文件,我这里只自己一个人连接,客户端只配置一个IP

服务端的配置 名字 ~/wg0.conf
[Interface]
Address = 10.12.6.1/24
ListenPort = 11111
PrivateKey = 服务器私钥字符串
[Peer]
PublicKey = 客户端公钥字符串
AllowedIPs = 10.12.6.8/32
客户端的配置 名字 ~/wg92.conf
[Interface]
Address = 10.12.6.8/32
PrivateKey = 客户端私钥字符串
[Peer]
PublicKey = 服务器公钥字符串
AllowedIPs = 0.0.0.0/0, ::0/0
Endpoint = 118.12.3.25:11111
PersistentKeepalive = 25

第七步, 增加iptables转发,其中enp4s0需要修改到你自己的网卡名字

root@ServerX:~# iptables -t nat -A POSTROUTING -o enp4s0 -j MASQUERADE
root@ServerX:~# iptables -A FORWARD -i wg0 -j ACCEPT
root@ServerX:~# iptables -A FORWARD -o wg0 -m state --state RELATED,ESTABLISHED -j ACCEPT
root@ServerX:~# iptables -A FORWARD -i wg0 -o enp4s0 -j ACCEPT
root@ServerX:~# iptables -A FORWARD -i enp4s0 -o wg0 -m state --state RELATED,ESTABLISHED -j ACCEPT

第七步, 启动wireguard服务端,增加开机启动

root@ServerX:~# wg-quick up wg0
root@ServerX:~# systemctl enable wg-quick@wg0

备注, 安装Wireguard的常见报错及处理
故障情景,启动wireguard时候,报不支持的操作,
我这次报错是因为
已安装的linux-header版本为linux-headers-4.19.0-16-amd64
已安装的linux-image版本linux-image-4.19.0-9-amd64
解决的办法为: 安装一致的linux-image和linux-header

故障的样子:

root@ServerX:~# wg-quick up wg0
[#] ip link add wg0 type wireguard
RTNETLINK answers: Operation not supported
Unable to access interface: Protocol not supported
[#] ip link delete dev wg0
Cannot find device "wg0"
root@ServerX:~# modprobe wireguard
modprobe: FATAL: Module wireguard not found in directory /lib/modules/...
root@ServerX:~# 

本次修复的步骤:

root@ServerX:~# dpkg --get-selections | grep linux   
binutils-x86-64-linux-gnu			install
console-setup-linux				install
firmware-linux-free				install
libselinux1:amd64				install
linux-base					install
linux-compiler-gcc-8-x86			install
linux-headers-4.19.0-16-amd64			install
linux-headers-4.19.0-16-common			install
linux-headers-amd64				install
linux-image-4.19.0-9-amd64			install
linux-image-amd64				install
linux-kbuild-4.19				install
linux-libc-dev:amd64				install
util-linux					install
root@ServerX:~# 
root@ServerX:~# apt-cache search linux-image-4.19.0-16-amd64
linux-headers-4.19.0-16-amd64 - Header files for Linux 4.19.0-16-amd64
linux-image-4.19.0-16-amd64-dbg - Debug symbols for linux-image-4.19.0-16-amd64
linux-image-4.19.0-16-amd64-unsigned - Linux 4.19 for 64-bit PCs
linux-image-4.19.0-16-amd64 - Linux 4.19 for 64-bit PCs (signed)
root@ServerX:~# apt-get install linux-image-4.19.0-16-amd64
root@ServerX:~# update-grub
root@ServerX:~# reboot
root@ServerX:~# dpkg -l | grep linux-image
root@ServerX:~# apt-get -y remove linux-image-4.19.0-9-amd64
root@ServerX:~# update-grub

附录1、如果系统是Debian 9 ,则需要添加一下

apt update

apt upgrade

apt install linux-headers-$(uname -r)

echo "deb http://deb.debian.org/debian/ unstable main" | tee /etc/apt/sources.list.d/unstable-wireguard.list

echo -e "Package: *\nPin: release a=unstable\nPin-Priority: 150\n" | tee /etc/apt/preferences.d/limit-unstable

apt update

apt upgrade

apt install wireguard-dkms wireguard-tools

附录2、也可把IPv6加进来,且把防火墙重定向数据包的iptables命令写在配置文件里

服务端参考如下

[Interface]
PrivateKey = your server_private.key here
Address = 10.10.0.1/24
Address = fd86:ea04:1111::1/64
ListenPort = 51820
PostUp = iptables -A FORWARD -i wg0 -j ACCEPT; iptables -t nat -A POSTROUTING -o ens3 -j MASQUERADE; ip6tables -A FORWARD -i wg0 -j ACCEPT; ip6tables -t nat -A POSTROUTING -o ens3 -j MASQUERADE
PostDown = iptables -D FORWARD -i wg0 -j ACCEPT; iptables -t nat -D POSTROUTING -o ens3 -j MASQUERADE; ip6tables -D FORWARD -i wg0 -j ACCEPT; ip6tables -t nat -D POSTROUTING -o ens3 -j MASQUERADE
SaveConfig = true

附录3、可在客户端配置中,指定DNS

参考配置如下

[Interface]
Address = 10.10.0.2/32
Address = fd86:ea04:1111::2/128
SaveConfig = true
PrivateKey = your client_private.key here
DNS = 1.1.1.1

[Peer]
PublicKey = your server_public.key here
Endpoint = your server public ip:51820
AllowedIPs = 0.0.0.0/0, ::/0
Donate
云乞讨

Virmach有一台服务器要到期了,尝试dd安装到Windows系统的步骤 2021-6-5

需求描述
Virmach有一台服务器要到期了,尝试dd安装到Windows系统的步骤




本次使用的dd安装包信息:

DD文件: vip-win7-ent-sp1-x64-cn.vhd.gz
大小: (1.37G)1474689551 字节
修改时间: 2021年4月7日, 12:16:07
MD5: 641142C3CFDF233B8A3B9149E604DF64
SHA1: 36612A4BE2031BF5D0EC2B0DF92E7F204152D4ED
CRC32: 44879942
账户:Administrator
密码:nat.ee
修改 RDP端口

把vip-win7-ent-sp1-x64-cn.vhd.gz文件下载到美国的自己的服务器上
把InstallNET.sh文件下载到这台需要做Windows的机器上
执行
bash InstallNET.NATEE.sh -dd https://somedomain.com/vip-win7-ent-sp1-x64-cn.vhd.gz
Virmach的这台机器1C1G15G,磁盘速度还可以,大概不到40分钟,就完成
dd过程中,可以通过商家提供的VNC查看dd的进度
dd完成后,可通过远程桌面登录
修改默认的用户名
修改默认的密码
修改RDP端口
修改时区
关闭,本地连接属性,Microsoft网络的文件和打印机共享
关闭,本地链接属性,Internet协议版本6
下载,https://www.7-zip.org/a/7z1900-x64.exe
下载,https://download.sysinternals.com/files/TCPView.zip

dd成了Windows也不知道有啥用,就暂时空载运行吧

Donate
云乞讨