利用frp的xtcp实现P2P远程桌面连接

被控端配置

serverAddr = "101.200.***.***"
serverPort = 7000

[[proxies]]
name = "mstsc_hp"
type = "xtcp"
secretKey = "123456"
localIP = "127.0.0.1"
localPort = 3389

主控端配置

serverAddr = "101.200.***.***"
serverPort = 7000

[[visitors]]
name = "mstsc_hp_visitor"
type = "xtcp"
serverName = "mstsc_hp"
secretKey = "123456"
bindAddr = "127.0.0.1"
bindPort = 6000
keepTunnelOpen = false

主控端的serverName必须与被控端的name一致,否则服务器无法匹配连接

在主控端电脑上打开远程桌面,输入127.0.0.1:6000,然后用被控端用户名密码登录就可以了

注意,写一个bat脚本,用于frpc的启动,再把该启动脚本添加到任务计划程序里,设置开机启动,无论用户是否登录都启动,这样被控端主机开机后才能自动连接frps,启动脚本如下

@echo off
:home
frpc -c frpc_p2p_2.toml
goto home

利用frp的xtcp实现P2P远程桌面连接

利用openwrt系统路由器和独立IP公网服务器远程唤醒电脑

由于现在运营商不为家用宽带提供独立IPv4或者光猫路由一体机不支持端口转发,导致没办法像以前用ADSL那样通过端口转发的方式直接远程唤醒电脑,所以,本文讲述如何使用公网IP服务器配合openwrt路由器来远程开机。

首先,在服务器上下载frp,开源地址:https://github.com/fatedier/frp

#我用的是amd64架构服务器,下载amd64版
wget https://github.com/fatedier/frp/releases/download/v0.59.0/frp_0.59.0_linux_amd64.tar.gz

解压并进入目录

tar -zxvf frp_0.59.0_linux_amd64.tar.gz
cd frp_0.59.0_linux_amd64

修改服务端配置文件

vim frps.toml

配置内容如下(自行修改)

#公网端口号
bindPort = 7000

#数据面板监听地址和端口号
webServer.addr = "0.0.0.0"
webServer.port = 7500
#数据面板用户名和密码
webServer.user = "root"
webServer.password = "123456"

#SSL证书和密钥
#webServer.tls.certFile = "server.crt"
#webServer.tls.keyFile = "server.key"

启动服务

./frps -c frps.toml

路由器端安装frpc,以下两个都要安装(我用的是GL·iNet SFT1200路由器,mips_siflower架构,其他架构自己找安装包,或者用源码自己编译)

到路由器luci里配置frpc或者直接在shell里配置

vim /etc/config/frpc
内容如下
config frpc 'main'
	option server 'frps'
	option client_file '/usr/bin/frpc'
	option login_fail_exit 'false'
	option run_user 'root'
	option protocol 'tcp'
	option tls_enable 'false'
	option enabled '1'

config server 'frps'
	option server_port '7000'
	option tcp_mux 'true'
	option alias '公网服务器'
	option server_addr '101.200.***.***'

config rule
	option name 'wol'
	option local_port '9'
	option type 'udp'
	option remote_port '29999'
	option local_ip '192.168.8.255'

注意,远程唤醒本地端口为9,远程端口自定义,但不能与公网服务器现有端口冲突,本地IP为直接广播地址,如路由器地址192.168.8.1,子网掩码长度24,即子网掩码为255.255.255.0,则直接广播地址为192.168.8.255,注意,千万不可以用受限广播地址(即255.255.255.255),否则网卡收不到魔幻数据包。

接下来下载wake on lan软件,网上一搜一大堆,IP地址就是公网服务器IP,端口号就是上面配置文件中的remote_port,我的是29999,MAC地址可以登录路由器管理页面查看一下客户端MAC,电脑BIOS再设置一下允许wake on lan,并在网卡设置中允许魔幻数据包唤醒,这部分很简单,根据自己的电脑型号查一查就知道了

到这里,远程唤醒就实现啦

接下来还要检测远程开机状态,在被远程唤醒电脑上,下载frp,配置如下

serverAddr = "101.200.***.***"
serverPort = 7000

[[proxies]]
name = "rpc_hp"
type = "tcp"
localIP = "127.0.0.1"
localPort = 135
remotePort = 13599

我把本地135端口暴露在了公网上,公网端口为13599,wake on lan软件检测到公网ip的13599端口开放,说明电脑已成功开机。一般来说,暴露3389端口更好,但后面还要用3389做P2P的远程控制,就用135端口啦(用别的端口也行,只不过要保证那个端口一定是随系统开关的)


利用openwrt系统路由器和独立IP公网服务器远程唤醒电脑

利用acme.sh和阿里dns接口申请免费通配符证书

#!/bin/bash

#开启alias功能
shopt -s expand_aliases

#安装acme.sh(已安装的请忽略)
#apt-get install socat
#curl https://get.acme.sh | sh -s email=emailname@domain.com

#环境变量
export DOMAIN="example.com"
export Ali_Key="阿里云AccessKeyId"
export Ali_Secret="阿里云AccessKeySecret"

#acme.sh所在路径 别名
alias acme="/usr/local/acme.sh/acme.sh"

#设置默认证书供应商(我选择了zerossl)
acme --set-default-ca --server zerossl #letsencrypt
#签发证书
acme --issue -d ${DOMAIN} -d *.${DOMAIN} --dns dns_ali --keylength 2048


利用acme.sh和阿里dns接口申请免费通配符证书

Linux上Java编译启动

#!/bin/bash

#读取lib文件夹的jar库
FILES=$(ls ./lib/*.jar)
JAVA_CP="."

for f in $FILES
do
	JAVA_CP="$JAVA_CP:$f"
done

if [ ! -f 类名.class ]
then
	#编译
	javac -cp $JAVA_CP 类名.java
fi

#启动
java -cp $JAVA_CP 类名

Linux上Java编译启动

Linux上docker方式运行onlyoffice

启动

docker run -i -t -d -p 90:80 --restart=always -v /onlyoffice/log:/var/log/onlyoffice -v /onlyoffice/data:/var/www/onlyoffice/Data -v /onlyoffice/lib:/var/lib/onlyoffice -v /onlyoffice/db:/var/lib/postgresql onlyoffice/documentserver

获取ID

docker ps

获取密钥

docker exec $1 /var/www/onlyoffice/documentserver/npm/json -f /etc/onlyoffice/documentserver/local.json 'services.CoAuthoring.secret.session.string'

Linux上docker方式运行onlyoffice

Linux利用ACME工具申请泛域名(通配符)证书

安装ACME

curl https://get.acme.sh | sh -s email=my@example.com

申请证书

acme.sh --issue --dns -d *.example.com --yes-I-know-dns-manual-mode-enough-go-ahead-please

验证解析记录

host -t txt _acme-challenge.example.com

自测通过后签发证书

acme.sh --renew --dns -d *.example.com --yes-I-know-dns-manual-mode-enough-go-ahead-please

Linux利用ACME工具申请泛域名(通配符)证书

解决高版本Linux(如Debian11)上lnmp无法安装PHP5.6的问题

问题简述

Linux Server系统升级到高版本后,使用lnmp(lnmp.org),出现无法安装PHP5.6的问题,总结前辈们的提示,得出以下解决方案

下载ICU

解压icu源码包

tar -zxvf icu-release-60-3.tar.gz

编译icu

cd icu-release-60-3/icu4c/source/
./runConfigureICU Linux --prefix=/usr/local/icu-60
make -j4
make install

查看输出版本信息

/usr/local/icu-60/bin/icu-config --version

在/lnmp目录/include/php.sh里添加编译参数

在–with-openssl=/usr/local/openssl 的后面追加 –with-icu-dir=/usr/local/icu-60 (位于PHP_with_openssl()函数内)

在动态链接库的配置里,加入了库文件的位置

echo "/usr/local/icu-60/lib" >> /etc/ld.so.conf

更新/etc/ld.so.cache文件

ldconfig

之后可正常安装php5.x


解决高版本Linux(如Debian11)上lnmp无法安装PHP5.6的问题

GIT提交后,Linux服务器端相关文件自动更新

创建脚本文件

在.git/hooks目录下创建文件post-receive,可使用以下命令

touch post-receive

添加文件内容

添加shell脚本内容,可执行以下命令

vim post-receive

添加以下内容

#!/bin/bash
git --work-tree=内容存放根目录 checkout -f

基本原理是利用提交监听post-receive和强制检出checkout-f实现自动检出

注意修改post-receive脚本文件权限


GIT提交后,Linux服务器端相关文件自动更新

BASH 打包文件夹及文件夹内全部文件,上传至FTP服务器

BASH脚本打包文件夹及文件夹内全部文件并上传FTP服务器,用于快速下载服务器大文件的场景,如:服务器上有大小为2G,包含5万个文件的程序包,服务器带宽仅有2M,要快速下载这么大的文件夹,可先打包成ZIP压缩包,再上传至高带宽的文件服务器(如阿里云OSS),即可低成本高速完成下载过程。

下面以上传到阿里云OSS为例,在服务器上提前启动OSSFTP,然后运行下方代码的脚本

#!/bin/bash

ftpIP="127.0.0.1 2048"
uuid=$(cat /proc/sys/kernel/random/uuid)
filename="$(date +%s).${uuid^^}.zip"

function uploadFile {
	ftp -v -n $ftpIP<<EOF
	user OSS用户名 OSS密码
	binary
	passive
	put $filename
	bye
EOF
rm -rfv $filename
echo "此处是OSS链接$filename"
}

########################################################################
zip -r $filename 此处是被打包的文件夹名称
uploadFile


BASH 打包文件夹及文件夹内全部文件,上传至FTP服务器