基于Web服务器搭建DoH服务器

本次配置DNS over HTTPS采用Ubuntu 20系统,需要安装dns-over-https和nginx

首先是dns-over-https的安装,在此使用在服务器编译安装的方法:

//安装golang
apt update
sudo apt install golang-1.22

//为go配置bash
sudo vim ~/.bashrc

//在文件末尾添加并:wq保存:
export PATH=$PATH:/usr/lib/go-1.22/bin

//应用新的bash配置文件
source ~/.bashrc

//更换go的代理(可选的)
go env -w GOPROXY=https://goproxy.cn

//清理go mod缓存(可选的)
go clean -modcache && go mod tidy

//安装git(可选的)
sudo apt install git

//克隆dns-over-https源代码并进入目录
git clone https://github.com/m13253/dns-over-https.git
cd dns-over-https

//编译并安装
make
sudo make install

//编辑dns-over-https配置文件并:wq保存
sudo vim /etc/dns-over-https/doh-server.conf
/*
在配置文件中,需要注意的是listen的端口,在此使用默认的8053端口;
此外还有http的路径,在此使用默认的"/dns-query";
需要修改的是upstream地址,即doh的上游服务器地址,在此使用"udp:127.0.0.53:53"(即Linux内建的DNS缓存,地址前端必须添加"udp:"前缀)。
特别的是,由于构建本DoH服务器的主要目的是规避DNS污染,而不是防追踪,所以Ubuntu系统的DNS上游直接采用了阿里云提供的内网DNS服务器,以最优化响应速率和稳定性。
*/

//启动doh-server并检查运行状态
sudo systemctl start doh-server
sudo systemctl status doh-server.service

//安装nginx
apt install nginx

//配置nginx.conf并:wq保存
sudo vim /etc/nginx/nginx.conf

关于nginx.conf的配置,在此详细描述。本次搭建的DoH服务与Web服务共生,虽然二者都采用443端口进行HTTPS通信,但可以通过路径做区分。

首先,在http块中添加转发上游:

upstream dns-backend {
    server 127.0.0.1:8053;
}

接着配置server做转发,在已经可以访问的server块(即已经配置好ssl和文件路径等的web server)中添加:

location /dns-query {
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header Host $http_host;
        proxy_set_header X-NginX-Proxy true;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_redirect off;
        proxy_set_header        X-Forwarded-Proto $scheme;
        proxy_read_timeout 86400;
        proxy_pass http://dns-backend/dns-query ;
        }

关于nginx的ssl的配置及ssl证书的签发,在本文就不多讲解了,可自行了解。也可查看结尾的参考教程。

配置完成后,启动nginx即可:

sudo service nginx start

之后可以在设备上测试DoH解析,最终的地址为:https://yourdomain.com/dns-query

参考:

H3C AP手动更新软件版本的一点笔记

有时AC中会出现“CAPWAP tunnel to AP Name went down. Reason: AP was reset due to inconsistent local and reported radio statistics.”警告,出现警告后AP即会重启,造成服务中断,且情况周而复始。

这可能是由于AP软件版本与AC版本不匹配造成的。

但有时AC并不会主动更新AP的软件版本(即使打开软件升级选项也是如此,原因未知),需要手动提取AC中的AP软件IPE文件,并导入AP中手动升级。

按照正常程序为AP配置好Telnet后,使用Telnet连接AP出现“Session stopped”;
直接使用Console线连接后,重复出现“Press ENTER to get started.”,但按回车间无法进入管理界面。

这是由于AP自动连接AC后仅用了管理CLI,需要进入AC配置开放:

[AC]probe
[AC]wlan ap-execute all exec-console enable

使用H3C的FTP客户端需要注意关闭Passive模式,并且第一次输入命令会提示密码错误,必须重新用user登录一遍。

[AP]ftp
ftp> passsive
ftp> user ap
ftp> get wa5300.ipe
ftp> quit
[AP]boot-loader file flash:/wa5300.ipe main
[AP]reboot

H3C路由器PPPoE配置IPv6

本文以MSR2600-10-X1为例,采用v7系统,公网为中国联通家庭宽带(带有动态公网IP与IPv6,已改桥接)。

dialer-group 1 rule ip permit
#
ipv6 dhcp pool v6  //创建DHCPv6无状态地址池
 option-group 1  //引用DHCPv6选项组1中的信息(见Dialer接口中的相关命令)
#
interface Dialer0  //PPPoE拨号接口
 mtu 1492
 ppp chap password simple pwd
 ppp chap user usr
 ppp ipcp dns admit-any 
 ppp ipcp dns request 
 ppp pap local-user usr password simple pwd 
 dialer bundle enable
 dialer-group 1
 dialer timer idle 0
 dialer timer autodial 60
 ip address ppp-negotiate
 tcp mss 1452
 nat outbound
 ipv6 address auto  //无状态自动配置IPv6(全球单播)地址
 ipv6 address auto link-local  //设置IPv6链路本地地址
 ipv6 dhcp client pd 1 rapid-commit option-group 1  //通过DHCPv6 PD向ISP请求前缀。pd 1指将获得的前缀分配为前缀编号1;option-group 1指将DHCPv6下发的其他选项(如DNS地址)指派到本地的选项组(option-group);rapid-commit指优先使用DHCPv6快速交互(rapid commit)模式。
#
interface Vlan-interface1  //第一个内网(比如是内部员工或家庭成员使用)
 ip address 192.168.8.1 255.255.255.0
 ipv6 mtu 1280  //H3C V7版本暂不支持ipv6 tcp mss,只能尽量减小MTU(此mtu设置会通过RA通告给“内网”的终端)。
 ipv6 dhcp select server  //指定接口工作在DHCPv6服务器模式
 ipv6 dhcp server apply pool stateless  //引用DHCPv6无状态地址池
 ipv6 address 1 ::1/64 //引用前缀编号1中的前缀,接口主机位设置为::1,前缀长度设置为/64(从运营商获得的委派前缀长度可能为/60)
 ipv6 nd autoconfig other-flag  //指示客户端使用DHCPv6获取IPv6地址之外的其他配置(如DNS)
 undo ipv6 nd ra halt  //允许在此接口上发送RA
 ipv6 nd ra interval 60 10  //RA的最大发送间隔和最小发送间隔(在最大和最小之间随机选择时机)
 ipv6 nd ra invalid-delegated-prefix advertise enable  //被委派前缀失效时发送RA,向内网终端宣告前缀失效(修订本文时新增的命令,对于无线一体化产品2020年9月的R5435P02版本开始支持,对于路由器产品2024年5月的R6749P2102版本开始支持)
 ipv6 nd ra dns server 240C::6666 sequence 0  //使用RA RDNSS通告DNS服务器,以兼容不支持DHCPv6的客户端
 ipv6 nd ra dns server 240C::6644 sequence 1  //使用RA RDNSS通告备用DNS服务器
#
interface Vlan-interface200  //第二个内网(比如给来宾、访客使用)
 ip address 192.168.9.1 255.255.255.0
 ipv6 mtu 1280
 ipv6 dhcp select server
 ipv6 dhcp server apply pool stateless
 ipv6 address 1 ::1:0:0:0:1/64  //运营商委派的前缀长度为/60。出于管理需要,让vlan200下终端获取的IPv6地址与vlan1下的相区别,在此设置接口的主机位为::1:0:0:0:1,前缀长度仍为/64
 ipv6 nd autoconfig other-flag
 undo ipv6 nd ra halt  //允许在此接口上发送RA
 ipv6 nd ra interval 60 10
 ipv6 nd ra invalid-delegated-prefix advertise enable
 ipv6 nd ra dns server 240C::6666 sequence 0
 ipv6 nd ra dns server 240C::6644 sequence 1
#
interface GigabitEthernet1/0/5  //拨号绑定的物理接口
 port link-mode route
 undo lldp enable
 undo dhcp select server
 pppoe-client dial-bundle-number 5
#              
 ip route-static 0.0.0.0 0 Dialer5
 ipv6 route-static :: 0 Dialer5  //IPv6默认路由

一些可能的优化指令:

ip redirects enable
ip unreachables enable
ip ttl-expires enable
#
ipv6 reassemble local enable

在PPPoE拨号环境下实现基于前缀委派(PD)的IPv6(H3C设备)_h3c pppoe ipv6-CSDN博客

H3C路由器配置证书后443接口无法启动HTTPS服务的解决方法

配置好pki证书和域之后,绑定SSL服务策略后无法在443端口启动HTTPS服务,具体采用的指令如下:

//配置SSL服务器端策略myssl,绑定PKI域
ssl server-policy myssl
pki-domain 1
//停止HTTP和HTTPS服务
no ip http enable
no ip https enable
//绑定HTTPS的SSL服务端策略
ip https ssl-server-policy myssl
//启动HTTP和HTTPS服务
ip http enable

此时报错:

Failed to enable HTTP server.

可以采用命令检查是否有业务占用了443端口

dis tcp
dis udp
undo autodeploy url enable
undo netconf soap https enable
undo restful https enable

之后再尝试启动HTTP服务。

雪铁龙世嘉究极用车指南

本文介绍2008-2012年款,采用2.0L自然吸气发动机(EW10A)的雪铁龙世嘉5速手动变速箱(5MT)车型的维护、修理、改装及使用技巧。

技术信息

  • 发动机型号:EW10A(内部代号RFN 10LH3X)
  • 变速箱型号:BE4(5速手动变速箱)
  • 轮胎尺寸:205/55/R16(配全尺寸备胎)
  • 轮毂规格:16寸 4×108 ET26 6.5J
  • 转向助力:电子液压助力
  • 雨刮尺寸:主驾驶侧28寸,副驾驶侧24寸,尾门14寸
  • 火花塞型号:原厂为冠军REC9MCLX(热值9,螺纹长度26.5mm,螺纹直径14mm,点火间隙0.9mm,安装扭矩25Nm)

发动机

EW10A发动机易发顿挫、不平顺故障,且时常不触发行车电脑故障码,以下列举可能的故障原因及注意事项。

  • 收油门顿挫(或踩油门迟滞):该故障可能由多种原因导致。首先应检查发动机下机脚胶是否损坏,如出现明显破裂、晃动,应及时更换;其次检查上游氧传感器(前氧传感器),当氧传感器被积碳或其他杂质污染时,可能会出现数据不准确的情况,且不会出现故障码,正常情况下上氧传感器的电压应在0.1-0.7v间跳变;最后,还应检查发动机的点火系统(如火花塞、高压线圈等)喷油系统(喷油嘴、燃油滤芯和供油压力等)进气系统(节气门、进气歧管是否漏气)离合器(离合器开关),在此不一一列举。
  • 低速踩油门顿挫(或迟滞):该故障具体表现为在1000-1500转加速过程中,发动机动力输出不平顺,出现”大喘气“的感觉,发动机怠速时还可能伴有”打颤“现象。应首先检查气门室盖上的废气阀是否工作正常,检查方法可通过怠速时拔出机油尺查看是否有机油喷出来判断,自行改装铝合金气门室盖后大概率出现此问题(因为副厂铝合金气门室盖的废气阀与原厂不同,怠速时废气无法进入进气道,随着转速的逐渐上升,曲轴箱压力逐渐增大,在1000转时废气阀突然打开,导致短暂混合气过浓,诱发动力的非线性输出),只需更换原厂气门室盖即可修复故障。
  • 间歇顿挫(尤其在发动机散热风扇启动时):该故障往往发生在夏季热车情况,怠速时发动机间歇剧烈“打颤”,或在行驶中途突然顿挫。出现该故障时,应检查发动机散热风扇电阻(调速器),当风扇电阻损坏时,发动机散热风扇的启动是突然性的,陡然上升的用电负载会导致发动机剧烈颤抖。而正常情况下,散热风扇的启动有3-5s的逐步加速过程。

该款发动机还时常伴有渗油、漏油的情况,以下列举常见漏油点:

  • 气门室盖:该发动机气门室盖垫为易耗品,应在保养时定期更换,否则会出现渗油的情况。但应注意不可使用副厂铝合金气门室盖,可能会导致曲轴箱压力高,机油废气再循环异常,出现动力不平顺的故障。
  • 缸体机油流道堵头:位于发动机与变速箱连接处上侧。
  • VVT轮油封:损坏时发动机正时侧出现渗油。
  • 凸轮轴瓦盖:凸轮轴瓦盖与缸盖连接处可能出现密封胶失效,该故障漏油易于气门室盖漏油混淆。
  • 机油泵:机油泵密封圈偶发失效。

变速箱

该车变速箱换档手感较差,时常出现倒档挂不上的情况,更换换档拉线可改善。

不建议更换第三方快排,由于其挂档后拉线位置与原厂不同,易损坏变速箱同步器。

驾驶辅助

定速巡航系统会出现不停闪烁、无法启用的情况时,应检查离合器踏板传感器刹车踏板传感器是否工作正常。

娱乐系统

该车根据年款、配置,主要有以下几款CD机(不考虑导航大屏款):

  • RD9:不支持蓝牙功能,升级其他型号CD机需要更改线束。
  • RD4:支持蓝牙功能(无流媒体播放,西门子CD通过外置蓝牙模块提供,升级RD45需要拆除蓝牙模块),支持碟换碟机(位于手套箱内),不支持USB和MP3;AUX1接入蓝牙,AUX2接入换碟机。
  • RD43:不支持蓝牙功能,支持换碟机(但似乎有兼容问题),支持USB和MP3。
  • RD45:支持蓝牙功能(可以流媒体播放,内置蓝牙),不支持换碟机,支持USB和MP3;AUX1空置,AUX2接入蓝牙,换碟机接口处输入针缺失,仅有供电和CAN针。

需要注意的是,要连接RD45的蓝牙,必须要升级2013年后生产的新版小黄屏才能配对(配件号9006824580-00)。配对后可使用原来的小黄屏,虽然流媒体蓝牙仍可用,但会出现显示错误。

另外更换CD机后,必须要用维修电脑修改CD机中设置的VIN码,否则会有不断的“滴滴”报警声。别要是,还需要开通相应功能。配置时,可能需要选中装配新型号CD机的车型来修改,原车的诊断目录中没有修改VIN选项或无法修改。

防盗系统

世嘉的原装钥匙外壳易老化破损,可直接移植电路板到标致的钥匙壳中。

钥匙电路板上的射频芯片偶发故障。

有时不定时锁定车辆或解锁车辆、拉开车门触发报警,可能是钥匙按键失灵,可用酒精浸泡清洁,或更换按键。

制动系统

感觉刹车力度偏软时,可更换高摩擦系数(f>0.4)的刹车片。

如果ABS故障灯亮起,应检查ABS传感器(车速传感器)。

车身

世嘉的前挡风玻璃下的集雨板容易因为老化而下沉、开裂,可以加装集雨板支架提供支撑。更换集雨板时,还应购买对应的胶条。

车门限位器易出现失效、异响。

主驾驶车窗按键易失灵。

尾门的微动开关与锁块偶发故障,在高温或低温下会失灵,通过拍打和下压有几率恢复。

悬挂系统

世嘉前减震弹簧可能由于涂层破损而发生锈蚀,导致强度下降最终发生断裂,该问题已于2024年发出召回。

世嘉配套减震器品牌主要有淅川、蒙诺、萨克斯和倍世登。其中淅川为原厂配套;蒙诺有万里路、倍骋和纵千山(替代倍骋)系列;萨克斯为采埃孚旗下;而倍世登虽然价格高,但与原车参数不甚相符,表现并不优秀。

前羊角上的球头更换较为困难。

空调

由于世嘉的空调滤芯位于发动机舱内,更换时应注意避免落叶落入风道。

世嘉的原厂空调压缩机为6缸,若想要更好的制冷效果,可改装7缸压缩机。

解决U盘安装Windows 2000/XP时找不到EULA的方法

使用Rufus制作的Windows2000安装U盘,安装过程中显示“安装程序无法找到最终用户许可协议(EULA)”(英文版为”Setup cannot find end user licensing agreement EULA”)。

该问题是由安装程序无法找到i386文件夹位置导致的。

要解决该问题,需要使用较早版本的Rufus(如3.x),并在制作安装U盘时勾选“使用 Rufus MBR 配合 BIOS ID”选项。

按序测试”0x80″、”0x81″….,直至安装程序正常运行。

(测试的ID与硬盘有关,如果电脑上直接入了一个U盘和一个硬盘,理论上正确的ID要是0x80,要么时0x81,如果由3个或更多设备,则类推)。

如果安装完进入系统后出现找不到“NT5INF.CAT”及其他文件,可能也是因为文件目录问题,可尝试修改原地址”C:\i386“为”D:\i386“。

迅时OM系列语音网关修改HTTPS证书

迅时OM语音网关的Web界面没提供修改HTTPS证书的功能,需要手动在CLI中修改,以下以OM20为例。

首先需要在Web管理页面中开启Telnet功能,并设置密码(高级→安全配置→Telnet)。

使用命令行工具接入语音网关的Telnet,用户名为root,密码为设置的密码。

直接修改原有的证书公钥与私钥:

//替换公钥
vi /mnt/rwfs/var/config/httpsCA/newreq.ca
//替换私钥
vi /mnt/rwfs/var/config/httpsCA/newreq.key

需要注意的是,原有的newreq.ca文件中,包含了额外的证书信息,为了避免bug,我们可以利用openssl来生成这部分信息,并替换掉原来的信息:

openssl x509 -in voip_cert.pem -text -noout

(如果vi编辑器中粘贴文本出现缩进错误,可以用:set noautoindent来关闭自动缩进。)

最后重启语音网关,打开Web页面,此时HTTPS证书已被替换。

H3C AC添加HTTPS证书

H3C的V7版本中,Web界面没有提供直接修改HTTPS证书的表单,所以需要在CLI中配置,以下以WX2510H-F为例,从创建根证书、签发子证书到最终导入AC并应用,讲解整个过程。

首先,使用OpenSSL生成私钥、签名请求和证书:

//生成根证书私钥
openssl genpkey -algorithm RSA -out root_key.pem
//生成根证书签名请求,这一步需要填写证书的详细信息(包括位置、机构等)
openssl req -new -key root_key.pem -out root_csr.pem
//签名根证书,并设定有效期10年(3650天)
openssl x509 -req -in root_csr.pem -signkey root_key.pem -out root_cert.pem -days 3650

接着,用根证书签署子证书:

//生成子证书私钥
openssl genpkey -algorithm RSA -out ac_key.pem
//生成子证书签名请求,和根证书一样,需填写相关信息
openssl req -new -key ac_key.pem -out ac_csr.pem

在签名子证书前,我们还需要创建一个.ext文件,以便在签发子证书加入额外的设定(比如是否可签发子证书、域名等):

basicConstraints=CA:FALSE
subjectAltName = @alt_names

[alt_names]
IP.1 = 192.168.1.5
DNS.1 = ac.example.com

然后,用根证书签名子证书,并设定有效期10年:

openssl x509 -req -in ac_csr.pem -CA root_cert.pem -CAkey root_key.pem -out ac_cert.pem -days 3650 -extfile ac.ext

因为H3C系统对于PEM文件的读取机制,我们还需要在记事本中将ac_key.pem与ac_cert.pem两个文件的内容组合到一起,生成ac_mix.pem文件。

至此,在PC中对证书的处理就完成了。接下来需要将证书导入AC并应用与HTTPS服务。

首先,我们需要先在Web页面向AC的Flash中上传根证书公钥root_cert.pem和子证书公私钥ac_mix.pem两个文件。(在系统面板下,左侧边栏“系统”→“文件管理”,直接上传至Flash根目录即可)

接着,进入CLI页面的System-view

//配置pki domain 1,关闭证书检查
pki domain 1
undo crl check enable
//导入根证书
pki import domain 1 pem ca filename root_cert.pem
//导入子证书
pki import domain 1 pem local filename ac_mix.pem
//配置SSL服务器端策略myssl,绑定PKI域
ssl server-policy myssl
pki-domain 1
//停止HTTP和HTTPS服务
no ip http enable
no ip https enable
//绑定HTTPS的SSL服务端策略
ip https ssl-server-policy myssl
//启动HTTP和HTTPS服务
ip http enable
ip https enable

重新打开Web页面,此时证书已替换为自己签名的证书。

如果要避免浏览器显示“不安全”,还需要在Windows系统中导入我们自己的根证书,步骤如下:

搜索→管理计算机证书→受信任的根证书颁发机构→证书→操作→所有任务→导入→root_cert.pem

Ubuntu更新高版本MariaDB

备份数据库:

mysqldump -u root dbname > dbname_backup.sql

添加官方repo:

wget https://r.mariadb.com/downloads/mariadb_repo_setup

echo "935944a2ab2b2a48a47f68711b43ad2d698c97f1c3a7d074b34058060c2ad21b  mariadb_repo_setup" \
       | sha256sum -c -

chmod +x mariadb_repo_setup

sudo ./mariadb_repo_setup

强制升级:

sudo apt update
sudo apt -u dist-upgrade

VUE基于nginx的快速部署教程

在部署前,服务器应配置好nginx,见Ubuntu部署nginX

编写好的VUE代码,可以在本地编译(编译好后将dist文件通过FTP上传服务器),也可以在服务器端进行编译(服务器安装node.js进行编译)。

如果本地编译,直接

npm run build

当提示”built in x.xx s“后即为编译成功,结果文件存于当前目录的dist文件夹内。

使用MobaXterm或者Xshell之类的软件连接到服务器,通过FTP将dist文件上传到设置的目录即可,比如“/etc/nginx/html/”,应注意需要nginx有足够的文件权限访问上传的文件。

如果在服务器编译,需要服务器安装node.js和npm

sudo apt install nodejs npm
// 由于apt中的node.js版本较老,还需要通过npm升级版本
npm install n -g
sudo n stable
hash -r

然后通过FTP或者git将源码放到服务器中,在源码目录中执行

npm run build

然后把编译好的dist文件移动到设置的目录就可以了。

Ubuntu部署nginX

通过APT安装nginx

sudo apt update
sudo apt upgrade
sudo apt install nginx

编辑nginx的配置文件

//nginx配置的主文件
sudo vim /etc/nginx/nginx.conf
//nginx.conf默认引用了/etc/nginx/conf.d/中的所有.conf文件,所以建议以在conf.d中添加文件的形式添加web服务配置
sudo vim /etc/nginx/conf.d/vm.conf

以基本的web服务为例,vm.conf的配置内容可以是:

server {

    # 使用的端口,及是否作为默认服务
    listen    16666 default_server;

    # 服务器名称,同一个IP的同一个端口可以设置为不同的域名,nginx可以根据用户访问的域名的不同      提供不同的网站服务。
    server_name yttj.f3322.net:16666;

    # 文件的位置
    location / {

        # 文件根目录
        root     /usr/share/nginx/html;

        # 主页文件名
        index    index.html;
    }
}

配置完成后,即可启动nginx

sudo systemctl start nginx
#启用开机自动启动
sudo systemctl enable nginx

Ubuntu的防火墙默认开启,还应设置防火墙开放服务的端口

sudo ufw allow 16666

Jupyter Notebook安装于虚拟机或云服务器

系统为Ubuntu Server 22.04.2。

pip install jupyter
jupyter notebook --generate-config
vim ~/.jupyter/jupyter_notebook_config.py

在ipython,用jupyter自带的密码生成器生成哈希密码,复制最终的out结果

ipython
>>> from notebook.auth import passwd
>>> passwd()

修改配置文件中的配置(必须要修改ip才能在外网访问)

c.NotebookApp.ip = 'xxx.xxx.xx.xx'
c.NotebookApp.open_browser = False
c.NotebookApp.password = ''  #此处应为前文中复制的哈希密码
c.NotebookApp.port = 8888
c.NotebookApp.allow_remote_access = True

防火墙开放8888端口

sudo ufw allow 8888

启动Jupyter Notebook

jupyter notebook

外网访问IP:8888即可

(notebook中的python环境可能与系统的环境不一致,进而出现找不到依赖库的情况,最简单的方法是直接在notebook中安装包,从根源上解决就得给notebook配置kernel)

! pip install numpy    #在jupyter notebook 中直接安装库