searxng: tlsproxy를 zlambda(100.78.51.18:8443)에 재배포, 정본 갱신

- tlsproxy 소스 유실 확인, apisix-osaka 보존 이미지+CA로 zlambda 이식
- SearXNG proxy.address 죽은 IP(100.79.87.48)→zlambda 실IP 교정 (helm-charts repo)
- config repo 정정: kaffa/k8s 아님 → kaffa/helm-charts charts/searxng (ArgoCD)
- 남은 이슈: google.py data-ved 파서 vs Google JS-shell HTML (상류 엔진 문제)
This commit is contained in:
kaffa
2026-06-10 14:16:05 +09:00
parent f4a934d644
commit 76de92d1ff

View File

@@ -1,6 +1,6 @@
--- ---
title: SearXNG 검색 엔진 title: SearXNG 검색 엔진
updated: 2026-03-21 updated: 2026-06-10
tags: [search, proxy, google] tags: [search, proxy, google]
--- ---
@@ -9,9 +9,10 @@ tags: [search, proxy, google]
SearXNG 메타 검색 엔진. K3s 클러스터(searxng 네임스페이스)에 Helm으로 배포. SearXNG 메타 검색 엔진. K3s 클러스터(searxng 네임스페이스)에 Helm으로 배포.
- URL: https://searxng.inouter.com/ - URL: https://searxng.inouter.com/
- Helm chart: `searxng/searxng` - Helm chart: 자체 차트 `gitea.inouter.com/kaffa/helm-charts``charts/searxng` (ArgoCD app `searxng`, repo는 k8s 아님 — 2026-06-10 정정)
- 설정 repo: `gitea.inouter.com/kaffa/k8s``manifests/searxng/` + `helm-values/searxng.yaml` - Values: `charts/searxng/values.yaml` (`proxy.address`로 google_proxy 주소 지정)
- Values: `searxng/values.yaml` - 배포: ArgoCD GitOps (syncPolicy automated, prune+**selfHeal**). 라이브 패치는 self-heal로 되돌아가므로 git 소스를 고칠 것
- settings.yml: Secret `searxng-config` (ArgoCD가 values에서 렌더)
- 라우팅: [[gateway-api|Gateway API]] HTTPRoute (Ingress 사용 안 함) - 라우팅: [[gateway-api|Gateway API]] HTTPRoute (Ingress 사용 안 함)
## 라우팅 (Gateway API) ## 라우팅 (Gateway API)
@@ -35,10 +36,10 @@ Google이 SearXNG의 요청을 차단하는 두 가지 메커니즘:
Go + [[https://github.com/refraction-networking/utls|utls]] 기반 MITM forward proxy. HTTP CONNECT 프록시로 동작하며, Google 도메인에 대해 Chrome TLS fingerprint로 연결을 중계함. Go + [[https://github.com/refraction-networking/utls|utls]] 기반 MITM forward proxy. HTTP CONNECT 프록시로 동작하며, Google 도메인에 대해 Chrome TLS fingerprint로 연결을 중계함.
- 소스: sandbox-tokyo `/tmp/tlsproxy/` (TODO: Gitea repo로 이관) - 소스: **유실** (sandbox-tokyo `/tmp/tlsproxy/`는 NixOS 전환 시 소실, Gitea 미이관). 현재는 빌드된 `tlsproxy:latest` 이미지로만 존재 → **TODO: Dockerfile/소스를 Gitea로 복구**
- Docker 이미지: `tlsproxy:latest` (각 서버에서 로컬 빌드) - Docker 이미지: `tlsproxy:latest` (x86_64, 15.4MB). apisix-osaka에 보존본 있어 거기서 `docker save`로 배포
- 포트: 8443 - 포트: 8443 (host network), 컨테이너 실행: `docker run -d --name tlsproxy --restart always --network host -v /opt/tlsproxy:/etc/tlsproxy tlsproxy:latest`
- CA 인증서: `/opt/tlsproxy/ca.crt` (10년 유효, 서버 간 공유 필요) - CA 인증서: `/opt/tlsproxy/ca.crt` + `ca.key` (CN=`TLS Proxy CA`, fingerprint `C4:3E:98:7F...`, 2026-03-21 ~ 2036-03-18). **서버 간 동일 페어 공유**, K8s `searxng-ca-bundle` Secret에 이 CA 포함됨 (신뢰됨)
동작 방식: 동작 방식:
1. SearXNG → HTTP CONNECT → tlsproxy 1. SearXNG → HTTP CONNECT → tlsproxy
@@ -48,13 +49,17 @@ Go + [[https://github.com/refraction-networking/utls|utls]] 기반 MITM forward
### 배포 현황 ### 배포 현황
| 서버 | 상태 | GSA UA | 비고 | | 서버 | 상태 | Google IP | 비고 |
|------|------|--------|------| |------|------|--------|------|
| sandbox-tokyo (100.78.51.18:8443) | **중단** | - | 2026-04-08 NixOS 전환으로 tlsproxy 컨테이너 제거됨, 재배포 필요 | | **zlambda** (100.78.51.18:8443) | **가동** (2026-06-10 재배포) | **200 (미차단)** | apisix-osaka에서 이미지+CA 이식. host network, restart=always. SearXNG google_proxy가 이 주소를 가리킴 |
| apisix-osaka (100.108.39.107:8443) | 대기 | 403 | IP 차단됨, IPv4 전용(`tcp4`) | | apisix-osaka (100.108.39.107:8443) | 가동(이미지/CA 보존본) | 403 차단 | IP 차단되어 Google엔 무효. tlsproxy 배포 소스로 활용 |
| relay4wd | 미배포 | 403 | IP 차단됨 | | relay4wd | 미배포 | 403 | IP 차단됨 |
| incus-jp1 | 미배포 | 403 | IP 차단됨 | | incus-jp1 | 미배포 | 403 | IP 차단됨 |
> **2026-06-10 재배포 기록**: 기존 SearXNG `proxy.address`가 죽은 IP `100.79.87.48:8443`을 가리켜 google 엔진이 `HTTP connection error`로 0건. apisix-osaka의 `tlsproxy:latest` 이미지와 CA 페어를 zlambda로 이식(`docker save|load` + scp), host network로 기동. `charts/searxng/values.yaml`의 `proxy.address`를 `100.78.51.18:8443`(zlambda 실제 tailscale IP)로 교정·푸시 → ArgoCD synced. 프록시 경유 Google 접근은 200/정상 HTML 복구됨(connection error 해소).
>
> **남은 이슈 (tlsproxy와 무관, SearXNG 엔진 문제)**: google 엔진이 여전히 0건 반환(`unresponsive: []`, 에러 아님). 원인은 Google이 GSA·Chrome UA 양쪽 모두에 `data-ved` 없는 경량 JS-shell HTML(약 90KB)을 반환하는데, 현재 `google.py` 파서는 `//a[@data-ved and not(@class)]`를 기대 → 매칭 0. 상류 SearXNG google 엔진의 스크레이핑 호환성 문제. **해법 후보**: SearXNG 이미지 최신화(현재 `image.tag: latest`) 또는 google.py 파서 패치. brave/duckduckgo/qwant 등 타 엔진은 정상.
### SearXNG 설정 ### SearXNG 설정
`outgoing.networks``google_proxy` 네트워크를 정의하고, Google 엔진에서 `network: google_proxy`로 참조. `outgoing.networks``google_proxy` 네트워크를 정의하고, Google 엔진에서 `network: google_proxy`로 참조.
@@ -65,7 +70,7 @@ outgoing:
google_proxy: google_proxy:
enable_http2: false enable_http2: false
verify: /etc/ssl/custom/ca-certificates.crt verify: /etc/ssl/custom/ca-certificates.crt
proxies: http://100.78.51.18:8443 # sandbox-tokyo, 2026-04-08 현재 미가동 proxies: http://100.78.51.18:8443 # zlambda, 2026-06-10 가동 중 (charts/searxng/values.yaml proxy.address)
engines: engines:
- name: google - name: google
engine: google engine: google