Hi there 👋

Welcome to ingenboy’s blog!

Return_path_problem

以前の蚘事 https://blog.ingenboy.com/post/problem_site2site/ こちらの蚘事でVPNクラむアントを介しお、別々のNWセグメントに所属するサヌバ間で通信をする方法を軜く説目したした。 この問題は、リタヌンパス問題だったのですが、今回、改めおリタヌンパス問題に぀いお曞きたい。 たず、 1. IP局での基本ルヌル 送信元IP ず 宛先IP はパケットに埋め蟌たれおいお、転送䞭は倉わらない※NATしない限り。 各ホストやルヌタは「自分のルヌティングテヌブル」を参照しお、この宛先IPはどこに枡すべきか を決める。 宛先が自分の盎接぀ながっおいるネットワヌクじゃなければ、**次のホップゲヌトりェむ**に枡す。 今回問題が起こった構成 [jhonny] 192.168.1.4 tun0:10.8.0.14 │ (LAN:192.168.1.0/24) │ デフォルトほがVPN (0.0.0.0/1,128.0.0.0/1 → 10.8.0.13) â–Œ [家庭ルヌタ(1ç³»)] 192.168.1.1 │ むンタヌネット偎ぞ â–Œ [VPN Server] tun0:10.8.0.1 gw:162.x.xxx.xxx ルヌト: 192.168.2.0/24 → 10.8.0.2(tun0) â–Œ [kami] 192.168.2.10 tun0:10.8.0.30 ルヌト: 192.168.2.0/24 → enp6s0(盎結) â–Œ [Mac] 192.168.2.3 (LAN:192.168.2.0/24) デフォルトGW: 192.168.2.1※ここがキモ 2. 今回の䟋で流れを远うリタヌンパスがなくおpingが返っおこないパタヌン サヌバから(jhonny)Mac に ping サヌバ(10.8.0.1) が「192.168.2.3にICMPを送りたい」ず思う VPNトンネルを経由しお kaminogou(192.168.2.10) に届く kaminogou の Linux がルヌティングを芋お「192.168.2.3は自分のLAN盎結だからそのたた出す」 Mac の en0 で「送信元=10.8.0.1 宛先=192.168.2.3」の ICMP が芋えるここたではOK Mac が返信するずき Mac が「宛先=10.8.0.1に返したい」ず思う Mac のルヌティングテヌブルを芋る 10.8.0.0/24 の経路が無い なのでデフォルトゲヌトりェむ(192.168.2.1)に投げる 192.168.2.1家庭甚ルヌタなどが「10.8.0.0/24 なんお知らん」ず捚おる これがリタヌンパス問題 問い なぜ送信元が10.8.0.1になるのか -> サヌバから送ったからだな。完党理解。 ...

September 27, 2025 Â· 4 min Â· 650 words Â· Me

Ubuntu 24.04 で RTX 5060 Ti を動かすたでの奮闘蚘

抂芁 2025幎9月、RTX 5060 Ti を新マシンに差しお Ubuntu 24.04 を入れたら 案の定ドラむバ認識でドハマりしたした。 この蚘事では、最初に遭遇した゚ラヌから、最終的に nvidia-smi で 5060 Ti が認識されるたでの流れをたずめたす。 1. 最初に出た症状 lspci では GPU が芋えおいるNVIDIA Corporation Device 2d04。 しかし nvidia-smi を叩くず゚ラヌ NVIDIA-SMI has failed because it couldn't communicate with the NVIDIA driver. dmesg には probe failed with error -1 が連発。 この時点では「ドラむバが GPU を芋぀けおるけど、初期化に倱敗しおる」状態でした。 2. CSM ず UEFI の壁 調べおみるず、自分の Ubuntu は Legacy (CSM有効) モヌドでむンストヌルされおいたこずが発芚。 最新の GPU は UEFIブヌト前提 なので、CSM 有効だず GPU 初期化に倱敗しがちです。 察応したこず BIOS で CSM を OFF Above 4G Decoding = Enabled Resizable BAR = Enabled そしお Ubuntu を UEFIモヌドで再むンストヌル これで「Bootable device not found」問題も解決し、環境が最新GPUに察応できるようになりたした。 ...

September 23, 2025 Â· 2 min Â· 321 words Â· Me

MyMap

背景 地理、楜しいっすよね。めっちゃ奜きです。 でも Google Maps っお䜿うず、結局は Google っお䌚瀟にお䞖話になっおるわけですよ。 僕はこの「どっかの䌚瀟のお䞖話になっおいる状態」があたり奜きではない。 だからサヌバやデヌタセンタヌも自前運甚するし、 Slack の代わりに Rocket.Chat を䜿うし、 JIRA ではなく Redmine を䜿うんです。 じゃあ Google Maps を自前で運甚するにはどうするか これが今回のテヌマです。 地図アプリがどうやっお動いおいるか 必芁なものは倧きく分けお二぀。 レンダリング゚ンゞン地図を描画するラむブラリ マップデヌタ地図そのものの゜ヌス OSSのレンダリング゚ンゞンラむブラリ Leaflet OpenLayers MapLibre GL JS それぞれでベヌスマップを比范できるデモも䜜りたした。 👉 比范サむト OSSのマップデヌタ 遞択肢は色々ありたす。 OpenStreetMap (OSM) 䞖界䞭のボランティアが䜜る地図デヌタ。ラスタ画像タむルも配垃されおいるが、芋た目は少し叀臭い。 実際の䞭身はベクタだが、配信されおいる地図はあらかじめ描画されおいるラスタタむル。元がベクタならそれを出せばいいじゃん、、ずは思った OpenMapTiles OSMデヌタをベクトルタむル化するOSS。 これを䜿えば、Google Maps 䞊みにきれいなベクトル地図を完党自前で運甚できる。 ラスタはやっぱり綺麗に映らないですね。なのでベクトルマップが欲しいのですが、 ベクトルマップは自分で䜜るしかないっぜいです。Maptilerっお䌚瀟がOSMを所有しようずしおいるので気を぀けお 実際に OSM → Vector Map を自前ホストする流れ 1. OSMデヌタのダりンロヌド Geofabrik から地域ごずの .osm.pbf を萜ずす。 䟋: 日本党䜓 https://download.geofabrik.de/asia/japan.html 2. OpenMapTiles でベクトルタむル生成 たずは GitHub から OpenMapTiles を取埗したす。 ...

August 23, 2025 Â· 3 min Â· 492 words Â· Me

Create_RAG

背景 gmailの返答を自動化するプロゞェクトを掚進しおいたす。 そこで、RAGですね。もうだいぶ時間が経っおいたすが、しっかりやっおいきたいず思う。 RAG = 「Retrieval-Augmented Generation」 これを理解できればもう仕組みを理解したも同然です。 が䞀応説明しおおきたす。 RAGの仕組み めっちゃ簡単にいうず、 ベクトルデヌタベヌスに保存されたナレッゞから 問い合わせず類䌌するナレッゞを怜玢し匕っ匵り出し それを元にGEN AIに回答を䜜らせる ずいう流れになりたす。 1でベクトルデヌタベヌスにナレッゞを保存する時には、元の自然蚀語をベクトル衚珟に倉換した物を栌玍する必芁がありたす。 このベクトル倉換噚のこずを「Embedding model」ず蚀いたす。 x: 自然蚀語 f: Embedding model ずするず y = f(x) で埗られたyずそれに察応するxをベクトルDBに栌玍しおおくわけですね。 x_q: 問い合わせが来た時 y_q = f(x_q) から埗られるy_qず類䌌しおいるy_1, y_2, y_3, ,,, y_nを怜玢し、 それに察応するx_1, x_2, x_3, ,,, x_n を出力し、 ans = LLM(x_1, x_2, x_3, ,,, x_n) ずう感じで回答を䜜らせるずいう流れです。 Embedding modelsの遞定 こちらの蚘事に曞いおある通り、Embedding modelの遞定がRAG党䜓の回答生成性胜に倧きく圱響する。 たあ、chatGPTに聞いた結果これが䞀番いいのかな。 BAAI/bge-base-en 今回RAGを構築するにあたり䜿う゜フト vector DB: qdrant embedding model: BAAI/bge-base-en LLM: phi4 14b on ollama (@ rtx 3060 12g) Langchainなどの統合的なラむブラリは䜿わない。なぜなら自由床が䜎いから。 vector DBでの怜玢も普通にREST APIでできるので問題なさそう。 ...

June 6, 2025 Â· 2 min Â· 265 words Â· Me

Googleapi Gmail Autoreply

背景 受蚗開発先の方からLLMを䜿っお問い合わせや予玄業務の自動化ができないかず聞かれた。 もちろんできたすよ、ず僕は答えたわけです。 しかし、䞀回gmailの内容をロヌカルに持っお来ないず始たりたせんよね なので、gmailのメヌルをサヌバに持っおくるためにgoogle apiを叩きたす。 構成 webフロント゚ンド -> サヌバアプリ -> google api google apiの蚭定方法 1. プロゞェクト䜜成 https://console.cloud.google.com/ にアクセス 以䞋の写真のgoogle cloudロゎの隣にあるボタンをクリック。この画像で蚀うず、gmail api accessここから新しいプロゞェクトを䜜る プロゞェクト名䟋gmail-auto-replyを入力し、「䜜成」 2. Gmail API を有効にする google cloudロゎの隣にあるボタンから、先ほど䜜ったプロゞェクトにプロゞェクトを倉曎する 巊偎メニュヌ「APIずサヌビス」 → 「ラむブラリ」を抌す 怜玢ボックスに Gmail API ず入力し、クリック。 enableボタンを抌す 3. OAuth 同意画面を蚭定する 巊偎メニュヌ「APIずサヌビス」→「OAuth同意画面」 次のような画面が出おくる。get startedを抌す 以䞋の情報を入力する ナヌザヌタむプ 倖郚基本はこれでOK アプリ名 任意䟋Auto Mailer サポヌトメヌル 自分のGmailでOK 開発者連絡先情報 自分のメヌルアドレス 4. 認蚌情報を䜜成OAuth 2.0 クラむアントID 巊メニュヌ「認蚌情報」→「認蚌情報を䜜成」→「OAuth クラむアントID」 以䞋を入力する アプリケヌションの皮類 → 「Web アプリ」 名前は䜕でもOK䟋auto-mail-backend 「承認枈みのリダむレクトURI」に以䞋を远加 http://localhost:3000/auth/google/callback https://yourdomain.com/auth/google/callback (実際に䜿うサヌバ) 䜜成ボタンを抌す。クラむアントシヌクレットが衚瀺されるのでめももしくはダりンロヌド 5 スコヌプを远加必芁なら ここたでで蚭定が完了。次にやるこずは以䞋。 ...

May 10, 2025 Â· 2 min Â· 363 words Â· Me

自宅GenAIを公開するけど、誰でも觊れるのはちょっず怖いのでBasic認蚌をかけた話

背景 自宅で動かしおいる Ollama + GenAI モデル䟋えば phi4:14bを、むンタヌネット越しに䜿いたくなった。OpenVPN で穎を開けた䞊で、Nginx を䜿っお自宅マシンぞのプロキシを構成。 [ むンタヌネット ] ↓ VPSのnginx (443) ↓ OpenVPN経由のプラむベヌトIP (100.64.x.x) ↓ 自宅のGenAIサヌバ (Ollama) 確かに䟿利ではあるが、「誰でも䜿える状態」にしおしたうのは少し怖くなった。 なので、Basic認蚌 を導入しお、ナヌザヌずパスワヌドを知らないずアクセスできないようにした。 Nginx に Basic認蚌を远加する手順 認蚌甚パスワヌドファむルを䜜成する たず、htpasswd コマンドを䜿っお .htpasswd を䜜成。 sudo apt install apache2-utils # 初回のみ sudo htpasswd -c /etc/nginx/.ollama_htpasswd user1 2. Nginx の蚭定に認蚌を远加 /etc/nginx/nginx.conf server { listen 443 ssl; server_name hoge.ingenboy.com; ssl_certificate /etc/letsencrypt/live/ollama.ingenboy.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/ollama.ingenboy.com/privkey.pem; add_header 'Access-Control-Allow-Origin' '*'; add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS'; add_header 'Access-Control-Allow-Headers' 'Origin, Content-Type, Accept'; location / { # Basic 認蚌を有効にする auth_basic "Restricted Area"; auth_basic_user_file /etc/nginx/.ollama_htpasswd; proxy_pass http://100.64.1.41:11434; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; } } 3. 反映 sudo nginx -t && sudo systemctl reload nginx 4. 確認 curl -v https://ollama.ingenboy.com → 401 Unauthorized ...

May 6, 2025 Â· 1 min Â· 128 words Â· Me

.envファむルは自動で読み蟌たれるComposeでの勘違いず正しい理解

背景 最近、Docker Compose で .env を䜿っおいお「あれなんで倉数が読み蟌たれないんだ」ずいう問題に盎面したした。結論から蚀うず、Docker Compose は .env を自動で読み蟌むが、コンテナの環境倉数ずしおは勝手に枡さないずいう、なかなか玛らわしい仕様によるものでした。 この蚘事では、自分がハマったポむントず、それによっお埗られた正しい理解を共有したす。 結論だけ知りたい人向け .env ファむルは Compose ファむルで ${VAR} の圢で参照されたずきのみ自動で読み蟌たれる。 ただし、.env の内容は自動的にコンテナの環境倉数ずしお枡されない。 コンテナに枡したいなら、env_file: たたは environment: を明瀺的に䜿う必芁がある。 ❌ 勘違いしおいたこず 「.env は docker-compose.yaml ず同じディレクトリに眮けば、䜕もせずずもコンテナに環境倉数ずしお枡される」 実際に .env に以䞋のような内容を蚘述しおいたした hogehoge=hoge hoge=foo ずころが、Compose を起動しおもコンテナ内にこれらの倉数は存圚したせんでした。 原因.env はあくたで Compose ファむル甚のテンプレヌト倉数 䟋えば以䞋のように docker-compose.yaml 内で ${VAR} を䜿えば、それは .env から自動で補完されたす ✅ コンテナに環境倉数を枡すには 方法は2぀ env_file: を䜿う.envファむルをそのたた指定 services: web: image: myapp env_file: - .env この堎合、.env の䞭身がたるっずコンテナに枡されたす。 environment: を䜿う必芁な倉数だけ services: web: image: myapp environment: - P_ARS=${P_ARS} - INET_ID=${INET_ID} このように曞けば、Compose 内で .env の倉数を参照しお環境倉数ずしお枡せたす。 ...

May 4, 2025 Â· 1 min Â· 88 words Â· Me

Encrypt_storage

背景 サヌビスを利甚するずき、提䟛者に悪意があるこずを前提にもの事を考えるべきである。 䜕かがあっおからでは遅いからである。 クラりドサヌビスのストレヌゞが暗号化されおいないのが気に食わない。 䞇が䞀ストレヌゞのデヌタが流出するこずに備え、ストレヌゞを暗号化したい。 アプリケヌションレむダヌではなく、fsレむダヌで暗号化したい。 さお、どうやるのかね。 透過的暗号 & 埩号 gocryptfsずいう、透過的暗号化をディレクトリ単䜍でしおくれるツヌルがありたす。 これが玠晎らしい。ナヌザランドで動く。すぐ動かせる。 むンストヌル方法 sudo apt install gocryptfs # たたは公匏のバむナリをダりンロヌド 暗号化されるディレクトリの䜜成方法 mkdir ~/secure_data.encrypted gocryptfs -init ~/secure_data.encrypted 埩号されるディレクトリを暗号化されたディレクトリにマりント mkdir ~/decrypted_data gocryptfs ~/secure_data.encrypted ~/decrypted_data gocryptfs はシンプルで信頌性が高く、埌付けでも運甚しやすいです。 実際に、mongodbのデヌタを移怍した方法がこちら # install sudo apt update sudo apt install gocryptfs # make directories mkdir -p /secure/mongodb.encrypted gocryptfs -init /secure/mongodb.encrypted # パスワヌドを蚭定 mkdir /secure/mongodb # mongodbのデヌタ領域の確認 docker volume inspect rocketchat_mongodb_data # コピヌを/secure/mongodbに移動 (allow_otherでしないずmongodb非rootナヌザが読めなくなる) gocryptfs -o allow_other /secure/mongodb.encrypted /secure/mongodb cp -a /var/lib/docker/volumes/rocketchat_mongodb_data/_data/* /secure/mongodb/ # バむンドマりントからボリュヌムマりントに切り替える vim compose.yml volumes: - /secure/mongodb:/bitnami/mongodb # docker composeで再起動 docker compose up -d ぀たりポむント 暩限回り。mongodbが実行するのですが、所有者ず暩限にはくれぐれもご泚意。 1001をownerにしないずうたくいかないです。 ...

May 3, 2025 Â· 2 min Â· 353 words Â· Me

VPNがdefaultルヌトを曞き換えずに党トラフィックを奪う方法ずはOpenVPNの0.0.0.0/1マゞックを読み解く

背景 VPNを䜿っおトラフィックを䞭継する際、すべおの通信をVPN経由にしたい──そんなずきに珟れるのが謎のルヌト 0.0.0.0/1 ず 128.0.0.0/1。 䞀芋するず「なんだこの䞭途半端なルヌトは」ず思われがちですが、これはOpenVPNが採甚する非垞に巧劙なテクニックです。本蚘事では、その目的、動䜜、実際のルヌティングテヌブルを玐解きながら、この仕組みの裏偎を解説したす。 ルヌティングずはip route の基本 Linuxのルヌティングテヌブルは ip route で確認できたす。このテヌブルは、「どのIPアドレス宛の通信を、どのネットワヌクむンタヌフェヌスから、どのゲヌトりェむ経由で送るか」ずいう配送ルヌル䞀芧です。 $ ip route 192.168.1.0/24 dev eth0 proto kernel scope link src 192.168.1.100 default via 192.168.1.1 dev eth0 この堎合、 192.168.1.0/24 に属する通信は eth0 から盎接送られる それ以倖぀たりむンタヌネットなどは 192.168.1.1ゲヌトりェむを経由しお送られる パケットを受信するず、カヌネルはルヌトテヌブルの䞊から順に䞀臎する゚ントリを探し、䞀番䞀臎床が高い= プレフィックスが長いルヌトに埓っお出力先を決定したす。 ぀たり、 どの通信もたずは「最も具䜓的な最長䞀臎のルヌト」を優先する これがVPNのルヌティング操䜜にも倧きく関わっおきたす。 defaultルヌトずは default ルヌトたたは 0.0.0.0/0ずは、どのルヌティング゚ントリにも䞀臎しない宛先のパケットをどこに送るかを決めるルヌルです。いわば「最埌の砊」。 # 䟋: よくある default ルヌト default via 192.168.1.1 dev eth0 この䟋では、「どのルヌトにもマッチしなければ 192.168.1.1 に送れ」ずなっおいたす。 通垞、むンタヌネットぞの出口ISPや䞊䜍ルヌタに向かうために䜿われたす。 A (100.64.1.61) ↓ B (100.64.1.27) — VPN Client ↓ C (162.x.x.x) — VPN Server ↓ D (192.168.40.10) ↓ E (192.168.40.130) AからD・Eに通信を通したい。しかし同時に、Aのむンタヌネット通信もVPNサヌバC経由で出したい。 ...

May 2, 2025 Â· 2 min Â· 314 words Â· Me

Problem_site2site

#背景 VPNを䜿っお拠点間通信Site-to-Site Routingを構成しおいるず、 思ったようにパケットが届かないケヌスがありたす。今回は以䞋の構成で発生した通信䞍通トラブルず、その解決方法を共有したす。 🔧 ネットワヌク構成 [A] 100.64.1.61 (100.64.1.0/22) ↓ [B] 100.64.1.27 (OpenVPNクラむアント) → VPN → [C] OpenVPNサヌバヌ → [D] 192.168.1.4 (192.168.1.0/24) 目暙AからD192.168.1.4ぞの通信を通すこず。 ❗ 問題の症状 BからDには通信可胜VPN経由で192.168.1.4が芋える AからDぞの通信は届かない しかしDからAぞの通信返信は可胜 🧠 原因 Aは 192.168.1.0/24 サブネットに属しおいないため、この宛先ぞのパケットをデフォルトゲヌトりェむに送っおしたっおいた。 ぀たり、「行きのルヌト」が䞍圚だったわけです。 ✅ 解決策Aに静的ルヌトを远加 䞀時的にルヌトを远加する堎合は以䞋のコマンドを実行 sudo ip route add 192.168.1.0/24 via 100.64.1.27 これで、Aは目的地 192.168.1.4 ぞのパケットをVPN䞭継ノヌドBに送るようになりたす。 UbuntuでNetplanを䜿甚しおいる堎合、/etc/netplan/xxx.yaml を以䞋のように修正したす network: version: 2 renderer: networkd ethernets: enp3s0: dhcp4: false dhcp6: false addresses: [100.64.1.61/22] routes: - to: default via: 100.64.1.1 - to: 192.168.1.0/24 via: 100.64.1.27 nameservers: addresses: [100.64.1.1, 8.8.8.8, 8.8.4.4] ちなみに、netplan applyをやっお疎通できなくなるず困るこずっおありたすよね。 そんな時のためにこれがありたす ...

May 2, 2025 Â· 3 min Â· 619 words Â· Me