分类: 未分类

  • 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

  • adminer打开没有密码的数据库(Adminer默认不支持访问没有密码的数据库)

    sqlite数据库一般是没有密码的,但是新版本的adminer已经不允许打开无密码数据库了,便是adminer自带了一个login-password-less插件允许另外添加一个Web登录密码的情况下访问无密码数据库。
    但是插件的用法官网并没有详细的描述或者描述陈旧,经过摸索总结如下

    • 启用插件

      在plugins-enabled目录创建与插件同名的php文件login-password-less.php,内容如下:

      <?php
      require_once('plugins/login-password-less.php');
      
      /** Set allowed password
       * @param string result of password_hash
       */
      return new AdminerLoginPasswordLess(
        $password_hash = password_hash('yourpassword', PASSWORD_DEFAULT)
      );
      
    • 打开数据库

    login
    sqlite3

    Views: 79

  • nftables常用命令

    • 列出所有规则

      nft list ruleset

    • 列出指定的chain

      nft list chain filter INPUT

    • 列出所有的chain

      nft list chains

    • 列出指定的table

      nft list table filter

    • 列出所有的table

      nft list tables

    • 添加table

      添加任何链之前需要先添加table

      add table test
      不指定family时默认为ip family
      nft add table inet test
      指定family为inet,即同时支持ipv4和ipv6

    • 添加链

      add chain inet test test {type filter hook output priority 0;}
      add chain inet test test
      
    • 添加规则

      nft add rule inet test test ip daddr 8.8.8.8 counter

    • 删除规则

      先用nft -a参数查看规则的handle编号,然后

      nft delete rule inet test test handle 3
      nft delete rule filter FORWARD handle 88
      
    • 配置nat
      1. SNAT
      nft add chain nat POSTROUTING { type nat hook postrouting priority srcnat; policy accept; }
      nft add rule nat POSTROUTING iifname wg2 oifname eth0 counter snat to 172.31.25.80
      

      或者

      nft add rule nat POSTROUTING iifname wg2 oifname eth0 counter masquerade
      

      snat比masquerade性能要好

      1. DNAT
      nft add rule inet nat prerouting tcp dport 443 counter redirect to :8006
      nft add table inet nat
      nft add chain inet nat prerouting { type nat hook prerouting priority dstnat\; policy accept\; }
      

    nft不指定表类型时默认为ip,即ipv4表,如果要同时支持ipv6要指定inet表类型

    Views: 54