作者: hetao

  • PVE定时备份及计划任务

    PVE添加自动备份的位置在:数据中心->备份->添加

    重点是计划字段的语法,它不同于crontab,但是比crontab更灵活,具体语法格式在这里:
    https://pve.proxmox.com/wiki/Calendar_Events#chapter_calendar_events
    https://pbs.proxmox.com/docs/calendarevents.html
    形如:
    [WEEKDAY] [[YEARS-]MONTHS-DAYS] [HOURS:MINUTES[:SECONDS]]
    每两天备份一次可以这样写:*-*-*/2 00:00:00,每5个小时备分一次:*-*-* */5:00:00
    或者*-*-* 0/5:00:00也是可以的
    对应的配置文件是/etc/pve/jobs.cfg

    Views: 476

  • rsync同步文件列表

    cat /opt/rsync.lst
    etc/supervisor
    etc/wireguard
    opt
    etc/coredns
    etc/rc.local
    rsync -atzv --delete --exclude="*.log" --exclude="*.log.gz" --files-from=/opt/rsync.lst / root@192.168.33.20:/shared_folder/ali/
    

    这里面源目录虽然写在/opt/rsync.lst中了,但是源目录的位置还要写个/,表示rsync.lst中的文件列表都是在根目中的,会先cd到根目录然后开始复制。
    –files-from选项复制的文件默认会保留源目录结构,如果想去掉文件路径前缀(命令行参数中的源路径)可以指定–no-relative 或 –no-R

    Views: 898

  • linux上使用nextcloud客户端同步文件

    add-apt-repository ppa:nextcloud-devs/client
    apt update
    apt install nextcloud-desktop-cmd
    nextcloudcmd --path /备份盘/ali/opt /opt https://ali:123456@pan.hetao.me
    # /opt是本地目录,/备份盘是nextcloud上的目录
    

    不过nextcloud同步有个问题,文件权限会丢失,这样就不适合同步系统文件,同步系统文件还是用rsync。
    rsync -atzv --exclude="*.log" --exclude="*.log.gz" /opt root@192.168.33.20:/shared_folder/ali/

    Views: 439

  • AC控制器开启IP地址学习功能

    wlan
    wired-port-profile name default
      learn-client-address ipv4 enable
      learn-client-address ipv6 enable
      quit
    vap-profile name default
      undo nd trust port
      undo learn-client-address ipv4 disable
      undo learn-client-address ipv6 disable
    

    这样能监控到每个终端的IP地址,同时有些功能也依懒于IP地址学习功能。

    Views: 102

  • 华为AirEngine9700S-S下的无线终端IPv6间歇性断网(收不到RA组播报文)

    无线侧的终端主要是手机,而且还不是所有的手机都有问题,导致问题排查起来比较困难
    因为手机上一直提示的是ERR_NAME_NOT_RESOLVED(不知道为啥会提示这个),刚开始以为是DNS的问题,但是怎么换dns服务器都没用。
    先是想root手机进到系统里面进行调试,但是小米的解锁资格没申请到,后来安装安卓usb驱动,用adb进行为手机shell观察路由发现ipv6路由的生存时间很短,然后等到路由过期果然IPv6断网了。
    下面用wireshark抓包一直抓不到icmpv6 ra报文,只有wifi连接建立的时候收到一个单播的ra报文。思来想去觉得问题可能出在组播上,然后在ac控制器上把与组播相关的配置都找出来,直到关闭组播转单播功能的时候wireshark上面出现了icmpv6的ra报文。
    命令行关闭组播转单播

    wlan
    traffic-profile name default
    undo traffic-optimize multicast-unicast enable
    

    这个问题历时几个月(主要也不是致命问题,没有ipv6还可以用ipv4),实际的排查过程比上面说的还要曲折。
    论坛上发的求助贴:
    https://forum.huawei.com/enterprise/zh/thread/742838730168877056?page=1&floor=2

    Views: 162

  • pve开启spice

    虚拟机设置

    1. 修改显卡
      在硬件->显示里面把显卡设为Spice,显存设为32MB
    2. 选项里面Spice增加打开
      开启视频流后需要消耗200多MBps的带宽,所以不要开视频流。关了视频流以后带宽消耗也在100Mbps以上,有点尴尬。

    虚拟Windows系统设置

    1. 安装qemu guest tools,qemu guest agent
    2. 安装spice guest tools
      https://www.spice-space.org/download/windows/spice-guest-tools/spice-guest-tools-latest.exe

    使用

    1. 安装virt-viewer
      手机上要安装一个收费的app才行
      https://play.google.com/store/apps/details?id=com.undatech.opaque
    2. 打开虚拟机控制台选择spice
      然后会自动下载后缀为vv的文件,打开即可

    使用Spice的好处是可以与i915-sriov-dkms共存,而spice相对rdp的优势是可以看到系统Bios,这在系统故障时会有用。如果不是要开SR-IOV则spice的优势并不是太明显。

    Views: 232

  • nginx quic出现curl: (55) ngtcp2_conn_writev_stream returned error: ERR_DRAINING

    • Host pan.hetao.me:443 was resolved.
    • IPv6: (none)
    • IPv4: 192.168.33.20
    • Trying 192.168.33.20:443…
    • QUIC cipher selection: TLS_AES_128_GCM_SHA256:TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256:TLS_AES_128_CCM_SHA256
    • CAfile: /etc/ssl/certs/ca-certificates.crt
    • CApath: /etc/ssl/certs
    • subjectAltName: host “pan.hetao.me” matched cert’s “*.hetao.me”
    • Verified certificate just fine
    • Connected to pan.hetao.me (192.168.33.20) port 443
    • using HTTP/3
    • [HTTP/3] [0] OPENED stream for https://pan.hetao.me/
    • [HTTP/3] [0] [:method: GET]
    • [HTTP/3] [0] [:scheme: https]
    • [HTTP/3] [0] [:authority: pan.hetao.me]
    • [HTTP/3] [0] [:path: /]
    • [HTTP/3] [0] [user-agent: curl/8.6.0-DEV]
    • [HTTP/3] [0] [accept: /]
      GET / HTTP/3
      Host: pan.hetao.me
      User-Agent: curl/8.6.0-DEV
      Accept: /

    • ngtcp2_conn_writev_stream returned error: ERR_DRAINING

    • Connection #0 to host pan.hetao.me left intact
      curl: (55) ngtcp2_conn_writev_stream returned error: ERR_DRAINING

    解决:
    listen后面添加reuseport参数

        listen 443 quic reuseport;
        listen       443 ssl;
        listen [::]:443 quic reuseport;
        listen       [::]:443 ssl;
    

    Views: 173

  • nexcloud测速

    nextcloud是php写的,感觉性能不会太好,测了一下速度,如下:
    网络是千兆的
    上传:平均500Mbps
    下载:平均980Mbps
    这个速度看起来还可以,并没有损失太多。
    速度是观察任务管理器得出的大约值
    使用nginx反向代理后
    上传:平均280Mbps
    下载: 平均700Mbps
    看来反向代理对带宽影响不小
    使用nginx反向代理是因为nextcloud默认用apache2不支持HTTP/3
    后来把nexcloud的web服务换成nginx后,再次测速
    跟apache没明显差别,似乎上传速度更高一点,在550Mbps的样子,下载反正千兆带宽都能跑满
    但是nginx开启HTTP/3后上传会有下降,大概只有400Mbps左右,前面测试nginx反代后性能下降可能也有HTTP/3的因素。

    优化上传速度

    sudo -u www-data php occ config:app:set files max_chunk_size --value 0
    www-data是nextcloud的运行用户,可以修改为实际用户
    同时nginx里面 client_max_body_size也要设置为0,不然超过client_max_body_size的文件不能上传
    这样上传速度也能达到980Mbps了。

    Views: 105

  • docker容器内支持IPv6

    有多种方法可以实现

    • 使用host类型网络
    services:
      web:
        image: haohetao/nginx
        restart: always
        network_mode: "host"
    

    这样容器内直接使用宿主机的IP地址,而且这种情况下不再需要对外公布端口,因为端口直接就在宿主机上

    • 给宿主机分配私有IPv6地址

      /etc/docker/daemon.json添加以下内容

      “`json
      {
      "registry-mirrors": ["https://docker.hetao.me"],
      "bip": "172.18.0.1/16",
      "ipv6": true,
      "fixed-cidr-v6": "fd33::1/64",
      "experimental": true,
      "ip6tables": true
      }
      </p></li>
      </ul>

      <pre><code class="line-numbers">这样可以全局开启IPv6
      如果要在docker compose中开启IPv6,可以在docker-compose.yaml中指定
      “`yaml
      services:
      web:
      image: haohetao/nginx
      restart: always
      ports:
      – 80:80/tcp
      – 443:443/tcp
      – 443:443/udp
      networks:
      web-network:
      ipv4_address: 172.30.0.20
      ipv6_address: fd34::20
      networks:
      web-network:
      driver: bridge
      enable_ipv6: true
      ipam:
      config:
      – subnet: “172.30.0.0/24”
      – subnet: “fd34::/64”

      这样docker会自动添加NAT64,容器用私有IPV6也能上网

      • 分配固定公网IP

        ip6tables设为false,同时把私有IPv6改为公网IPv6即可,此方法需要路由器或者云平台支持划分子网段
        aws支持,aliyun不支持

      • NDP proxying
        注意:aliyun不支持,aliyun限制了一个网卡只能有一个IPv6地址(不同实例规格数量不同),多余的IP会被拦截
        daemon.json配置

      {
        "registry-mirrors": ["https://docker.hetao.me"],
        "bip": "172.18.0.1/16",
        "ipv6": true,
        "fixed-cidr-v6": "2409:8a1e:6a51:61e1:2::/80",
        "experimental": true,
        "ip6tables": false
      }
      

      容器子网要在宿主机的网段范围内,前缀要小于宿主机前缀(不能等于)

      然后在宿主机上执行

      sysctl -w net.ipv6.conf.enp6s18.proxy_ndp=1
      sysctl net.ipv6.conf.default.forwarding=1
      sysctl net.ipv6.conf.all.forwarding=1
      ip -6 neigh add proxy 2409:8a1e:6a51:61e1:0:242:ac11:2 dev enp6s18 #这个ipv6地址是容器的ipv6地址
      

      最后一部的ip -6 neigh命令可以替换为npd6

      apt install npd6
      cd /etc/
      cp npd6.conf.examle npd6.conf
      

      配置

      prefix=2409:8a1e:6a51:61e1:2:
      interface = enp6s18

      systemctl enable npd6
      systemctl start npd6
      
      • SLAAC或DHCPv6分配公网IPv6

        目前没有找到方法

      总结下来就是还是NAT66最靠谱,其它方法都有各种局限性

      Views: 65

  • nginx反向代理HTTP/2报协议错误

    curl报的错误如下

    curl: (92) Invalid HTTP header field was received: frame type: 1, stream: 1, name: [upgrade], value: [h2,h2c]

    用浏览器的话也会报连接错误
    造成这种问题的原因是反向代理的上游开启了HTTP/2,然后nginx通过HTTP/1.1与上游连接,这样上游返回的报文中就会添加Upgrade头来要求升级到HTTP/2连接。
    知道了原因就好解决了,可以采取以下方法

    • 关闭上游服务器的HTTP/2

    • 使用HTTP/2或H2C与上游连接

      nginx不支持

    • 过滤Upgrade头

      proxy_hide_header Upgrade;

    Views: 22