正则表达式,用于提取日志中的异常WEB请求的来源IP地址 2022-5-27

段落1、WEB异常日志分析

WEB日志里面,很多异常

用正则表达式,提取日志中的,异常请求日志,把来源IP地址都提取出来

段落2、代码,python3

#!/usr/bin/python3
# -*- coding:utf-8 -*-
import re

pttn_ssl_crit = ", client: (\d{0,3}\.\d{0,3}\.\d{0,3}\.\d{0,3}), server: 0.0.0.0:443"

s = """
2022/05/27 05:57:08 [crit] 22177#22177: *1505702 SSL_do_handshake() failed (SSL: error:141CF06C:SSL routines:tls_parse_ctos_key_share:bad key share) while SSL handshaking, client: 192.241.221.194, server: 0.0.0.0:443
2022/05/27 05:58:12 [crit] 22177#22177: *1505686 SSL_shutdown() failed (SSL: error:1409F07F:SSL routines:ssl3_write_pending:bad write retry) while closing request, client: 42.185.73.106, server: 0.0.0.0:443
2022/05/27 12:35:25 [crit] 22177#22177: *1539457 SSL_do_handshake() failed (SSL: error:141CF06C:SSL routines:tls_parse_ctos_key_share:bad key share) while SSL handshaking, client: 64.62.197.122, server: 0.0.0.0:443
2022/05/27 12:37:56 [crit] 22177#22177: *1539653 SSL_do_handshake() failed (SSL: error:141CF06C:SSL routines:tls_parse_ctos_key_share:bad key share) while SSL handshaking, client: 125.80.138.80, server: 0.0.0.0:443
2022/05/27 14:41:39 [crit] 22177#22177: *1553119 SSL_do_handshake() failed (SSL: error:141CF06C:SSL routines:tls_parse_ctos_key_share:bad key share) while SSL handshaking, client: 154.89.5.85, server: 0.0.0.0:443
2022/05/27 15:22:47 [crit] 22177#22177: *1557066 SSL_do_handshake() failed (SSL: error:141CF06C:SSL routines:tls_parse_ctos_key_share:bad key share) while SSL handshaking, client: 37.252.255.135, server: 0.0.0.0:443
"""

print(re.findall(pttn_ssl_crit,s))
输出:

['192.241.221.194', '42.185.73.106', '64.62.197.122', '125.80.138.80', '154.89.5.85', '37.252.255.135']

透明代理,iptables技术 2022-5-27

段落1、需求说明

配置透明代理,可根据IP地域,进行路由定向。

本教程,对初学者有相当的难度,需要对iptables规则熟练于心,有差错,整个网络可能出现你无法预料的故障。

GeoIP CN的目标地址,直连

Local,本地地址,保留地址,直连

Node Server,直连

其他,走 socks5://127.0.0.1:10808

段落2、基础设施

系统环境 Ubuntu 20.04 LTS

GeoIP CN的IP CIDR地址清单

ipset 工具集

node server 1枚

段落3、iptables基础知识

段落4、配置方式

# 创建自定义的chain链
iptables -t nat -N V2FLY                 # 在NAT表创建链
iptables -t mangle -N V2FLY              # 在MANAGE表创建链

# 让你的V2FLY服务器IP走直连direct
iptables -t nat -A V2FLY -d AA.BB.CC.DD -j RETURN    # 这里指定NodeServer地址,return 继续执行自定义的动作

# 让你的局域网IP及其他本地及保留地址走direct
# Ignore LANs and any other addresses you'd like to bypass the proxy
# See Wikipedia and RFC5735 for full list of reserved networks.
# See ashi009/bestroutetb for a highly optimized CHN route list.
iptables -t nat -A V2FLY -d 0.0.0.0/8 -j RETURN
iptables -t nat -A V2FLY -d 10.0.0.0/8 -j RETURN
iptables -t nat -A V2FLY -d 127.0.0.0/8 -j RETURN
iptables -t nat -A V2FLY -d 169.254.0.0/16 -j RETURN
iptables -t nat -A V2FLY -d 172.16.0.0/12 -j RETURN
iptables -t nat -A V2FLY -d 192.168.0.0/16 -j RETURN
iptables -t nat -A V2FLY -d 224.0.0.0/4 -j RETURN
iptables -t nat -A V2FLY -d 240.0.0.0/4 -j RETURN

# 其他流量都重定向到你的本地的V2FLY-CLIENT本地端口
iptables -t nat -A V2FLY -p tcp -j REDIRECT --to-ports 10808

# 其他一些DNS流量
# Add any UDP rules
ip route add local default dev lo table 100
ip rule add fwmark 1 lookup 100
iptables -t mangle -A V2FLY -p udp --dport 53 -j TPROXY --on-port 10808 --tproxy-mark 0x01/0x01

# 应用规则,将自定义的链加入到传统的链中
iptables -t nat -A PREROUTING -p tcp -j V2FLY
iptables -t mangle -A PREROUTING -j V2FLY

# 启动客户端 V2FLY-CLIENT 进程常驻
/usr/bin/v2ray/v2ray -config /etc/config/V2FLY.json 
iptables -t nat -I PREROUTING -p tcp -m set --match-set redrock dst -j REDIRECT --to-ports 8848
iptables -t nat -I OUTPUT -p tcp -m set --match-set redrock dst -j REDIRECT --to-ports 8848

基于Youtube-dl下载Youtube的视频列表 2022-5-14

段落1、需求描述

一些冷门的视频,BT下载,迅雷下载,都不给力,而在Youtube 、Pornhub这些视频大网站上却有备份,故而,下载整个视频列表的需求

这次教程,还是以youtube-dl工具为主。有钱的土豪们,建议尝试IDM工具,好用,但是我这里没有购买授权,做盗版软件的使用说明,还是有点撒不开面子。

段落2、下载安装youtube-dl工具

youtube-dl工具的安装基本一条命令,但是,其基于python的环境,需要有ffmpeg的转码套件。

root@server:~# apt-get update

root@server:~# apt-get install python3 
   
root@server:~# apt-get install ffmpeg

root@server:~# wget -O /usr/bin/youtube-dl  https://youtube-dl.org/downloads/latest/youtube-dl

root@server:~# chmod +x /usr/bin/youtube-dl

root@server:~# ln -s /usr/bin/python3 /usr/bin/python   # 可选,若无/usr/bin/python,则执行

段落3、下载Youtube视频列表

本次视频,以下载Youtube平台,“奥特曼官方中文频道”里面的泰迦奥特曼的播放列表为例,做下载整个Youtube视频列表的操作示范

随意点开一集,如第一集,可以看到它的地址
https://www.youtube.com/watch?v=u2Cf9E0aVsA&list=PL6YzOVgBYcEZSB30tzuXeSAhNX3nwu4Wd

从地址栏,可以看到它的list数值为 PL6YzOVgBYcEZSB30tzuXeSAhNX3nwu4Wd

整个播放列表为


下载参数为
/usr/bin/youtube-dl -f best[ext=mp4] -k -c -i  https://www.youtube.com/playlist?list=PL6YzOVgBYcEZSB30tzuXeSAhNX3nwu4Wd
参数释义
-f 选择格式为最优的mp4格式
-k 保存文件
-c 断点续传
-i 忽略错误

段落4、常见错误-部分文件未下载完

假设,服务器上,下载视频,还有如下5集没有下载完,可根据视频列表的序号,进行下载

/usr/bin/youtube-dl -f best[ext=mp4] -k -c -i --playlist-items 8,15,20,23 https://www.youtube.com/playlist?list=PL6YzOVgBYcEZSB30tzuXeSAhNX3nwu4Wd
参数释义
--playlist-items 8,15,20,23  指定仅下载播放列表中的8,15,20,23这几集视频

段落5、常见错误-名称太长

一般使用原始的参数,会出现,保存视频文件到本地时候,文件名称过长,我这里通过指定output参数,已经实现了缩短文件名称的长度,一般不会再有这个报错

-o / --output 保存到本地的文件名称

--output 'TJ_%(id)s.%(ext)s'  泰迦拼音首字母缩写 + 视频的ID号 + 格式(.mp4)

整体命令为
/usr/bin/youtube-dl -f best[ext=mp4] -k -c -i --output 'TJ_%(id)s.%(ext)s' https://www.youtube.com/playlist?list=PL6YzOVgBYcEZSB30tzuXeSAhNX3nwu4Wd

段落6、常见问题,下载速度慢

正常的呦,基本上单线程就这样的速度,大概100KB/s,如果要快速的,建议,还是使用可以多线程下载的工具,如IDM之类的。

段落7、常见问题、曲艺类节目、仅下载Youtube视频中的音频

如下为下载歌曲,陈奕迅 – 爱情转移,到mp3格式

youtube-dl -x --audio-format mp3 https://www.youtube.com/watch?v=Sm_EGqzs2aA

附录1、视频

印度地区的通用透明代理,IP代理 2022-5-4

需求描述

印度地区,购买一些数字产品,会便宜一些,如下的URL提供印度地区的透明代理(类型为http/https/socks4/socks5),且每小时刷新,如有需要的,可以自取,无技术教学,请自行参考Dasmz的前面的教程。

India HTTP(s)/SOCKS(4/5) for Free

URL:
http://103.159.64.90:16801/IN.htm

NOTE:
1. The URL Page Content was update per Hour
2. The URL Cannot be accessed from CN

基于Docker部署的NextCloud云盘,图片/视频,无缩略图的解决办法 2022-5-4

章节1、需求描述

基于Docker部署成品软件,是对于不会技术的人而言,已经变为一件非常简单的事情,Docker它主要解决了,多部件软体程序组装的问题,比如Nextcloud云盘这样的依赖LNMP环境的总集成软件成品。

基于docker快速部署Nextcloud私有云 https://dasmz.com/?p=510 这篇文章中,我给大家介绍了,使用Docker来部署Nextcloud私有云盘,及配套的硬盘挂载功能。

但是,有一点问题出来了,就是这样部署的Nextcloud云盘,里面的图片,视频,都是没有缩略图的,观看的时候,略微有点不方便,今天的这篇教材,就是来解决这个问题的。

如果不会安装Docker,建议参考官方教程,比较新,比较权威,详细,本人不做过多介绍,地址 https://docs.docker.com/engine/install/

章节2、环境描述

Ubuntu 20.04  10.11.11.115
Docker-CE版本 Docker version 20.10.14, build a224086
Nextcloud版本 23.0.4

章节3、未修改前,所有的图片/视频都是无缩略图的样式,如下图

章节4、修改部署的步骤

前奏,开启一个测试用途的Nextcloud,并简单设置账号/密码,设置语言

root@ubuntu-server-01:~# docker pull nextcloud:latest
root@ubuntu-server-01:~# mkdir -p /var/www/nextcloud /media/vData
root@ubuntu-server-01:~# docker run -d --name myTestNextcloud -p 9888:80 -v /var/www/nextcloud:/var/www/html -v /media/HDD1TB:/var/www/vDISK nextcloud

4.1 安装必要的插件 Preview Generator

该APP的官方说明

安装方式,一般为,在登录进Nextcloud后的,页面右上方,选择”+应用”,搜索”preview generator”,直接点击启用即可。

但是,总归有例外,目前安装的官方的Nextcloud的23.0里面,应用中没有preview generator,于是,只能通过命令方式离线安装

SSH登录服务器

root@ubuntu-server-01:~# cd /var/www/nextcloud/apps
root@ubuntu-server-01:~# git clone https://github.com/nextcloud/previewgenerator
root@ubuntu-server-01:~# docker ps -a
CONTAINER ID   IMAGE       COMMAND                  CREATED          STATUS          PORTS                                   NAMES
ecc310bcffc3   nextcloud   "/entrypoint.sh apac…"   37 minutes ago   Up 37 minutes   0.0.0.0:9888->80/tcp, :::9888->80/tcp   myTestNextcloud
root@ubuntu-server-01:~# docker restart ecc310bcffc3

重启docker容器后,再通过浏览器登录Nextcloud管理页面,即可看到该APP,点击“启用”即可。

4.2 安装必要的解码 ffmpeg

由于我们是容器安装的,解码必须安装在容器内部,所以,如下的安装是在私有云容器中完成。

如果主要是为了看视频的,那就只需要安装ffmpeg,下面命令中的别的几个不需要安装。

2022-5-3 本次这个环境,安装的量大概是1.8GB

在容器内,安装好必要的组件后,直接退到主系统的环境,重启一下容器

root@ubuntu-server-01:~# docker exec -it  ecc310bcffc3 /bin/bash
Container# apt-get update
Container# apt-get install libreoffice ffmpeg imagemagick ghostscript
Container# CTRL + d
root@ubuntu-server-01:~# docker restart ecc310bcffc3

4.3 配置文件增加对应的文件格式,及配置定时任务刷新缩略图

修改配置文件 /var/www/nextcloud/config/config.php

'enable_previews' => true,
'preview_libreoffice_path' => '/usr/bin/libreoffice',
'enabledPreviewProviders' =>
 array (
    0 => 'OC\\Preview\\TXT',
    1 => 'OC\\Preview\\MarkDown',
    2 => 'OC\\Preview\\OpenDocument',
    3 => 'OC\\Preview\\PDF',
    4 => 'OC\\Preview\\MSOffice2003',
    5 => 'OC\\Preview\\MSOfficeDoc',
    6 => 'OC\\Preview\\Image',
    7 => 'OC\\Preview\\Photoshop',
    8 => 'OC\\Preview\\TIFF',
    9 => 'OC\\Preview\\SVG',
   10 => 'OC\\Preview\\Font',
   11 => 'OC\\Preview\\MP3',
   12 => 'OC\\Preview\\Movie',
   13 => 'OC\\Preview\\MKV',
   14 => 'OC\\Preview\\MP4',
   15 => 'OC\\Preview\\AVI',
 ),
如果只要视频缓存,可选配置参数
  'enable_previews' => true,
  'enabledPreviewProviders' =>
   array (
      0 => 'OC\\Preview\\Image',
      1 => 'OC\\Preview\\MP3',
      2 => 'OC\\Preview\\Movie',
      3 => 'OC\\Preview\\MKV',
      4 => 'OC\\Preview\\MP4',
      5 => 'OC\\Preview\\AVI',
   ),

配置文件修改增加好对应的格式内容后,重启容器,直接手工刷新一次

root@ubuntu-server-01:~# docker restart ecc310bcffc3
root@ubuntu-server-01:~# docker exec --user www-data ecc310bcffc3 php occ preview:generate-all

章节5、修改完成后的效果

章节6、配置定时刷新缩略图的任务

配置一个系统定时cron任务,让它每小时执行一次即可

root@ubuntu-server-01:~# crontab -e
 0 * * * * docker exec --user www-data ecc310bcffc3 php occ preview:generate-all

附录1、原创文章,手打码字,赞赏支持原创文章

Donate
云乞讨

附录2、参考链接

https://apps.nextcloud.com/apps/previewgenerator

https://apps.nextcloud.com/apps/previewgenerator/releases?platform=21

如23.0的下载链接

https://github.com/nextcloud-releases/previewgenerator/releases/download/v4.0.0/previewgenerator.tar.gz

[闲聊话题]国内主流媒体平台,诸如公众号/微博/知乎/今日头条/小红书/抖音,显IP归属地的事,及谈谈如何一般如何更改IP地址 20220430

特别提醒,本教材仅为通用的常规修改IP的技术教程,不针对任何APP或者软件进行特别演示。

视频 No.93,视频地址 https://youtu.be/8XyXYZMRk3Y

视频 No.94,视频地址 https://youtu.be/iq9xiz64QvY

大家可以,直接参考视频的操作,完成修改自己的IP

视频 No.96,国内,需要改IP到其他省份的需求,专项视频

视频 No.105 抖音IP归属,专栏,含修改IP归属的成功视频演示 20220717

如下为视频的内容提纲:

章节1、哪些人需要修改IP地址

1、政治类话题和因素: 特别是“大翻译运动”,主要促使显IP归属的主要原因
2、吃流量饭的群体: "人在美国,刚下飞机,谢谢邀请","假装在纽约","人在日本,旅游,下个月回国"
3、网络安全方向的从业群体: "隐匿自己的IP,随机多重代理","TOR洋葱代理"

章节2、推荐使用的修改IP的客户端软件

1、Windows/计算机:Chrome + switchyomega 或者 gost
2、Android/安卓手机:sagernet
3、iOS/苹果手机:Shadowrocket

章节3、常见的修改IP的协议及类型

1、传统VPN协议:openvpn ipsec (主要可改变IP地址,组网,较少)
2、现代的VPN协议:ss ssr trojan v2ray  (主要可改变IP地址,过墙,你现在基本用的这些)
3、透明代理:http https socks4 socks5  (主要免费的多,全球的基本都有)

章节4、现代VPN协议的工作模式

1、PAC模式,分流模式: 设备上的流量按照PAC规则清单预设的规则走,典型的PAC规则就是“绕过局域网及中国大陆地址”。
2、全局模式: 设备上,所有的流量都走向代理服务器。

章节5、根据地域区分更改IP需求

1、CN/CN: 
国内,需要改变为其他省份的IP地址。 --> 数据不过防火墙,已完成视频讲解

2、CN/Outside
2.1 海外热门地区的IP地址(梯子/机场)
国内,需要改变为海外热门地区的IP地址,美,日,新加坡,韩国,数据会通过防火墙,已完成视频讲解
2.2 海外冷门地区的IP地址(通用代理,透明代理,IP代理,基于gost链式转发流量)
国内,需要改变为海外冷门地区的IP地址,中东,非洲,北欧,东南亚,数据会通过防火墙,已完成视频讲解

3、Outside/CN
国外,正在旅游,下周回国,下个月回国,需要改变为国内省份的IP地址,适合离岸爱国的大V,数据会通过防火墙,不讲解。

4、Outside/Outside
人在国外,如下载BT等版权行为,需要隐藏自己的流量为其他国家的IP地址,数据不过防火墙,不讲解。

章节6、显示“未知”

市面上,好用的IP地址库,都是面向商业行为收费的,各个平台一般都会自己建IP地址数据库,如果IP地址判定及显示“未知”,那就是它自己的IP库,没有及时更新,没有这条IP的地址的记录。

章节7、怎么找IP代理的问题

一般通过搜索引擎搜索 socks5 proxy list,IP代理等关键词即可找到,部分收费的价格其实比较贵,一般呢,不推荐购买,免费的足够用了。

如下两个,是github上,持续更新透明代理数据的,两个项目
https://github.com/TheSpeedX/PROXY-List
https://github.com/hookzof/socks5_list

补充一个Dasmz提供的印度地区的通用的透明代理清单,如有需要,自取。

印度地区,购买一些数字产品,会便宜一些,如下的URL提供印度地区的透明代理(类型为http/https/socks4/socks5),且每小时刷新,如有需要的,可以自取,无技术教学,请自行参考Dasmz的前面的教程。

India HTTP(s)/SOCKS(4/5) for Free

URL:
http://103.159.64.90:16801/IN.htm

NOTE:
1. The URL Page Content was update per Hour
2. The URL Cannot be accessed from CN

章节8、按你说的做了,其他的都行,就某APP不行

本教程仅为修改IP的通用方法,常规的APP或网页,一般都肯定可以测试成功。
留言中的某APP的IP显示问题,属于其APP设计逻辑问题。
可能应该做的措施为:

  1. 拔掉手机里的中国/香港地区的SIM手机卡
  2. 关闭手机的定位
  3. 全局模式,使用VPN软件
  4. 选择一个节点,IP地址在其平台的IP地址库里

如上四点,理论上应该就可以刷新IP属地。

显示“未知”,主要因为其APP的IP地址数据库没有你当前VPN的IP的数据库记录,需要费时间尝试即可。

章节9、特别章节,场景需求为,人在国内,需要改IP到其他省份,技术讲解

9.1、概要描述

网络上有不少卖“IP代理”,“动态拨号”的,但是,资源非独享,网络稳定性堪忧。如果是国内热门地区,推荐购买主流公有云平台的产品,特别是国内热门的省份的,自己配置一套代理,自己资源独享使用,且可以多平台,多设备终端接入,会非常稳定,如

腾讯云CVM支持,“广东广州,上海,江苏南京,北京,四川成都,重庆”

阿里云ECS支持,“上海,深圳,北京,浙江杭州,河北张家口,山东青岛”

联通云ECS支持,“河北廊坊,内蒙古呼和浩特,上海,贵州贵阳……等,基本国内任意省份都有”,基础配置1核心 1GB内存 10GB磁盘 1Mbps大概的价格为900元/年(需要的,可私信联系)。

一般,国内的公有云服务器,对于新客户新注册的价格较友好,变成老用户续费的时候,价格都相对较高,这个要有心理准备,商业宽带的价格,国内一直如此。

如上的三家,就涵盖了许多省份了,一般场景足够用了。

上海 内蒙 北京 四川
山东 广东 江苏 河北
浙江 深圳 贵州 重庆

9.2、配置代理

部分云产品,创建VPS,在操作系统选择的下方,有安全产品的选项,务必不能勾上。不能,不能,不能。

按照我教程,编译安装Shadowsocks-libev服务端,AEAD加密算法支持 ,安装shadowsocks服务端,选用shadowsocks是因为,其简单高效,配套客户端齐全。

9.3、客户端使用

1、Windows/计算机: V2rayN-core 最新版本
2、Android/安卓手机:sagernet 最新版本
  2.1. 自动连接,关闭
  2.2. 安全建议,关闭
  2.3. IPv6路由,禁用
  2.4. 远程DNS,修改"tls://dns.google" 到 "114.114.114.114"
  2.5. 连接测试链接,修改为"http://m.163.com"
3、iOS/苹果手机:Shadowrocket 最新版本

章节10、抖音IP归属问题,专题解答(2022-7-17 补充的章节)

10.1、Question 抖音的IP归属信息,能否修改?

Answer: 可以 !

10.2、Qeustion 抖音的IP归属,判定规则?

Answer: 目前来说(截止2022-7-17),仅根据登录的IP地址,进行评论或发布视频,进行判定的

10.3、Qeustion 为啥我试了很多,都是未知?

Answer: 需要IP地址在抖音的IP地址库中,有记录信息。大部分人用的机场的节点,特点是基本都是VPS供应商的机房IDC的IP地址,都没有在抖音的IP地址库中。即便是部分运营商的IP地址,如果抖音的IP地址库没有收录,也显示未知。

10.4、成功案例截图(已打马赛克头像),美国,英国,韩国

10.5、操作示范

从我采集的通用IP代理里面,筛选出需要区域的代理清单,进行一次可用检测,根据经验选合适的进行抖音评论,确认IP是否能显示地理信息。如果

http://216.176.187.99:8886  抖音IP归属 韩国
LOCATION: US Wowrackcom

socks4://104.36.7.1:1337 抖音IP归属 美国
LOCATION: US LIGHT SPEED TECHNOLOGIES

http://12.218.209.130:53281 抖音IP归属 美国
LOCATION: US AT&T

socks4://12.218.209.130:13326 抖音IP归属 美国
LOCATION: US AT&T

socks4://41.242.66.74:5678 抖音IP归属 尼日利亚
LOCATION: NG General Telecommunication Networks 

socks4://86.28.76.189:4145 抖音IP归属 英国
LOCATION: GB Virgin Media 

10.6、难点

  • 拥有足够多的各地区可用的IP代理
  • 费时间,一个个在抖音中发表视频下的发布评论,测试IP显示的地理位置信息
  • 只要发布的评论,在抖音IP地址库中,有匹配记录,可显示位置的,即满足可触发主页的IP归信息更新。以后,只要保证自己用显示未知的节点登录,就不会触发更新IP归属。

附录0、如果需要一对一远程技术支持

如果观看视频无法自己配置,需要Dasmz远程技术指导,需要收人工工时费用,收费价格为 120 元人民币/小时。不足1小时的按1小时计算。

联系方式 Twitter/Telegram,ID都是 fdmove

附录1、赞赏作者

如果,你觉得本文内容对你有所帮助,欢迎打赏作者,以上内容都为作者辛苦原创。原创不易,且读且珍惜。

Donate
云乞讨

Ubuntu/Debian 的Linux环境,格式化超过2TB的磁盘

前缀、文档修改记录

2022-4-24 初始化编辑此文章,完稿
2025-3-16 更新

章节1、需求描述

买了一块4TB的磁盘,需要格式化,发现fdisk不支持2TB以上的容量

注意:格式化磁盘,会删除原磁盘上的数据/文件系统,确认在未挂载磁盘到文件系统的情况下,执行如下。

章节2、执行步骤

安装parted工具

root@server:~# apt-get install parted

执行磁盘格式化

root@server:~# parted /dev/sda
(parted) mklabel gpt    # 执行修改为GPT格式,可选gpt/msdos
(parted) unit s                                                           
(parted) print  # 查看是否有分区,如果有,就按编号删除
(parted) rm 1                                                             
(parted) mkpart HDD4TB ext4 0% 100%   # 执行分区,名字是HDD4TB,全部磁盘
(parted) print  # 查看分区执行完的效果                                                          
Model: ADplus SuperVer (scsi)
Disk /dev/sda: 7814037168s
Sector size (logical/physical): 512B/4096B
Partition Table: gpt
Disk Flags: 

Number  Start  End          Size         File system  Name    Flags
 1      2048s  7814035455s  7814033408s  ext4         HDD4TB

(parted) quit

如果出现提示,基本上没有按照系统的块大小对齐,用上面的unit s和mkpart百分比命令就OKAY

创建文件系统使用mkfs命令

// EXT4文件系统
mkfs.ext4 /dev/sdb1

// NTFS文件系统
mkfs.ntfs /dev/sdb1(需要安装 ntfs-3g 包)


// FAT32文件系统
mkfs.vfat -F 32 /dev/sdb1

章节3、其他

Warning: The resulting partition is not properly aligned for best performance.
Ignore/Cancel

如果出现如下报错,则可依次执行

# pvcreate /dev/vdb
  Device /dev/vdb excluded by a filter.

# wipefs -a /dev/vdb
/dev/vdb: 8 bytes were erased at offset 0x00000200 (gpt): 45 46 49 20 50 41 52 54
/dev/vdb: 8 bytes were erased at offset 0x136efffffe00 (gpt): 45 46 49 20 50 41 52 54
/dev/vdb: 2 bytes were erased at offset 0x000001fe (PMBR): 55 aa
/dev/vdb: calling ioclt to re-read partition table: Success

# pvcreate /dev/vdb
  Physical volume "/dev/vdb" successfully created.

# vgcreate vg01 /dev/vdb
  Volume group "vg01" successfully created

附录1、视频操作演示

附录2、@Dasmz

博客内,所有教程为手打原创教程,如果技术教程对您有所帮助,欢迎打赏作者。技术层面,闻道有先后,如有疏漏、错误,欢迎指正。技术博客的内容,一般具有一定的环境依赖,具有一定的年代依赖,酌情参考其中的内容,请勿完全照搬照抄。

对于博客内已提及的专业知识,如果需要技术指导,欢迎联系我,仅需支付工时费

Twitter: Dasmz

Youtube: @DasmzStudio

Telegram: @Dasmz

Donate
云乞讨

rsync 同步文件 基础的用法 使用教程 2022-04-17

需求描述

我把自己的BT下载放在云VPS上了,这样可以不占用家里宽带的上行带宽,文件在VPS上下载完成后,通过rsync命令,把文件同步到本地的树莓派即可

这里就来介绍一个rsync这个工具的基础用法

rsync,同步文件的工具,支持增量备份

环境描述

1、 云服务器VPS的Linux环境,BT下载,Nextcloud云盘

2、本地树莓派Linux环境

配置实施

需求是同步云服务器里面的文件,到本地的树莓派的SSD固态硬盘上

本地和远端都安装rsync,我这里都是Ubuntu,直接如下命令即可安装

apt-get update
apt-get install rsync

参数释义

-v:显示rsync过程中详细信息。可以使用"-vvvv"获取更详细信息。
-P:显示文件传输的进度信息。(实际上"-P"="--partial --progress",其中的"--progress"才是显示进度信息的)。
-n --dry-run  :仅测试传输,而不实际传输。常和"-vvvv"配合使用来查看rsync是如何工作的。
-a --archive  :归档模式,表示递归传输并保持文件属性。等同于"-rtopgDl"。
-r --recursive:递归到目录中去。
-t --times:保持mtime属性。强烈建议任何时候都加上"-t",否则目标文件mtime会设置为系统时间,导致下次更新
          :检查出mtime不同从而导致增量传输无效。
-o --owner:保持owner属性(属主)。
-g --group:保持group属性(属组)。
-p --perms:保持perms属性(权限,不包括特殊权限)。
-D        :是"--device --specials"选项的组合,即也拷贝设备文件和特殊文件。
-l --links:如果文件是软链接文件,则拷贝软链接本身而非软链接所指向的对象。
-z        :传输时进行压缩提高效率。
-R --relative:使用相对路径。意味着将命令行中指定的全路径而非路径最尾部的文件名发送给服务端,包括它们的属性。用法见下文示例。
--size-only :默认算法是检查文件大小和mtime不同的文件,使用此选项将只检查文件大小。
-u --update :仅在源mtime比目标已存在文件的mtime新时才拷贝。注意,该选项是接收端判断的,不会影响删除行为。
-d --dirs   :以不递归的方式拷贝目录本身。默认递归时,如果源为"dir1/file1",则不会拷贝dir1目录,使用该选项将拷贝dir1但不拷贝file1。
--max-size  :限制rsync传输的最大文件大小。可以使用单位后缀,还可以是一个小数值(例如:"--max-size=1.5m")
--min-size  :限制rsync传输的最小文件大小。这可以用于禁止传输小文件或那些垃圾文件。
--exclude   :指定排除规则来排除不需要传输的文件。
--delete    :以SRC为主,对DEST进行同步。多则删之,少则补之。注意"--delete"是在接收端执行的,所以它是在
            :exclude/include规则生效之后才执行的。
-b --backup :对目标上已存在的文件做一个备份,备份的文件名后默认使用"~"做后缀。
--backup-dir:指定备份文件的保存路径。不指定时默认和待备份文件保存在同一目录下。
-e          :指定所要使用的远程shell程序,默认为ssh。
--port      :连接daemon时使用的端口号,默认为873端口。
--password-file:daemon模式时的密码文件,可以从中读取密码实现非交互式。注意,这不是远程shell认证的密码,而是rsync模块认证的密码。
-W --whole-file:rsync将不再使用增量传输,而是全量传输。在网络带宽高于磁盘带宽时,该选项比增量传输更高效。
--existing  :要求只更新目标端已存在的文件,目标端还不存在的文件不传输。注意,使用相对路径时如果上层目录不存在也不会传输。
--ignore-existing:要求只更新目标端不存在的文件。和"--existing"结合使用有特殊功能,见下文示例。
--remove-source-files:要求删除源端已经成功传输的文件。


Options
 -v, --verbose               increase verbosity
     --info=FLAGS            fine-grained informational verbosity
     --debug=FLAGS           fine-grained debug verbosity
     --msgs2stderr           special output handling for debugging
 -q, --quiet                 suppress non-error messages
     --no-motd               suppress daemon-mode MOTD (see manpage caveat)
 -c, --checksum              skip based on checksum, not mod-time & size
 -a, --archive               archive mode; equals -rlptgoD (no -H,-A,-X)
     --no-OPTION             turn off an implied OPTION (e.g. --no-D)
 -r, --recursive             recurse into directories
 -R, --relative              use relative path names
     --no-implied-dirs       don't send implied dirs with --relative
 -b, --backup                make backups (see --suffix & --backup-dir)
     --backup-dir=DIR        make backups into hierarchy based in DIR
     --suffix=SUFFIX         set backup suffix (default ~ w/o --backup-dir)
 -u, --update                skip files that are newer on the receiver
     --inplace               update destination files in-place (SEE MAN PAGE)
     --append                append data onto shorter files
     --append-verify         like --append, but with old data in file checksum
 -d, --dirs                  transfer directories without recursing
 -l, --links                 copy symlinks as symlinks
 -L, --copy-links            transform symlink into referent file/dir
     --copy-unsafe-links     only "unsafe" symlinks are transformed
     --safe-links            ignore symlinks that point outside the source tree
     --munge-links           munge symlinks to make them safer (but unusable)
 -k, --copy-dirlinks         transform symlink to a dir into referent dir
 -K, --keep-dirlinks         treat symlinked dir on receiver as dir
 -H, --hard-links            preserve hard links
 -p, --perms                 preserve permissions
 -E, --executability         preserve the file's executability
     --chmod=CHMOD           affect file and/or directory permissions
 -A, --acls                  preserve ACLs (implies --perms)
 -X, --xattrs                preserve extended attributes
 -o, --owner                 preserve owner (super-user only)
 -g, --group                 preserve group
     --devices               preserve device files (super-user only)
     --copy-devices          copy device contents as regular file
     --specials              preserve special files
 -D                          same as --devices --specials
 -t, --times                 preserve modification times
 -O, --omit-dir-times        omit directories from --times
 -J, --omit-link-times       omit symlinks from --times
     --super                 receiver attempts super-user activities
     --fake-super            store/recover privileged attrs using xattrs
 -S, --sparse                turn sequences of nulls into sparse blocks
     --preallocate           allocate dest files before writing them
 -n, --dry-run               perform a trial run with no changes made
 -W, --whole-file            copy files whole (without delta-xfer algorithm)
     --checksum-choice=STR   choose the checksum algorithms
 -x, --one-file-system       don't cross filesystem boundaries
 -B, --block-size=SIZE       force a fixed checksum block-size
 -e, --rsh=COMMAND           specify the remote shell to use
     --rsync-path=PROGRAM    specify the rsync to run on the remote machine
     --existing              skip creating new files on receiver
     --ignore-existing       skip updating files that already exist on receiver
     --remove-source-files   sender removes synchronized files (non-dirs)
     --del                   an alias for --delete-during
     --delete                delete extraneous files from destination dirs
     --delete-before         receiver deletes before transfer, not during
     --delete-during         receiver deletes during the transfer
     --delete-delay          find deletions during, delete after
     --delete-after          receiver deletes after transfer, not during
     --delete-excluded       also delete excluded files from destination dirs
     --ignore-missing-args   ignore missing source args without error
     --delete-missing-args   delete missing source args from destination
     --ignore-errors         delete even if there are I/O errors
     --force                 force deletion of directories even if not empty
     --max-delete=NUM        don't delete more than NUM files
     --max-size=SIZE         don't transfer any file larger than SIZE
     --min-size=SIZE         don't transfer any file smaller than SIZE
     --partial               keep partially transferred files
     --partial-dir=DIR       put a partially transferred file into DIR
     --delay-updates         put all updated files into place at transfer's end
 -m, --prune-empty-dirs      prune empty directory chains from the file-list
     --numeric-ids           don't map uid/gid values by user/group name
     --usermap=STRING        custom username mapping
     --groupmap=STRING       custom groupname mapping
     --chown=USER:GROUP      simple username/groupname mapping
     --timeout=SECONDS       set I/O timeout in seconds
     --contimeout=SECONDS    set daemon connection timeout in seconds
 -I, --ignore-times          don't skip files that match in size and mod-time
 -M, --remote-option=OPTION  send OPTION to the remote side only
     --size-only             skip files that match in size
 -@, --modify-window=NUM     set the accuracy for mod-time comparisons
 -T, --temp-dir=DIR          create temporary files in directory DIR
 -y, --fuzzy                 find similar file for basis if no dest file
     --compare-dest=DIR      also compare destination files relative to DIR
     --copy-dest=DIR         ... and include copies of unchanged files
     --link-dest=DIR         hardlink to files in DIR when unchanged
 -z, --compress              compress file data during the transfer
     --compress-level=NUM    explicitly set compression level
     --skip-compress=LIST    skip compressing files with a suffix in LIST
 -C, --cvs-exclude           auto-ignore files the same way CVS does
 -f, --filter=RULE           add a file-filtering RULE
 -F                          same as --filter='dir-merge /.rsync-filter'
                             repeated: --filter='- .rsync-filter'
     --exclude=PATTERN       exclude files matching PATTERN
     --exclude-from=FILE     read exclude patterns from FILE
     --include=PATTERN       don't exclude files matching PATTERN
     --include-from=FILE     read include patterns from FILE
     --files-from=FILE       read list of source-file names from FILE
 -0, --from0                 all *-from/filter files are delimited by 0s
 -s, --protect-args          no space-splitting; only wildcard special-chars
     --address=ADDRESS       bind address for outgoing socket to daemon
     --port=PORT             specify double-colon alternate port number
     --sockopts=OPTIONS      specify custom TCP options
     --blocking-io           use blocking I/O for the remote shell
     --stats                 give some file-transfer stats
 -8, --8-bit-output          leave high-bit chars unescaped in output
 -h, --human-readable        output numbers in a human-readable format
     --progress              show progress during transfer
 -P                          same as --partial --progress
 -i, --itemize-changes       output a change-summary for all updates
     --out-format=FORMAT     output updates using the specified FORMAT
     --log-file=FILE         log what we're doing to the specified FILE
     --log-file-format=FMT   log updates using the specified FMT
     --password-file=FILE    read daemon-access password from FILE
     --list-only             list the files instead of copying them
     --bwlimit=RATE          limit socket I/O bandwidth
     --stop-at=y-m-dTh:m     Stop rsync at year-month-dayThour:minute
     --time-limit=MINS       Stop rsync after MINS minutes have elapsed
     --outbuf=N|L|B          set output buffering to None, Line, or Block
     --write-batch=FILE      write a batched update to FILE
     --only-write-batch=FILE like --write-batch but w/o updating destination
     --read-batch=FILE       read a batched update from FILE
     --protocol=NUM          force an older protocol version to be used
     --iconv=CONVERT_SPEC    request charset conversion of filenames
     --checksum-seed=NUM     set block/file checksum seed (advanced)
     --noatime               do not alter atime when opening source files
 -4, --ipv4                  prefer IPv4
 -6, --ipv6                  prefer IPv6
     --version               print version number
(-h) --help                  show this help (-h is --help only if used alone)


源路径如果是一个目录的话,带上尾随斜线和不带尾随斜线是不一样的,不带尾随斜线表示的是整个目录包括目录本身,带上尾随斜线表示的是目录中的文件,不包括目录本身

rsync -avz -e "ssh -p 22" root@10.11.11.247:/root/src /root/


rsync -avz -e "ssh -p 22" root@10.11.11.247:/root/src/*.gz /root/src/

基于v2ray使用其他Shadowsocks服务器的IP为落地 2022-4-12

段落1、需求描述

1台服务器,已配置的Shadowsocks-libev ,IP地址为 10.11.11.247

ss://aes-128-gcm:P1122330099@10.11.11.247:16805

1台服务器,配置的V2ray服务端,IP地址为 10.11.11.223

现在,需要让v2ray的流量,走到SS去。

实现的路由方向为:客户端 ~ ~ V2ray服务 ~ ~ SS服务

# Shadowsocks-libev IPv6出站优先的配置,参考 https://dasmz.com/?p=1804

# 编译安装Shadowsocks-libev服务端,AEAD加密算法支持,参考 https://dasmz.com/?p=1845

# 基于v2ray使用免费的socks5的IP为落地 ,参考 https://dasmz.com/?p=560

# VMess MD5 认证信息 淘汰机制 https://dasmz.com/?p=1051

段落2、需要配置V2ray的outbound参数

V2服务端配置文件

{
  "log": {
    "access": "/var/log/v2ray/access.log",
    "error": "/var/log/v2ray/errors.log",
    "loglevel": "info"
  },
  "inbound": {
    "port": 18505,
    "protocol": "vmess",
    "settings": {
      "clients": [
        {
          "id": "5b61942a-b2ee-434b-b39b-83daa7fcda39",
          "level": 1,
          "alterId": 6
        }
      ]
    }
  },
  "outbounds": [
    {
      "protocol": "shadowsocks",
      "settings": {
        "servers": [
          {
            "address": "10.11.11.247",
            "method": "aes-128-gcm",
            "ota": false,
            "password": "P1122330099",
            "port": 16805  
          }
        ]
      }
    }
  ],
  "routing": {
    "strategy": "rules",
    "settings": {
      "rules": [
        {
          "type": "field",
          "ip": [
            "10.0.0.0/8"
          ],
          "outboundTag": "blocked"
        }
      ]
    }
  }
}

          

上方是出站到Shadowsocks的服务端配置样例,已经过测试,有效。Shadowsocks的OTA已废弃,务必选择AEAD的加密算法。

客户端配置

{
  "log": {
    "access": "",
    "error": "",
    "loglevel": "warning"
  },
  "inbounds": [
    {
      "tag": "proxy",
      "port": 10808,
      "listen": "127.0.0.1",
      "protocol": "socks",
      "sniffing": {
        "enabled": true,
        "destOverride": [
          "http",
          "tls"
        ]
      },
      "settings": {
        "auth": "noauth",
        "udp": false
      }
    }
  ],
  "outbounds": [
    {
      "tag": "proxy",
      "protocol": "vmess",
      "settings": {
        "vnext": [
          {
            "address": "10.11.11.223",
            "port": 18505,
            "users": [
              {
                "id": "5b61942a-b2ee-434b-b39b-83daa7fcda39",
                "alterId": 6,
                "email": "t@t.tt",
                "security": "auto"
              }
            ]
          }
        ]
      },
      "streamSettings": {
        "network": "tcp"
      },
      "mux": {
        "enabled": false,
        "concurrency": -1
      }
    },
    {
      "tag": "direct",
      "protocol": "freedom",
      "settings": {}
    },
    {
      "tag": "block",
      "protocol": "blackhole",
      "settings": {
        "response": {
          "type": "http"
        }
      }
    }
  ],
  "routing": {
    "domainStrategy": "IPIfNonMatch",
    "rules": [
      {
        "type": "field",
        "inboundTag": [
          "api"
        ],
        "outboundTag": "api"
      }
    ]
  }
}
可能的报错,如果程序启动失败,大概率是v2ray对于非AEAD的加密算法的抛弃

例如
V2Ray 4.44.0 (V2Fly, a community-driven edition of V2Ray.) Custom (go1.17.3 linux/amd64)
A unified platform for anti-censorship.
2022/04/12 18:14:05 [Info] main/jsonem: Reading config: /etc/v2ray/config.json
main: failed to read config files: [/etc/v2ray/config.json] > infra/conf: unknown cipher method: aes-128-cfb

附录1、参考链接的清单

参考V2的SS协议配置 https://www.v2ray.com/en/configuration/protocols/shadowsocks.html

参考v2fly的配置 https://guide.v2fly.org/basics/shadowsocks.html#%E6%9C%8D%E5%8A%A1%E5%99%A8%E9%85%8D%E7%BD%AE

NaïveProxy 搭建部署安装教程 2022-4-8

段落1、简略介绍

NaïveProxy是一个基于谷歌浏览器的网络组建,进行数据包转发的套件,具体的用途,你们懂的呦,它最大的优势是TLS的流量指纹,是谷歌浏览器Chrome的,那个叫啥“泯然众人”,是的,流量就是特征就跟普通浏览器的一模一样了。

项目地址 https://github.com/klzgrad/naiveproxy

段落2、环境

美国服务器 1C-1G-15GB磁盘

本地Windows电脑

段落3、软件套装

Debian 10 系统

go语言环境

caddy环境,因为需要其正向代理的功能,Nginx目前不支持。

段落4、安装GO语言的环境

官网 https://go.dev/

GO Download Page

当前日期,go版本为1.18,但是,我这里需要安装go 1.17,因为go 1.18暂时还不支持qtls,如果有新版本,qtls功能支持了,你们到时候可以安装新版本。

root@server:~#  apt-get update
root@server:~#  apt-get install libnss3 debian-keyring debian-archive-keyring apt-transport-https   #安装依赖
root@server:~#  mkdir -p /root/src/ /usr/local/
root@server:~#  cd /root/src/
root@server:~#  wget https://go.dev/dl/go1.17.linux-amd64.tar.gz
root@server:~#  tar -zxvf go1.17.linux-amd64.tar.gz -C /usr/local/
root@server:~#  vi /etc/profile
#  /etc/profile 中添加 GO语言的 环境变量
export GOROOT=/usr/local/go
export PATH=$GOROOT/bin:$PATH
root@server:~#  source /etc/profile
root@server:~#  which go
/usr/local/go/bin/go
root@server:~#  go version
go version go1.17 linux/amd64

段落5、安装NaïveProxy和Caddy

需要安装NaïveProxy,且不是单独安装Caddy,务必按照命令执行。

以下命令,在服务器上执行,需要保证服务器到github的网络通畅。编译build需要一定的时间,看你服务器的CPU性能,耐心等待。

root@server:~# cd /root/src/
root@server:~# go install github.com/caddyserver/xcaddy/cmd/xcaddy@latest
root@server:~# ~/go/bin/xcaddy build --with github.com/caddyserver/forwardproxy@caddy2=github.com/klzgrad/forwardproxy@naive
root@server:~# cp caddy /usr/bin/
root@server:~# /usr/bin/caddy version        # 2022-4-8 23:09
v2.4.6 h1:HGkGICFGvyrodcqOOclHKfvJC0qTU7vny/7FhYp9hNw=  
root@server:~# setcap cap_net_bind_service=+ep /usr/bin/caddy  # 设置bind权限,可443

安装日志记录

root@server:~#   go install github.com/caddyserver/xcaddy/cmd/xcaddy@latest
go: downloading github.com/caddyserver/xcaddy v0.2.1
go: downloading github.com/Masterminds/semver/v3 v3.1.1

root@server:~#   ~/go/bin/xcaddy build --with github.com/caddyserver/forwardproxy@caddy2=github.com/klzgrad/forwardproxy@naive
2022/04/08 04:15:51 [INFO] Temporary folder: /tmp/buildenv_2022-04-08-0415.1787806031
2022/04/08 04:15:51 [INFO] Writing main module: /tmp/buildenv_2022-04-08-0415.1787806031/main.go
2022/04/08 04:15:51 [INFO] Initializing Go module
2022/04/08 04:15:51 [INFO] exec (timeout=10s): /usr/local/go/bin/go mod init caddy 
go: creating new go.mod: module caddy
go: to add module requirements and sums:
	go mod tidy
2022/04/08 04:15:51 [INFO] Replace github.com/caddyserver/forwardproxy => github.com/klzgrad/forwardproxy@naive
2022/04/08 04:15:51 [INFO] exec (timeout=10s): /usr/local/go/bin/go mod edit -replace github.com/caddyserver/forwardproxy=github.com/klzgrad/forwardproxy@naive 
2022/04/08 04:15:51 [INFO] Pinning versions
2022/04/08 04:15:51 [INFO] exec (timeout=0s): /usr/local/go/bin/go get -d -v github.com/caddyserver/caddy/v2 
go: downloading github.com/caddyserver/caddy/v2 v2.4.6
go: downloading github.com/caddyserver/caddy v1.0.5
...
日志非常多,不贴出来了……
...
/root/go/pkg/mod/github.com/lucas-clemente/quic-go@v0.23.0/internal/qtls/go118.go:5:13: cannot use "quic-go doesn't build on Go 1.18 yet." (untyped string constant) as int value in variable declaration

如果出现如下的报错提示,则需要降级GO语言环境

/root/go/pkg/mod/github.com/lucas-clemente/quic-go@v0.23.0/internal/qtls/go118.go:5:13: cannot use "quic-go doesn't build on Go 1.18 yet." (untyped string constant) as int value in variable declaration

报错提示,根据开发者说,暂时go 1.18还没有支持到qtls,所以,要安装go 1.17版本即可。

如果安装出现上面的报错,则把执行命令的目录下的缓存目录删掉,重新build即可。

如果提醒内容如下,表示build成功

go: downloading github.com/shurcooL/sanitized_anchor_name v1.0.0
go: downloading github.com/OneOfOne/xxhash v1.2.2
go: downloading github.com/spaolacci/murmur3 v1.1.0
go: downloading github.com/fsnotify/fsnotify v1.4.9
go: downloading golang.org/x/mod v0.4.2
go: downloading github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da
go: downloading github.com/klzgrad/forwardproxy v0.0.0-20210613072432-ff60d3bb5ad1
go: found github.com/caddyserver/forwardproxy in github.com/caddyserver/forwardproxy v0.0.0-00010101000000-000000000000
go: downloading github.com/klauspost/cpuid v1.2.5
2022/04/08 06:12:32 [INFO] exec (timeout=0s): /usr/local/go/bin/go build -o /root/src/caddy -ldflags -w -s -trimpath 
2022/04/08 06:17:07 [INFO] Build complete: ./caddy
2022/04/08 06:17:07 [INFO] Cleaning up temporary folder: /tmp/buildenv_2022-04-08-0548.1309641503

段落6、Caddy的配置文件

通常大家都用的IPv4地址,故而,这里需要配置一个域名的A记录,指向你的服务器公网IPv4地址,且需要一套可信的证书文件,不要用自签的证书。

官方给到的配置示例

{
  servers {
    protocol {
      experimental_http3
    }
  }
}
:443, example.com
tls me@example.com
route {
  forward_proxy {
    basic_auth user pass
    hide_ip
    hide_via
    probe_resistance
  }
  file_server { root /var/www/html }
}

语法解释,官方地址 https://caddyserver.com/docs/json/

{
  servers {
    protocol {
      experimental_http3  # 启用 HTTP/3
    }
  }
}
:443, example.com   # example.com为服务器的A或者AAAA记录,域名
tls me@example.com   # 邮箱地址
route {
  forward_proxy {
    basic_auth user pass   # 自定义用户名和密码 #多用户就按照这个格式新增一行
    hide_ip
    hide_via
    probe_resistance  # 抗探测
  }
  reverse_proxy {another.website.domain} # 要反代的网站,二选一
  file_server { root /var/www/html } # 自检的网站,二选一
}

Dasmz提醒,目前来说,国内的网络环境,不推荐启用HTTP/3,因为它使用了QUIC/UDP,国内的运营商QoS,对此并不友好。

其他Caddy参数用法示例
forwardproxy {
    basicauth user1 password1
    basicauth user2 password2
    ports     80 443
    hide_ip
    hide_via
    probe_resistance secret-link-kWWL9Q.com # alternatively you can use a real domain, such as caddyserver.com
    serve_pac        /secret-proxy.pac
    response_timeout 30
    dial_timeout     30
    upstream         https://user:password@extra-upstream-hop.com
    acl {
      allow     *.caddyserver.com
      deny      192.168.1.1/32 192.168.0.0/16 *.prohibitedsite.com *.localhost
      allow     ::1/128 8.8.8.8 github.com *.github.io
      allowfile /path/to/whitelist.txt
      denyfile  /path/to/blacklist.txt
      allow     all
      deny      all # unreachable rule, remaining requests are matched by `allow all` above
    }
}
给到一个服务器的示范配置信息 2022-4-9
#  /etc/caddy/caddy_server.json
{
  "admin": {
    "disabled": true
  },
  "logging": {
    "sink": {
      "writer": {
        "output": "discard"
      }
    },
    "logs": {
      "default": {
        "writer": {
          "output": "discard"
        }
      }
    }
  },
  "apps": {
    "http": {
      "servers": {
        "srv0": {
          "listen": [
            ":18443"
          ],
          "routes": [
            {
              "handle": [
                {
                  "handler": "subroute",
                  "routes": [
                    {
                      "handle": [
                        {
                          "auth_pass_deprecated": "U",
                          "auth_user_deprecated": "P_75b8B1",
                          "handler": "forward_proxy",
                          "hide_ip": true,
                          "hide_via": true,
                          "probe_resistance": {}
                        }
                      ]
                    },
                    {
                      "match": [
                        {
                          "host": [
                            "server.my999999999.com"
                          ]
                        }
                      ],
                      "handle": [
                        {
                          "handler": "file_server",
                          "root": "/var/www/html",
                          "index_names": [
                            "index.html"
                          ]
                        }
                      ],
                      "terminal": true
                    }
                  ]
                }
              ]
            }
          ],
          "experimental_http3": false,
          "tls_connection_policies": [
            {
              "match": {
                "sni": [
                  "server.my999999999.com"
                ]
              }
            }
          ],
          "automatic_https": {
            "disable": true
          }
        }
      }
    },
    "tls": {
      "certificates": {
        "load_files": [
          {
            "certificate": "/root/server.my999999999.com/server.my999999999.com.cer",
            "key": "/root/server.my999999999.com/server.my999999999.com.key"
          }
        ]
      }
    }
  }
}

运行服务端

/usr/bin/caddy run --config /etc/caddy/caddy_server.json

段落7、配置服务

# /etc/systemd/system/naive.service
[Unit]
Description=Caddy
Documentation=https://caddyserver.com/docs/
After=network.target network-online.target
Requires=network-online.target

[Service]
Type=notify
User=caddy
Group=caddy
ExecStart=/usr/bin/caddy run --environ --config /etc/caddy/caddy_server.json
ExecReload=/usr/bin/caddy reload --config /etc/caddy/caddy_server.json
TimeoutStopSec=5s
LimitNOFILE=1048576
LimitNPROC=512
PrivateTmp=true
ProtectSystem=full
AmbientCapabilities=CAP_NET_BIND_SERVICE

[Install]
WantedBy=multi-user.target

段落8、客户端配置

Release页面,下载 NaiveProxy 对应的客户端,解压执行,尽量用新版本的,修改config.json配置文件,编辑客户端配置文件,/etc/naive/config.json

{
  "listen": "socks://127.0.0.1:1080",
  "proxy": "https://U:P_75b8B1@server.my999999999.com:18443"
}
# 客户端执行
naive config.json

NaiveProxy 客户端配置(如果使用 HTTP3 则将 https:// 改为 quic://)

附录1、参考

XCADDY项目 https://github.com/caddyserver/xcaddy

https://www.oilandfish.com/posts/naiveproxy-caddy-2.html

https://raw.githubusercontent.com/proxysu/shellscript/master/Caddy-Naive/caddy-naive-install.sh