2023年12月31日 星期日

cstream - stream limit tool

cstream 通用串流處理工具
此工具可以將 output 做限流處理,本來在找降低 mysqldump loading 的方案,
看到 這篇 回文,裡面提到將 mysqldump pipe 給 cstream 限速。
實測的確有效,大幅降低 mysqldump 期間對服務效能造成的影響

另一個應用範例: 下載限速 1MB/s
curl https://osk-jp-ping.vultr.com/vultr.com.100MB.bin | cstream -t 1048576 > output
當然,curl 本身就有限速參數,上面經由 cstream 限速的語法效果跟下面這句相同
curl --limit-rate 1048576 https://osk-jp-ping.vultr.com/vultr.com.100MB.bin > output

Get IP addresses by ASN

whois -h whois.radb.net -i origin AS15169 | grep ^route

result
route: IPv4 network segment
route6: IPv6 network segment

2023年11月17日 星期五

Fix Unable to detect release version (use '--releasever' to specify release version)

rpm -ivh https://mirror01.idc.hinet.net/CentOS/8-stream/BaseOS/x86_64/os/Packages/centos-gpg-keys-8-6.el8.noarch.rpm
rpm -ivh https://mirror01.idc.hinet.net/CentOS/8-stream/BaseOS/x86_64/os/Packages/centos-stream-repos-8-6.el8.noarch.rpm
rpm -ivh https://mirror01.idc.hinet.net/CentOS/8-stream/BaseOS/x86_64/os/Packages/centos-stream-release-8.6-1.el8.noarch.rpm

會遇到這個問題是在 migrate to Rocky Linux 時中斷造成
再次執行 migrate2rocky.sh 腳本會出現錯誤

Found a full or partial RockyLinux install already in place. Aborting
because continuing with the migration could cause further damage to system.

修改 migrate2rocky.sh 把出現上面訊息的 if 那一段拿掉,上面的 rpm 補完,再執行一次就可以了

2023年11月2日 星期四

SSH via Shadowsocks

Local address: 127.0.0.1
Local port: 1080
Server IP: 12.34.56.78

~/.ssh/config 加入

Host *
ProxyCommand connect-proxy -S 127.0.0.1:1080 %h %p

若要 ssh 到 Server IP,改用 ssh 127.0.0.1

2023年9月8日 星期五

Fix Ubuntu NO_PUBKEY B53DC80D13EDEF05

Google Cloud package update failed

curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key --keyring /usr/share/keyrings/cloud.google.gpg add -

2023年8月10日 星期四

HAProxy Reverse Proxy with SSL

憑證掛在 Reverse Proxy, 內部走 HTTP

frontend http-in
mode http
bind *:80
bind *:443 ssl crt /etc/haproxy/pank.org-crt-chain-key.pem
use_backend %[req.hdr(Host),lower]

backend test1.pank.org
balance first
mode http
option forwardfor except 127.0.0.0/8
server web-1 192.168.0.27:80

backend test2.pank.org
balance first
mode http
option forwardfor except 127.0.0.0/8
server web-2 192.168.0.42:80

test1.pank.org 及 test2.pank.org 使用同一個 wildcard 憑證,
crt 是 crt+chain+key 放同一個檔
若兩個站的憑證不同,可以用 crt-list 指定多個憑證
例: bind *:443 ssl crt-list /etc/haproxy/crt-list.txt
crt-list.txt 的內容
/etc/haproxy/domain1.com-crt-chain-key.pem
/etc/haproxy/domain2.com-crt-chain-key.pem
有設定 option forwardfor 會帶 X-Forwarded-For 到 backend server

2023年8月9日 星期三

NGINX Reverse Proxy with SSL

憑證掛在 Reverse Proxy, 內部走 HTTP

/etc/nginx/conf.d/test1.conf

server {
listen 443 ssl;
server_name test1.pank.org;
ssl_certificate /etc/nginx/conf.d/pank.org-crt-chain.pem;
ssl_certificate_key /etc/nginx/conf.d/pank.org-key.pem;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers HIGH:!aNULL:!MD5;
location / {
add_header X-Proxy-Cache $upstream_cache_status;
proxy_pass http://192.168.0.27;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}

若後端有多台,建立多個 conf 即可
有設定 proxy_set_header X-Forwarded-For 會帶 X-Forwarded-For 到 backend server

Apache Reverse Proxy with SSL

憑證掛在 Reverse Proxy, 內部走 HTTP

<VirtualHost *:443>
ServerName test1.pank.org
ServerAdmin pank@pank.org
ErrorLog "/var/log/httpd/test1_error_log"
TransferLog "/var/log/httpd/test1_access_log"
SSLEngine on
ProxyPass / http://192.168.0.27/
ProxyPassReverse / http://192.168.0.27/
SSLProtocol all -SSLv2
SSLCipherSuite HIGH:MEDIUM:!aNULL:!MD5
SSLCertificateFile "/etc/httpd/conf.d/pank.org-crt.pem"
SSLCertificateKeyFile "/etc/httpd/conf.d/pank.org-key.pem"
SSLCertificateChainFile /etc/httpd/conf.d/chain.pem
</VirtualHost>

若後端有多台,建立多個 VirtualHost 區塊即可
Apache 預設就會帶 X-Forwarded-For 到 backend server,不用特別設定

2023年8月3日 星期四

yt-dlp - youtube-dl replacement

youtube-dl 之前是一個好用的視頻下載工具,但在 2020 年 10 月,被 RIAA 要求下架,
Github 也關閉了它及其他 fork 的專案
但在很多使用者抱怨下,2020 年 11 月 Github 恢復了 youtube-dl 的專案,
但是近來都沒更新了,最後更新日期是 2021 年 12 月
yt-dlp 是 youtube-dl 的 fork,仍常常更新,可視為 youtube-dl 的替代品

2023年7月3日 星期一

Simple traffic shapping with iptables

使用 iptables 限速

範例: Linux Gateway, 區網的網段是 192.168.0.0/24
要限制每個 IP 都有上傳下載 16M/16M bps

iptables -A FORWARD -d 192.168.0.0/24 -m hashlimit --hashlimit-name ratelimitin --hashlimit-mode dstip --hashlimit-above 2048kb/s -j DROP
iptables -A FORWARD -s 192.168.0.0/24 -m hashlimit --hashlimit-name ratelimitin --hashlimit-mode srcip --hashlimit-above 2048kb/s -j DROP
Rule 要分兩個方向來下,兩這條分別是下載及上傳
16M bps = 16384 k bps = 2048 kb/s

實測結果還算準

2023年6月27日 星期二

Get Public IP Address from OpenDNS

一般取得所在 Public IP 都是用 Web 服務取得,例如:
curl ip4.tw
curl ifconfig.co

OpenDNS 有提供一個服務,對他們的 name server 查 myip.opendns.com 會回應來源 IP
dig +short myip.opendns.com @resolver1.opendns.com
host myip.opendns.com resolver1.opendns.com

發現若環境同時有 IPv4+IPv6 可能會不正常,因為兩個 IP 都有的話,通常會走 IPv6 的路由,用 IPv6 路由去查 A 記錄導致無資料

保險一點,指令要區分 IPv4、IPv6
dig -4 +short A myip.opendns.com @resolver1.opendns.com
dig -6 +short AAAA myip.opendns.com @resolver1.opendns.com

2023年6月18日 星期日

Import Rocky Linux 9 to WSL

需先安裝 XZ Utils for Windows 把 xz.exe 放在 PATH 有指到的地方

curl -LOs https://github.com/rocky-linux/sig-cloud-instance-images/raw/Rocky-9.2.20230513-Base-x86_64/layer.tar.xz
上面的 layer.tar.xz 是官方的網址,其他版本網址可到 sig-cloud-instance-images 選擇 Branch
xz -d layer.tar.xz
wsl --import RockyLinux9 D:\WSL\RockyLinux9 layer.tar
Distro 名稱 RockyLinux9 及資料目錄名稱 D:\WSL\RockyLinux9 請依自身環境調整
wsl -d RockyLinux9
即完成進入 RockyLinux9 WSL

ref. Import any Linux distribution to use with WSL

2023年5月20日 星期六

Migrate Google Compute Engine VM image to local

想要把 Google Compute Engine VM 備份,或者 clone 一份到 local 做測試
先關機建立映像檔,再把映像檔匯出到 Bucket (可以選擇匯出格式 vmdk、vhdx 等),然後就可以下載
但會發現在自己的環境無法開機,看起來是找不到 root



解決方式必需重建 initramfs
但因為找不到 root,在這個 emergency mode 無法做這個動作 (dracut -f)
需要找對應的版本的 ISO 來開機,由於系統內可能沒有跟 ISO 內一樣版號的 /lib/modules
最簡單的方式就是裝 ISO 內的 Kernel,流程上一樣會建立 initramfs

以下以 CentOS 7.9 為例:
以光碟開機進入 Rescue 模式後,選 1
chroot /mnt/sysimage
mount /dev/cdrom /mnt
cd /mnt/Packages
rpm -ivh kernel-3.10.0-1160.el7.x86_64.rpm
exit
reboot
應該就可以正常開機了

備註:
一開始畫面出現這個
Probing EDD (edd=off to disable)... ok
其實跟開不了機無關,不影響是否可以正常開機


2023年4月25日 星期二

Amazon Linux 2

可以把 Amazon Linux 2裝在自己的 VM 上
Run Amazon Linux 2 as a virtual machine on premises

要自訂帳密需自行建立 seed.iso,然後掛到光碟上,
seed.iso 內容只有兩個檔,meta-data 及 user-data
懶得自己建也可以用預設的 seed.iso

預設有四個帳號 user1, user2, user3, ec2-user
其中帳號 user1 及 ec2-user 可以用預設密碼 amazon 登入
user2 要設定 hashed passwd, 沒設定是無法登入
user3 是用 SSH key 登入
使用預設的 seed.iso 第一次開完最好把預設的 user 都刪除

2023年3月29日 星期三

Bash built-in case modification

BASH 有內建大小寫轉換功能,執行效率會比使用 tr, sed, awk 好

$ A=ABCdef

# To upper case
$ echo ${A^^}
ABCDEF

# To lower case
$ echo ${A,,}
abcdef

2023年3月23日 星期四

ifup and ifdown equivalent nmcli command

ifup eth0 = nmcli con up eth0
ifdown eth0 = nmcli con down eth0

ifup, ifdown command still available in NetworkManager-initscripts-updown package
dnf -y install NetworkManager-initscripts-updown

2023年3月12日 星期日

解決 Windows 工作排程器 錯誤訊息: 已回報下列錯誤: 工作定義使用了過時的功能

Windows不曉得何時拿掉了工作排程顯示訊息的功能,但還是能設定,後面括號(已過時)
最後會出現如下的畫面。
奇怪,不能設定為何不拿掉設定選項?


替代方式是用執行程式 msg
新增引數輸入 * 要顯示的訊息


2023年1月15日 星期日

Detect iPhone by Port 62078

現在手機預設都有開 Random MAC Address 的功能,也就是無法用 MAC 來判斷是那一家廠商
iPhone 手機有一個固定會 Listen 的 Port 62078,若 Scan 這個 Port 有回應,可以判斷這個 Device 可能是 iPhone
Android 則沒有固定會 Listen 的 Port

2023年1月9日 星期一

Using iperf3 to test uload and download

Server side
iperf3 -s

Client side
iperf3 -c server_host -b 10M -t 60 -P 5 # Test upload
iperf3 -c server_host -b 10M -t 60 -P 5 -R # Test download
頻寬 10M,測試時間 60 秒,使用 5 個平行連線
iperf3 只能一個 Client 對一個 Server
若要多個 Client 對同一台 Server,Server 端需執行多個 iperf3 用不同的 Port 切開

2023年1月6日 星期五

Detect if a VM is running in Google Compute Engine

Detect if a VM is running in Compute Engine

sudo dmidecode -s system-product-name | grep "Google Compute Engine"
這個需要 root 權限,實際上是去讀取 /sys/firmware/dmi/tables/DMI
用 strings /sys/firmware/dmi/tables/DMI | grep "Google Compute Engine" 也行

若程式沒有 root 權限,可以去讀取 /etc/hosts 有沒有包含 Added by Google 字樣
grep "Added by Google" /etc/hosts

2023年1月2日 星期一

RouterOS Packet Sniffer Streaming

RouterOS 的儲存空間有限,要分析封包可以用 Packet Sniffer Streaming,
將封包轉送到 PC,再用 Wireshark 收。
它會用 TZSP 封裝協定將封包再包一層後再轉送

Tools / Packet Sniffer / Streaming Enabled 打勾,輸入 Server IP 及 Port (預設37008)
Apply / Start,還可以下 Filter 條件

在 PC 端的 Wireshark 下 tzsp 過濾條件即可查看

Linux PPPoE NAT MTU and MSS

Linux 在 PPPoE 環境下 NAT,下面的 Client 可能會有部份網站連不上, 已知 LINE 的網站 ( https://line.me ) 及 LINE 服務就有這個狀況 這個問題是因為 Client 的 MTU 1500 大於 Linux NAT WAN 端的 ...