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
2026年8月25日 星期二
Open WebUI 設定為免帳號、免登入使用 Docker 執行
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
auth.docker.io
透過 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
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
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日 星期一
使用 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