nginx 401 动态验证备忘录

        auth_request /auth; 获取验证信息

server {  
    listen 8080;  
    resolver 1.1.1.1; 
    location @error401 { return 401 "Unauthorized";  }
        location = /auth {
        internal;
        proxy_pass http://backend-server/authenticate;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }

    location / {  
        auth_request /auth;
        error_page 401 = @error401;
        proxy_bind $server_addr;
        proxy_pass $scheme://$http_host$request_uri;
        proxy_set_header HOST $http_host;
        proxy_buffers 256 4k;
        proxy_max_temp_file_size 0k; 
        proxy_connect_timeout 30;
        proxy_send_timeout 60;
        proxy_read_timeout 60;
        proxy_next_upstream error timeout invalid_header http_502;
    }  
deny 127.0.0.1;
}

Proxmox VE vncproxy noVNC 配置备忘录

PVE直接封装了WebSocket, 需要调用 VNC 和 xterm的几种方案:

1. 给虚拟机配置单独的 vnc监听端口和 ip并设置密码直接连接, 或者拿websockify转WebSocket

2.重新封装转发/api2/json/nodes/{node}/qemu/{vmid}/vncwebsocket  

3.直接访问 PVE 原生接口方式。(1.直接访问 2.nginx单独封装反向代理xtermjs和novnc|)

 

前期准备

GET /api2/json/access/ticket
POST /api2/json/nodes/{node}/qemu/{vmid}/vncproxy
wss /api2/json/nodes/{node}/qemu/{vmid}/vncwebsocket

 vncproxy 和 ticket 需要一起创建,noVNC连接vncwebsocket 需要 PVEAuthCookie才能正常通信否则无法连接。

注意:请求/api2/json/access/ticket必须要用户密码获取,用root token无法创建。
PVE 的设计思路是将 VM 分配给用户,但是没给token设计获取 ticket 应该是考虑权限分离。

 

偷懒思路解决方案,直接nginx代理 PVE 的 noVNC和xterm(又不想开放 PVE 访问)

map $arg_node  $proxyhost  {
   "PVE NODE NAME-1"  "PVE IP";
   "PVE NODE NAME-1"  "PVE IP";
   "PVE NODE NAME-1"  "PVE IP";
}

location ~/(xtermjs|novnc|api2) {
     if ( $arg_console ) { set $new_uri /?$query_string;  }
        proxy_pass https://$proxyhost:8006$new_uri;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
}

如果有安装 redis 插件, 可以从 redis 存取主机 IP, 另外还有一个版本由于安全问题暂不公开。 

和代理websocket方法一样也是需要保证wss通信的时候要带上PVEAuthCookie的 cookies

阅读剩余部分...

ipv4/ipv6分拆工具

官方项目https://github.com/emden-norfolk/cidrl

wget  https://github.com/emden-norfolk/cidrl/archive/refs/tags/v1.0.2.tar.gz   -O - | tar xz 
cd cidrl-*
./configure
make
make install

用法

cidrl6 -s50 2001:db8::1428:55ab/48
cidrl -s24 10.0.0/20