在 AWS 上使用 EC2 建立 FRP 玩玩內網穿透

前言 TL;DR 2022 年上旬熱衷於軟路由,在 Raspberry Pi 4b 上裝了 openWRT 來玩,使用 USB 網卡作為 LAN NIC,雖然使用上完全沒有問題,但透過 USB 始終有個芥蒂,「就不能多個 pci-e 來接網卡嗎」,於是衝動順勢買了 Mikrotik RB5009UG+S+IN。 RB5009G 為 arm64(ARMv8),系統為 RouterOS v7,透過 ZeroTier 插件可以實現內網穿透以及 VPN,一直以來可在外連回家裡做事,連 Jellyfin 使用起來都很順。 事出必有因,ZeroTier 的服務器在未知的地方,VPN 的設定也是在網頁上設定,即便不需要太過擔心,但若是 ZeroTier 被攻擊,那自己的內網也危險了。後來又遇到一次,在某處透過 Windows rdp 連回家開 VScode 做事,但敲鍵盤會有一到兩秒的延遲,加劇了需要替換掉 ZeroTier 的想法。 frp 是一個由 golang 寫出來的 reverse proxy…,其他的到 github 看比較清楚 XD。 這篇文章主要是透過 frp 建立內網穿透,雖然大部分都在建立 AWS EC2 instance,frp 的建立實在是非常簡單,VPN (maybe WireGuard?)的實現會另外再寫一篇。 事前準備 一個 AWS 帳號 一台 linux 主機作為 frp client 建立 Amazon EC2 建立執行個體 建立好帳號後,進入 AWS console,點擊 EC2。 點擊啟動執行個體 取名為 frp-tunnel 選用自己習慣的 linux distro,這邊我習慣使用 ubuntu,故選 ubuntu 22.04。 執行個體類型選 t2.micro,金鑰由於安全因素,請建立新的金鑰對(key pair) 由於我使用 ubuntu 22.04,故使用 ED25519 來加密(RSA 已被淘汰)。下載下來的 pem or ppk 需要好好保存,未來不能再下載。 網路設定的部分,ssh 的 source 使用我的IP,不要一開機就被陌生人打穿。 設定存儲的部分,若是使用 AWS Linux 的話可以預設 8GB 沒問題,我自己的 ubuntu vm 習慣 20GB,所以設成 20GB。 最後確認一下右邊的摘要,就可以點擊啟動執行個體。 建立完成後就會轉跳至完成頁面。 ssh 連線至 EC2 在 console 頁可以看到剛剛建立的 EC2 instance,點擊可以進入 instance 頁面。 ...

zsh & oh-my-zsh & tmux install cheat sheet on ubuntu 22.04

oh my zsh & power lever 10k install deps sudo apt install git curl -y install zsh sudo apt install zsh -y check is installed cat /etc/shells | grep zsh # raiven@k3s:~$ cat /etc/shells | grep zsh # /bin/zsh # /usr/bin/zsh install oh-my-zsh sh -c "$(curl -fsSL https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh)" install powerlevel10k git clone --depth=1 https://github.com/romkatv/powerlevel10k.git ${ZSH_CUSTOM:-$HOME/.oh-my-zsh/custom}/themes/powerlevel10k install fonts: wsl: bash -c "$(curl -fsSL https://raw.githubusercontent.com/omegaatt36/dotfiles/main/install_fonts.sh)" --windows linux: bash -c "$(curl -fsSL https://raw.githubusercontent.com/omegaatt36/dotfiles/main/install_fonts.sh)" change login shell(must logout and login again) ...

proxmox ve shrink vm disk size

由於 zpool 吃超過 80%,故將其中一個 VM(k8s-worker) 的硬碟縮小(200GB=>100GB) pve: 7.2.7 zfs: zfs-2.1.5-pve1 zfs-kmod-2.1.5-pve1 確認 vm disk 剩餘空間 $ df -h Filesystem Size Used Avail Use% Mounted on /dev/vda1 197G 14G 178G 7% / vm 關機 下載 gparded iso 到 pve vm 從 gparded iso 開機並縮減 disk 大小 pve server 針對 vm 的 hard disk 調整占用大小 switch(allocate storage type) case LV: lvreduce -L 5G /dev/pve/disk-name (縮小到只剩 5G) or lvreduce -L -5G /dev/pve/disk-name (縮小 5G) case qcow2: qemu-img resize --shrink <vmfile.qcow2> [+-] or size case ZFS: zfs set volsize=<new size>G rpool/vm-<vm id>-disk-<disk number> 舉例: vm(205) 的虛擬硬碟(vm-205-disk-0)放在 zpool land 上面,已經將 vm 縮小至 100GB ❯ zfs list NAME USED AVAIL REFER MOUNTPOINT land/vm-205-disk-0 236G 354G 119.3G - ❯ zfs set volsize=100G land/vm-205-disk-0 ❯ zfs list NAME USED AVAIL REFER MOUNTPOINT land/vm-205-disk-0 136G 354G 19.3G - ``` 在網頁 GUI 中修改強制刷新 disk。修改 disk 的設定,再調整回來 ...

CentOS 7 kubernetes + containerd + calico basic installation tutorial

前言 鑒於最近接到 1 CentOS master + 2 Gentoo node k8s cluster 建置雜事,被自己不熟系統雷到,做個筆記紀錄一下,未來敲敲指令就可以了 .. root@master .PLTJ. ----------- <><><><> OS: CentOS Linux 7 (Core) x86_64 KKSSV' 4KKK LJ KKKL.'VSSKK Host: KVM/QEMU (Standard PC (i440FX + PIIX, 1996) pc-i440fx-6.1) KKV' 4KKKKK LJ KKKKAL 'VKK Kernel: 5.4.180-1.el7.elrepo.x86_64 V' ' 'VKKKK LJ KKKKV' ' 'V Uptime: 2 mins .4MA.' 'VKK LJ KKV' '.4Mb. Packages: 359 (rpm) . KKKKKA.' 'V LJ V' '.4KKKKK . Shell: bash 4.2.46 .4D KKKKKKKA.'' LJ ''.4KKKKKKK FA. Terminal: /dev/pts/0 <QDD ++++++++++++ ++++++++++++ GFD> CPU: Common KVM processor (4) @ 3.493GHz 'VD KKKKKKKK'.. LJ ..'KKKKKKKK FV Memory: 97MiB / 16015MiB ' VKKKKK'. .4 LJ K. .'KKKKKV ' 'VK'. .4KK LJ KKA. .'KV' A. . .4KKKK LJ KKKKA. . .4 KKA. 'KKKKK LJ KKKKK' .4KK KKSSA. VKKK LJ KKKV .4SSKK <><><><> 'MKKM' '' 此篇 CentOS 寄宿於 PVE 下,kernel 已升級為 5.4.180-1.el7.elrepo.x86_64 使用 containerd 作為 cri 使用 calico 作為 cni,並使用 host 唯一的網卡,不做其他進階設定。 ...

CentOS 7 upgrade kernel

查看目前 kernel 版本 > uname -a Linux R350-1 3.10.0-1160.53.1.el7.x86_64 #1 SMP Fri Jan 14 13:59:45 UTC 2022 x86_64 x86_64 x86_64 GNU/Linux 添加 ELRepo 公鑰 rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org 安裝 ELRepo yum 來源 rpm -Uvh https://www.elrepo.org/elrepo-release-7.0-4.el7.elrepo.noarch.rpm 查看可用的 kernel yum --disablerepo="*" --enablerepo="elrepo-kernel" list available 安裝最新的 kernel,挑一個安裝,這邊選擇 kernel-lt kernel-lt 為長期支援版 kernel-mt 為 linus 個人維護版 yum --enablerepo=elrepo-kernel install kernel-lt 查看目前已安裝的 kernel sudo awk -F\' '$1=="menuentry " {print i++ " : " $2}' /etc/grub2.cfg 0 : CentOS Linux (5.4.180-1.el7.elrepo.x86_64) 7 (Core) 1 : CentOS Linux (3.10.0-1160.53.1.el7.x86_64) 7 (Core) 2 : CentOS Linux (3.10.0-1160.el7.x86_64) 7 (Core) 3 : CentOS Linux (0-rescue-b804ce66fb404eb7a5dd04547e3e972e) 7 (Core) 如果結果為空,或是沒有這個文件,可以先進行 grub2-mkconfig -o /boot/grub2/grub.cfg ...

改善 Proxmox VE/Debian 始終跑在最高頻率

這幾天把便宜撿到的 Threadripper 2950X 平台也上 Proxmox VE 玩玩了,裝完系統後才發現自己太習慣於 windows 下的電源管理,一直都沒發現 linux 下 CPU 頻率都是拉滿的狀態,找了debian 下進行電源管理的電源計畫設定教學達到降溫省電,順便做做紀錄。 此篇文章的硬體基於 root@raiven:~# neofetch _,met$$$$$gg. root@raiven ,g$$$$$$$$$$$$$$$P. ----------- ,g$$P" """Y$$.". OS: Debian GNU/Linux 10 (buster) x86_64 ,$$P' `$$$. Host: HP Z2 SFF G4 Workstation ',$$P ,ggs. `$$b: Kernel: 5.4.106-1-pve `d$$' ,$P"' . $$$ Uptime: 276 days, 9 hours, 51 mins $$P d$' , $$P Packages: 719 (dpkg) $$: $$. - ,d$$' Shell: bash 5.0.3 $$; Y$b._ _,d$P' Terminal: /dev/pts/1 Y$$. `.`"Y$$$$P"' CPU: Intel Xeon E-2278G (16) @ 5.000GHz `$$b "-.__ GPU: Intel Device 3e9a `Y$$ Memory: 48763MiB / 64099MiB `Y$$. `$$b. `Y$$b. `"Y$b._ `""" root@raiven:~# ^C 用 watch -n 1 "cat /proc/cpuinfo | grep MHz" 可以查看當下的 cpu 頻率狀態。 ...

logitech media server 搭配 docker 實現雙機分離

前言 雖然官方 releases 頁面似乎還沒發布,不過前一陣子把 piCorePlayer 升級到 8.1.0,看起來似乎還是 unstable,懶得倒版回去 8.0.0,趁這個機會把一直想玩的雙機留兜起來。 雙機顧名思義為 client 與 server 分開在兩台機器上,piCorePlayer 的 client 為 Squeezelite,server 則為 Logitech Media Server,事實上在 windows 上也有 client Squeezelite-X可以玩,預期中的最終成品將會是「三機流」吧 XD LMS 解決方案 採用 lms community 的 docker image lmscommunity/logitechmediaserver 作為這次 server 端的 service。 安裝流程 此篇文章使用 portainer 作為 GUI 方便演示,若熟悉 docker 與 k8s 的可以自行下指令安裝。 首先我把我的音樂都存放在 NAS 上,先將 music 資料夾給共享出來 接著到 portainer 中建立三個 volume a. lms-music 輸入在 NAS 分享出來的目錄與使用者、密碼,建立一個 cifs mounted volume b. lms-config c. lms-playlist 接著到 stack 中,複製貼上官方的 docker-compose,若 portainer 已經佔用了 port 9000,則需要更改暴露的 port port:port/tcp 並追加環境變數 HTTP_PORT=port,我最終的 stack 設定為: lms: image: lmscommunity/logitechmediaserver volumes: - lms-config:/config:rw - lms-music:/music:ro - lms-playlist:/playlist:rw - /etc/localtime:/etc/localtime:ro - /etc/timezone:/etc/timezone:ro ports: - 9002:9002/tcp - 9090:9090/tcp - 3483:3483/tcp - 3483:3483/udp environment: - HTTP_PORT=9002 restart: always 點下 Deploy the stack 後就完成了 可以到 container 下看是否已經啟動完成了,並稍微記一下 container 的 hash,在稍後 windows 的設定中會出現。 piCorePlayer 設定 進入到 piCorePlayer web 中的 Squeezelite Settings 設定頁面,並在 LMS IP 中輸入 portainer 的 ip 位置後點擊 Save,大功告成。 ...

A=B 遊完心得、解法

Steam 上推出了一款 A=B,稍微玩了一下,下面提供自己的解法。 小試了一下,這個迷你語言每一行由左側、等號=、右側組成,左側會被取代成右側,並且每次取代完都會從第一行重新開始,有點像在寫遞迴。 第一章 A=B 1-1 a取代成b,限定一行。 a=b 1-2 變成大寫,限定三行。 a=A b=B c=C 1-3 去掉重複的,限定三行。 aa=a bb=b cc=c 1-4 去掉連續的a,限定兩行。 aaa=aa aa= 1-5 只會給 a 與 b,回答最多的是 a 還是 b,最多四行。 ab= ba= aa=a bb=b 1-6 排序,最多三行。 ca=ac cb=bc ba=ab 第二章 新的關鍵字 多了一個新的關鍵字 return,僅能修飾右側語法,並且要用()包起來 2-1 回答 helloword,最多一行。 =(return)helloworld 2-2 是否至少包含三個 a,最多四行。 b= c= aaa=(return)true =(return)false 2-3 字數除以 3 的餘數,最多六行。 c=a b=a aaa= aa=(return)2 a=(return)1 =(return)0 2-4 ca=ac ba=ab cb=bc aaa=a bbb=b ccc=c aa=(return)false bb=(return)false cc=(return)false =(return)true 2-5 aaa=aa aa=d bbb=bb bb=d ccc=cc cc=d ab=(return)false ac=(return)false ba=(return)false bc=(return)false ca=(return)false cb=(return)false d= a=(return)true b=(return)true c=(return)true =(return)false 2-6 ba=ab ca=ac cb=dc bc=d bd=db ad= a=(return)false b=(return)false c=(return)true =(return)false 2-7 ba=ab ca=ac cb=bc ab=d ad=da da=aa ac= bc= d=b cc=c bb=b aa=a

Kubernetes 學習筆記 - Ubuntu kubeamd 建置 cluster

環境 物理機: 2278G/16G DDR4 ECC*4/1T MX500 OS: - master: Ubuntu server 20.04 - node: Ubuntu server 20.04 安裝 docker、kubeadm、kubelet、kubectl 安裝 docker sudo apt install apt-transport-https ca-certificates curl gnupg-agent software-properties-common -y curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add - sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" sudo apt-get update sudo apt-get install docker-ce docker-ce-cli containerd.io -y sudo usermod -aG docker $USER 登出再登入 安裝 kubeadm kubelet kubectl sudo apt-get install -y apt-transport-https curl sudo su curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | apt-key add - sudo cat <<EOF >/etc/apt/sources.list.d/kubernetes.list deb https://apt.kubernetes.io/ kubernetes-xenial main EOF exit sudo apt-get update # apt-cache madison kubeadm # K_VER="1.20.5-00" # apt install -y kubelet=${K_VER} kubectl=${K_VER} kubeadm=${K_VER} # 不指定版本的話直接安裝即可 sudo apt install -y kubelet kubeadm kubectl # 若需要鎖定版本可以使用 apt-mark hold sudo apt-mark hold kubelet kubeadm kubectl 設定 kubeadm master sudo kubeadm init \ --pod-network-cidr 網路區段 \ --apiserver-advertise-address 本機IP \ --apiserver-cert-extra-sans gcp IP # kubeadm init --pod-network-cidr 172.100.0.0/16 --apiserver-advertise-address 10.140.0.2 --apiserver-cert-extra-sans 130.211.253.131 結束後會看到 ...

Prometheus 學習筆記 - 基本架構與資料結構

Prometheus Overview 架構 Exporter: 要被採集的目標 job 中曝露 metrics 的組件,負責轉換資訊成 prometheus 可解讀的格式。由於某些早於 prometheus 的 service 因為某些原因,不想主動在服務中曝露 metrics,故可以用一些額外的 exporter 將這些 service 中的 metrics 轉成 prometheus 格式,並曝露埠。 node exporter mysql exporter Push Gateway: 由於有些任務時間太短,可能不到 prometheus pull 的週期,可讓這些 jobs 主動把 metrics push 到這個 push gateway,好讓 premetheus server 可以 pull。 Prometheus Server Retrieval(retrieval system): 主要負責 pull 指定的 target # /etc/prometheus/prometheus.yml scrape_configs: - job_name: "prometheus" static_configs: - targets: ["localhost:9090"] - job_name: "node_exporter" static_configs: - targets: ["localhost:9100"] TSDB: 時間序列資料庫,存放 pull 到的 metrics HTTP Server: 為 PromeQL 查詢提供接口 Service Discovery: kubernetes: 自動發現 k8s 中 pod 增加減少以及 probe 異動等等 file_sd: 通過 config 實現服務的自動發現 Alert Manager: 當 prometheus server 發現某某某 job 已經達到設定好的通知閾值進行通知的 service。 PromeQL: 無論是自帶 web UI 或是串接 Grafana,都是通過 http 進行 PromeQL 查詢後做視覺化處理 TSDB 中的時間序列資料。 資料結構 下面範例中會有更詳細說明 ...