# OpenWrt

OpenWrt 軟路由

# OpenWrt 安裝

#### **運行環境**

- **PVE**

#### **下載OpenWrt檔案**

**倉庫地址[https://downloads.openwrt.org/releases/](https://downloads.openwrt.org/releases/)，選擇x86 / 64，generic-ext4-combined-efi.img.gz**

**解壓成img後上傳**

[![image.png](https://note.homesitetw.com/uploads/images/gallery/2025-06/scaled-1680-/qaJimage.png)](https://note.homesitetw.com/uploads/images/gallery/2025-06/qaJimage.png)

#### **建立VM虛擬機**

**不使用媒體**

[![image.png](https://note.homesitetw.com/uploads/images/gallery/2025-06/scaled-1680-/TxWimage.png)](https://note.homesitetw.com/uploads/images/gallery/2025-06/TxWimage.png)

**基本需求CPU 2核心 1G RAM即可**

#### **匯入OpenWrt到VM**

**進入pve shell輸入指令**

```
qm importdisk 101 /var/lib/vz/template/iso/openwrt-23.05.3-x86-64-generic-ext4-combined-efi.img local
```

**101為VM ID**

**/var/lib/vz/template/iso/openwrt-23.05.3-x86-64-generic-ext4-combined-efi.img 為上傳的檔案位置**

**local 儲存至何處**

[![image.png](https://note.homesitetw.com/uploads/images/gallery/2025-06/scaled-1680-/VGNimage.png)](https://note.homesitetw.com/uploads/images/gallery/2025-06/VGNimage.png)

**匯入完成**

#### **PVE 虛擬機設定**

**匯入的img已變成未使用磁碟**

**移除DVD和預設SCSI硬碟**

[![image.png](https://note.homesitetw.com/uploads/images/gallery/2025-06/scaled-1680-/cn6image.png)](https://note.homesitetw.com/uploads/images/gallery/2025-06/cn6image.png)

**未使用磁碟新增SCSI硬碟**

[![image.png](https://note.homesitetw.com/uploads/images/gallery/2025-06/scaled-1680-/Geiimage.png)](https://note.homesitetw.com/uploads/images/gallery/2025-06/Geiimage.png)

**加入第二張網卡才能啟動**

[![image.png](https://note.homesitetw.com/uploads/images/gallery/2025-06/scaled-1680-/xBbimage.png)](https://note.homesitetw.com/uploads/images/gallery/2025-06/xBbimage.png)

**開機自啟打開，開機順序將硬碟調整至第一位後開機運行**

[![image.png](https://note.homesitetw.com/uploads/images/gallery/2025-06/scaled-1680-/LEEimage.png)](https://note.homesitetw.com/uploads/images/gallery/2025-06/LEEimage.png)

#### **OpenWrt 設定**  


**設定openwrt的IP，`vi /etc/config/network`**

```
config interface 'lan'
        option device 'br-lan'
        option proto 'static'
        option ipaddr '192.168.100.254'
        option netmask '255.255.255.0'
```

**重啟網路**

```
service network restart
```

**瀏覽器輸入IP 登入openwrt網頁**

# OpenWrt 繁體中文和美化介面

#### **<span style="color: rgb(0, 0, 0);">運行環境</span>**

- **<span style="color: rgb(0, 0, 0);">PVE</span>**

#### **<span style="color: rgb(0, 0, 0);">安裝繁體中文</span>**  


**<span style="color: rgb(0, 0, 0);">轉到`System -> Software`，按下Update lists 更新軟體包，搜尋`luci-i18n-base-zh`安裝</span>**

**<span style="color: rgb(0, 0, 0);">[![image.png](https://note.homesitetw.com/uploads/images/gallery/2025-06/scaled-1680-/KmOimage.png)](https://note.homesitetw.com/uploads/images/gallery/2025-06/KmOimage.png)</span>**

#### **<span style="color: rgb(0, 0, 0);">開源介面Argon安裝</span>**  


**<span style="color: rgb(0, 0, 0);">下載最新安裝包[https://github.com/jerrykuku/luci-theme-argon/releases](https://github.com/jerrykuku/luci-theme-argon/releases)</span>**

**<span style="color: rgb(0, 0, 0);">點擊`系統>軟體>上傳套件包`，將檔案上傳後安裝</span>**

**<span style="color: rgb(0, 0, 0);">[![image.png](https://note.homesitetw.com/uploads/images/gallery/2025-06/scaled-1680-/FXLimage.png)](https://note.homesitetw.com/uploads/images/gallery/2025-06/FXLimage.png)</span>**

**<span style="color: rgb(0, 0, 0);">重新打開網頁即可看到新的介面</span>**

**<span style="color: rgb(0, 0, 0);">[![image.png](https://note.homesitetw.com/uploads/images/gallery/2025-06/scaled-1680-/wq5image.png)](https://note.homesitetw.com/uploads/images/gallery/2025-06/wq5image.png)</span>**

#### **<span style="color: rgb(0, 0, 0);">25.12.0以上版本</span>**

<div class="n6owBd awi2gc" data-complete="true" data-copy-service-computed-style="font-family: Arial, sans-serif, "Noto Color Emoji"; font-size: 16px; font-weight: 400; margin: 12px 0px 16px; text-decoration: none; border-bottom: 0px rgb(10, 10, 10);" data-hveid="CAAIDBAA" data-processed="true" data-sfc-cp="" data-sfc-root="ep" id="bkmrk-openwrt-%E6%98%AF%E5%BE%9E-25.12.0-%E7%A9%A9" jsaction="" jscontroller="TDBkbc#Ml18Xb" jsuid="YdmyBe_p">**<span style="color: rgb(0, 0, 0);"><span data-copy-service-computed-style="font-family: Arial, sans-serif, "Noto Color Emoji"; font-size: 16px; font-weight: 400; margin: 0px; text-decoration: none; border-bottom: 0px rgb(10, 10, 10);" data-processed="true" data-subtree="aimfl">OpenWrt 是從 </span><span class="rQesXe MPyX">25.12.0</span> 穩定版開始，正式將預設的軟體包管理器從 `opkg` 更換為 `apk`。</span>**</div>- **<span style="color: rgb(0, 0, 0);"><span class="iNqyIf" data-complete="true" data-copy-service-computed-style="font-family: Arial, sans-serif, "Noto Color Emoji"; font-size: 16px; font-weight: 400; margin: 0px; text-decoration: none; border-bottom: 0px rgb(10, 10, 10);" data-sfc-cp="" data-sfc-root="ep"><span class="rQesXe MPyX">OpenWrt 25.12 及更新版本</span>：預設全面使用 <span class="rQesXe MPyX">`apk`</span>。</span><span data-copy-service-computed-style="font-family: Arial, sans-serif, "Noto Color Emoji"; font-size: 16px; font-weight: 400; margin: 0px; text-decoration: none; border-bottom: 0px rgb(10, 10, 10);"></span></span>**
- **<span class="iNqyIf" data-complete="true" data-copy-service-computed-style="font-family: Arial, sans-serif, "Noto Color Emoji"; font-size: 16px; font-weight: 400; margin: 0px; text-decoration: none; border-bottom: 0px rgb(10, 10, 10);" data-sfc-cp="" data-sfc-root="ep" style="color: rgb(0, 0, 0);"><span class="rQesXe MPyX">OpenWrt 24.10 及舊版本</span>：依然是使用傳統的 <span class="rQesXe MPyX">`opkg`</span></span>**

**<span style="color: rgb(0, 0, 0);">新版無法安裝第三方包，使用指令強制安裝</span>**

```
wget -O luci-theme-argon-2.4.7-r1.apk https://github.com/jerrykuku/luci-theme-argon/
releases/download/v2.4.7/luci-theme-argon-2.4.7-r1.apk

apk add luci-theme-argon-2.4.7-r1.apk --allow-untrusted
```

# OpenWrt NAT設定

<p class="callout info">**若在防火牆區域勾選NAT或IP動態偽裝，則會上下行都會使用OpenWrt本身IP，若NAT後主機則無法取得真實IP**</p>

#### **基本NAT設定**  


**勾選NAT內部主機即可外連**

[![image.png](https://note.homesitetw.com/uploads/images/gallery/2025-07/scaled-1680-/image.png)](https://note.homesitetw.com/uploads/images/gallery/2025-07/image.png)

#### **只需內部主機對外NAT**

**取消勾選NAT，新增NAT規則**

**來源位址輸入內部網段**

[![image.png](https://note.homesitetw.com/uploads/images/gallery/2025-07/scaled-1680-/1TJimage.png)](https://note.homesitetw.com/uploads/images/gallery/2025-07/1TJimage.png)

#### **iptables 指令**

**172.20.10.0/24對外br-lan介面進行NAT**

```
iptables -A POSTROUTING -t nat -s 172.20.10.0/255.255.255.0 -o br-lan -j MASQUERADE
```

# OpenWrt WireGuard安裝

#### **安裝套件**

<p class="callout info">**OpenWrt 25.12 之後適用**</p>

<span style="color: rgb(0, 0, 0);">**WEB 介面上安裝以下套件**</span>

```
wireguard-tools
luci-proto-wireguard
qrencode
```

#### **新增WireGuard介面**

<span style="color: rgb(0, 0, 0);">**自訂本機介面IP**</span>

<span style="color: #000000;">**連接阜可自訂或維持預設**</span>

[![image.png](https://note.homesitetw.com/uploads/images/gallery/2026-09/scaled-1680-/iXTimage.png)](https://note.homesitetw.com/uploads/images/gallery/2026-09/iXTimage.png)

#### **建立防火牆**

[![image.png](https://note.homesitetw.com/uploads/images/gallery/2026-09/scaled-1680-/dySimage.png)](https://note.homesitetw.com/uploads/images/gallery/2026-09/dySimage.png)

#### **新增對等點**

<span style="color: rgb(0, 0, 0);">**填入對等點公鑰和IP**</span>

[![image.png](https://note.homesitetw.com/uploads/images/gallery/2026-09/scaled-1680-/uvvimage.png)](https://note.homesitetw.com/uploads/images/gallery/2026-09/uvvimage.png)

#### <span style="color: rgb(0, 0, 0);">**防火牆設定**</span>

<span style="color: #000000;">**勾選NAT，例如往lan介面流量會轉成lan介面IP傳送**</span>

<span style="color: #000000;">**涵蓋網路選擇WireGuard需要轉送的區域**</span>

[![image.png](https://note.homesitetw.com/uploads/images/gallery/2026-09/scaled-1680-/EaVimage.png)](https://note.homesitetw.com/uploads/images/gallery/2026-09/EaVimage.png)

#### <span style="color: #000000;">**流量規則設定**</span>

<span style="color: #000000;">**Wan都是固定IP或PPPOE，因此外部預設傳入拒絕，需放行連入WireGuard連接阜**</span>

[![image.png](https://note.homesitetw.com/uploads/images/gallery/2026-09/scaled-1680-/0qOimage.png)](https://note.homesitetw.com/uploads/images/gallery/2026-09/0qOimage.png)

<span style="color: rgb(0, 0, 0);">**設定後重啟wg介面**</span>

#### **Windows WireGuard設定**

<span style="color: rgb(0, 0, 0);">**填入OpenWrt WireGuard的公鑰和定義連接阜**</span>

<span style="color: rgb(0, 0, 0);">**AllowedIPs允許本身連接的介面和網段**</span>

[![image.png](https://note.homesitetw.com/uploads/images/gallery/2026-09/scaled-1680-/bIyimage.png)](https://note.homesitetw.com/uploads/images/gallery/2026-09/bIyimage.png)

<p class="callout info">**MTU自行調整，固網可以用1400，手機熱點則可以1380(自行測試最佳值)**</p>

# OpenWrt OpenVPN Server安裝

[![image.png](https://note.homesitetw.com/uploads/images/gallery/2025-07/scaled-1680-/osRimage.png)](https://note.homesitetw.com/uploads/images/gallery/2025-07/osRimage.png)

#### **運行環境**

- **OpenWrt 21.02.3**

#### **安裝套件**

```
opkg update
opkg install openvpn-openssl openvpn-easy-rsa
opkg install luci-app-openvpn                 
#web介面管理
```

```
# Configuration parameters
OVPN_PKI="/etc/easy-rsa/pki"
export EASYRSA_PKI="${OVPN_PKI}"
export EASYRSA_REQ_CN="ovpnca"
export EASYRSA_BATCH="1"
# Remove and re-initialize the PKI directory
easyrsa init-pki
# Generate DH parameters
easyrsa gen-dh
# Create a new CA
easyrsa build-ca nopass
# Generate a key pair and sign locally for a server
easyrsa build-server-full server nopass
# Generate a key pair and sign locally for a client
easyrsa build-client-full client nopass
# Generate TLS PSK
openvpn --genkey --secret ${OVPN_PKI}/tc.pem
```

#### **設定**

**新增server設定，這裡使用tap bridge為範例，編輯`/etc/config/openvpn`**

```
config openvpn 'vpntap'
        option enable '1'
        option proto 'udp'
        option dev 'tap0'
        option ca '/etc/easy-rsa/pki/ca.crt'
        option cert '/etc/easy-rsa/pki/issued/server.crt'
        option key '/etc/easy-rsa/pki/private/server.key'
        option dh '/etc/easy-rsa/pki/dh.pem'
        option tls_auth '/etc/easy-rsa/pki/tc.pem 0'
        option tls_server '1'
        option keepalive '10 120'
        option comp_lzo 'adaptive'
        option persist_key '1'
        option persist_tun '1'
        option status '/tmp/openvpn-status.log'
        option verb '3'
        option server_bridge ' '
        option port '12975'
        option duplicate_cn '1'   <<允許多個client
```

```
/etc/init.d/openvpn restart
```

**client config設定**

```
client
dev tap
proto udp
remote <remote ip> 12975
remote-cert-tls server
nobind
comp-lzo
persist-key
persist-tun
verb 3
key-direction 1
tls-client
<ca>
放置 /etc/easy-rsa/pki/ca.crt
</ca>
<cert>
放置 etc/easy-rsa/pki/issued/client.crt
</cert>
<key>
放置 /etc/easy-rsa/pki/private/client.key
</key>
<tls-auth>
放置 /etc/easy-rsa/pki/tc.pem
</tls-auth>
```

**於openwrt web介面選擇橋接裝置，將橋接裝置新增tap0介面即完成**

# OpenWrt IPv6 設定

##### **運行環境**  


- **OpenWrt 23.05**

##### **Dnsmasq 設定**

**篩選 IPv6 AAAA 記錄取消勾選**

[![image.png](https://note.homesitetw.com/uploads/images/gallery/2025-10/scaled-1680-/Gndimage.png)](https://note.homesitetw.com/uploads/images/gallery/2025-10/Gndimage.png)

##### **WAN介面(PPPOE)IPv6設定**

**刪除已有WAN6介面，在WAN介面開啟IPv6後會自動產生動態虛擬介面**

**若不勾選使用終端發布的DNS伺服器，可自訂要使用的DNS**

[![image.png](https://note.homesitetw.com/uploads/images/gallery/2025-10/scaled-1680-/Mrximage.png)](https://note.homesitetw.com/uploads/images/gallery/2025-10/Mrximage.png)

[![image.png](https://note.homesitetw.com/uploads/images/gallery/2025-10/scaled-1680-/kzMimage.png)](https://note.homesitetw.com/uploads/images/gallery/2025-10/kzMimage.png)

[![image.png](https://note.homesitetw.com/uploads/images/gallery/2025-10/scaled-1680-/tnpimage.png)](https://note.homesitetw.com/uploads/images/gallery/2025-10/tnpimage.png)

**確認WAN介面上DHCP已關閉**

[![image.png](https://note.homesitetw.com/uploads/images/gallery/2025-10/scaled-1680-/XPoimage.png)](https://note.homesitetw.com/uploads/images/gallery/2025-10/XPoimage.png)

**儲存套用設定後，會出現DHCPv6 客戶端虛擬介面，確認有取得IPv6-前綴代理**

[![image.png](https://note.homesitetw.com/uploads/images/gallery/2025-10/scaled-1680-/8Aaimage.png)](https://note.homesitetw.com/uploads/images/gallery/2025-10/8Aaimage.png)

##### **LAN介面IPv6設定**

**LAN介面&gt;進階設定，委派 IPv6 首碼不勾選，IPv6 分配長度依照IPv6-前綴代理取得的長度設定**

**IPv6 尾碼輸入eui64**

[![image.png](https://note.homesitetw.com/uploads/images/gallery/2025-10/scaled-1680-/Jhqimage.png)](https://note.homesitetw.com/uploads/images/gallery/2025-10/Jhqimage.png)

**IPv6 DHCP設定，RA選伺服器模式，不勾選IPv6 DNS伺服器，用IPv4來解析IPv6域名**

[![image.png](https://note.homesitetw.com/uploads/images/gallery/2025-10/scaled-1680-/rWhimage.png)](https://note.homesitetw.com/uploads/images/gallery/2025-10/rWhimage.png)

[![image.png](https://note.homesitetw.com/uploads/images/gallery/2025-10/scaled-1680-/cbHimage.png)](https://note.homesitetw.com/uploads/images/gallery/2025-10/cbHimage.png)

**儲存套用後設定完成**

##### **測試IPv6** 

**[https://testipv6.com/](https://testipv6.com/)**

**參考:[https://github.com/Aethersailor/Custom\_OpenClash\_Rules/wiki/OpenWrt-IPv6-%E8%AE%BE%E7%BD%AE%E6%96%B9%E6%A1%88](https://github.com/Aethersailor/Custom_OpenClash_Rules/wiki/OpenWrt-IPv6-%E8%AE%BE%E7%BD%AE%E6%96%B9%E6%A1%88)**

# OpenWrt 發送syslog到遠端伺服器

##### **運行環境**

- **OpenWrt 23.05**

##### **外部Log Server設定**  


**設定外部伺服器IP和PORT**

[![image.png](https://note.homesitetw.com/uploads/images/gallery/2025-10/scaled-1680-/ZH5image.png)](https://note.homesitetw.com/uploads/images/gallery/2025-10/ZH5image.png)

**重啟log服務**

```
service log restart
```

##### **測試**

**使用Synology日誌接收，確認有OpenWrt的log**

[![image.png](https://note.homesitetw.com/uploads/images/gallery/2025-10/scaled-1680-/mwBimage.png)](https://note.homesitetw.com/uploads/images/gallery/2025-10/mwBimage.png)

# OpenWrt SSH Dropbear 替換 Openssh

**OpenWrt內建使用Dropbear SSH ，屬於輕量化SSH伺服器以節省記憶體和資源，OpenWrt為軟路由，沒有記憶體不夠的困擾可安裝Openssh獲得完整功能**

**以下為ChatGPT整理差異**

[![image.png](https://note.homesitetw.com/uploads/images/gallery/2025-10/scaled-1680-/g2Pimage.png)](https://note.homesitetw.com/uploads/images/gallery/2025-10/g2Pimage.png)

##### **安裝Openssh**

```
opkg update
opkg install openssh-server openssh-client openssh-sftp-server
```

**編輯`/etc/ssh/sshd_config`**

**先將openssh port改成不要和內建dropbear ssh 衝突，並開啟root登入**

```
Port 2222

PermitRootLogin yes
```

**啟動ssh**

```
/etc/init.d/sshd enable
/etc/init.d/sshd start
```

**打開新的openwrt session，確認可從port 2222 登入後，移除dropbear**

```
/etc/init.d/dropbear disable
/etc/init.d/dropbear stop
opkg remove dropbear
```

# OpenWrt PPTP 穿透

#### <span style="color: rgb(0, 0, 0);">**安裝模組kmod-nf-nathelper-extra**</span>  


<div class="n6owBd awi2gc" data-complete="true" data-copy-service-computed-style="font-family: Arial, sans-serif, "Noto Color Emoji"; font-size: 16px; font-weight: 400; margin: 12px 0px 16px; text-decoration: none; border-bottom: 0px rgb(10, 10, 10);" data-hveid="CAAIBxAA" data-processed="true" data-sfc-cp="" data-sfc-root="ep" id="bkmrk-kmod-nf-nathelper-ex" jsaction="" jscontroller="TDBkbc#Ml18Xb" jsuid="iZCSye_o"><span style="color: rgb(0, 0, 0);">**`kmod-nf-nathelper-extra` 是 OpenWrt 中的一個內核模組軟體包，它的核心功能是<mark class="MAeH" data-complete="true" data-copy-service-computed-style="font-family: Arial, sans-serif, "Noto Color Emoji"; font-size: 16px; font-weight: 500; margin: 0px; text-decoration: none; border-bottom: 0px rgb(10, 10, 10);" data-sae="" data-sfc-root="ep" data-ved="2ahUKEwjIuMmEg4qXAxVAdvUHHcIPMtYQuJAPegYIAAgHEAE" data-wiz-attrbind="class=iZCSye_r/cFwyDc"><span class="rQesXe MPyX">提供非標準網路協定的 ALG（Application Layer Gateway，應用層網關）支援，解決傳統 NAT（網路地址轉換）無法處理的複雜連線穿透問題</span></mark>。**</span></div><div class="n6owBd awi2gc" data-complete="true" data-copy-service-computed-style="font-family: Arial, sans-serif, "Noto Color Emoji"; font-size: 16px; font-weight: 400; margin: 12px 0px 16px; text-decoration: none; border-bottom: 0px rgb(10, 10, 10);" data-hveid="CAAICBAA" data-processed="true" data-sfc-cp="" data-sfc-root="ep" id="bkmrk-%E4%BB%A5%E4%B8%8B%E7%82%BA%E6%82%A8%E6%8B%86%E8%A7%A3%E5%AE%83%E7%9A%84%E5%85%B7%E9%AB%94%E5%B7%A5%E4%BD%9C%E5%8E%9F%E7%90%86%E8%88%87%E5%8A%9F%E8%83%BD%EF%BC%9A" jsaction="" jscontroller="TDBkbc#Ml18Xb" jsuid="iZCSye_y"><span style="color: rgb(0, 0, 0);">**以下為您拆解它的具體工作原理與功能：**</span></div><div class="yhAwj" data-complete="true" data-copy-service-computed-style="font-family: Arial, sans-serif, "Noto Color Emoji"; font-size: 14px; font-weight: 400; margin: 0px; text-decoration: none; border-bottom: 0px rgb(10, 10, 10);" data-processed="true" data-sfc-cp="" data-sfc-inited="2" data-sfc-root="ep" id="bkmrk-" jsaction="rcuQ6b:&iZCSye_14|npT2md" jscontroller="UTzWVc#U8DOt" jsuid="iZCSye_14"><span style="color: rgb(0, 0, 0);"></span></div><div aria-level="3" class="otQkpb" data-animation-nesting="" data-complete="true" data-copy-service-computed-style="font-family: Arial, sans-serif, "Noto Color Emoji"; font-size: 20px; font-weight: 700; margin: 24px 0px 12px; text-decoration: none; border-bottom: 0px rgb(10, 10, 10);" data-processed="true" data-sae="" data-sfc-cp="" data-sfc-root="ep" data-wiz-attrbind="aria-level=iZCSye_15/fLk2Md" id="bkmrk-1.-%E7%82%BA%E4%BB%80%E9%BA%BC%E9%9C%80%E8%A6%81%E5%AE%83%EF%BC%9F%EF%BC%88%E8%A7%A3%E6%B1%BA-nat-%E7%9A%84%E5%85%88" jsaction="" jscontroller="a7qCn#ZxCkTb" jsuid="iZCSye_15" role="heading"><span style="color: rgb(0, 0, 0);">**1. 為什麼需要它？（解決 NAT 的先天缺陷）**</span></div><div class="n6owBd awi2gc" data-complete="true" data-copy-service-computed-style="font-family: Arial, sans-serif, "Noto Color Emoji"; font-size: 16px; font-weight: 400; margin: 12px 0px 16px; text-decoration: none; border-bottom: 0px rgb(10, 10, 10);" data-hveid="CAAIChAA" data-processed="true" data-sfc-cp="" data-sfc-root="ep" id="bkmrk-%E5%82%B3%E7%B5%B1%E7%9A%84-nat%EF%BC%88%E5%A6%82%E5%AE%B6%E7%94%A8%E8%B7%AF%E7%94%B1%E5%99%A8%E7%9A%84-ip-%E5%88%86" jsaction="" jscontroller="TDBkbc#Ml18Xb" jsuid="iZCSye_16"><span style="color: rgb(0, 0, 0);">**傳統的 NAT（如家用路由器的 IP 分享功能）只負責修改 IP 封包表頭的 <span class="rQesXe MPyX">來源/目的 IP</span> 和 <span class="rQesXe MPyX">TCP/UDP 端口號</span>。**</span></div><div class="n6owBd awi2gc" data-complete="true" data-copy-service-computed-style="font-family: Arial, sans-serif, "Noto Color Emoji"; font-size: 16px; font-weight: 400; margin: 12px 0px 16px; text-decoration: none; border-bottom: 0px rgb(10, 10, 10);" data-hveid="CAAICxAA" data-processed="true" data-sfc-cp="" data-sfc-root="ep" id="bkmrk-%E4%BD%86%E6%98%AF%EF%BC%8C%E6%9C%89%E4%BA%9B%E5%82%B3%E7%B5%B1%E7%9A%84%E7%B6%B2%E8%B7%AF%E5%8D%94%E5%AE%9A%EF%BC%88%E4%BE%8B%E5%A6%82-pptp" jsaction="" jscontroller="TDBkbc#Ml18Xb" jsuid="iZCSye_1e"><span style="color: rgb(0, 0, 0);">**但是，有些傳統的網路協定（例如 <span class="rQesXe MPyX">PPTP</span>、<span class="rQesXe MPyX">SIP</span>、<span class="rQesXe MPyX">H.323</span>）非常特殊：**</span></div>- <span style="color: rgb(0, 0, 0);">**<span class="iNqyIf" data-complete="true" data-copy-service-computed-style="font-family: Arial, sans-serif, "Noto Color Emoji"; font-size: 16px; font-weight: 400; margin: 0px; text-decoration: none; border-bottom: 0px rgb(10, 10, 10);" data-sfc-cp="" data-sfc-root="ep">它們會把<span class="rQesXe MPyX">內網的私有 IP 或端口號，寫在封包內部的「數據載荷（Data Payload）」裡</span>。</span>**</span>
- <span style="color: rgb(0, 0, 0);">**<span class="iNqyIf" data-complete="true" data-copy-service-computed-style="font-family: Arial, sans-serif, "Noto Color Emoji"; font-size: 16px; font-weight: 400; margin: 0px; text-decoration: none; border-bottom: 0px rgb(10, 10, 10);" data-sfc-cp="" data-sfc-root="ep">或者是除了標準的 TCP 端口外，還需要建立<span class="rQesXe MPyX">另一條完全不同協定的通道</span>（例如 PPTP 撥號除了 TCP 1723 之外，還必須傳輸 <span class="rQesXe MPyX">GRE 協定</span>的數據）。</span>**</span>

<div class="n6owBd awi2gc" data-complete="true" data-copy-service-computed-style="font-family: Arial, sans-serif, "Noto Color Emoji"; font-size: 16px; font-weight: 400; margin: 12px 0px 16px; text-decoration: none; border-bottom: 0px rgb(10, 10, 10);" data-hveid="CAAIDRAA" data-processed="true" data-sfc-cp="" data-sfc-root="ep" id="bkmrk-%E5%A6%82%E6%9E%9C%E5%8F%AA%E9%9D%A0%E6%99%AE%E9%80%9A-nat%EF%BC%8C%E8%B7%AF%E7%94%B1%E5%99%A8%E7%9C%8B%E4%B8%8D%E6%87%82%E4%B9%9F%E6%B2%92%E8%BE%A6" jsaction="" jscontroller="TDBkbc#Ml18Xb" jsuid="iZCSye_20"><span style="color: rgb(0, 0, 0);">**如果只靠普通 NAT，路由器看不懂也沒辦法修改封包裡面的私有 IP，外部伺服器就無法把資料送回內網客戶端，導致連線失敗（這就是 PPTP 常見卡在「正在核對使用者名稱和密碼」或錯誤 619 的原因）。**</span></div><div class="yhAwj" data-complete="true" data-copy-service-computed-style="font-family: Arial, sans-serif, "Noto Color Emoji"; font-size: 14px; font-weight: 400; margin: 0px; text-decoration: none; border-bottom: 0px rgb(10, 10, 10);" data-processed="true" data-sfc-cp="" data-sfc-inited="2" data-sfc-root="ep" id="bkmrk--1" jsaction="rcuQ6b:&iZCSye_26|npT2md" jscontroller="UTzWVc#U8DOt" jsuid="iZCSye_26"><span style="color: rgb(0, 0, 0);"></span></div><div aria-level="3" class="otQkpb" data-animation-nesting="" data-complete="true" data-copy-service-computed-style="font-family: Arial, sans-serif, "Noto Color Emoji"; font-size: 20px; font-weight: 700; margin: 24px 0px 12px; text-decoration: none; border-bottom: 0px rgb(10, 10, 10);" data-processed="true" data-sae="" data-sfc-cp="" data-sfc-root="ep" data-wiz-attrbind="aria-level=iZCSye_27/fLk2Md" id="bkmrk-2.-kmod-nf-nathelper" jsaction="" jscontroller="a7qCn#ZxCkTb" jsuid="iZCSye_27" role="heading"><span style="color: rgb(0, 0, 0);">**2. `kmod-nf-nathelper-extra` 的核心功能**</span></div><div class="n6owBd awi2gc" data-complete="true" data-copy-service-computed-style="font-family: Arial, sans-serif, "Noto Color Emoji"; font-size: 16px; font-weight: 400; margin: 12px 0px 16px; text-decoration: none; border-bottom: 0px rgb(10, 10, 10);" data-hveid="CAAIDxAA" data-processed="true" data-sfc-cp="" data-sfc-root="ep" id="bkmrk-%E9%80%99%E5%80%8B%E6%A8%A1%E7%B5%84%E5%8C%85%E8%A3%9D%E4%BA%86-linux-%E6%A0%B8%E5%BF%83%E7%9A%84-nf" jsaction="" jscontroller="TDBkbc#Ml18Xb" jsuid="iZCSye_29"><span style="color: rgb(0, 0, 0);">**這個模組包裝了 Linux 核心的 `nf_conntrack`（連線追蹤）與 `nf_nat` 的擴充元件，專門用來當作這些特殊協定的「翻譯官」：**</span></div>- <span style="color: rgb(0, 0, 0);">**<span class="iNqyIf" data-complete="true" data-copy-service-computed-style="font-family: Arial, sans-serif, "Noto Color Emoji"; font-size: 16px; font-weight: 400; margin: 0px; text-decoration: none; border-bottom: 0px rgb(10, 10, 10);" data-sfc-cp="" data-sfc-root="ep"><span class="rQesXe MPyX">深度封包解析（ALG）：</span> 它會主動去監聽、攔截並解析特定協定（如 TCP 1723 的 PPTP 控制訊號）。</span>**</span>
- <span style="color: rgb(0, 0, 0);">**<span class="iNqyIf" data-complete="true" data-copy-service-computed-style="font-family: Arial, sans-serif, "Noto Color Emoji"; font-size: 16px; font-weight: 400; margin: 0px; text-decoration: none; border-bottom: 0px rgb(10, 10, 10);" data-sfc-cp="" data-sfc-root="ep"><span class="rQesXe MPyX">動態修改內文：</span> 當發現內網客戶端把自己的私有 IP（如 192.168.1.100）寫在封包內文中時，該模組會動態把它<span class="rQesXe MPyX">修改為路由器的 WAN 端公網 IP</span>。</span>**</span>
- <span style="color: rgb(0, 0, 0);">**<span class="iNqyIf" data-complete="true" data-copy-service-computed-style="font-family: Arial, sans-serif, "Noto Color Emoji"; font-size: 16px; font-weight: 400; margin: 0px; text-decoration: none; border-bottom: 0px rgb(10, 10, 10);" data-sfc-cp="" data-sfc-root="ep"><span class="rQesXe MPyX">動態開啟防火牆通道（Pinholing）：</span> 它會告訴防火牆：「等一下會有一個關聯的 GRE 協定（協定號 47）封包進來，這是剛剛那個客戶端申請的，請主動放行並轉發給它。」</span>**</span>

<div class="yhAwj" data-complete="true" data-copy-service-computed-style="font-family: Arial, sans-serif, "Noto Color Emoji"; font-size: 14px; font-weight: 400; margin: 0px; text-decoration: none; border-bottom: 0px rgb(10, 10, 10);" data-processed="true" data-sfc-cp="" data-sfc-inited="2" data-sfc-root="ep" id="bkmrk--2" jsaction="rcuQ6b:&iZCSye_37|npT2md" jscontroller="UTzWVc#U8DOt" jsuid="iZCSye_37"><span style="color: rgb(0, 0, 0);"></span></div><div aria-level="3" class="otQkpb" data-animation-nesting="" data-complete="true" data-copy-service-computed-style="font-family: Arial, sans-serif, "Noto Color Emoji"; font-size: 20px; font-weight: 700; margin: 24px 0px 12px; text-decoration: none; border-bottom: 0px rgb(10, 10, 10);" data-processed="true" data-sae="" data-sfc-cp="" data-sfc-root="ep" data-wiz-attrbind="aria-level=iZCSye_38/fLk2Md" id="bkmrk-3.-%E9%80%99%E5%80%8B%E8%BB%9F%E9%AB%94%E5%8C%85%E8%A3%A1%E9%9D%A2%E5%8C%85%E5%90%AB%E5%93%AA%E4%BA%9B%E5%8D%94%E5%AE%9A%EF%BC%9F" jsaction="" jscontroller="a7qCn#ZxCkTb" jsuid="iZCSye_38" role="heading"><span style="color: rgb(0, 0, 0);">**3. 這個軟體包裡面包含哪些協定？**</span></div><div class="n6owBd awi2gc" data-complete="true" data-copy-service-computed-style="font-family: Arial, sans-serif, "Noto Color Emoji"; font-size: 16px; font-weight: 400; margin: 12px 0px 16px; text-decoration: none; border-bottom: 0px rgb(10, 10, 10);" data-hveid="CAAIEhAA" data-processed="true" data-sfc-cp="" data-sfc-root="ep" id="bkmrk-kmod-nf-nathelper-ex-1" jsaction="" jscontroller="TDBkbc#Ml18Xb" jsuid="iZCSye_39"><span style="color: rgb(0, 0, 0);">**`kmod-nf-nathelper-extra` 是一個集合包，安裝它之後，您的 OpenWrt 會同時獲得以下幾種常見傳統協定的穿透能力：**</span></div>- <span style="color: rgb(0, 0, 0);">**<span class="iNqyIf" data-complete="true" data-copy-service-computed-style="font-family: Arial, sans-serif, "Noto Color Emoji"; font-size: 16px; font-weight: 400; margin: 0px; text-decoration: none; border-bottom: 0px rgb(10, 10, 10);" data-sfc-cp="" data-sfc-root="ep"><span class="rQesXe MPyX">PPTP / GRE</span>（虛擬專線網路）</span>**</span>
- <span style="color: rgb(0, 0, 0);">**<span class="iNqyIf" data-complete="true" data-copy-service-computed-style="font-family: Arial, sans-serif, "Noto Color Emoji"; font-size: 16px; font-weight: 400; margin: 0px; text-decoration: none; border-bottom: 0px rgb(10, 10, 10);" data-sfc-cp="" data-sfc-root="ep"><span class="rQesXe MPyX">AMANDA</span>（備份系統）</span>**</span>
- <span style="color: rgb(0, 0, 0);">**<span class="iNqyIf" data-complete="true" data-copy-service-computed-style="font-family: Arial, sans-serif, "Noto Color Emoji"; font-size: 16px; font-weight: 400; margin: 0px; text-decoration: none; border-bottom: 0px rgb(10, 10, 10);" data-sfc-cp="" data-sfc-root="ep"><span class="rQesXe MPyX">H.323</span>（舊式視訊會議/網路電話）</span>**</span>
- <span style="color: rgb(0, 0, 0);">**<span class="iNqyIf" data-complete="true" data-copy-service-computed-style="font-family: Arial, sans-serif, "Noto Color Emoji"; font-size: 16px; font-weight: 400; margin: 0px; text-decoration: none; border-bottom: 0px rgb(10, 10, 10);" data-sfc-cp="" data-sfc-root="ep"><span class="rQesXe MPyX">IRC</span>（網際網路中繼聊天）</span>**</span>
- <span style="color: rgb(0, 0, 0);">**<span class="iNqyIf" data-complete="true" data-copy-service-computed-style="font-family: Arial, sans-serif, "Noto Color Emoji"; font-size: 16px; font-weight: 400; margin: 0px; text-decoration: none; border-bottom: 0px rgb(10, 10, 10);" data-sfc-cp="" data-sfc-root="ep"><span class="rQesXe MPyX">MMS</span>（微軟早期多媒體串流協定）</span>**</span>
- <span style="color: rgb(0, 0, 0);">**<span class="iNqyIf" data-complete="true" data-copy-service-computed-style="font-family: Arial, sans-serif, "Noto Color Emoji"; font-size: 16px; font-weight: 400; margin: 0px; text-decoration: none; border-bottom: 0px rgb(10, 10, 10);" data-sfc-cp="" data-sfc-root="ep"><span class="rQesXe MPyX">PPTP</span>（點對點隧道協定）</span>**</span>
- <span style="color: rgb(0, 0, 0);">**<span class="iNqyIf" data-complete="true" data-copy-service-computed-style="font-family: Arial, sans-serif, "Noto Color Emoji"; font-size: 16px; font-weight: 400; margin: 0px; text-decoration: none; border-bottom: 0px rgb(10, 10, 10);" data-sfc-cp="" data-sfc-root="ep"><span class="rQesXe MPyX">SIP</span>（現代 VoIP 網路電話核心協定）</span>**</span>

<div class="yhAwj" data-complete="true" data-copy-service-computed-style="font-family: Arial, sans-serif, "Noto Color Emoji"; font-size: 14px; font-weight: 400; margin: 0px; text-decoration: none; border-bottom: 0px rgb(10, 10, 10);" data-processed="true" data-sfc-cp="" data-sfc-inited="2" data-sfc-root="ep" id="bkmrk--3" jsaction="rcuQ6b:&iZCSye_47|npT2md" jscontroller="UTzWVc#U8DOt" jsuid="iZCSye_47"><span style="color: rgb(0, 0, 0);"></span></div><div aria-level="3" class="otQkpb" data-animation-nesting="" data-complete="true" data-copy-service-computed-style="font-family: Arial, sans-serif, "Noto Color Emoji"; font-size: 20px; font-weight: 700; margin: 24px 0px 12px; text-decoration: none; border-bottom: 0px rgb(10, 10, 10);" data-processed="true" data-sae="" data-sfc-cp="" data-sfc-root="ep" data-wiz-attrbind="aria-level=iZCSye_48/fLk2Md" id="bkmrk-%E7%B8%BD%E7%B5%90" jsaction="" jscontroller="a7qCn#ZxCkTb" jsuid="iZCSye_48" role="heading"><span style="color: rgb(0, 0, 0);">**總結**</span></div><div aria-owns="action-menu-parent-container" class="n6owBd awi2gc" data-complete="true" data-copy-service-computed-style="font-family: Arial, sans-serif, "Noto Color Emoji"; font-size: 16px; font-weight: 400; margin: 12px 0px 16px; text-decoration: none; border-bottom: 0px rgb(10, 10, 10);" data-hveid="CAAIFRAA" data-processed="true" data-sfc-cp="" data-sfc-root="ep" id="bkmrk-%E7%B0%A1%E5%96%AE%E4%BE%86%E8%AA%AA%EF%BC%8Ckmod-nf-nathelp" jsaction="" jscontroller="TDBkbc#Ml18Xb" jsuid="iZCSye_49">**<span style="color: rgb(0, 0, 0);">簡單來說，`kmod-nf-nathelper-extra` 就是</span><span class="rQesXe MPyX"><span style="color: rgb(0, 0, 0);">讓 OpenWrt 路由器變聰明，能夠看懂 PPTP 等複雜協定的內容，並在防火牆上動態開路、修改 IP，從而完美實現 PPTP / GRE 的 NAT 穿透</span></span>。**</div><span style="color: rgb(0, 0, 0);">**從網頁介面上搜尋套件或指令安裝**</span>

```
opkg update
opkg install kmod-nf-nathelper-extra

```

<span style="color: rgb(0, 0, 0);">**重啟防火牆或重啟**</span>

```
service firewall restart
```

#### <span style="color: rgb(0, 0, 0);">**Windows 11 PPTP設定**</span>

<span style="color: rgb(0, 0, 0);">**建立PPTP VPN後更改加密設定**</span>

[![image.png](https://note.homesitetw.com/uploads/images/gallery/2026-09/scaled-1680-/5ghimage.png)](https://note.homesitetw.com/uploads/images/gallery/2026-09/5ghimage.png)

# OpenWrt 修改網頁端口和https

<span style="color: rgb(0, 0, 0);">**編輯配置檔案`/etc/config/uhttpd`**</span>

```
config uhttpd 'main'
        list listen_http '0.0.0.0:8080'
        list listen_http '[::]:8080'
        list listen_https '0.0.0.0:4433'
        list listen_https '[::]:4433'
        option redirect_https '0'   #1為強制跳轉https
```

<span style="color: rgb(0, 0, 0);">**重啟uhttpd服務**</span>

```
/etc/init.d/uhttpd restart
```

# OpenWrt 安裝 Snmpd

#### **安裝Snmpd**

<p class="callout info">**<span style="color: rgb(0, 0, 0);">適用25.12以後版本</span>**</p>

<span style="color: rgb(0, 0, 0);">**搜尋snmpd安裝**</span>

[![image.png](https://note.homesitetw.com/uploads/images/gallery/2026-10/scaled-1680-/image.png)](https://note.homesitetw.com/uploads/images/gallery/2026-10/image.png)

<span style="color: rgb(0, 0, 0);">**重新整理頁面會出現服務選項自行修改設定**</span>

[![image.png](https://note.homesitetw.com/uploads/images/gallery/2026-10/scaled-1680-/EYMimage.png)](https://note.homesitetw.com/uploads/images/gallery/2026-10/EYMimage.png)

<span style="color: rgb(0, 0, 0);">**這裡只保留一組public**</span>

[![image.png](https://note.homesitetw.com/uploads/images/gallery/2026-10/scaled-1680-/stDimage.png)](https://note.homesitetw.com/uploads/images/gallery/2026-10/stDimage.png)

<span style="color: rgb(0, 0, 0);">**重啟snmpd**</span>

```
/etc/init.d/snmpd restart
```

<span style="color: rgb(0, 0, 0);">**測試是否可以抓到snmpwalk**</span>

```
snmpwalk -v 2c -c public 192.168.12.9
```

#### <span style="color: rgb(0, 0, 0);">**Librenms 設定**</span>

<span style="color: rgb(0, 0, 0);"><span style="color: #000000;">**在openwrt安裝librenms distro腳本抓取發行版本**</span></span>

<p class="callout info"><span style="color: #000000;">**放在/etc/config/裡，網頁上的備份功能會備份這個路徑所有檔案，之後若要遷移不用再重新下載**</span></p>

```
wget -O /etc/config/distro https://raw.githubusercontent.com/librenms/librenms-agent/master/snmp/distro

chmod +x /etc/config/distro
```

<span style="color: rgb(0, 0, 0);">**確認可以抓到版本**</span>

[![image.png](https://note.homesitetw.com/uploads/images/gallery/2026-11/scaled-1680-/KfDimage.png)](https://note.homesitetw.com/uploads/images/gallery/2026-11/KfDimage.png)

<span style="color: rgb(0, 0, 0);">**編輯 `/etc/config/snmpd` 新增extend**</span>

<p class="callout info"><span style="color: #000000;">**安裝後Librenms抓不到hardware(25.12之前沒遇到)，因為是安裝在PVE裡我就手動指定通用名稱**</span></p>

```
config extend
        option name distro
        option prog '/etc/config/distro'
config extend
        option name hardware
        option prog '/bin/echo'
        option args 'Generic x86 64-bit'
```

<span style="color: rgb(0, 0, 0);">**重啟snmpd**</span>

```
/etc/init.d/snmpd restart
```

<span style="color: rgb(0, 0, 0);">**Librenms新增主機確認正常**</span>

[![image.png](https://note.homesitetw.com/uploads/images/gallery/2026-10/scaled-1680-/BxZimage.png)](https://note.homesitetw.com/uploads/images/gallery/2026-10/BxZimage.png)

# OpenWrt 安裝 SQM QoS

#### <span style="color: rgb(0, 0, 0);">**安裝 SQM QoS**</span>

<span style="color: rgb(0, 0, 0);">**搜尋`luci-app-sqm`安裝**</span>

[![image.png](https://note.homesitetw.com/uploads/images/gallery/2026-10/scaled-1680-/xabimage.png)](https://note.homesitetw.com/uploads/images/gallery/2026-10/xabimage.png)

#### <span style="color: rgb(0, 0, 0);">**設定**</span>

<span style="color: rgb(0, 0, 0);">**頻寬100M/40M,這裡設定限頻下載95M/上傳36M，使用預設CAKE 演算法就可以**</span>

[![image.png](https://note.homesitetw.com/uploads/images/gallery/2026-10/scaled-1680-/aZaimage.png)](https://note.homesitetw.com/uploads/images/gallery/2026-10/aZaimage.png)

[![image.png](https://note.homesitetw.com/uploads/images/gallery/2026-10/scaled-1680-/hw2image.png)](https://note.homesitetw.com/uploads/images/gallery/2026-10/hw2image.png)

<span style="color: rgb(0, 0, 0);">**使用測速網站確認成功限頻**</span>

# OpenWrt 安裝NUT (Network UPS Tools)監控UPS

#### <span style="color: rgb(0, 0, 0);">**安裝nut-upsmon**</span>

<span style="color: rgb(0, 0, 0);">**搜尋`nut-upsmon`和`luci-app-nut`安裝**</span>

[![image.png](https://note.homesitetw.com/uploads/images/gallery/2026-11/scaled-1680-/JDfimage.png)](https://note.homesitetw.com/uploads/images/gallery/2026-11/JDfimage.png)

[![image.png](https://note.homesitetw.com/uploads/images/gallery/2026-11/scaled-1680-/C4Simage.png)](https://note.homesitetw.com/uploads/images/gallery/2026-11/C4Simage.png)

<span style="color: rgb(0, 0, 0);">**重新登入網頁會顯示NUT設定側欄**</span>

[![image.png](https://note.homesitetw.com/uploads/images/gallery/2026-11/scaled-1680-/HCmimage.png)](https://note.homesitetw.com/uploads/images/gallery/2026-11/HCmimage.png)

#### <span style="color: rgb(0, 0, 0);">**設定NUT監控**</span>

<span style="color: #000000;">**我的UPS server在Synology上，所以設定UPS 從裝置**</span>

[![image.png](https://note.homesitetw.com/uploads/images/gallery/2026-11/scaled-1680-/luuimage.png)](https://note.homesitetw.com/uploads/images/gallery/2026-11/luuimage.png)

<span style="color: rgb(0, 0, 0);">**CLI確認可以讀取UPS並啟用**</span>

```
root@OpenWrt:~#  upsc ups@192.168.0.250
battery.charge: 100
battery.charge.low: 10
battery.charge.warning: 50
battery.date: 2001/09/25
battery.mfr.date: 2023/08/10
battery.runtime: 2324
battery.runtime.low: 120
battery.type: PbAc
```

```
/etc/init.d/nut-monitor enable

/etc/init.d/nut-monitor start
```

#### <span style="color: rgb(0, 0, 0);">**監控設定**</span>

<span style="color: rgb(0, 0, 0);">**我將所有通知寫入syslog，另外切換到電池和恢復市電會另外執行指令**</span>

[![image.png](https://note.homesitetw.com/uploads/images/gallery/2026-11/scaled-1680-/aHOimage.png)](https://note.homesitetw.com/uploads/images/gallery/2026-11/aHOimage.png)

<span style="color: rgb(0, 0, 0);">**執行指令的部分自行建立`/etc/config/ups-action`執行**</span>

<span style="color: #000000;">**而關機指令則維持系統預設**</span>

[![image.png](https://note.homesitetw.com/uploads/images/gallery/2026-11/scaled-1680-/FNwimage.png)](https://note.homesitetw.com/uploads/images/gallery/2026-11/FNwimage.png)

<span style="color: rgb(0, 0, 0);">**建立`/etc/config/ups-action`**</span>

```
#!/bin/sh
EVENT="$1"
TIMESTAMP=$(date "+%Y-%m-%d %H:%M:%S")
LOCK_FILE="/var/run/onbatt_countdown.pid"

case "$EVENT" in
    ONBATT)
        logger -t nut-action "AC Power outage, on battery"
        
        (
            echo $$ > "$LOCK_FILE"
            
            sleep 120
            
            if [ -f "$LOCK_FILE" ]; then
                NOW=$(date "+%Y-%m-%d %H:%M:%S")
                logger -t nut-action -p authpriv.warn "AC Power not restored after 120s, shutdown system."
                echo "[$NOW] ONBATT confirmed after 120s wait." >> /tmp/ups_events.log
                rm -f "$LOCK_FILE"
                /sbin/poweroff
            fi
        ) &
        ;;

    ONLINE)
        logger -t nut-action "AC Power restored"
        if [ -f "$LOCK_FILE" ]; then
            PID=$(cat "$LOCK_FILE")
            rm -f "$LOCK_FILE"
            kill -9 "$PID" 2>/dev/null
        fi
        ;;

    *)
        logger -t nut-action "[NUT EVENT] $TIMESTAMP - Event $EVENT triggered."
        ;;
esac

exit 0
```

<span style="color: rgb(0, 0, 0);">**腳本行為**</span>

<span style="color: rgb(0, 0, 0);">****`ONBATT` 觸發**：印出日誌、記錄背景子程序 PID，並進行 120 秒非阻塞倒數。**</span>

<span style="color: rgb(0, 0, 0);">****`ONLINE` 中途恢復**：精準依據 PID 砍掉背景倒數程序並清理 PID 檔，順利取消關機。**</span>

<span style="color: rgb(0, 0, 0);">****120 秒超時**：確認 PID 檔依然存在，寫入確認 Log 後直接呼叫 `/sbin/poweroff` 執行安全關機。**</span>

```
chmod +x /etc/config/ups-action 
```

# OpenWrt 安裝 syslog-ng

#### <span style="color: rgb(0, 0, 0);">**安裝syslog-ng**</span>  


<span style="color: rgb(0, 0, 0);">**在網頁上搜尋安裝**</span>

[![image.png](https://note.homesitetw.com/uploads/images/gallery/2026-11/scaled-1680-/R5Timage.png)](https://note.homesitetw.com/uploads/images/gallery/2026-11/R5Timage.png)

#### <span style="color: rgb(0, 0, 0);">**設定syslog-ng**</span>

<span style="color: rgb(0, 0, 0);">**編輯`/etc/syslog-ng.conf `，在source src裡的unix-dgram補上時區**</span>

<span style="color: #000000;">**若未設定，大部分服務寫入/dev/log 的時間都不會+8**</span>

```
source src {
        internal();
        unix-dgram("/dev/log" keep-timestamp(no) time-zone("+08:00"));
};
```

#### <span style="color: rgb(0, 0, 0);">**修改開機順序**</span>  


<span style="color: rgb(0, 0, 0);">**預設syslog-ng順序在50順位會導致開機時某些服務不會被syslog-ng接管**</span>

<span style="color: rgb(0, 0, 0);">**lrwxrwxrwx 1 root root 19 Nov 9 10:42 /etc/rc.d/<span style="background-color: rgb(241, 196, 15);">S50</span>syslog-ng -&gt; ../init.d/syslog-ng**</span>

<span style="color: rgb(0, 0, 0);">**編輯`/etc/init.d/syslog-ng`，將START改成12**</span>

```
START=12
```

<span style="color: rgb(0, 0, 0);">**<span style="color: rgb(0, 0, 0);">重新建立符號連結</span>**</span>

```
/etc/init.d/syslog-ng enable
/etc/init.d/syslog-ng start

#移除舊的S50連結
rm /etc/rc.d/S50syslog-ng
```

<span style="color: rgb(0, 0, 0);">**確認順序已提升至12**</span>

<span style="color: rgb(0, 0, 0);">**lrwxrwxrwx 1 root root 19 Nov 9 12:27 /etc/rc.d/<span style="background-color: rgb(241, 196, 15);">S12</span>syslog-ng -&gt; ../init.d/syslog-ng**</span>

<span style="color: rgb(0, 0, 0);">**確認`/var/log/messages `已寫入log**</span>

```
root@OpenWrt:~# cat /var/log/messages 
Nov  9 10:42:06 OpenWrt syslog-ng[26611]: syslog-ng starting up; version='4.12.0'
Nov  9 10:42:06 OpenWrt syslog-ng[26611]: syslog-ng shutting down; version='4.12.0'
```

<span style="color: rgb(0, 0, 0);">**關閉舊的`logd`服務**</span>

```
/etc/init.d/log stop
/etc/init.d/log disable
```

<span style="color: rgb(0, 0, 0);">**openwrt logread已指向讀取`/var/log/messages`**</span>