nextcloud中使用turn server提高 talk视音频通话效果

为什么需要turn server,如果你的nextcloud实例运行在反向代理之后或是其他原因(nat)无法暴露nextcloud talk的端口,这个时候就需要一个turn server转发talk的端口,默认为3478,下面turn server配置端口为3478,为了方便这里使用docker compose部署一个coturn服务器。

安装配置coturn

由于这里使用的docker compose部署,所以需要docker环境和安装docker-compose,这部分可以参考docker官方文档去安装。

接下来,为coturn创建docker-compose.yml文件,用来部署coturn

$ mkdir coturn
$ cd coturn
$ vi docker-compose.yml

docker-compose.yml文件内容:

version: "3"
services:
  coturn:
      image: instrumentisto/coturn
      container_name: coturn
      tmpfs:
        - /var/lib/coturn
      volumes:
      - ./turnserver.conf:/etc/coturn/turnserver.conf
      ports:
        - 3478:3478
        - 3478:3478/udp

其中ports根据自己的需求需要,nextcloud talk默认端口为3478

接下来在docker-compose所在文件夹创建coturn的配置文件,同样根据配置文件所在修改,volumes中使用为./turnserver.conf,将其挂载到容器中  /etc/coturn/turnserver.conf 

$ vi ./turnserver.conf
listening-port=3478
fingerprint
use-auth-secret
static-auth-secret=<generated secret>
realm=<domain or ip>
total-quota=100
bps-capacity=0
stale-nonce
no-multicast-peers

然后修改realm为服务器域名或IP,使用openssl生成验证使用的密钥,替换到static-auth-secret

$ openssl rand -hex 32

在nextcloud talk设置中如要使用turns协议,realm需要使用域名

一切准备好之后,就可以开始部署coturn服务了,在docker-compose.yml所在目录中:

$ docker-compose up -d

在nextcloud中配置turn server

coturn 服务启动完之后,就可以在nextcloud中配置talk使用coturn服务器了

登录到自己所在的nextcloud中,来到管理员配置-通话中找到turn 服务器,添加新的coturn服务器,添加服务器地址和验证密钥后看到连接验证出现绿色的勾就代表配置正确可以使用了。

ensp 添加路由设备后无法启动console一直闪#号的解决方法

ensp 经过排查跟windows防火墙有关,如果是安全不敏感的,直接关掉防火墙即可,或是在windows防火墙中添加允许通过windows defender防火墙的应用。添加 eNSP(c:\Program Files\Huawei\eNSP\eNSP_Client.exe)、ensp_vboxserver(c:\Program Files\Huawei\eNSP\vboxserver\ensp_vboxserver.exe),同时允许专用、共用网络。

在ensp安装完毕后,添加交换机使用正常,而路由设备则无法正常使用,console中一直闪现#号。

这个时候打开virtaulbox中,可以发现有设备实例已经运行,查看该虚拟机可以看到,已经正常启动到登录状态。

随后在ensp中停止该设备并退出ensp,重新打开ensp后看到有提示加ensp添加到windows防火墙信任的应用列表中,允许在通过公用网络的提示。

于是打开windows 防火墙设置查看,打开“允许应用或功能通过Windows Defender防火墙”,尝试添加ensp时提示,该应用已经允许通过。但是在打开 ensp 的时候依然会有添加例外的提示。

到此考虑到跟网络相关,打开windows defender防火墙设置-启用或关闭windows defender防火墙,在专用网设置和公用网设置中勾选中Windows Defender防火墙阻止新应用时通知我,确定保存。

然后再打开ensp,会弹出网络访问窗口,分别是ensp和ensp_vboxserver,点击允许访问,之后再添加路由设备就正常了。

hetzner 桥接使用ipv6导致的mac abuse警告

最近在hetzner的独服上装了pve跑了几个虚拟机,并做好了nat网络端口转发,后面又想着IPV6要用起来,于是在各vm上又添加了网卡,桥接到原有的宿主机网卡上,配置好ipv6地址。

测试网络正常联通,可是不久后便收到hetzner发来的邮件,大致内容为:

We have detected that your server is using different MAC addresses from those allowed by your Robot account.

Please take all necessary measures to avoid this in the future and to solve the issue.

[email protected] wrote: > #1581844 (176.9.127.34) > Allowed MACs: > Unallowed MACs:

> 02:d5:9e:70:29:a8 > 30:85:a0:b5:5a:5f > 4e:5f:48:27:5e:de

原因大概是我在虚拟机中配置了ipv6地址然后通过宿主机桥接到网络出去,上层监控流出流量中MAC地址不是物理机原来的MAC。原来的ipv6地址配置按宿主机配置的:

allow-hotplug eth1
      address 2a02:5f8:152:923c::3/64
      gateway fe80::1

在虚拟机配置中先删除掉桥接ipv6的网卡,随后便收到hetzner发来的ticket解决的邮件。然后找到ipv6 路由模式配置虚拟机ip,也没有再收到network abuse MAC-Errors的邮件了

allow-hotplug eth1
iface eth1 inet6 static
      address 2a02:5f8:152:923c::3/64
      gateway 2a02:5f8:152:923c::2

gateway 2a02:5f8:152:923c::2 为宿主机ipv6地址

最后一步,问题解决后要要给hetzner邮件中发送的statement链接中填写声明信息,大概就是做了什么东西导致的问题,怎么解决的。

PVE反向代理后VNC无法访问的问题

昨天在nginx上给pve做了一下反向代理,在测试完登录成功后便没多在意以为没问题了。今天在登录pve后访问虚拟机console后发现无法连接,后从官方文档找到reverse proxy 文档,发现配置内容中少了两项:

 proxy_set_header Upgrade $http_upgrade;
 proxy_set_header Connection "upgrade"; 

nginx文档中描述,此配置是用于做websocket连接的代理选项。

PVE下安装ESXI测试环境

启用嵌套虚拟化

验证节点CPU是否支持硬件辅助虚拟化

# cat/proc/cpuinfo |grep -E '(vmx|svm)'

有结果输出则CPU支持硬件辅助虚拟化,Intel的VTX(vmx)、AMD的AMD-V(SVM)

启用嵌套虚拟化

如果重载模块后 cat /sys/module/kvm_intel/parameters/nested 输出仍然为N,需要重启节点。

  • Intel编辑修改/etc/modprobe.d/kvm-intel.conf,重载模块
# vim /etc/modprobe.d/kvm-intel.conf 
options kvm ignore_msrs=y options kvm-intel nested=Y ept=Y
# modprobe -r kvm-intel kvm; modprobe kvm kvm-intel
  • AMD同intel一样,只是模块名称不同。
# vim /etc/modprobe.d/kvm-amd.conf 
options kvm ignore_msrs=y options kvm-amd nested=Y ept=Y 
# modprobe -r kvm-amd kvm; modprobe kvm kvm-amd

虚拟机设置

在启用嵌套虚拟化后,虚拟机的CPU类型需要设置为host

# qm set <vmid> --cpu cputype=host

或在web界面中直接修改

安装esxi

创建虚拟机的要求

  1. OS Type :Other
  2. CPU Type:host
  3. Network Type: VMWare vmxnet3
  4. NUMA:禁用 (启用NUMA无法启动到安装界面,failed to resolve circular relocation)
  5. SCSI Controller Type: Default (LSI 53C895A)

esxi创建虚拟机默认情况会无法启动,需要打开虚拟化嵌套

vim /etc/vmware/config  
vmx.allowNested = "TRUE"

pve集群中使用zfs replication做HA

这两天因为QNAP NAS意外断电,造成共享的NFS文件系统出现问题,而PVE原有的共享存储都是位于该NAS共享的NFS上。先是发现集群中vm的性能出奇的差,从vnc console登录进系统的时候都要卡许久,后发现大部分nginx转发的后端都出现502、503等无法访问的问题。在QNAP中检查修复文件系统后,服务才恢复正常。 所以想着还是找多两块硬盘,在两节点上各加一块,做ZFS Pool,在集群中使用zfs replicaion 做HA。

创建ZFS pool

要使用replication功能,必须使用ZFS文件系统。在每个节点中创建相同名称的zfs池。需要注意的是,在WEB UI中无法在不同节点中创建相同名称的ZFS存储,所以需要登录到每个节点中创建zfs pool,这里使用的是单硬盘。

# fdisk /dev/sda    ##如果是未分区的硬盘可以忽略
>> 进到 fdisk中按o清空分区表,按w保存退出
#  zpool create -f pve-cluster-zfs /dev/sda

在节点中创建完zfs pool后,就可以在web ui中添加存储。 在web管理页面中,点击Datacenter–Storage–Add–ZFS,填写ID <ZFS_REP>(后面创件虚拟机使用存储),ZFS pool选择先前创建的 pve-cluster-zfs。

创建测试虚拟机

创建新的虚拟机,HARD DISK Storage存储选中Datacenter中创建的ZFS_REP,大小设置为1G即可。

选中刚创建完的虚拟机,点击Replication–Add,将Schedule设置为”*/1″,每分钟创建同步一次。 一分钟后,应看到该任务被执行,如

2021-07-01 23:05:00 102-0: start replication job 2021-07-01 23:05:00 102-0: guest => VM 102, running => 0 2021-07-01 23:05:00 102-0: volumes => ZFS_REP:vm-102-disk-0 2021-07-01 23:05:01 102-0: create snapshot ‘replicate_102-0_1625151900‘ on ZFS_REP:vm-102-disk-0 2021-07-01 23:05:01 102-0: using secure transmission, rate limit: none 2021-07-01 23:05:01 102-0: full sync ‘ZFS_REP:vm-102-disk-0’ (replicate_102-0_1625151900) 2021-07-01 23:05:02 102-0: full send of pve-cluster-zfs/vm-102-disk-0@replicate_102-0_1625151900 estimated size is 29.1K 2021-07-01 23:05:02 102-0: total estimated size is 29.1K 2021-07-01 23:05:02 102-0: TIME SENT SNAPSHOT pve-cluster-zfs/vm-102-disk-0@replicate_102-0_1625151900 2021-07-01 23:05:03 102-0: successfully imported ‘ZFS_REP:vm-102-disk-0’ 2021-07-01 23:05:03 102-0: end replication job

schedule:这里设置的schedule */1只是为了快速测速看到结果用,实际使用视情况而定,如考虑虚拟机的镜像大小,网络带宽等。

创建HA

Datacenter–HA–Groups–Create,创建TESTREP组,选中HA节点并设置优先级。 Datacenter–HA–Add,选中VM102,group选择TESTREP。

# ha-manage groupadd TESTREP -nodes "node1:1,node2:2"
# ha-manager add vm:102 --state started --group TESTREP --max_relocate 2

只在部分节点上存储池需要做节点访问限制,restriction限制访问节点,storage.cfg配置如下

# vim /etc/pve/stroage.cfg
zfspool: px-zfs-z1
        pool px-zfs-z1
        content images,rootdir
        mountpoint /px-zfs-z1
        nodes pve
        sparse 1

nodes: 指定节点

如果没有做节点访问限制,虚拟机在HA迁移时候会报错:

Failed to sync data - could not activate storage 'Migration of VM between nodes failed - could not activate storage 'px-zfs-z1', zfs error: 

PVE 使用QDevice作为外部投票节点

新版PVE cluster不支持双机HA,因此cluter ha至少要三个节点以上。不过也可以使用外部投票机制,创建一个2+1的集群,外部设备仅作为投票用,不参与虚拟化其他工作。

  • 外部设备上安装 QDevice-Net
$ sudo apt install corosync-qnetd -y 

因为该设备仅作为投票用,因此找一个行能较低,功耗低的开发板足矣。这里使用一个跑在nextcloud 的rock64,尽量把剩余资源利用上。

  • 在所有PVE节点中安装corosync-qdevice
# apt install corosync-qdevice -y 
  • 在PVE集群中加入投票节点
# pvecm qdevice setup 192.168.0.249

需要注意的是,添加投票节点时,确保所有集群节点都处于在线状态,此处192.168.0.249为上面的rock64。

Ubuntu中使用cockpit管理kvm虚拟机

cockpit

使用cockpit管理kvm需要安装cockpit本身,还有cockpit-machines组件来管理虚拟机

$ sudo apt update
$ sudo apt install -y kpit cockpit-machines
$ sudo systemctl start cockpit

kvm、qemu、libvirt

安装kvm、qemu、libvirt相关工具

$ sudo apt install qemu qemu-kvm libvirt-bin  bridge-utils  virt-manager
$ sudo systemctl start libvirtd
$ sudo systemctl enable libvirtd

创建虚拟机无法启动network相关问题

在安装完成kvm后从cockpit中创建虚拟机时报错:libvirtError: Requested operation is not valid: network ‘default’ is not active,在用virsh 尝试激活default network失败。

$ sudo virsh net-start default

error: Failed to start network default
error: internal error: Failed to initialize a valid firewall backend

从错误信息中可以看到,无法初始化防火墙后端,需要安装firewalld,然后重启libvirtd

$ sudo apt update && sudo apt install firewalld -y
$ sudo systemctl enable --now firewalld
$ sudo systemctl restart libvirtd****

opensuse 安装使用 zerotier

opensuse安装编译环境

$  sudo zypper install -y gcc clang make

编译安装zerotier

$ git clone https://github.com/zerotier/ZeroTierOne
$ cd ZeroTierOne
$ make
$ sudo make install

启动并加入zerotier网络

$ sudo nohup zerotier-one &
$ zerotier-cli join <zerotier network id>

 

 

nginx反向代理出现阻止载入混合活动内容的错误

最近在访问wordpress后台时,经常出现页面加载不全,甚至是完全空白的情况。在打开浏览器调试后发现错误信息:************ was loaded over HTTPS, but requested an insecure XMLHttpRequest endpoint ‘***************‘. This request has been blocked; the content must be served over HTTPS.

了解该错误造成原因是由于新版浏览器默认禁止混合内容的载入,通过浏览器站点设置可以解决。

另外考虑近期用了给wordpress做了反向代理后才出现这种情况,所以想着是否nginx反向代理是否有设置可以解决改问题,解决方法是在nginx配置文件server或location域中添加:

add_header Content-Security-Policy upgrade-insecure-requests;

然后重启nginx即可,这样在不同的电脑上就不用调整每个浏览器的设置

OpenSuse 编译 deepin-screen-recorder

安装依赖库

 sudo zypper install -y libqt5-qtbase-devel libqt5-linguist-devel xcb-util-devel libdframeworkdbus-devel dtkgui-devel dtkwidget-devel libqt5-qtx11extras-devel libqt5-qtmultimedia-devel procps-devel libXcomposite-devel libXtst-devel libXcursor-devel 
sudo ln -s /usr/bin/lupdate-qt5 /usr/bin/lupdate
sudo ln -s /usr/bin/lrelease-qt5 /usr/bin/lrelease
sudo ln -s /usr/bin/qmake-qt5 /usr/bin/qmake

拉取deepin-screen-recorder

$ git clone https://github.com/linuxdeepin/deepin-screen-recorder
$ cd deepin-screen-recorder
$ git checkout master

拉取回来的默认分支为uos,需要切换到master分支

  • 修改istream.tcc在#include后添加 #undef min
vim /usr/include/c++/10/bits/istream.tcc 
#undef min
  • 修改以下文件,引用QPainterPath
  1. src/utils.cpp
  2. src/widgets/shapeswidget.cpp
  3. src/widgets/tooltips.cpp
#include <QPainterPath>

编译

$ mkdir build
$ cd build
$ qmake ..
$ make -j$(nproc)
$ sudo make install 

PVE修改虚拟机ID

前段时间在pve上做redis实验的时候创建的虚拟机,发现原有创建时ID与先前认为的规范不一致,所以需要修改为正确的ID。

关闭需要修改ID的虚拟机

使用虚拟机名称过滤停止虚拟机实例

# for vm in `qm list |grep redis |awk '{print $1}'`; do qm unlock  $vm;qm stop $vm; done

重命名虚拟机配置文件

进入到/etc/pve/nodes/pve,KVM虚拟机对应目录为qemu-server,lxc容器为lxc,重命名旧配置文件为新ID名称。这次目的只是为了修改虚拟机ID,所以不用做其他操作。

如果是修改了相应的磁盘信息之类的,则需要修改配置文件中相应的项。

# mv 331.conf 131.conf

因为在这里多台虚拟机都是连续的ID号,所以使用for来重命名

# for i in {1..6};do mv 33$i.conf 13$i.conf; done

 

esxi启用ssh客户端

在esxi中查看ssh客户端是否启用

esxcli network firewall ruleset list --ruleset-id sshClient

如果结果非true,使用下面的指令启用ssh客户端

esxcli network firewall ruleset set --ruleset-id sshClient --enabled=true

如果不启用ssh客户端,则无法在esxi中使用ssh连接到其他机器,亦无法使用scp拷贝文件

系统启动前进入fsck修复文件系统

当linux系统运行时候,无法对已挂载文件系统进行尝试性修复,所以当一个ext(n)根文件系统出现损坏时候,需要在开机时使其执行fsck修复根文件系统。

在/下创建名为forcefsck的文件,重启后将执行fsck文件系统修复。

# touch /forcefsck
# reboot

进入系统之后,默认情况下/forcefsck已被移除,如未移除,需要手动移除该文件,避免每次进入系统前都执行fsck。

# rm /forcefsck

 

Debian 10 安装Qtile

目前qtile包由于过旧,在新版debian/ubuntu源中已被移除,所以要使用源码安装qtile。

安装依赖库

如果没有安装pip,先安装pip

# sudo apt install python3-pip

然后安装依赖:

# sudo pip3 install xcffib
# sudo pip3 install --no-cache-dir cairocffi
# sudo apt install libpangocairo-1.0-0

安装Qtile

# git clone https://github.com/qtile/qtile.git
# cd qtile
# sudo pip3 install .
# sudo pip3 install qtile

初始化及启动

复制默认配置文件到个人配置文件夹:

# cp /usr/local/lib/python3.7/dist-packages/libqtile/resources/default_config.py ~/.config/qtile/config.py

在lightdm(或其他如sddm、gdm桌面管理器)中添加Qtile会话:

# sudo vim /share/xsession/qtile.desktop
[Desktop Entry]
Name=Qtile
Comment=Qtile Session
Exec=/usr/local/bin/qtile
Type=Application
Keywords=wm;tiling

 

使用nginx反向代理qbittorrent-nox

qbittorrent-nox设置

  • 修改qbittorrent-nox web ui监听地址

使用qbittorrnet-nox使用帮助查看了一下,没有看到有相关的监听地址选项,只有端口的设置,登入到qbittorrent-nox 的web ui中可以修改监听的ip地址,默认为*

到tools-options-Web UI-Web User Interface (Remote control)中将IP address:修改为127.0.0.1,重启后即无法从外部地址访问qbittorrent-nox。

  • 重启qbittorrent-nox

使用systemd服务重启qbittorrent-nox,具体使用方法参阅Dedian 10 使用qbittorrent-nox web

 sudo systemctl start qbittorrent-nox

nginx反向代理

  • 添加反向代理配置

 location /qbit/ {
    proxy_pass http://127.0.0.1:8080/;
    proxy_http_version      1.1;
    proxy_set_header        X-Forwarded-Host        $http_host;
    http2_push_preload on; # Enable http2 push
  }
  • 启用nginx_http_auth_basic认证

    • 使用htpasswd创建认证文件  # htpasswd -c /etc/nginx/qbit.passwd qbit
    • 在nginx反向代理qbittorrent-nox块中使用创建的认证信息
 location /qbit/ {
    auth_basic "Welcome Qbittorrent"; 
    auth_basic_user_file /etc/nginx/qbit.passwd;
    proxy_pass http://127.0.0.1:8080/;
    proxy_http_version      1.1;
    proxy_set_header        X-Forwarded-Host        $http_host;
    http2_push_preload on; # Enable http2 push
  }
  • 重启nginx

#systemctl restart qbittorrent-nox

到此即可使用nginx访问qbittorrnet-nox的web ui了,http://yourdomain/qbit

 

Dedian 10 使用qbittorrent-nox web

下载安装包

sudo apt install qbittorrent qbittorrent-nox

创建用于运行qbittorrent-nox的用户及组

sudo adduser --system --group qbittorrent-nox

也可以将系统原有用添加到qbittorrent-nox组中,此处用户主要用于qbittorrnet-nox 的systemd启动脚本

添加qbittorrent-nox服务,设置开机自启及启动

sudo vi /lib/systemd/system/qbittorrent-nox.service
[Unit]
Description=qBittorrent Command Line Client
After=network.target

[Service]
Type=forking
User=qbittorrent-nox
Group=qbittorrent-nox
UMask=007
ExecStart=/usr/bin/qbittorrent-nox -d --webui-port=8090
Restart=on-failure

[Install]
WantedBy=multi-user.target

webui-port用于浏览器访问的端口,可以自行更改(非root用户需使用1024-65535以上未被使用的端口)

sudo systemctl daemon-reload
sudo systemctl enable qbittorrent-nox
sudo systemctl start qbittorrent-nox

修改web访问用户及密码

使用8090端口访问qbittorrent web页面,默认用户admin,密码adminadmin

在tools-options-Web UI中找到Authentication,修改username及password。