2026年8月25日 星期二

Open WebUI 設定為免帳號、免登入使用 Docker 執行

 docker run -d -p 3000:8080 \
  -e WEBUI_AUTH=False \
  -e OLLAMA_BASE_URL=http://host.docker.internal:11434 \
  --add-host=host.docker.internal:host-gateway \
  -v open-webui-data:/app/backend/data \
  --name open-webui \
  --restart always \
  ghcr.io/open-webui/open-webui:main

LEAF Shorewall NAT LOOPBACK 範例

編輯 /etc/shorewall/interfaces 增加 routeback
net             eth0                    dhcp
loc             eth1                    dhcp,routeback

編輯 /etc/shorewall/nat
100.109.54.55   eth0            192.168.9.55    Yes             No

編輯/etc/shorewall/snat
MASQUERADE     192.168.9.0/24 eth1 

編輯  /etc/shorewall/rules
SSH(ACCEPT)     net:100.109.54.0/24  loc:192.168.9.55
#DNAT       net      loc:192.168.9.55:22   tcp     22   -   100.109.54.55
#DNAT       loc      loc:192.168.9.55      tcp     22   -   100.109.54.55

Nginx Reverse Proxy 設定範例

 server {
 listen 80 ;
 listen [::]:80 ;

    server_name 192.168.26.162;
    set $backend_librenms "http://192.168.255.1";
    location / {
        # 注意:目標網址結尾「不要」加斜線 /
        # 這樣存取 /ipam/xxx 時,會自動轉發至 http://hostname2/ipam/xxx
        proxy_pass $backend_librenms;
        # 傳送原始請求標頭
        proxy_set_header Host $http_host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;

        # 處理後端發出的 301/302 重導向(將 hostname2 替換為 hostname1)
        proxy_redirect $backend_librenms $http_host;

        # 停用快取與調整超時限制(適合 phpIPAM / NetBox 等管理工具)
        proxy_buffering off;
        proxy_read_timeout 90;
    }

    set $backend_ipam "http://192.168.255.2";
    location /ipam {
        # 注意:目標網址結尾「不要」加斜線 /
        # 這樣存取 /ipam/xxx 時,會自動轉發至 http://hostname2/ipam/xxx
        proxy_pass $backend_ipam;

        # 傳送原始請求標頭
        proxy_set_header Host $http_host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;

        # 處理後端發出的 301/302 重導向(將 hostname2 替換為 hostname1)
        proxy_redirect $backend_ipam $http_host;

        # 停用快取與調整超時限制(適合 phpIPAM / NetBox 等管理工具)
        proxy_buffering off;
        proxy_read_timeout 90;
    }
}

2026年7月28日 星期二

IDs assigned but not accepted

#Nginx 設定
http {
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 1d;
ssl_session_tickets on;
}

測試
openssl s_client -connect host:443 -reconnect -state

HSTS(Strict Transport Security)

#Nginx 設定
server {
    listen 443 ssl http2;
    server_name example.com;
    # 啟用 HSTS(建議維持至少 1 年 = 31536000 秒)
    # includeSubDomains: 套用至所有子網域
    # preload: 允許加入瀏覽器預載清單
    add_header Strict-Transport-Security "max-age=31536000; includeSubDomains; preload" always;
}

#Apache2 設定
<VirtualHost *:443>
    ServerName example.com   
    # 啟用 HSTS
    Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains; preload"
</VirtualHost>

測試
chrome://net-internals/#hsts
curl -I https://127.0.0.1
Plaintext
HTTP/2 200
...
strict-transport-security: max-age=31536000; includeSubDomains; preload
...

Qualys SSL Labs(權威檢測)
網址:https://www.ssllabs.com/ssltest/

HSTS Preload 狀態檢查
網址:https://hstspreload.org/

2026年7月23日 星期四

請透過 Squid Proxy 下載 docker hub 公開 image

 #異動 docker 設定
sudo mkdir -p /etc/systemd/system/docker.service.d
sudo cat <<EOF > /etc/systemd/system/docker.service.d/http-proxy.conf
Environment="HTTP_PROXY=http://squid:3128"
Environment="HTTPS_PROXY=http://squid:3128"
Environment="NO_PROXY=localhost,127.0.0.1,docker-registry.example.com"
EOF

#重新載入設定並重啟 Docker
sudo systemctl daemon-reload
sudo systemctl restart docker

#確認是否生效
sudo docker info | grep -i proxy

Squid Proxy 開放網址
auth.docker.io
registry-1.docker.io
production.cloudfront.docker.com

透過 Squid Proxy 下載 ollama models

#編輯 /etc/systemd/system/ollama.service
[Service] 區塊中加入
Environment="HTTPS_PROXY=http://squid:3128"
Environment="HTTP_PROXY=http://squid:3128"

# 重新載入並重啟 Ollama
sudo systemctl daemon-reload
sudo systemctl restart ollama

#確認是否生效
sudo systemctl show ollama --property=Environment


Squid Proxy 開放網址
ollama.com
registry.ollama.ai
.cloudflarestorage.com

2026年7月20日 星期一

Proxmox VE local vm snt 設定範例

 #!/bin/sh
iptables -F -t nat
echo "1" > /proc/sys/net/ipv4/ip_forward

OIF=vmbr0
IIF=vmbr9
SNIP=172.16.255.0/24

# 1. 建立 NAT:將來自 vmbr9 網段的封包,在從 vmbr0 出去時轉換為 vmbr0 的 IP
iptables -t nat -A POSTROUTING -o ${OIF} -s ${SNIP} -j MASQUERADE

# 2. 允許 eth9 到 eth0 的轉發流量 (建立連線)
iptables -A FORWARD -i ${IIF} -o ${OIF} -s ${SNIP} -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT

# 3. 允許從 eth0 回到 eth9 的已建立連線流量 (回應封包)
iptables -A FORWARD -i ${OIF} -o ${IIF} -d ${SNIP} -m state --state ESTABLISHED,RELATED -j ACCEPT

#NAT PORT
OPORT=8007
IPORT=8007
IIP=172.16.255.1

iptables -t nat -A PREROUTING -i ${OIF} -p tcp --dport ${OPORT} -j DNAT --to-destination ${IIP}:${IPORT}

# 2. 確保轉發鏈允許該流量通過 (如果你的 FORWARD 預設是 DROP)

iptables -A FORWARD -p tcp -d ${IIP} --dport ${IPORT} -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT

OPORT=8443
IPORT=8443
IIP=172.16.255.2

iptables -t nat -A PREROUTING -i ${OIF} -p tcp --dport ${OPORT} -j DNAT --to-destination ${IIP}:${IPORT}

iptables -A FORWARD -p tcp -d ${IIP} --dport ${IPORT} -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT

Proxmox VE 7/8/9 initrd 損毀無法開機

mkdir /mnt/pve
mount /dev/pve/root /mnt/pve
#mount /dev/sda2 /mnt/pve/boot/efi   # <--- EFI 分區代號

for i in dev proc sys run;do mount -o bind /${i} /mnt/pve/${i};done
chroot /mnt/pve

# 為所有已安裝的 Kernel 重新生成 initrd 映像檔
update-initramfs -u -k all

# 適用於 PVE 7/8/9 使用 proxmox-boot-tool 的系統)
proxmox-boot-tool refresh
update-grub
exit

umount -R /mnt/pve
reboot

2026年7月17日 星期五

Proxmox VE 9.x Alternative Names 重新自動掃描與產生

# 刪除 PVE 指令產生的設定
rm -f /usr/local/lib/systemd/network/50-pve-*.link
rm -f /usr/local/lib/systemd/network/50-pmx-*.link

# 刪除系統安裝時的設定
rm -f /etc/systemd/network/50-pve-*.link
rm -f /etc/systemd/network/50-pmx-*.link

#更新開機映像檔
update-initramfs -u -k all

#掃描並自動產生全新 Pinning
pve-network-interface-pinning generate

#更新開機映像檔
update-initramfs -u -k all

IPMI 網路 dhcp 重新取得 IP

 ipmitool lan set 1 ipsrc static && ipmitool lan set 1 ipsrc dhcp

2026年7月2日 星期四

Task Spooler 使用摘要

Debian 13 安裝
apt install task-spooler

新增任務到佇列
tsp 指令

查看目前佇列狀態
tsp

查看特定任務的輸出
tsp -c jobid

即時追蹤任務輸出
tsp -t jobid

刪除或取消任務
tsp -r jobid

調整任務的優先順序
ts -u jobid

調整並行數量
ts -S 數量

環境變數
TS_SOCKET

Linux nq 筆記

nq 說明
Linux 輕量、無需設定的命令列任務佇列工具
完全依賴檔案系統鎖(File-system lock)來管理佇列,不需要任何額外的設定或維護。

Debian 安裝
apt install nq

nq 環境變數
NQDIR:存放任務佇列目錄。預設為目前的執行目錄,透過 NQDIR 設定不同的路徑,可以同時管理多個佇列。
NQJOBID:nq 回傳給執行中任務的 Job ID,可用於腳本中追蹤。

使用範例
建立專屬 nq 佇列
export NQDIR="$HOME/nq"; mkdir -p ${NQDIR}

執行方式
export NQDIR="$HOME/nq"
nq ./my-script.sh
nq ./my-script2.sh
nq ./my-script3.sh
nq ./my-script4.sh
nq ./my-script5.sh

查詢目前 nq 佇列 Job
ls -lF ${NQDIR}   ## Ctrl-C 離開不中斷執行

查詢結果說明
-rw-r--r-- 1 root root 47 Jul  2 10:38 ,19f20aeff65.125177   已執行完畢
-rwxr--r-- 1 root root 22 Jul  2 10:38 ,19f20af01e5.125180*  <-* 表示目前正在執行
-rw-r--r-- 1 root root 20 Jul  2 10:38 ,19f20b17894.125225   未執行
-rw-r--r-- 1 root root 20 Jul  2 10:38 ,19f20b17bb4.125228   未執行
-rw-r--r-- 1 root root 20 Jul  2 10:38 ,19f20b17dc3.125231   未執行

,19f20af01e5.125180  <- ,開頭為 nq 狀態檔案,19f20af01e5 Job 送出時間,125180 系統執行的 process id

刪除 nq 佇列 Job ,19f20b17dc3.125231
rm ${NQDIR}/,19f20b17dc3.125231

中斷 nq 佇列 Job ,19f20b17dc3.125231
kill 125231

查詢 nq 佇列 Job ,19f20b17dc3.125231 執行內容或結果
cat  ${NQDIR}/,19f20b17dc3.125231

刪除已執行完畢 nq 佇列Job ,19f20b17dc3.125231
rm ${NQDIR}/,19f20b17dc3.125231

查詢目前  Job 執行狀態
nqtail  # Ctrl-C  離開,不中斷程式

共用 nq 佇列
nqdir=/var/spool/nq
nqgroup=nqusers
mkdir -p ${nqdir}
chown :${nqgrou} ${nqdir}
chmod 2775 ${nqdir}

更多的 指令說明
man nq
man nqtail

2026年6月22日 星期一

Asus ASMB11-iKVM 預設帳號密碼

Administrator / superuser

Debian13 單機 Queue

Task Spooler
apt install task-spooler

nq
apt install nq

使用 smbnetfs 存取 cifs

安裝
sudo apt update
sudo apt install smbnetfs

在檔案中加入遠端主機的帳密
mkdir -p ~/.smb
cp /etc/smbnetfs.conf ~/.smb/

編輯  ~/.smb/smbnetfs.conf 加入
auth "192.168.1.1" "username" "password"

存取方式
cd ~/nas/192.168.1.1/share_folder

卸載方式
fusermount -u ~/nas

使用 gio / gvfs 存取 CIFS

安裝
sudo apt update
sudo apt install gvfs-backends gvfs-fuse samba-common smbclient

掛載方式
gio mount smb://username@192.168.1.1/share_folder
gio mount smb://DOMAIN\;username:password@192.168.1.1/share_folder

存取方式
cd /run/user/$(id -u)/gvfs/

卸載方式
gio mount -u smb://username@192.168.1.1/share_folder

2026年6月16日 星期二

Linux 使用 tc 將 eth0 封包 mirror 至eth1

清除 eth1 IP 設定混雜模式
sudo ip addr flush dev eth1
sudo ip link set dev eth1 up
sudo ip link set dev eth1 promisc on

設定 tc eth0 進入規則
sudo tc qdisc add dev eth0 handle ffff: ingress
sudo tc filter add dev eth0 parent ffff: protocol all u32 match u32 0 0 action mirred egress mirror dev eth1

設定 tc eth0 流出規則
sudo tc qdisc add dev eth0 root handle 1: prio
sudo tc filter add dev eth0 parent 1: protocol all u32 match u32 0 0 action mirred egress mirror dev eth1

檢查 tc 規則
sudo tc filter show dev eth0 ingress
sudo tc filter show dev eth0 parent 1:

刪除 tc 規則
sudo tc qdisc del dev eth0 handle ffff: ingress
sudo tc qdisc del dev eth0 root

關閉 eth1 的混雜模式
sudo ip link set dev eth1 promisc off

相關 module 
 ifb act_mirred