%%{init: {'theme': 'base', 'themeVariables': { 'primaryColor': '#282828', 'primaryTextColor': '#ebdbb2', 'primaryBorderColor': '#a89984', 'lineColor': '#d79921', 'secondaryColor': '#3c3836', 'tertiaryColor': '#504945', 'background': '#282828', 'mainBkg': '#3c3836', 'nodeBorder': '#a89984', 'clusterBkg': '#32302f', 'titleColor': '#ebdbb2', 'edgeLabelBackground': '#3c3836' }}}%% graph TD A["🌐 อินเทอร์เน็ต"] B["🔒 Proxy Server"] C["🏠 เครือข่ายภายใน"] D["🔑 SSH Tunnel"] E["🔄 NAT Gateway"] F["💻 Client"] G["🖥️ Server"] F -->|"ส่งคำขอ"| B B -->|"Forward Request"| A A -->|"Response"| B B -->|"ส่งกลับ"| F F -->|"Encrypted"| D D -->|"Tunnel Traffic"| G C -->|"Private IP"| E E -->|"Public IP"| A style A fill:#458588,color:#ebdbb2,stroke:#83a598 style B fill:#d65d0e,color:#ebdbb2,stroke:#fe8019 style C fill:#689d6a,color:#ebdbb2,stroke:#8ec07c style D fill:#b16286,color:#ebdbb2,stroke:#d3869b style E fill:#d79921,color:#282828,stroke:#fabd2f style F fill:#3c3836,color:#ebdbb2,stroke:#a89984 style G fill:#3c3836,color:#ebdbb2,stroke:#a89984
%%{init: {'theme': 'base', 'themeVariables': { 'primaryColor': '#282828', 'primaryTextColor': '#ebdbb2', 'primaryBorderColor': '#a89984', 'lineColor': '#d79921', 'secondaryColor': '#3c3836', 'tertiaryColor': '#504945', 'background': '#282828', 'mainBkg': '#3c3836', 'nodeBorder': '#a89984', 'clusterBkg': '#32302f', 'titleColor': '#ebdbb2', 'edgeLabelBackground': '#3c3836' }}}%% flowchart TB subgraph ERA1["ยุคที่ 1: 1990s"] A1["1994 - Proxy แรก CERN httpd"] A2["1996 - Squid Proxy"] end subgraph ERA2["ยุคที่ 2: 2000s"] B1["2002 - SSH Tunneling แพร่หลาย"] B2["2004 - SOCKS5 RFC 1928"] end subgraph ERA3["ยุคที่ 3: 2010s"] C1["2012 - Reverse Proxy Nginx/HAProxy"] C2["2015 - Docker NAT"] end subgraph ERA4["ยุคที่ 4: 2020s"] D1["2020 - WireGuard"] D2["2024 - Zero Trust Proxy"] end A1 --> A2 --> B1 --> B2 --> C1 --> C2 --> D1 --> D2 style ERA1 fill:#32302f,stroke:#d79921,color:#ebdbb2 style ERA2 fill:#32302f,stroke:#458588,color:#ebdbb2 style ERA3 fill:#32302f,stroke:#689d6a,color:#ebdbb2 style ERA4 fill:#32302f,stroke:#b16286,color:#ebdbb2
%%{init: {'theme': 'base', 'themeVariables': { 'primaryColor': '#282828', 'primaryTextColor': '#ebdbb2', 'primaryBorderColor': '#a89984', 'lineColor': '#d79921', 'secondaryColor': '#3c3836', 'tertiaryColor': '#504945', 'background': '#282828', 'mainBkg': '#3c3836', 'nodeBorder': '#a89984', 'clusterBkg': '#32302f', 'titleColor': '#ebdbb2', 'edgeLabelBackground': '#3c3836' }}}%% sequenceDiagram participant C as 💻 Client (192.168.1.100) participant P as 🔄 Forward Proxy (192.168.1.1:3128) participant S as 🌐 Web Server (93.184.216.34) Note over C,S: Forward Proxy Flow C->>P: GET http://example.com HTTP/1.1 Note over P: ตรวจสอบ ACL / บันทึก Log P->>S: GET http://example.com (Via: proxy) S-->>P: HTTP/1.1 200 OK Note over P: Cache Response P-->>C: HTTP/1.1 200 OK (X-Cache: MISS)
%%{init: {'theme': 'base', 'themeVariables': { 'primaryColor': '#282828', 'primaryTextColor': '#ebdbb2', 'primaryBorderColor': '#a89984', 'lineColor': '#d79921', 'secondaryColor': '#3c3836', 'tertiaryColor': '#504945', 'background': '#282828', 'mainBkg': '#3c3836', 'nodeBorder': '#a89984', 'clusterBkg': '#32302f', 'titleColor': '#ebdbb2', 'edgeLabelBackground': '#3c3836' }}}%% graph LR subgraph INTERNET["🌐 อินเทอร์เน็ต"] C1["👤 User A"] C2["👤 User B"] C3["👤 User C"] end subgraph DMZ["🔒 DMZ Zone"] RP["🔄 Reverse Proxy - Nginx/HAProxy - 203.0.113.1:443"] end subgraph INTERNAL["🏠 Internal Network"] S1["🖥️ App Server 1 - 10.0.0.1:8001"] S2["🖥️ App Server 2 - 10.0.0.2:8002"] S3["🖥️ DB Server - 10.0.0.3:5432"] end C1 -->|"HTTPS :443"| RP C2 -->|"HTTPS :443"| RP C3 -->|"HTTPS :443"| RP RP -->|"/api/*"| S1 RP -->|"/web/*"| S2 S1 --> S3 S2 --> S3 style DMZ fill:#32302f,stroke:#d65d0e,color:#ebdbb2 style INTERNAL fill:#32302f,stroke:#689d6a,color:#ebdbb2 style RP fill:#d65d0e,color:#ebdbb2,stroke:#fe8019 style S1 fill:#458588,color:#ebdbb2,stroke:#83a598 style S2 fill:#458588,color:#ebdbb2,stroke:#83a598 style S3 fill:#689d6a,color:#ebdbb2,stroke:#8ec07c
%%{init: {'theme': 'base', 'themeVariables': { 'primaryColor': '#282828', 'primaryTextColor': '#ebdbb2', 'primaryBorderColor': '#a89984', 'lineColor': '#d79921', 'secondaryColor': '#3c3836', 'tertiaryColor': '#504945', 'background': '#282828', 'mainBkg': '#3c3836', 'nodeBorder': '#a89984', 'clusterBkg': '#32302f', 'titleColor': '#ebdbb2', 'edgeLabelBackground': '#3c3836' }}}%% sequenceDiagram participant C as 💻 Client participant S5 as 🔒 SOCKS5 Proxy participant D as 🌐 Destination Note over C,D: SOCKS5 Handshake Protocol C->>S5: [1] Greeting VER=5, METHODS=[0x00] S5-->>C: [2] Method Selection METHOD=0x00 C->>S5: [3] CONNECT example.com:80 Note over S5: Resolve DNS / Connect S5-->>C: [4] Reply REP=0x00 (Success) Note over C,D: Data Transfer Phase C->>S5: [5] HTTP GET / S5->>D: HTTP GET / D-->>S5: HTTP 200 OK S5-->>C: HTTP 200 OK
%%{init: {'theme': 'base', 'themeVariables': { 'primaryColor': '#282828', 'primaryTextColor': '#ebdbb2', 'primaryBorderColor': '#a89984', 'lineColor': '#d79921', 'secondaryColor': '#3c3836', 'tertiaryColor': '#504945', 'background': '#282828', 'mainBkg': '#3c3836', 'nodeBorder': '#a89984', 'clusterBkg': '#32302f', 'titleColor': '#ebdbb2', 'edgeLabelBackground': '#3c3836' }}}%% graph TD subgraph CLIENT["💻 Client Machine"] A["Application (HTTP, DB)"] LP["Local Port (localhost:XXXX)"] end subgraph TUNNEL["🔐 SSH Encrypted Tunnel"] T["SSH Channel — AES-256-CTR"] end subgraph SSH_SERVER["🖥️ SSH Server"] SP["SSH Daemon (Port 22)"] FP["Port Forwarder"] end subgraph DESTINATION["🎯 Destination"] DS["Service (DB:5432, HTTP:80)"] end A -->|"Plain Traffic"| LP LP -->|"Encrypted"| T T -->|"Decrypted"| SP SP --> FP FP -->|"Plain Traffic"| DS style CLIENT fill:#32302f,stroke:#458588,color:#ebdbb2 style TUNNEL fill:#32302f,stroke:#b16286,color:#ebdbb2 style SSH_SERVER fill:#32302f,stroke:#d65d0e,color:#ebdbb2 style DESTINATION fill:#32302f,stroke:#689d6a,color:#ebdbb2 style T fill:#b16286,color:#ebdbb2,stroke:#d3869b
%%{init: {'theme': 'base', 'themeVariables': { 'primaryColor': '#282828', 'primaryTextColor': '#ebdbb2', 'primaryBorderColor': '#a89984', 'lineColor': '#d79921', 'secondaryColor': '#3c3836', 'tertiaryColor': '#504945', 'background': '#282828', 'mainBkg': '#3c3836', 'nodeBorder': '#a89984', 'clusterBkg': '#32302f', 'titleColor': '#ebdbb2', 'edgeLabelBackground': '#3c3836' }}}%% graph LR subgraph HOME["🏠 Developer"] DEV["psql client - localhost:5433"] end subgraph CLOUD["☁️ Cloud Network"] SSH["SSH Server - 203.0.113.10:22"] DB["PostgreSQL - 10.0.0.5:5432 - (Internal Only)"] end DEV -->|"ssh -L 5433:10.0.0.5:5432"| SSH SSH -->|"Forward"| DB style HOME fill:#32302f,stroke:#689d6a,color:#ebdbb2 style CLOUD fill:#32302f,stroke:#458588,color:#ebdbb2 style SSH fill:#d65d0e,color:#ebdbb2,stroke:#fe8019 style DB fill:#689d6a,color:#ebdbb2,stroke:#8ec07c
%%{init: {'theme': 'base', 'themeVariables': { 'primaryColor': '#282828', 'primaryTextColor': '#ebdbb2', 'primaryBorderColor': '#a89984', 'lineColor': '#d79921', 'secondaryColor': '#3c3836', 'tertiaryColor': '#504945', 'background': '#282828', 'mainBkg': '#3c3836', 'nodeBorder': '#a89984', 'clusterBkg': '#32302f', 'titleColor': '#ebdbb2', 'edgeLabelBackground': '#3c3836' }}}%% graph RL subgraph CLIENT_SIDE["🌐 Internet Client"] C["Client Browser - → 203.0.113.10:8080"] end subgraph SERVER_SIDE["☁️ Public SSH Server"] S["SSH Server - 203.0.113.10 - Listening :8080"] end subgraph DEV_MACHINE["🏠 Developer (NAT/Firewall)"] APP["Web App - localhost:3000"] end C -->|"HTTP :8080"| S S <-->|"SSH Tunnel :22 (Reverse)"| APP style CLIENT_SIDE fill:#32302f,stroke:#458588,color:#ebdbb2 style SERVER_SIDE fill:#32302f,stroke:#d65d0e,color:#ebdbb2 style DEV_MACHINE fill:#32302f,stroke:#689d6a,color:#ebdbb2
%%{init: {'theme': 'base', 'themeVariables': { 'primaryColor': '#282828', 'primaryTextColor': '#ebdbb2', 'primaryBorderColor': '#a89984', 'lineColor': '#d79921', 'secondaryColor': '#3c3836', 'tertiaryColor': '#504945', 'background': '#282828', 'mainBkg': '#3c3836', 'nodeBorder': '#a89984', 'clusterBkg': '#32302f', 'titleColor': '#ebdbb2', 'edgeLabelBackground': '#3c3836' }}}%% graph TD subgraph ABROAD["🌏 ต่างประเทศ"] EMP["👤 Employee - Browser + SOCKS5 - localhost:1080"] end subgraph TUNNEL["🔐 SSH Encrypted"] T["Port 22 / AES-256"] end subgraph OFFICE["🏢 Office Network (Thailand)"] SSH_SRV["SSH Jump Server - 10.10.0.1:22"] HR_SYS["HR System - 10.10.0.10:80"] FILE_SRV["File Server - 10.10.0.20:445"] end EMP -->|"ssh -D 1080"| T T --> SSH_SRV SSH_SRV --> HR_SYS SSH_SRV --> FILE_SRV style ABROAD fill:#32302f,stroke:#cc241d,color:#ebdbb2 style TUNNEL fill:#32302f,stroke:#b16286,color:#ebdbb2 style OFFICE fill:#32302f,stroke:#689d6a,color:#ebdbb2 style SSH_SRV fill:#d65d0e,color:#ebdbb2,stroke:#fe8019
%%{init: {'theme': 'base', 'themeVariables': { 'primaryColor': '#282828', 'primaryTextColor': '#ebdbb2', 'primaryBorderColor': '#a89984', 'lineColor': '#d79921', 'secondaryColor': '#3c3836', 'tertiaryColor': '#504945', 'background': '#282828', 'mainBkg': '#3c3836', 'nodeBorder': '#a89984', 'clusterBkg': '#32302f', 'titleColor': '#ebdbb2', 'edgeLabelBackground': '#3c3836' }}}%% sequenceDiagram participant PC as 💻 PC 192.168.1.100:55000 participant GW as 🔄 NAT Gateway - 192.168.1.1 / 203.0.113.1 participant WEB as 🌐 Web 93.184.216.34:80 Note over PC,WEB: NAT Translation Process PC->>GW: SRC:192.168.1.100:55000 DST:93.184.216.34:80 Note over GW: NAT Table: - 192.168.1.100:55000 ↔ 203.0.113.1:40001 GW->>WEB: SRC:203.0.113.1:40001 DST:93.184.216.34:80 WEB-->>GW: SRC:93.184.216.34:80 DST:203.0.113.1:40001 Note over GW: Lookup: 40001 → 192.168.1.100:55000 GW-->>PC: SRC:93.184.216.34:80 DST:192.168.1.100:55000
%%{init: {'theme': 'base', 'themeVariables': { 'primaryColor': '#282828', 'primaryTextColor': '#ebdbb2', 'primaryBorderColor': '#a89984', 'lineColor': '#d79921', 'secondaryColor': '#3c3836', 'tertiaryColor': '#504945', 'background': '#282828', 'mainBkg': '#3c3836', 'nodeBorder': '#a89984', 'clusterBkg': '#32302f', 'titleColor': '#ebdbb2', 'edgeLabelBackground': '#3c3836' }}}%% graph TD subgraph NAT_A["🏠 NAT A"] PA["Peer A - 192.168.1.100"] GWA["Gateway A - 1.2.3.4"] end subgraph STUN_SERVER["☁️ STUN Server"] SS["stun.example.com - 5.6.7.8:3478"] end subgraph NAT_B["🏠 NAT B"] PB["Peer B - 10.0.0.200"] GWB["Gateway B - 9.10.11.12"] end PA -->|"STUN Request"| SS SS -->|"Your IP: 1.2.3.4:XXXXX"| PA PB -->|"STUN Request"| SS SS -->|"Your IP: 9.10.11.12:YYYYY"| PB PA <-->|"Direct P2P (UDP Hole Punching)"| PB style NAT_A fill:#32302f,stroke:#689d6a,color:#ebdbb2 style NAT_B fill:#32302f,stroke:#458588,color:#ebdbb2 style STUN_SERVER fill:#32302f,stroke:#d79921,color:#ebdbb2 style SS fill:#d79921,color:#282828,stroke:#fabd2f