TAIDONG https://www.zhangtaidong.cn/ zh-CN TAIDONG's Blog Fri, 13 Sep 2024 22:44:00 +0800 Fri, 13 Sep 2024 22:44:00 +0800 Tailscale 的 DERP 中继服务搭建与配置 http://zhangtaidong.cn/archives/313/ http://zhangtaidong.cn/archives/313/ Fri, 13 Sep 2024 22:44:00 +0800 TAIDONG 1 Linux服务器中安装 Tailscale 客户端
curl -fsSL https://tailscale.com/install.sh | sh

开放所有端口

systemctl stop firewalld
iptables -P INPUT ACCEPT
iptables -P OUTPUT ACCEPT
iptables -P FORWARD ACCEPT
iptables -I INPUT 1 -j ACCEPT
iptables -I OUTPUT 1 -j ACCEPT

2 部署 DERP 中继服务

安装Golang

# 更新软件源
apt update && apt upgrade

# 安装相关依赖
apt install -y wget git openssl curl

# 可打开https://go.dev/dl/查看最新版本
cd /root
wget https://go.dev/dl/go1.23.0.linux-amd64.tar.gz

# 解压
sudo tar -C /usr/local -xzf go1.23.0.linux-amd64.tar.gz

# 查看版本
export PATH=$PATH:/usr/local/go/bin
go version

# 添加环境变量
echo "export PATH=$PATH:/usr/local/go/bin" >> /etc/profile
source /etc/profile

# 让 Go 使用国内代理源(国外主机忽略)
go env -w GO111MODULE=on
go env -w GOPROXY=https://goproxy.cn,direct

部署 DERP 中继服务

# 拉取并编译derper
go install tailscale.com/cmd/derper@main

# 进入到编译好的文件夹(不要直接复制命令,按实际情况填写)
cd /root/go/pkg/mod/tailscale.com@v1.1.1-xxxx/cmd/derper/

# 打开cert.go文件
sudo chmod 777 ./cert.go
vi cert.go

# 注释以下信息
func (m *manualCertManager) getCertificate(hi *tls.ClientHelloInfo) (*tls.Certificate, error) {
    // if hi.ServerName != m.hostname {
    //     return nil, fmt.Errorf("cert mismatch with hostname: %q", hi.ServerName)
    // }
![2024-09-14T12:46:13.png][1]
# 编译并输出到/etc/derp/
go build -o /etc/derp/derper

# 查看是否存在derper文件
cd /root
ls /etc/derp

# 自签域名(derp.myself.com可随意编写,命令中四处需要一致)
openssl req -x509 -newkey rsa:4096 -sha256 -days 3650 -nodes -keyout /etc/derp/derp.myself.com.key -out /etc/derp/derp.myself.com.crt -subj "/CN=derp.myself.com" -addext "subjectAltName=DNS:derp.myself.com"

# 自签域名错误解决(openssl 命令出错是因为 -addext 选项在旧版本的 OpenSSL 中不可用。-addext 选项是在 OpenSSL 1.1.1 及以上版本中引入的,而你可能正在使用较旧的版本。)

# 检查 OpenSSL 版本
openssl version

# 创建配置文件
vi /etc/derp/openssl-san.cnf

# 在文件中写入以下内容
[ req ]
default_bits       = 4096
default_md         = sha256
distinguished_name = req_distinguished_name
x509_extensions    = v3_req
prompt             = no

[ req_distinguished_name ]
CN = derp.myself.com

[ v3_req ]
subjectAltName = @alt_names

[ alt_names ]
DNS.1 = derp.myself.com

# 生成证书
openssl req -x509 -newkey rsa:4096 -sha256 -days 3650 -nodes -keyout /etc/derp/derp.myself.com.key -out /etc/derp/derp.myself.com.crt -config /etc/derp/openssl-san.cnf

复制以下全部内容到命令行粘贴:

cat > /etc/systemd/system/derp.service <<EOF
[Unit]
Description=TS Derper
After=network.target
Wants=network.target
[Service]
User=root
Restart=always
ExecStart=/etc/derp/derper -hostname derp.myself.com -a :33445 -http-port 33446 -verify-clients -certmode manual -certdir /etc/derp
RestartPreventExitStatus=1
[Install]
WantedBy=multi-user.target
EOF

设置开机自启和启动服务

systemctl enable derp
systemctl start derp

测试访问 https://ip:33445

Screenshot 2024-09-14 225130.png


3 配置 Tailscale

// Tailscale DERP
    "derpMap": {
        // OmitDefaultRegions 用来忽略官方的中继节点
        "OmitDefaultRegions": false,
        "Regions": {
            "900": {
                "RegionID":   900, // 901 三个地方保持一致,900开始,多个节点可以往后+1
                "RegionCode": "hty",
                "RegionName": "Tianjin",
                "Nodes": [
                    {
                        "Name":             "1",
                        "RegionID":         900,
                        "IPv4":             "150.100.111.222", // 改成你的公网IP
                        "DERPPort":         33445,
                        "InsecureForTests": true,
                    },
                ],
            },
        },
    },

DERP 中继服务的连接情况

tailscale netcheck
]]>
0 http://zhangtaidong.cn/archives/313/#comments http://zhangtaidong.cn/feed/
宝塔安装ITOP 工单系统 http://zhangtaidong.cn/archives/287/ http://zhangtaidong.cn/archives/287/ Thu, 21 Dec 2023 14:19:00 +0800 TAIDONG 系统环境:

Ubuntu 20.04.6 LTS x86_64(Py3.7.9) 4G RAM/100G SSD


宝塔配置:

Apache 2.4.57
PHP-7.4.33
MySQL 5.7.40
Pure-Ftpd 1.0.49

phpMyAdmin 5.2

ITOP版本:

iTop-3.1.0-2-11973.zip

PHP安装扩展:
1.fileinfo
2.mcrypt
3.ldap

删除禁用函数:
1.putenv
2.exec

手动安装Graphviz:

  • 在 Ubuntu 或基于 Debian 的系统中,可以使用 sudo apt-get install graphviz 命令安装。
  • 在 Red Hat、Fedora 或 CentOS 上,使用 sudo yum install graphviz 命令安装。
  • 在 macOS 上,可以使用 Homebrew,命令是 brew install graphviz。

访问http://ip/itop

1.2023-12-21T06:17:02.png

2.2023-12-21T06:19:21.png

3.2023-12-21T06:19:33.png

4.2023-12-21T06:21:13.png

5.2023-12-21T06:21:21.png

6.2023-12-21T06:21:29.png

7.2023-12-21T06:21:44.png

8.2023-12-21T06:21:52.png

9.2023-12-21T06:22:04.png

10.2023-12-21T06:22:11.png

]]>
0 http://zhangtaidong.cn/archives/287/#comments http://zhangtaidong.cn/feed/
云服务器一键安装RouterOS-ROS系统脚本说明 http://zhangtaidong.cn/archives/283/ http://zhangtaidong.cn/archives/283/ Fri, 03 Nov 2023 00:04:00 +0800 TAIDONG 要根据你的VPS实际网卡情况,来设定脚本。
环境如下:
阿里云环境centos6.9 x64:
内网网卡为eth0
外网网卡为eth1

阿里云的linux下硬盘名称为/dev/vda
*注意阿里云的安全组建议开放任意协议和端口,任意IP允许访问
*安装完ROS:chr-6.39.2.img版本
内网网卡为ether1
外网网卡为ether2

wget http://download2.mikrotik.com/routeros/6.39.2/chr-6.39.2.img.zip -O chr.img.zip &&
gunzip -c chr.img.zip > chr.img &&
mount -o loop,offset=33554944 chr.img /mnt &&
ADDRESS0=ip addr show eth0 | grep global | cut -d' ' -f 6 | head -n 1 &&
ADDRESS1=ip addr show eth1 | grep global | cut -d' ' -f 6 | head -n 1 &&
GATEWAY0=ip route list | grep '10.0.0.0/8' | cut -d' ' -f 3 &&
GATEWAY1=ip route list | grep default | cut -d' ' -f 3 &&
echo "/ip address add address=$ADDRESS0 interface=[/interface ethernet find where name=ether1]
/ip address add address=$ADDRESS1 interface=[/interface ethernet find where name=ether2]
/ip route add dst-address=10.0.0.0/8 gateway=$GATEWAY0
/ip route add dst-address=100.64.0.0/10 gateway=$GATEWAY0
/ip route add dst-address=172.16.0.0/12 gateway=$GATEWAY0
/ip route add gateway=$GATEWAY1
" > /mnt/rw/autorun.scr &&
umount /mnt &&
echo u > /proc/sysrq-trigger &&
dd if=chr.img bs=1024 of=/dev/vda &&
reboot

命令说明:

1、wget从ros官方下载CHR镜像到本地目录,并命名为chr.img.zip;建议wget下载。自己搭建http下载的地址,比如可以放到阿里云的oss下载路径。

http://lbros.oss-cn-hangzhou.aliyuncs.com

2、gunzip把chr.img.zip解压为chr.img

3、把chr.img镜像释放到/mnt目录下

4、抓取eth0的IP地址,并赋值参数为ADDRESS0

5、抓取eth1的IP地址,并赋值参数为ADDRESS1

6、抓取ip route里的10.0.0.0/8网关,并赋值参数为GATEWAY0

7、抓取ip route里的默认网关,并赋值参数为GATEWAY1

8、echo后面的为ros里的命令,ROS的内网网卡赋值内网IP,外网网卡赋值外网IP,并设置默认网关以及到阿里云的局域网段的网关,

阿里云的局域网有三个段分别是10.0.0.0/8,100.64.0.0/10,172.16.0.0/12

并赋值给/mnt/rw/autorun.scr,这里可以干好多事情,大家自由发挥

9、umount /mnt,卸载已经加载的文件系统/mnt

10、echo u > /proc/sysrq-trigger 立即重新挂载所有的文件系统为只读

11、dd:用指定大小的块拷贝一个文件,并在拷贝的同时进行指定的转换。

if=文件名:输入文件名,缺省为标准输入。即指定源文件。

of=文件名:输出文件名,缺省为标准输出。即指定目的文件。

12、reboot重启机器


Ucloud 云服务器常用安装ROS脚本

境外专用

wget http://download2.mikrotik.com/routeros/6.43.1/chr-6.43.1.img.zip -O chr.img.zip && \
gunzip -c chr.img.zip > chr.img && \
mount -o loop,offset=33554944 chr.img /mnt && \
ADDRESS0=ip addr show eth0 | grep global | cut -d' ' -f 6 | head -n 1 && \
GATEWAY0=ip route list | grep default | cut -d' ' -f 3 && \
echo "/ip address add address=$ADDRESS0 interface=[/interface ethernet find where name=ether1]
/ip route add gateway=$GATEWAY0
" > /mnt/rw/autorun.scr && \
umount /mnt && \
echo u > /proc/sysrq-trigger && \
dd if=chr.img bs=1024 of=/dev/vda && \
reboot

境内专用

wget --no-check-certificate https://comtk.cn/chr-6.43.1.img.zip -O chr.img.zip && \
gunzip -c chr.img.zip > chr.img && \
mount -o loop,offset=33554944 chr.img /mnt && \
ADDRESS0=ip addr show eth0 | grep global | cut -d' ' -f 6 | head -n 1 && \
GATEWAY0=ip route list | grep default | cut -d' ' -f 3 && \
echo "/ip address add address=$ADDRESS0 interface=[/interface ethernet find where name=ether1]
/ip route add gateway=$GATEWAY0
" > /mnt/rw/autorun.scr && \
umount /mnt && \
echo u > /proc/sysrq-trigger && \
dd if=chr.img bs=1024 of=/dev/vda && \
reboot
]]>
0 http://zhangtaidong.cn/archives/283/#comments http://zhangtaidong.cn/feed/
WG 常见Docker 无法启动解决方案 http://zhangtaidong.cn/archives/256/ http://zhangtaidong.cn/archives/256/ Wed, 24 May 2023 20:12:00 +0800 TAIDONG 实践环境:CentOS8

1.Docker无法启动问题

docker logs -f 6b56126963dc21cdc515d6c758f1d949c55f203d36542b27e360ddbc556ae80a
2022-06-15T05:34:33.902Z Server Listening on http://0.0.0.0:51821
2022-06-15T05:34:33.903Z WireGuard Loading configuration...
2022-06-15T05:34:33.905Z WireGuard Configuration loaded.
2022-06-15T05:34:33.905Z WireGuard Config saving...
2022-06-15T05:34:33.906Z WireGuard Config saved.
$ wg-quick down wg0
$ wg-quick up wg0
Error: Command failed: wg-quick up wg0
[#] ip link add wg0 type wireguard
[#] wg setconf wg0 /dev/fd/63
[#] ip -4 address add 10.8.0.1/24 dev wg0
[#] ip link set mtu 1420 up dev wg0
[#] iptables -t nat -A POSTROUTING -s 192.0.2.0/24 -o eth0 -j MASQUERADE; iptables -A INPUT -p udp -m udp --dport 51820 -j ACCEPT; iptables -A FORWARD -i wg0 -j ACCEPT; iptables -A FORWARD -o wg0 -j ACCEPT;
modprobe: can't change directory to '/lib/modules': No such file or directory
modprobe: can't change directory to '/lib/modules': No such file or directory
iptables v1.8.3 (legacy): can't initialize iptables table `nat': Table does not exist (do you need to insmod?)
Perhaps iptables or your kernel needs to be upgraded.
[#] ip link delete dev wg0

    at ChildProcess.exithandler (child_process.js:383:12)
    at ChildProcess.emit (events.js:400:28)
    at maybeClose (internal/child_process.js:1058:16)
    at Process.ChildProcess._handle.onexit (internal/child_process.js:293:5) {
  killed: false,
  code: 3,
  signal: null,
  cmd: 'wg-quick up wg0'
}

解决方案

modprobe ip_tables && modprobe iptable-nat

2.Upgrade Linux Kernel of CentOS 8

dnf -y update

2023-05-24T13:19:01.png

uname -r

2023-05-24T13:19:49.png

dnf install -y https://www.elrepo.org/elrepo-release-8.el8.elrepo.noarch.rpm

2023-05-24T13:20:32.png

rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org

dnf makecache

2023-05-24T13:21:12.png

dnf --disablerepo="*" --enablerepo="elrepo-kernel" list available | grep kernel-ml

2023-05-24T13:21:47.png

dnf --enablerepo="elrepo-kernel" install -y kernel-ml

2023-05-24T13:22:19.png

reboot

uname -r

2023-05-24T13:23:01.png

]]>
0 http://zhangtaidong.cn/archives/256/#comments http://zhangtaidong.cn/feed/
Centos 8安装Docker http://zhangtaidong.cn/archives/264/ http://zhangtaidong.cn/archives/264/ Wed, 24 May 2023 17:26:00 +0800 TAIDONG centos 8安装docker
1、御载以前的版本

yum remove docker docker-client docker-client-latest docker-common docker-latest docker-latest-logrotate dokcer-logrotate docker-engin

御载docker-ce(ce代表社区版)

yum remove docker-ce docker-ce-cli containerd.io

删除docker资源

rm -rf /var/lib/docker

2、安装依赖包

yum install -y yum-utils

3、设置镜仓库(默认是国外仓库,下载非常慢)

yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

4、更新yum

yum makecache

5、安装docker

yum install docker-ce docker-ce-cli containerd.io

如果不想安装最新版本的docker,想安装指定版本,可以这样:

先查询出docker有哪些版本

yum list docker-ce --showduplicates | sort -r

安装指定版本

sudo yum install docker-ce-<version_string> docker-ce-cli-<version_string> containerd.io

比如,安装18.09.1版本:

sudo yum install docker-ce-18.09.1 docker-ce-cli-18.09.1 containerd.io

6、启动docker

sudo systemctl start docker

查看是否启动成功

docker version

7、开机自动启动docker

systemctl enable docker

Docker官方的一键安装命令,适用于CentOS / Debian / Ubuntu系统

curl -s https://get.docker.com/ | sh

或

curl -fsSL https://get.docker.com -o get-docker.sh && sh get-docker.sh
]]>
0 http://zhangtaidong.cn/archives/264/#comments http://zhangtaidong.cn/feed/
PostgreSQL 安装与配置 http://zhangtaidong.cn/archives/249/ http://zhangtaidong.cn/archives/249/ Sat, 29 Apr 2023 18:53:00 +0800 TAIDONG PostgreSQL 安装与配置

软件环境
操作系统
PostgreSQL 数据库可运行在 Linux、Mac OS、Windows 平台,默认端口为 5432。

软件版本
SuperMap GIS 服务器支持 9.6 及以上版本的 PostgreSQL。

Windows系统上安装PostgreSQL
PostgreSQL 为 Windows 操作系统提供了基于二进制安装包的安装方法。本文以 PostgreSQL 9.6.12 版本为例,简要介绍一下安装流程:

进入 PostgreSQL 官网下载 .exe 格式的安装文件,注意选择与您的操作系统位数相同的版本。

打开安装文件,按照提示逐一设置 PostgreSQL 安装路径、数据存储路径,初始管理员用户的密码、PostgreSQL 服务监听端口、运行时语言环境,完成安装。

注意:

PostgreSQL 的初始管理员账号是 postgres。
PostgreSQL 默认使用的端口为 5432。
选择语言环境时,如果选择中文字符集,可能会导致查询和排序结果不正确。建议选择“C”,即不使用区域。
Linux系统上安装PostgreSQL
PostgreSQL 为 Linux 操作系统提供了基于二进制安装包以及基于源码两种安装方法。本文以 PostgreSQL 9.6.12 版本,64 位 Linux 操作系统为例,简要介绍一下基于二进制安装包的安装流程:

进入 PostgreSQL 官网下载二进制安装包 postgresql-9.6.12-1-linux-x64.run。

修改安装包的权限为可读写:

chmod 755 postgresql-9.6.12-1-linux-x64.run

进入安装包所在目录,通过如下命令安装数据库:

./postgresql-9.6.12-1-linux-x64.run

设置数据库安装目录、数据存储路径以及服务端口号。这里使用默认路径和 PostgreSQL 的默认端口号 5432,直接回车即可。

选择数据库编码格式,可以选择 “C”,即不使用区域。

等待数据库安装完成即可。

使用PostgreSQL
开启远程访问
PostgreSQL 默认禁止非本机访问,如果 SuperMap GIS 服务器和 PostgreSQL 不在同一台机器中,需要修改 PostgreSQL 的配置文件。进入 %PostgreSQL_HOME%/data 目录,将 postgresql.conf 文件中 listen_address 值由 'localhost' 修改为 '*',示例如下:

listen_addresses = '*'

然后在 %PostgreSQL_HOME%/data/pg_hba.conf 文件中

IPv4 local connections:

host all all 127.0.0.1/32 md5

行后添加如下一行:

host all all 0.0.0.0/0 md5

保存并重启 PostgreSQL 后,即可实现 PostgreSQL 的远程访问。

登录PostgreSQL
配置了 PostgreSQL 的环境变量后,通过如下命令,登录 PostgreSQL:

psql -h 127.0.0.1 -p 5432 -U postgres

-h:PostgreSQL 数据库的地址。如果 PostgreSQL 安装在本机上,则为 127.0.0.1。如果远程连接PostgreSQL,则需要改为 PostgreSQL 所在机器的 IP 地址。
-p:PostgreSQL 数据库的端口号,默认为 5432。
-U:PostgreSQL 数据库用户的用户名。postgres 为默认的管理员用户名。
创建数据库
通过如下命令创建新数据库:

create database [数据库名] ;

例如:

create database iportal ;

创建数据库后,就可以使用该数据库进行安全信息存储以及 iPortal 的门户数据存储了。

注意:

1.由于部分版本的 PostgreSQL 的数据库服务只监听 Localhost 地址,当 iServer 与 PostgreSQL 不在同一机器时,可能会出现 iServer 连接 PostgreSQL 服务失败的情况。您需要配置 PostgreSQL 的配置文件 postgresql.conf,设置:

listen_address='*'

表示允许其他机器通过 IP 或域名访问 PostgreSQL 数据库服务。

  1. PostgreSQL 的安全策略默认仅允许本机的用户访问,当 iServer 与 PostgreSQL 不在同一机器时,可能会出现 iServer 使用 PostgreSQL 的系统用户访问不了 PostgreSQL 服务的情况。您需要在 pg_hba.conf 文件中添加访问策略,允许指定网段的主机可以访问,设置内容如下 :

host all all 192.168.112.0/24 md5

host:表示安装 PostgreSQL 的主机

第一个 all:主机上的所有数据库实例

第二个 all:所有用户

192.168.112.0/24 :表示可使用合法的用户信息来访问的网段,您可以将 '192.168.112.0' 替换为您期望的网段。

md5:验证方式

]]>
0 http://zhangtaidong.cn/archives/249/#comments http://zhangtaidong.cn/feed/
Air780E + ESP32S3 短信转发器 http://zhangtaidong.cn/archives/244/ http://zhangtaidong.cn/archives/244/ Sun, 23 Apr 2023 19:46:00 +0800 TAIDONG 要求

利用ESP32驱动Air780E实现短信转发,兼容合宙ESP32S3和ESP32C3

功能

自动转发收到的短信,短信内容支持多种语言(其实就是ASCII和UCS-2字符集),目前已测试过英文、中文、日语、俄语字符

支持多个推送平台,目前接入:
LuatOS社区提供的推送服务器
Bark
Server酱
钉钉机器人
推送加 PushPlus

修改脚本,刷入ESP32

修改config.lua
修改config.board_type为正确的型号,可选值见注释
修改config.wifi,填入无线网络的SSID和密码
修改config.notification_channel,将要启用的通知通道的enabled配置置为true,并填写推送平台相关配置
烧录脚本
将firmware目录中对应的固件烧入开发板
将所有lua脚本下载至开发板
2023-04-23T11:32:29.png
将开发板上电开机,等待初始化完成后,即可转发短信到配置的通知通道。


LED灯状态含义

2023-04-23T11:37:08.png
ESP32S3
C3的D4或S3的LED A为初始化状态灯,闪烁代表正在初始化,常亮代表初始化完成,准备转发短信
C3的D5或S3的LED B为工作状态灯,平时长灭,收到新短信后高频闪烁,转发完成后熄灭

Air780
POW灯为电源指示灯,通电后常亮。注意,这个LED不代表开机状态,只要板子有电这个灯就会亮
NET灯为网络状态指示灯,长亮短灭代表正在初始化蜂窝网络,短亮长灭代表网络注册成功,可以接收短信


Firmware目录下的文件说明
LuatOS-SoC_V1004_ESP32C3_classic.soc对应ESP32C3 经典款
LuatOS-SoC_V1004_ESP32C3_lite.soc对应ESP32C3 简约款
LuatOS-SoC_V1004_ESP32S3.soc对应ESP32S3

固件均通过合宙云编译精简掉了不需要的功能,以保证内存空间充足。LuaTools自动下载的固件不能用,系统启动之后内存就不够用了,发不出去HTTP请求。

目前固件包含gpio、uart、pwm、wdt、crypto、rtc、network、sntp、tls、wlan、pm、cjson、ntp、shell、dbg。

]]>
1 http://zhangtaidong.cn/archives/244/#comments http://zhangtaidong.cn/feed/
使用Air724ug开发板进行短信转发 http://zhangtaidong.cn/archives/235/ http://zhangtaidong.cn/archives/235/ Sat, 22 Apr 2023 19:05:00 +0800 TAIDONG
  • 需求

  • 老方案: 树莓派+ec20 + 卡托 + gammu-smsd进行处理转发,不是很稳定,所以寻找替代方案。

    • 硬件

    air724ug 开发板。支持LuatOS 进行二次开发

    • 软件

    LuatOS 链接: 地址

    下载工具

    Luatools: 调试下载固件工具: 地址
    驱动:调试下载固件使用的驱动: 地址
    LuatOS 固件:使用LuatOS-Air固件 地址

    • 烧录固件

    固件选择: Luat_RDA8910_TTS_NOLVGL_FLOAT 这个版本,支持TTS,不支持蓝牙
    使用Luatools将固件和上层的lib烧录进入air724ug

    • 二次开发短信转发Lua脚本

    PROJECT = "SMS_Forwarder"
    VERSION = "1.0.0"
    BARK_URL = "https://api.day.app/M8xxxxxxxx/"
    
    require "sys"
    require "http"
    require "sms"
    require "common"
    require "cc"
    require "audio"
    require "net"
    
    -- HTTP 回调,显示调试信息用
    function httpCallback(result, prompt, head, body)
        if result then
            print("HTTP", prompt, body)
        else
            print("HTTP Request Failed. ", prompt)
        end
    end
    
    -- 推送信息到BARK
    function notifyToBark(msg)
        http.request(
            "GET",
            -- BARK_URL..string.urlEncode(msg),
            BARK_URL..string.rawurlEncode(msg), -- 对内容中文进行编码
            nil, -- 不指定证书
            nil,
            nil,
            30000, -- 发送超时,ms
            httpCallback, -- 回调
            nil
        )
    end
    
    --[[
    num:短信号码,ASCII码字符串格式
    data:短信内容,字符串格式
    datetime:短信日期和时间,ASCII码字符串格式
    ]]
    function smsCallback(num, data, datetime)
        print("SMS FROM ", num, " IN ", datetime)
        print(data)
    
        data = common.gb2312ToUtf8(data) -- 短信编码要转换为目标平台支持的UTF-8
        -- data = string.gsub(data, "*", "\\*") -- Telegram 特殊字符转义
        -- data = string.gsub(data, "_", "\\_") -- Telegram 特殊字符转义
        notifyToBark(data.."。from:"..num)
    end
    
    call_in = false
    
    -- 电话拨入回调,在这里发送通知并接通电话
    function call_incoming(num)
        print("CALL FROM ", num)
        if not call_in then
            call_in = true
            notifyToBark(num.." 给您来电")
            cc.accept(num)
        end
    end
    
    -- 电话接通回调,这里播放TTS通知对方
    function call_connected(num)
        print("CALL CONNECTED")
        call_in = false
        --通话中向对方播放TTS
        audio.play(7,"TTS","您好,机主无法接听您的来电,请使用短信联系机主。",7,nil,true,2000)
        --30秒之后主动结束通话
        sys.timerStart(cc.hangUp,30000,num)
    end
    
    -- 电话挂断回调,停止TTS
    function call_disconnected(discReason)
        print("CALL DISCONNECTED")
        call_in = false
        sys.timerStopAll(cc.hangUp)
        audio.stop()
    end
    
    -- 定时任务:每天发送短信到10001查询流量
    sys.timerLoopStart(
        function()
            sms.send("10001", "108", nil, nil)
        end
    , 24*60*60*1000
    )
    
    --加载网络指示灯和LTE指示灯功能模块
    --根据自己的项目需求和硬件配置决定:1、是否加载此功能模块;2、配置指示灯引脚
    --合宙官方出售的Air720U开发板上的网络指示灯引脚为pio.P0_1,LTE指示灯引脚为pio.P0_4
    require "netLed"
    pmd.ldoset(2,pmd.LDO_VLCD)
    netLed.setup(true,pio.P0_1,pio.P0_4)
    
    --设置短信回调
    sms.setNewSmsCb(smsCallback)
    
    --禁用RNDIS,防止跑流量
    ril.request("AT+RNDISCALL=0,1")
    
    --注册电话回调
    sys.subscribe("CALL_INCOMING", call_incoming)
    sys.subscribe("CALL_CONNECTED", call_connected)
    sys.subscribe("CALL_DISCONNECTED", call_disconnected)
    
    --每1分钟查询一次GSM信号强度
    --每1分钟查询一次基站信息
    net.startQueryAll(60000, 60000)
    
    -- 系统初始化
    sys.init(0, 0)
    sys.run()

    1. 将 BARK_URL 改成自己对应的bark app 推送地址
    2. 如果使用其他推送,修改 notifyToBark 函数,实现相关逻辑
    3. 默认开启了来电提醒,会将来电号码推送给手机,如果不需要 将notifyToBark(num.." 给您来电")注释掉
    4. 默认开启了来电自动接听,并且播放TTS语音提醒,如果不需要,注释掉电话相关的回调注册
    ]]>
    0 http://zhangtaidong.cn/archives/235/#comments http://zhangtaidong.cn/feed/
    Windows无法访问局域解决方法 http://zhangtaidong.cn/archives/169/ http://zhangtaidong.cn/archives/169/ Sun, 08 Jan 2023 13:53:00 +0800 TAIDONG 情形1. 未开启来宾账户Guest,常见的错误提示如下

    2023-01-08T05:58:09.png

    图1

    开启方法1:一条cmd命令搞定,按下组合键Windows +R,调出运行对话框,输入net user guest /active:yes并回车即可。
    2023-01-08T05:58:46.png
    图2

    开启方法2:右击"此电脑" - 点击"管理"
    2023-01-08T05:59:11.png

    点击"本地用户和组"下的"用户" - 右击"Guest" - 点击"属性"
    2023-01-08T05:59:28.png
    图4

    取消勾选"账户已禁用" - 点击"确定"即可。
    2023-01-08T05:59:49.png

    图5

    情形2. 组策略没设置好,常见的错误如下:
    2023-01-08T06:00:17.png
    图6

    解决方法:按下组合键Windows +R,调出运行对话框,输入secpol.msc并回车,依次定位到安全设置-本地策略
    2023-01-08T06:01:12.png
    (1). 找到用户权限分配,分别双击下面两项:
    2023-01-08T06:01:25.png
    图8

    拒绝本地登录:删除Guest账户
    2023-01-08T06:01:44.png
    图9

    拒绝从网络访问这台计算机:删除Guest账户
    2023-01-08T06:02:00.png
    图10

    如果还是不行,再来设置如下几项:

    网络访问:本地账户的共享和安全模式为"仅来宾"(可避免设置访问)
    2023-01-08T06:02:15.png
    图11

    网络访问:不允许SAM账户和共享的匿名枚举为"已禁用"
    2023-01-08T06:02:29.png
    图12

    网络访问: 将Everyone权限应用于匿名用户为"已启用"
    2023-01-08T06:02:42.png
    图13

    账户:使用空白密码的本地账户只允许进行控制台登陆为"已禁用" (可以避免设置密码)。
    2023-01-08T06:03:05.png

    图14

    情形3. 由于开始设置共享是"使用简单文件共享",这样容易造成权限没给够,导致的访问受限
    2023-01-08T06:03:22.png
    图15

    2023-01-08T06:03:33.png
    图16

    因此,设置共享时,建议使用高级共享,然后再添加Everyone或Guest账户并修改权限:
    2023-01-08T06:03:46.png
    图17

    共享:建议完全控制
    2023-01-08T06:04:06.png
    图18
    2023-01-08T06:04:17.png
    图19
    2023-01-08T06:04:29.png
    图20

    安全:根据需要设置是否为完全控制
    2023-01-08T06:04:46.png
    图21
    2023-01-08T06:04:58.png
    图22
    2023-01-08T06:05:10.png
    图23

    说明:设置的文件夹能否能被正常访问,取决于共享和安全这两个设置的交集,也就是说共享设置只读取,安全设置为完全控制,那还是只读取的权限。如果对访问要求比较严格,可以设置一个带密码的账号来访问,创建账号密码可以用如下命令创建:
    2023-01-08T06:05:22.png
    图24

    net user test 123 /add

    说明:运行以上代码将创建一个普通Users组,用户名为test,密码为123,大家可以根据需求更改。如果需要给test提升为管理员,则运行如下命令:

    net localgroup administrators test /add

    情形4. 检查服务器端电脑和客户端电脑是否在同个工作组或域中,如果不是则需要更改,查看操作如下:

    方法1:右击"此电脑" - 点击"属性"
    2023-01-08T06:05:37.png
    图25

    点击"重命名这台电脑" - 默认"计算机名"下点击"更改"
    2023-01-08T06:05:50.png
    图26

    若服务器端和客户端的工作组名不一致,记得更改客户端的工作组 - 点击"确定" - 再点击"确定"
    2023-01-08T06:06:07.png
    图27
    2023-01-08T06:07:11.png
    图28

    设置完后需要重启生效,我们点击"立即重新启动"
    2023-01-08T06:10:40.png
    图29

    方法2:一条代码搞定,按下组合键Windows +R,调出运行对话框,输入cmd并回车,
    2023-01-08T06:11:02.png
    图30

    在命令行窗口输入:wmic computersystem where Name="%COMPUTERNAME%" call JoinDomainOrWorkgroup Name="WORK1"
    2023-01-08T06:11:17.png
    图31

    说明:这里的WORK1为新改的工作组名称,一般默认都是WORKGROUP,可以实际情况自行修改。

    情形5. 网络共享中心没有开启共享,打开步骤:

    开始 - 运行 - 输入control并回车
    2023-01-08T06:13:15.png
    图32

    进入控制面板 - 查看方式改为:大图标 - 网络和共享中心 - 更改高级共享设置
    2023-01-08T06:13:30.png
    图33
    2023-01-08T06:13:44.png
    图34

    专用/来宾或公用/所有网络设置:
    2023-01-08T06:14:01.png
    图35

    启用网络发现,启用文件和打印机共享、是否密码保护共享

    (每种网络类型设置完,记得先保存更改)

    情形6. 未关闭防火墙,或者开启防火墙没点击例外,操作步骤:

    按下组合键Windows + R,输入control并回车 - 进入控制面板 - 查看方式:改为大图标 - Windows Defender防火墙 - 启用或关闭Windows Defender防火墙
    2023-01-08T06:14:20.png
    图36

    直接关闭这两处的防火墙
    2023-01-08T06:14:46.png

    图37

    情形7. 控制面板下启用或关闭Windows功能里,未启用SMB1.0/CIFS文件共享支持
    2023-01-08T06:15:10.png
    图38
    2023-01-08T06:15:27.png
    图39
    等待一会自动安装后重启
    2023-01-08T06:15:46.png
    2023-01-08T06:16:02.png


    不开启Guest账户,通过管理员权限访问共享网络
    1.net use * /delete
    清除所有的访问连接以及对应的账户信息;
    2023-01-08T08:39:51.png
    2.net use \服务器名称名称或IP password /user:administrator
    使用指定的账户和密码,访问网络共享;
    2023-01-08T08:40:22.png
    注意,此处千万别学我,Admin111这种弱密码别在真实环境使用,我这是测试用的虚拟机,当然无所谓了。

    ]]>
    0 http://zhangtaidong.cn/archives/169/#comments http://zhangtaidong.cn/feed/
    RustDesk远程中继服务器搭建 http://zhangtaidong.cn/archives/161/ http://zhangtaidong.cn/archives/161/ Sat, 07 Jan 2023 14:12:00 +0800 TAIDONG BT宝塔搭建服务器

    1.下载Linux的文件:https://github.com/rustdesk/rustdesk-server/releases
    2023-01-07T06:15:32.png

    2.解压上传至服务器
    2023-01-07T06:16:21.png

    3.开启守护进程,给到启动hbbs和hbbr。(宝塔软件商店安装:【进程守护管理器】免费)
    2023-01-07T06:16:38.png

    4.然后进到首页开始添加守护进程,注意上传hbbs和hbbr路径填写正确
    2023-01-07T06:17:07.png
    2023-01-07T06:17:18.png
    2023-01-07T06:17:35.png

    5.开放防火墙端口号:
    TCP(21115, 21116, 21117, 21118, 21119)
    UDP(21116)
    2023-01-07T06:17:58.png

    firewall-cmd --zone=public --add-port=21115/tcp --permanent
    firewall-cmd --zone=public --add-port=21116/tcp --permanent
    firewall-cmd --zone=public --add-port=21117/tcp --permanent
    firewall-cmd --zone=public --add-port=21118/tcp --permanent
    firewall-cmd --zone=public --add-port=21119/tcp --permanent
    firewall-cmd --zone=public --add-port=21116/udp --permanent
    firewall-cmd --reload
    firewall-cmd --reload
    firewall-cmd --reload
    firewall-cmd --query-port=21115/tcp
    firewall-cmd --query-port=21116/tcp
    firewall-cmd --query-port=21117/tcp
    firewall-cmd --query-port=21118/tcp
    firewall-cmd --query-port=21119/tcp
    firewall-cmd --query-port=21116/udp

    CentOS搭建服务器

    1.安装pm2管理rustdesk-server

    npm install pm2 -g

    2.下载本地解压/上传
    创建 rustdesk-server-linux-x64文档

    下载地址:https://github.com/rustdesk/rustdesk-server/releases

    3.迁移到local

    mv rustdesk-server-linux-x64 /usr/local/
    cd /usr/local/rustdesk-server-linux-x64/
    chmod 777 hbbs
    chmod 777 hbbr

    4.配置启动(ip也可以替换为公网地址,如果不用密钥可以不加-k _)

    pm2 start hbbs -- -r 192.168.1.2 -k _
    pm2 start hbbr
    pm2 save

    5.创建开机自启动命令

    pm2 startup

    ————————————————
    开启防火墙

    firewall-cmd --state
    firewall-cmd --permanent --add-port=21115-21119/tcp
    firewall-cmd --permanent --add-port=21116/udp
    firewall-cmd --reload
    firewall-cmd --list-all

    ————————————————

    ]]>
    0 http://zhangtaidong.cn/archives/161/#comments http://zhangtaidong.cn/feed/