家中伺服器撥號上網、IP 會變,想在外遠端存取服務卻不想用花生殼公開 IP?若僅供個人/小圈子使用,透過郵件自動發送當前 PPP IP 是輕量且私密的替代方案。本文介紹兩種實作:桌面環境適用的 knemo + kmail,與無需圖形介面的 udev + mail + exim4。
原理: knemo 監控網路介面事件,撥號連線建立時觸發腳本,透過 DCOP 呼叫 kmail 發送郵件。
/path/to/ppp_ip_mail.sh:
#!/bin/bash
FROM="server@home.local"
TO="you@example.com"
CC="friend@example.com"
BCC=""
SUBJECT="Today's PPP Address"
sleep 10s
MESSAGE=$(/sbin/ifconfig | /bin/sed -n '/P-t-P/s/.*inet addr:\([^ ]*\).*/\1/p')
dcop kmail MailTransportServiceIface sendMessage \
"$FROM" "$TO" "$CC" "$BCC" "$SUBJECT" "$MESSAGE" "[] []"
chmod +x /path/to/ppp_ip_mail.sh原理: 核心偵測到 pppX 網路裝置新增事件,udev 觸發腳本發送郵件,不依賴桌面環境。
exim4(或 postfix/ssmtp)可對外發信。mailutils 或 bsd-mailx 提供 mail 指令。/usr/local/bin/ppp-address.sh:
#!/bin/bash
FROM="server@home.local"
TO="you@example.com"
CC="friend@example.com"
BCC=""
SUBJECT="Today's PPP Address"
sleep 10s
MESSAGE=$(/sbin/ifconfig | /bin/sed -n '/P-t-P/s/.*inet addr:\([^ ]*\).*/\1/p')
echo "$MESSAGE" | /usr/bin/mail -s "$SUBJECT" -c "$CC" -b "$BCC" "$TO"
/etc/udev/rules.d/z100_ppp_ip_letter.rules:
ACTION=="add", SUBSYSTEM=="net", KERNEL=="ppp[0-9]", RUN+="/usr/local/bin/ppp-address.sh"
udevadm control --reload-rules| 特性 | knemo + kmail | udev + exim4 |
|---|---|---|
| 需桌面環境 | 是 (KDE) | 否 |
| 觸發時機 | 網路介面啟用事件 | 核心裝置新增事件 |
| 適用場景 | 個人桌機、筆電 | 無頭伺服器、嵌入式裝置 |
| 依賴元件 | knemo, kmail, DCOP | udev, exim4, mailutils |
sleep 10s 確保 PPP 協商完成再取 IP。若 IP 取得較慢可調長。建議在郵件主旨加入主機名與時間戳,便於管理多台裝置。