悠遊撰寫

  • 透過 Forwarding 設定轉送 VPN

    這兒用樹莓派搭配 Raspberry Pi OS 當作跳板安裝 openfortivpn 為範例,開發環境使用 Mac,期望結果是使用的連線請求中如果有包含需要跳 VPN 的 IP 則透過樹莓派進行轉送,其餘則依照原來的方式進行網路溝通,避免資安疑慮或風險。 ## 樹莓派 & openfortivpn 流程 除了安裝 openfortivpn 也會依序設定 route、IP Forwarding 與 nftables,另外稍加解釋名詞或套件,參考一下指令進行安裝 - tcpdump: 查看網路流量 - IP Forwarding: 允許 Linux 核心收到封包進行轉送 - nftables / iptables: 轉送封包(NAT),nftables 與 iptables 擇一安裝使用即可,推薦使用 nftables 因 debian 系列預設是使用 nftables ```bash apt install openfortivpn tcpdump nftables iptables -y ``` ### openfortivpn & route 設定 設定 openfortivpn host 跟 port 是服務開出來的網址,username 與 password 是帳密,而 trusted-cert 是金鑰,如果是第一次使用未填寫則會生成,填入後再使用一次即可,set-routes 則是避免所有流量都走 VPN,得另外設定 route 才使用。 ```bash nvim /etc/openfortivpn/config ``` ```ini host = example.com port = 443 uesrname = amu password = 0000 trusted-cert = 1234abcd set-routes = 0 ``` ```bash openfortivpn ``` 使用後只要內容裡有包含 INFO: Tunnel is up and running. 即完成 openfortivpn 的設定,緊接著新增需要轉跳的 IP 進入 route 內, ```bash ip route add {IP} dev ppp0 ``` 查看是否新增成功 ```bash ip route get {IP} ``` 需要啟用時直接啟動 openfortivpn 則設定一下 systemctl ```bash systemctl enable openfortivpn systemctl start openfortivpn ``` ### IP Forwarding 設定 開啟功能並允許 Mac 流量透過機器作為 route 轉送,如果只需要暫時生效可以使用 sysctl -w net.ipv4.ip_forward=1,下方則是永久性設定, ```bash nvim /etc/sysctl.conf ``` 解除內容註解, ```ini net.ipv4.ip_forward=1 ``` 套用修改內容, ```bash sysctl -p ``` 若要永久生效也可以使用 sh -c "iptables-save > /etc/iptables/rules.v4" 驗證 IP forwarding 是否生效,如果為 1 則是開啟,反之 0 則是關閉, ```bash cat /proc/sys/net/ipv4/ip_forward ``` ### nftables 設定 需搭配 IP Forwarding,也使用暫時性方式使用,如要要永久性則要把 ruleset 匯出至檔案或編輯新增檔案選擇一個即可 暫時 ```bash sudo nft add table ip nat sudo nft add chain ip nat POSTROUTING { type nat hook postrouting priority 100\; } sudo nft add rule ip nat POSTROUTING oifname "ppp0" masquerade ``` 匯入 ```bash nft list ruleset > /etc/nftables.conf systemctl enable nftables ``` 新增檔案建立規則檔案 ```bash nvim /etc/nftables.conf ``` ```conf #!/usr/sbin/nft -f flush ruleset table ip nat { chain postrouting { type nat hook postrouting priority 100; oif "ppp0" masquerade } } ``` 啟用 nftables ```bash systemctl enable nftables systemctl start nftables ``` 測試 NAT 規則 ```bash nft list ruleset ``` ### 驗證 接著驗證看看是否設定沒問題 ```bash ifconfig ppp0 netstat -rn ping {ip} # 要連線的 IP curl { url or IP } ``` ## Mac 開發環境 先整理出需要連線的 url 路徑 IP,可以用以下其中一個測試出來 ```bash dig +short example.com nslookup example.com ping example.com traceroute example.com curl example.com ``` 操作路由轉導,前面是上述查出的 IP,而後面則是 openfortivpn 服務的 IP,-n 不要做名稱解析(no DNS lookup),只顯示數字,不做解析會更快。 ```bash # 新增 route add -n {IP} {openfortivpn Client IP} # 刪除 route delete -n {IP} {openfortivpn Client IP} ``` OK 現在設定完成了,接者驗證是否走的路徑是正確的 ```bash netstat -rn # 過濾出特定 IP netstat -rn | grep { ip } route -n get default # 看看第一個出去的是否是通過 openfortivpn 跳板的機器 traceroute {url or ip} ``` ## 後記 route 是揮發性的重新開機後就會消失,以流程上是蠻方便的不會忘記關閉,另外如果只有特定軟體才使用 VPN 也可以試試 SOCKS Proxy 也很好用。 ### 自動啟用 如果重新開機需要一次就執行完需要設定的內容可以使用腳本,例如設定成 sh Mac 新增檔案 vpn-routes.sh ```bash #!/bin/bash IP=192.168.0.2 sudo route add -n 10.10.0.1 $IP sudo route add -n 10.10.0.2 $IP ``` 執行 bash vpn-routes.sh,也可以把腳本加入到常用的 shell e.g .zshrc,路徑記得調整 ```bash alias vpnroutes="sudo vpn-routes.sh" ``` ### linux 查看目前 route ```bash ip route show ``` ### 監控連線 e.g ppp0 ```bash tcpdump -i ppp0 # 過濾出經過 ppp0 的 IP tcpdump -i ppp0 host {IP} ```

    • #vpn
    calendar icon
    Sep 6, 2025
    閱讀全文
  • tmux 快捷筆記

    常用的 tmux 記錄起來,方便查詢。 mac 可用 homebrew 安裝,linux 則可用 apt 、 pacman 或 flatpak 依照分支自己尋找適合的方式,快捷鍵的起手通常都會透過輸入 `ctrl` + `b` 進行,也就是所謂的 prefix key,後續輸入會用 `<prefix key>` 作為示意。 每一個 session 可以被視為獨立的 tmux ,在需要遠端背景運作相當方便,不用另外在安裝 zellij 或搭配其他分頁工具一氣呵成~雖然對 rust 還抱有很大的期望就是了🥲~ 附上 .tmux.config,習慣是使用亮色在搭配 zsh 且不顯示名稱只保留日期,需要調整使用再自行配置 ```tmux set -g default-terminal "screen-256color" set -g status-bg "#d4d1cb" set -g status-fg "#2d2b2b" set -g status-right "%H:%M %d-%m-%y" set-option -g default-shell /opt/homebrew/bin/zsh ``` ## window | 按鍵 | 說明 | | - | - | | `<prefix key>` + `c` | 新增 | | `<prefix key>` + `,` | 重新命名 | | `<prefix key>` + `&` | 關閉 | | `<prefix key>` + `p` | 前往下一個 | | `<prefix key>` + `n` | 前往上一個 | | `<prefix key>` + `<number>` (1 ~ 9) | 前往第 n 個 | | `<prefix key>` + `w` | 視覺化方式進行切換 | ## pane | 按鍵 | 說明 | | - | - | | `<prefix key>` + `%` | 垂直分割 | | `<prefix key>` + `"` | 水平分割 | | `<prefix key>` + `z` | 進入當下 | | `<prefix key>` + `!` | 將當前分割獨立出為一個 window | | `<prefix key>` + `x` | 關閉( 也可用 ctrl + d ) | | `<prefix key>` + `q` | 顯示當前 window 下所有 pane 的順序 | | `<prefix key>` + `o` | 輪流切換 | | `<prefix key>` + `z` | 全螢幕切換(再一次反之) | | `<prefix key>` + `<direction key>` (方向鍵) | 指定方向切換 | | `<prefix key>` + `<space>` | 切換佈局 | | `<prefix key>` + `<ctrl> +<direction key>` (方向鍵) | 調整尺寸 | ## session session 類似 screen 的效果,對於需要遠端的背景執行的狀態很好用。 | 按鍵 | 說明 | | - | - | | `tmux` | 新增 | | `tmux ls` | 列出所有 | | `tmux new -s <name>` | 新增並命名 | | `tmux rename-session -t <n> <name>` | 重新命名第 n 個 | | `tmux rename-session -t <old name> <new name>` | 重新命名 old name 為 new name | | `tmux attach -t <n>` | 使用第 n 個 | | `tmux attach -t <name>` | 使用 <name> session | | `tmux kill-session -t <n>` | 關閉第 n 個 | | `tmux kill-session -t <name>` | 關閉 <name> session | | `tmux kill-session -a` | 關閉所有 | | `tmux kill-server` | 關閉 tmux server | | `<prefix key>` + `$` | 重新命名 | | `<prefix key>` + `d` | 離開目前 | | `<prefix key>` + `s` | 視覺化方式切換 | | `<prefix key>` + `L` | 切換至上個用過的 | | `<prefix key>` + `(` | 前往上一個 | | `<prefix key>` + `)` | 前往下一個 | ## search | 按鍵 | 說明 | | - | - | | `<prefix key>` + `f` | 搜尋所有 window 關鍵字 | ## 移動操作 想使用滑鼠操作可在 .tmux.config 內設定新增 set -g mouse on 即可,或是使用 \<prefix key\> 後再輸入 :set mouse on 也可以完成操作,但如果單純依賴鍵盤就可以運用 copy mode 的方式進行閱讀,也可以進行區塊複製,但預設貼上的位置也僅限 tmux 內,需要把複製的內容與一般複製互通可以再找找教學,這邊就不贅述。 | 按鍵 | 說明 | | - | - | | `<prefix key>` + `[` | 往上 | | `<prefix key\` + `]` | 往下 | | `<space>` | 選擇 | | `<enter>` | 複製 | 更多指令可以參考 `man tmux`

    • #tmux
    calendar icon
    Jan 26, 2025
    閱讀全文
  • flutter 在 mac 上開發

    明年開始有部分專案會轉用 flutter 開發並在多平台上發布,稍微順一下環境部署與開發至上線產品的流程~~少走一點歪路~~。 以下是用 mac 搭配 homebrew 管理安裝 fvm 與 cocoapods (ios 開發時需要,如果不用可以不安裝)並進行開發,當然也可以用的 sdkman,linux 或 windows 都有各自的方法管理,甚至用官方提供的安裝方法也是可以的沒有一定。 ## homebrew 安裝 fvm 以下是新增 homebrew tap 與安裝 fvm 的過程,這裡先用 stable 穩定版號,如果需要也可以改為其他版本(e.g 3.14.0),查閱更多版本號可以去 github 或是頁面,而 fvm list 會列出目前所有已安裝的版本,方便進行版本管理,另外一般官方的使用區別在於前面會加上 fvm,而後面則是與一般使用 flutter 沒多大差別。 ```bash # 新增 homebrew tap brew tap leoafarias/fvm brew install fvm # 安裝且使用 stable 版本 fvm install stable fvm use stable fvm ls #(fvm list) # 查看版本與檢查環境 fvm flutter --version fvm flutter doctor # 檢查特定版本更新(e.g 3.14.0) fvm flutter doctor --version 3.14.0 ``` 這邊檢查後會列出個別的裝置下所需要的環境,例如我需要打包 ios 的 ipa 需要安裝 xcode 與 cocoapods,而我只有安裝 xcode 而且尚未進行任何設定出現這樣的內容。 ```bash [✗] Xcode - develop for iOS and macOS ✗ Xcode installation is incomplete; a full installation is necessary for iOS and macOS development. Download at: https://developer.apple.com/xcode/ Or install Xcode via the App Store. Once installed, run: sudo xcode-select --switch /Applications/Xcode.app/Contents/Developer sudo xcodebuild -runFirstLaunch ✗ CocoaPods not installed. CocoaPods is a package manager for iOS or macOS platform code. Without CocoaPods, plugins will not work on iOS or macOS. For more info, see https://flutter.dev/to/platform-plugins For installation instructions, see https://guides.cocoapods.org/using/getting-started.html#installation ``` 第一個錯誤可依照說明來修正,輸入指令設定開發環境即可解決。 ```bash sudo xcode-select --switch /Applications/Xcode.app/Contents/Developer sudo xcodebuild -runFirstLaunch ``` 而第二個錯誤是缺少 cocoapods,這時候需要進行安裝,原本查資料是使用 gem 來安裝,但狀態一直卡著沒有任何反應,所以改為使用 homebrew 安裝,想想這樣也比較方便管理。 ```bash brew install cocoapods ``` 解決完上述問題後再使用一次 fvm flutter doctor 檢查,就可以看到 ios 打包使用的環境基礎已經完成。 ## 新增專案與預覽 這裡新增一個初始專案為 flutter_project,並進入資料夾初始化專案,這裡的 . 代表在當前位置建立。 ```bash mkdir flutter_project cd flutter_project fvm flutter create . ``` 使用 chrome 預覽 lib/main.dart (入口)來進行開發熱加載,而這裡的 -d 是選擇開發的裝置,這裡使用 chrome 或是其他裝置(e.g macos)。 ```bash fvm flutter run -d chrome ``` 而在 xcode 上則可以使用 open 來開啟 xcworkspace。 ```bash # fvm flutter pub get # fvm flutter build ios open ios/Runner.xcworkspace ``` 大致上就是這樣 chill ( · ❛ ֊ ❛)。

    • #flutter
    calendar icon
    Dec 28, 2024
    閱讀全文
  • Raspberry Pi 4B 番外之自行編譯 nvim 過程

    ## 前言 在 raspberry pi 4b 上用 raspberry os 搭 xfce 上斷斷續續使用了一陣子,速度在前端開發上真的不是很理想,單純開發前端一個 vscode 、一個 node 服務再搭個 firefox 純預覽產品真就慢到懷疑人生是不是選錯職業,原本想用 nvim 取代 vscode ,但 apt 上的版本落差真的有點距離,索性就產出這篇文記錄一下自己打包的過程,順便摸索有沒有其他方法可以讓開發變得更加流暢,寫個筆記自行編譯的過程方便之後查閱抄作業。 ## 實作 從 github 下載 nvim ```bash git clone https://github.com/neovim/neovim.git cd neovim git checkout stable ``` 安裝編譯所需要的依賴,在這一步糾結滿久要不要安裝某些套件,這裡提供一個方法,可以去 debian 的 package 倉庫看看打包文件到底需要哪些東西,直接看系統下套件會安裝哪些套件,可以大大減少缺東西或錯誤乃至套件換名稱找不到了窘境。 ```bash sudo apt-get install ninja-build gettext cmake unzip curl build-essential ``` 最後在進行編譯 ```bash make CMAKE_BUILD_TYPE=Release sudo make install cmake -S cmake.deps -B .deps -G Ninja -D CMAKE_BUILD_TYPE=RelWithDebInfo -DUSE_BUNDLED=OFF -DUSE_BUNDLED_LIBUV=ON -DUSE_BUNDLED_LUV=ON -DUSE_BUNDLED_TS=ON -DUSE_BUNDLED_UTF8PROC=ON cmake --build .deps cmake -B build -G Ninja -D CMAKE_BUILD_TYPE=RelWithDebInfo cmake --build build ``` 查看版本,如果未增加可指令可進行寫入 ( e.g bash ) ```bash nvim --version echo 'export PATH="/usr/local/bin:$PATH"' >> ~/.bashrc source ~/.bashrc ``` ## 參考 - https://github.com/neovim/neovim/blob/master/BUILD.md - https://packages.debian.org/sid/source/neovim - https://aws.amazon.com/tw/compare/the-difference-between-apt-and-apt-get/

    • #raspberry
    • #vim
    calendar icon
    Oct 12, 2024
    閱讀全文
  • Raspberry Pi 4B 指北針

    順風順水試試樹莓派體驗 arch linux arm,依照官網給的方法安裝~就沒問題了~ 依照官方步驟正常進入系統沒問題,可更新後引導就會出現了 uboot 的飛船與一排藍色企鵝,進入系統時間也延長了不少,想著恢復到初始引導就好,結果替換後反而無法進入系統,而且如果使用記憶卡作為開機碟也會卡在初始引導,要修復要自行手動進行編譯,下策最後只好暫時先轉向使用 debian。 debian 的過程就方便許多,無論是用 dd 去寫入或用 raspberry pi os 的軟體進行都非常快速,連記憶卡寫入過程都不用一分鐘, 用 root 登入首要更新系統無壓力,再來**非常強烈建議馬上建立新使用者**,除了常被告誡問題外,這次因為使用 tmux 操作不當導致帳號無法正常驗證登入,後續只好整個打掉重來 🙃,看來沒問題就打算就直接用 command pattern,可以參考以下進行新增刪減符合自己的狀況。 ```bash apt update apt upgrde apt install wget curl git vim zsh sudo apt install tmux neofetch useradd -m -g users -G audio,video-s /bin/bash {username} ``` 設定使用者權限 vim /etc/sudoers ```bash {username} ALL=(ALL:ALL)ALL ``` 後續重啟並登入新帳號即可開始佈置環境,另外暫時不推薦為了使用 ifconfig 去安裝 net-tools,可該用 ip a 看網路硬體,沒啟用 wifi 硬體用 ifup 啟用,還有引導太久沒更新也可以安裝並進行更新。 ```bash ip a sudo ifup {wifiname} vim /etc/network/interfaces.d/wlan0 reboot ``` 另外如果沒有更新過 raspberry pi 的引導也可以順手更新一下 ```bash sudo rpi-eeprom-update ``` 接著就是常規更新 shell 的項目 1. cat /etc/shells 2. chsh -s $(which zsh) 3. oh my zsh 4. powerlevel10k 5. p10k configure 6. exec $SHELL 中文輸入法暫時還沒嘗試出來,另外最後記錄一下 raspberry pi os 遇到的,安裝選擇英文來走,除了方便路徑操作不用再轉換輸入中文,中文預設的酷注音輸入法在 bookworm 會閃爍不能輸入,目前查出的解決方法是把 Wayland 變更為 X11 重開就可以正常使用。

    • #raspberry pi
    • #linux
    calendar icon
    Sep 29, 2024
    閱讀全文
  • 淺聊 iSH 在 iphone 上進行前端開發

    前陣子因為聚會中突然想 coding 驗證看看某個方案是否可行,但電腦又不會隨時帶在身邊,碰巧爬文爬到了一個蠻有吸引力的解決方案 iSH。 安裝後的預設是 alpine 3.14,雖然離目前最新 3.20 有點距離,可如果單純只是拿來 ssh 進行遠端連線進行開發其實已經足夠,因為系統配置都在遠端上(笑)。本地測試後不能進行完整開發,除了系統只支援 32 bit 有許多軟體不支援,其次硬體虛擬化的限制導致轉譯效能低也是個問題,簡單測試起一個 node 或 vite 也需要花相當長時間的過程啟動才能運作,甚至 npm 會因環境導致部分 api 無法正常使用,建議還是用遠端進行體驗會好真的很多。 ![neofetch](https://github.com/user-attachments/assets/0c437e2c-8d4e-448f-8e64-97870ec69adf) 如果要更換 linux 發行版可在 settings 內的 Filesystems 掛載引導,完成後 app 會自動關閉重新打開即可正常使用,但如果要變更 ish 原本的 alpine 的來源,記得要先除去 ish 保護 `rm /ish -rf` 重新開啟時才不會被恢復,並執行 `apk upgrade && apk fix` 即可正常取得設定的來源清單,另外也有人嘗試安裝 debian 等等發行版,有興趣可以試試應該會有不錯的體驗。 <!-- <img src="https://github.com/user-attachments/assets/94b37bed-7748-42a9-9a9b-b93e94a4d64a" alt="mount" style="width:360px;"> --> ## 參考 - https://github.com/ish-app/ish - https://ivonblog.com/posts/ios-ish-shell - https://github.com/andrewintw/run-alpine-linux-on-ios

    • #terminal
    • #ios
    • #ish
    calendar icon
    Sep 2, 2024
    閱讀全文
  • prev
  • 1
  • 2
  • 3
  • next
[ GitHub ] © 2025 Amuuuuuuuu All rights reserved.