使用 wireguard 與 aws 搭建虛擬內網

先前在「在 AWS 上使用 EC2 建立 FRP 玩玩內網穿透」一文中敘述了如何透過 AWS 實現虛擬穿透,也在內文中提到或許可以使用 wireguard 搭建內網,其原因也很簡單:每更新一個 port 都要重新設定 server side 實在是太麻煩了,拖更了進一年終於要開始寫 wireguard 的使用了。(AWS 免費也快到期了) 遇到了什麼問題 在使用 wireguard 來搭建 VPN 前,我是使用 zerotier 搭配 Mikrotik RB5009 所執行的 RouterOS 7.x 版本,讓外網可以連回家裡的網路環境 但 zerotier 的網路拓樸是存在他們官方伺服氣上,與其相信 zerotier,我想在 vps 上建立虛擬機,並只許特定 ip 登入,可能更加可靠(? 解決方法 於是我在 frp tunnel VM 上建立了 wireguard 節點,作為外網與內網溝通的橋樑。 wireguard 是一個高效的現代化 VPN,目標是比 IPsec 更快。在 2020 年時正式推出 1.0.0 版本。 wireguard 的拓樸實際上是 peer2peer,甚至可以達到 full mesh,但礙於錢錢不夠,單一個節點作為 server side 就足夠了。 server 使用 docker-compose 能快速部署 wireguard 服務,我們使用的是 wg-easy 簡單換掉一些參數: ...

2023-10-01 · 2 min · 314 words

KDE Neon 使用心得與踩雷紀錄

前言 年初為了 arc browser 裝了一台 Hackintosh,因為原因又花了點時間裝了 KDE Neon,這邊紀錄一下使用心得與踩雷紀錄。時間線大概是 快快樂樂使用 wsl2 wsl 中踩了不少坑,想要嘗試 unix liked 的系統 好心人提供 arc browser 的邀請,萌生了裝 Hackintosh 的念頭 在 HP Z2 G4 上裝了 Hackintosh,但是沒有事前做足功課,內顯圖形記憶體(P630)始終是 7mb 買了張 amd WX4100 督上去,大幅提昇圖形性能,卻也沒再花時間繼續深入 嘗試在 windows 主機上雙系統 (windows + linux): 一開始直接選擇熟悉的 ubuntu,安裝了 ubuntu desktop 版本,由於是 nvidia 顯示卡,很快的遇到了硬體解碼問題 開始嘗試 nvidia-vaapi-driver,但是遇到了很多問題,最後放棄 想換到 amd 顯示卡,但是又不想花錢,於是想說看看其他發布版是否能解決 從 Linux Mint, Manjaro, KEO Neon 中選擇了同樣是 ubuntu 底,卻是 KDE 團隊維護團隊的 KDE Neon 不出意外的一樣遇到了 nvidia 驅動問題,雖然 firefox 已經可以順利硬體加速,但是 chromium 等仍然無法硬體加速 這時候已經花了不少時間在這個問題上,於是決定換到 amd 顯示卡(內顯) 在 Minisforum UM560 上安裝了 KDE Neon,一切順利,驅動毫無問題,硬體加速也正常 嘗試裝了 ventura theme,讓他稍微好看一點 持續與 wayland 相處,走一步是一步… ❯ neofetch `..---+/---..` raiven@um560 `---.`` `` `.---.` ------------ .--.` `` `-:-. OS: KDE neon 5.27 x86_64 `:/: `.----//----.` :/- Host: UM560 .:. `---` `--.` .:` Kernel: 5.19.0-43-generic .:` `--` .:- `:. Uptime: 1 hour, 2 mins `/ `:. `.-::-.` -:` `/` Packages: 1924 (dpkg), 4 (snap) /. /. `:++++++++:` .: .: Shell: zsh 5.8.1 `/ .: `+++++++++++/ /` `+` Resolution: 2560x1440 /+` -- .++++++++++++` :. .+: DE: Plasma 5.27.5 `/ .: `+++++++++++/ /` `+` WM: kwin /` /. `:++++++++:` .: .: Theme: [Plasma], Colloid-Dark [GTK2/3] ./ `:. `.:::-.` -:` `/` Icons: Cupertino-Ventura [Plasma], Cupertino-Ventura [GTK2/3] .:` `--` .:- `:. Terminal: konsole .:. `---` `--.` .:` CPU: AMD Ryzen 5 5625U with Radeon Graphics (12) @ 2.300GHz `:/: `.----//----.` :/- GPU: AMD ATI 04:00.0 Barcelo .-:.` `` `-:-. Memory: 6265MiB / 31519MiB `---.`` `` `.---.` `..---+/---..` Post Install KDE Neon 解決 key 過舊 當使用 sudo apt update 時可能會發生 ...

2023-06-04 · 4 min · 675 words

如何優雅地批次安裝 Nerd font 字型

fonts repo 接觸 wsl/ubuntu 的這幾年,經常會需要安裝 zsh 以及字型,因此誕生了 cheat sheet,久而久之連下載->解壓縮->安裝這個過程,都懶了。 於是寫了一個批次下載並安裝最新版本的 Nerd Fond 字型的 shell script,讓 wsl 可以安裝 windows 的字型,linux 可以安裝 linux 字型。 #!/bin/bash declare target="linux" declare repo="ryanoasis/nerd-fonts" declare -a fonts=( BitstreamVeraSansMono CodeNewRoman DroidSansMono FiraCode FiraMono Go-Mono Hack Hermit JetBrainsMono Meslo Noto Overpass ProggyClean RobotoMono SourceCodePro SpaceMono Ubuntu UbuntuMono ) ARGS=`getopt -o p --long windows -- "$@"` if [ $? -ne 0 ]; then echo "getopt failed: " $ARGS exit 1 fi eval set -- "${ARGS}" while true do case "$1" in -p|--windows) target=windows shift ;; --) shift break ;; esac done get_latest_release() { echo $(curl --silent "https://api.github.com/repos/$@/releases/latest" | grep '"tag_name":' | sed -E 's/.*"([^"]+)".*/\1/') } function install_linux_fonts() { local fonts_dir fonts_dir="${HOME}/.local/share/fonts" if [[ ! -d "$fonts_dir" ]]; then mkdir -p "$fonts_dir" fi mv $@/*.ttf $fonts_dir/ # fc-cache -fv } # Install font for the current user. It'll appear in "Font settings". function install_windows_fonts() { local dst_dir dst_dir=$(wslpath $(cmd.exe /c "echo %LOCALAPPDATA%\Microsoft\\Windows\\Fonts" 2>/dev/null | sed 's/\r$//')) mkdir -p "$dst_dir" local src for src in "$@"; do local file=$(basename "$src") test -f "$dst_dir/$file" || cp -f "$src" "$dst_dir/" local win_path win_path=$(wslpath -w "$dst_dir/$file") echo $win_path reg.exe add \ "HKCU\\SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\Fonts" \ /v "${file%.*} (TrueType)" /t REG_SZ /d "$win_path" /f 2>/dev/null done } function main() { local version version=$( get_latest_release $repo ) local tmp_dir tmp_dir="$(mktemp -d)" trap "rm -rf ${tmp_dir@Q}" INT TERM EXIT for font in "${fonts[@]}"; do zip_file="${font}.zip" download_url="https://github.com/$repo/releases/download/${version}/${zip_file}" echo "Downloading $download_url" wget -q --show-progress -P "$tmp_dir" "$download_url" # unzip -o means replace file without asking. unzip -o "$tmp_dir/$zip_file" -d "$tmp_dir" rm "$tmp_dir/$zip_file" done find "$tmp_dir" -name '*Windows Compatible*' -delete if [ "$target" = "linux" ] then install_linux_fonts $tmp_dir elif [ "$target" = "windows" ] then install_windows_fonts $tmp_dir/*.ttf fi } main echo -e '\033[0;32m' echo 'Fonts successfully installed.' echo -e '\033[0m' 若沒有要改目標字型也可以直接透過 github 上的檔案來安裝 ...

2023-05-03 · 2 min · 310 words

WSL2 中使用 systemd 管理 podman 的 container

原本使用 wsl-distrod 來作為 wsl 中 systemd 的實現方式,後來 microsoft 宣布 wsl 支持 systemd 後,distrod 等等 repo 就沒有在更新了呢,是巧合嗎?我不這麼認為。 這篇簡略紀錄 wsl2 中啟用 systemd 作為 process 管理工具以及配合紅帽推出的 podman 來取代(斷捨離)docker desktop。 環境 wsl2 + ubuntu 22.04 ❯ neofetch .-/+oossssoo+/-. raiven@raiven `:+ssssssssssssssssss+:` ------------- -+ssssssssssssssssssyyssss+- OS: Ubuntu 22.04.1 LTS on Windows 10 x86_64 .ossssssssssssssssssdMMMNysssso. Kernel: 5.10.43.3-microsoft-standard-WSL2 /ssssssssssshdmmNNmmyNMMMMhssssss/ Uptime: 3 hours, 10 mins +ssssssssshmydMMMMMMMNddddyssssssss+ Packages: 2005 (dpkg), 4 (snap) /sssssssshNMMMyhhyyyyhmNMMMNhssssssss/ Shell: zsh 5.8.1 .ssssssssdMMMNhsssssssssshNMMMdssssssss. Theme: Adwaita [GTK3] +sssshhhyNMMNyssssssssssssyNMMMysssssss+ Icons: Adwaita [GTK3] ossyNMMMNyMMhsssssssssssssshmmmhssssssso Terminal: Windows Terminal ossyNMMMNyMMhsssssssssssssshmmmhssssssso CPU: AMD Ryzen 9 5900X (24) @ 3.700GHz +sssshhhyNMMNyssssssssssssyNMMMysssssss+ GPU: dbac:00:00.0 Microsoft Corporation Device 008e .ssssssssdMMMNhsssssssssshNMMMdssssssss. Memory: 1427MiB / 15966MiB /sssssssshNMMMyhhyyyyhdNMMMNhssssssss/ +sssssssssdmydMMMMMMMMddddyssssssss+ /ssssssssssshdmNNNNmyNMMMMhssssss/ .ossssssssssssssssssdMMMNysssso. -+sssssssssssssssssyyyssss+- `:+ssssssssssssssssss+:` .-/+oossssoo+/-. wsl2 中啟用 systemd 請確保 wsl2 的版本是 version 2,可以在 cmd/powershell 中查看 ...

2023-02-13 · 3 min · 507 words

解決 VM 關機時等待容器關閉

[ *] A stop job is running for libcontainer container xxxxxxxx (10s / 1m30s)_ 過去 kubernetes 還跟 docker-shim 手牽手時,在關閉 k8s node vm 時常常出現等待 docker-shim 關閉,直到一分三十秒被 time out 才正確關機。若是開發機就當作去尿尿的時間就好,但若是重要的環境停機備份,或是斷電時靠 UPS 提供電源等待系統關機,那浪費時間就不好了。 這次在 home lab 中採取省電措施,不用 1 master + 1 node 的組合,直接使用 k3s 作為家用 kubernetes 的實驗環境。但依然在關機時會需要等待 containerd-shim 等等被 time out kill 才會完成關機。 若是沒有做特別的設定,或是沒有過分的 stateful pod,找到了 k3s issue #2400 中的解決方法 Stopping K3s To allow high availability during upgrades, the K3s containers continue running when the K3s service is stopped. ...

2023-01-11 · 1 min · 134 words

在 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 頁面。 ...

2022-11-19 · 3 min · 457 words

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) ...

2022-10-30 · 1 min · 210 words

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 的設定,再調整回來 ...

2022-09-04 · 1 min · 137 words

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 唯一的網卡,不做其他進階設定。 ...

2022-02-20 · 4 min · 742 words

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 ...

2022-02-20 · 1 min · 105 words