Pank's Blog
2025年3月18日 星期二
SSH Jump host connection
情境: 1跳,透過 Host A 連 Host B
ssh -J user@hostA user@hostB
情境: 2跳,透過 Host A 連 Host B,再連到 Host C
ssh -J user@hostA,user@hostB user@hostC
-J 參數相當於設定 ProxyJump
若是用 Key 連線,Key 都是吃 Client 端的,只要把 Key 放到所有 Host 即可
達到體感直連,實際上路由仍是照指定 Host 順序走到目的
理論上更多跳都行
2025年3月6日 星期四
Fast check domain is registered or free
whois.joker.com 提供了簡易版,看結果是 free 還是 registered,簡單明暸
# whois -h whois.joker.com -p 4343 domain:7878.com
domain:7878.com registered
# whois -h whois.joker.com -p 4343 domain:78782222.com
domain:78782222.com free
也可以用 nc
# nc whois.joker.com 4343 < domain:7878.com
domain:7878.com registered
ref. Check Domain Availability
2025年3月5日 星期三
Linux moreutils
可以透過 dnf install moreutils 或 apt install moreutils 安裝
套件包含以下工具,個人覺得比較實用的是 ifdata、pee、sponge、ts、vidir
/usr/bin/chronic
/usr/bin/combine
/usr/bin/errno
/usr/bin/ifdata
/usr/bin/ifne
/usr/bin/isutf8
/usr/bin/lckdo
/usr/bin/mispipe
/usr/bin/pee
/usr/bin/sponge
/usr/bin/ts
/usr/bin/vidir
/usr/bin/vipe
/usr/bin/zrun
chronic 用來隱藏正常執行結果的標準輸出
好像沒什麼用,使用 > /dev/null 可以達到一樣的效果
combine 布林合併兩分文件
combine file1 and file2 兩分文件都有則輸出行
combine file1 not file2 輸出只存在 file1 但不存在 file2 的行
combine file1 or file2 相當於 cat file1 file2
combine file1 xor file2 輸出只存在 file1 或 file2 的資料
errno 查詢 errno 名稱及描述
ifdata 直抓網路卡各項資訊
例如: ifdata -pa eth0 可以直接取出 IPv4 IP
ifne 標準輸入不為空時,執行後續指令
date | echo hello # 會出現 hello
true | echo hello # 不會出現 hello
isutf8 檢查檔案是否是合法 UTF-8 格式
現在系統已全面都是 UTF-8,好像沒什麼用了
lckdo 指定 lock file,避免指令重複執行
跟 flock 類似,man page 也建議使用 flock
mispipe 相當於 command1 | command2
和 pipe 的差異是使用 mispipe command1 command2 會回傳 command1 的 exit status
pee 複製標準輸入,pipe 給多支程式
類似 tee,tee 是將標準輸入寫到檔案,pee 是將它 pipe 給程式,可以多個,
通常用 pee 的情況也是要 pipe 給多個程式才需要它
例如: date | pee cat cat 執行結果可以看到兩個日期
sponge 這個指令會接收到所有 input 後才會輸出,可以做到同檔操作
例如: grep abc file | sponge file
若不使用 sponge,一般做法要兩行
grep abc file > file.tmp
mv file.tmp file
ts 在任何 input 上加上時間
這指令很好用,例如: ping 1.1.1.1 | ts
vidir 可以在 vi 模式進行檔案操作
例如刪除,改檔名,存檔後會真的刪除及改檔名
vipe 編輯 pipe
在 command1 | command2 中間,加入 vipe,command1 | vipe | command2,可以對資料異動後,再 pipe 給 command2
zrun 在不解開 .gz 的情況下,對解開的檔案進行操作
背景做法是解壓暫存檔,把暫存檔名當參數餵給 command
例如: zrun grep abc file1.gz
2025年3月4日 星期二
Gmail SPF Checking
之前未設定 SPF,自架的 Server 都可以寄,頂多就是進 Spam,
現在沒有設定 SPF 或有設定但未通過檢查的都會被退信
退信訊息範例
<<< 550-5.7.26 SPF [pank.org] with ip: [203.xx.xx.xx] = did not pass
此案例使用自己的域名信箱寄信
這樣對使用者會少了一些彈性,
如果設備只支援基本的 SMTP (未加密的 Port 25),解法大概就幾種:
1. 使用 ISP 的信箱,及 SMTP
2. Sender 用自己的域名,用自己架 SMTP,設好 SPF
3. Sender 用自己的域名,用 ISP 的 SMTP,SPF 比照 ISP 的設定,例如 HiNet 是 "v=spf1 redirect=spf.ms.hinet.net"
不建議用方法3,因為別人也可以透過 ISP 使用你的域名寄信
MySQL default sql_mode
若沒特別設定,MySQL 預設的 sql_mode 就是上面的值
若本來 sql_mode 是空的,要啟用預設值,有幾點要注意:
1. 當 INSERT/UPDATE 時,值不能超出欄位長度,不然會報錯 (STRICT_TRANS_TABLES)
2. 當 INSERT 時,若沒有指定到的欄位,沒有預設值,會報錯 (STRICT_TRANS_TABLES)
3. 當 INSERT/UPDATE 字串到數字類欄位,會報錯 (STRICT_TRANS_TABLES)
4. 以前能用的 GROUP BY 語法,啟用後可能無法使用 (ONLY_FULL_GROUP_BY)
5. 不能使用 0000-00-00 及 0000-00-00 00:00:00 這種日期時間 (NO_ZERO_IN_DATE,NO_ZERO_DATE)
Linux Kernel fs.protected_regular
protected_regular: This protection is similar to protected_fifos,
but it avoids writes to an attacker-controlled regular file,
where a program expected to create one.
When set to "0", writing to regular files is unrestricted.
When set to "1" don't allow O_CREAT open on regular files that we don't own in world writable sticky directories,
unless they are owned by the owner of the directory.
When set to "2" it also applies to group writable sticky directories.
RedHat 9 系的 Linux protected_regular 預設是 1
常見的目錄是 /tmp 及 /dev/shm
當目錄下面檔案 file owner 是 A,檔案權限是 -rw-rw-rw- (666) 當 B 去存取 file
有用到 O_CREAT 時,是不允許的,
但使用不同編輯器,編輯檔案後存檔,卻有不同樣的結果,
vim 編輯後可以寫入,nano 及 joe 都不能寫入,猜測跟檔案處理方式有關,vim 可能沒有調用 O_CREAT,所以可以寫入
Shell 的處理方式,例如以下動作也是可以,也就是沒有調用 O_CREAT
echo hello > file
echo world >> file
RedHat 要改這個預設值,是改這個檔
/usr/lib/sysctl.d/50-default.conf
2024年11月9日 星期六
RouterBoard 與 HiNet MOD 的奇怪問題
會造成 RouterBoard 的 PPPoE 斷線重連,有夠怪的問題
這個問題追了好久,終於找到兩者竟然有關聯
經過多次驗證,確認了這個關聯性,就在機上盒關機後的兩分鐘(正負5秒),
RouterBoard 的 PPPoE 必定斷線重連
Log 呈現大概是這樣
交叉測試已知的結果:
- 只有影響 RouterBoard,手邊兩台(註2)都有這狀況,同時間用 Linux 電腦撥號的不影響,RouterOS CHR 版本也不影響
- 6.x 版及 7.x 版都有此狀況(註3),6.x 版斷線時間較長,大約30秒到1分鐘,可以察覺到斷線,7.x 版只是瞬斷,PING 只會掉一個包或甚至沒掉,沒看 Log 應該無法察覺有斷線
- 跟假固定 IP 無關 (HNnumber@ip.hinet.net)
- 跟數據機後面的 Port 位無關
註1: MOD 機上盒型號 MOD502A,HiNet 數據機型號 Alcatel-Lucent I-040GW
註2: 按電源開關整個關機,非遙控器按鈕
註3: 兩台型號是 RB2011UiAS-2HnD 及 RB3011UiAS
註4: 測試時的版本是 6.49.17 及 7.16.1
問題的答案:
經過抓包後找到答案,在機上盒關機後兩分鐘,
頭端設備都會送出一個 PPPoED Active Discovery Terminate (PADT) 斷線訊號
此封包是在 RouterBoard packet sniffer 抓的
第一個封包,是頭端設備(Nokia BRAS)送 PADT 給機上盒(L2封包),此時已經是關機兩分鐘,
Port Down,MAC Address 會直接消失在數據機的 MAC Table
數據機的 Switch 晶片在處理上就用廣播的方式送出 PADT 封包,所以直接接在數據機後面的都可以收到 PADT
RouterBoard 在收到 PADT 封包時,沒有判斷 Dest MAC Address 不是給自己的,直接 PPPoE 斷線反應,
接電腦抓封包並不會看到這個包,看起來是有判斷 Dest MAC Address 不是給自己的所以 Drop 該封包
解決方式:
若是使用 7.x 的 RouterOS,此問題造成的斷線重連其實無感,不需特別去解。
要解的話也簡單,在下面多接一台 Switch 即可,機上盒接 Switch,不要直接接數據機,
MAC Address 的 aging time 通常是 300 秒。
接在 Switch 下的機上盒關機了,數據機的 MAC Table 並不會立刻消失,
當頭端要送出 PADT 封包時,因為 MAC entry 仍在,所以不會用廣播方式,
如此 RouterBoard 就不會收到 PADT 封包,也就不會斷線重連了。
後續觀察數據機的 MAC Table,並沒有 aging time 300 秒的機制,跟一般 Switch 的行為不同,
曾經學過的 MAC 都不會消失,只會多,不會少,除非 Port Down。
2024年11月6日 星期三
MySQL 8.4 LTS
這是繼 8.0 LTS 後下一個 LTS 版本
寫這篇文章時,已經出到 8.4.3
Overview of changes in MySQL 8.4.0
感覺異動不大,
mysql_native_password 預設關閉,
因應時代變化,一些預設參數有調整,
replication 的指令有異動
Download MySQL Yum Repository
裝這個 8.4 的 repo 檔,然後 yum -y update 就升完了
拿一台 8.0 的機器直接升級,並沒有遇到什麼問題,算是無痛升級
2024年11月2日 星期六
RouterOS Cloud DDNS Server
cloud.mikrotik.com
or
cloud2.mikrotik.com
若機器上設了很多路由,IP / Cloud 的 DDNS IP 可能不是想要的
可以設這段 static route 159.148.128.0/18 控制它走那一段路由出去 Cloud DDNS
LINE Notify Replacement
LINE Notify 好用在於免費,而且可以無限量發送
幾乎所有的 IM 軟體都有串 Bot Message 的功能,找替代方案不是問題
Telegram
Discaord
Facebook Messenger
IG
Skype
Google Chat
Microsoft Teams
Slack
個人使用就挑一套有在用的轉即可,個人是推薦 Telegram
量不大的話也可以用 LINE Messaging API,免費額度一個月是 200 則
商家的話比較麻煩,跳其他 APP 平台客戶不見得會繼續用,最佳替代方案只能付費選 LINE Messaging API
又是一個養套殺案例
SSH Jump host connection
SSH 跳板機連線 情境: 1跳,透過 Host A 連 Host B ssh -J user@hostA user@hostB 情境: 2跳,透過 Host A 連 Host B,再連到 Host C ssh -J user@hostA,user@hostB user@host...
-
禁止 LINE 電腦版自動或強制更新的方法 LINE 電腦版啟動都會去連這個更新資訊檔 https://desktop.line-scdn.net/win/v1/real/update_info.json 內容大概長這樣 可以看出針對各版本的更新 type 有 force, ...
-
xrdp 是 Linux 版的 RDP server (遠端桌面) 它運作時需要 Xvnc 的 libvnc.so, 所以安裝時需要連同 VNC 一起安裝(只需 minimal) dnf -y install xrdp tigervnc-server-minimal system...
-
http://mirror01.idc.hinet.net HiNet 這個網址關了,要高速下載 Linux ISO 少了一個地方,感謝 HiNet 默默服務了多年 測了幾個 TW mirror 站,推 TWDC 台灣數位串流,常見的 Linux 都有,速度超快 https://...
-
以前都是用 rp-pppoe 套件裡的 adsl-setup 來設定 PPPoE 現在比較新的 Linux 已經沒有這個套件了,要用 NetworkManager 的 nmcli 來設定 設定也很簡單,準備帳號、密碼及網路卡就行了 以下範例帳號是 xxxx@hinet.net 密...
-
Windows不曉得何時拿掉了工作排程顯示訊息的功能,但還是能設定,後面括號(已過時) 最後會出現如下的畫面。 奇怪,不能設定為何不拿掉設定選項? 替代方式是用執行程式 msg 新增引數輸入 * 要顯示的訊息
-
比較舊版的電視盒,無法裝新版的 Kodi , Android 4.x 版只能裝到 16.1 這個版本 kodi-16.1-Jarvis-armeabi-v7a.apk
-
RouterOS 的管理工具 winbox,因為還不支援 UTF-8, 雖然可以在 Wireless 設定中文的 SSID,但是實際上會看到亂碼, WiFi 的 SSID 是走 UTF-8 編碼,需要把 UTF-8 中文轉成 HEX 碼,再用指令設定 寫了一個小工具提供大家使用...
-
Windows 的 NFS Client 從 Windows 7 之後就內建了,但預設沒有開啟, 要到 設定 / 應用程式 / 程式與功能 / 開啟或關閉 Windows 功能 開啟 Client for NFS 但是預設的情況下,遇到中文檔名會有亂碼, 到 設定 / 時間與語言...
-
前一陣子 LINE 發出 LINE Notify 結束服務公告(結束時間2025-03-31),這對有在用這個服務的人影響頗大, LINE Notify 好用在於免費,而且可以無限量發送 幾乎所有的 IM 軟體都有串 Bot Message 的功能,找替代方案不是問題 Teleg...
-
跨來源資源共用(CORS) Mozilla 這邊文章寫得很詳細 簡單講當 User 去連 A 站,裡面的 AJAX 動作去 call B 站的資料,B 站就必需在 HTTP header 裡加入 Access-Control-Allow-Origin: * 使用完整 Source...