# 穿牆術 如何在受防火牆限制的環境下提供服務 --- ## 基本概念介紹 ---- 防火牆 * 限制連入連出 * 在這裡以限制 IP:port 的類型為主 ---- 要介紹的穿牆層級 - 應用層:SSH、其他程式 - L3:VPN - L2:*略* ---- 穿牆方法 * 開洞(建立 Tunnel) * Proxy * Relay --- ### SSH Tunnel 透過 SSH 協定轉送來自其他 port 的流量(TCP) ---- 適用情境 * 其他 port 被封鎖 * 任何一方的機器有開放 SSH * Public IP ---- Tunnel 類型 * Local * 遠端服務映射至本機 Port * Remote * 本機服務映射至遠端 Port * Dynamic * SOCKS Proxy ---- Local Tunnel 將遠端主機的服務透過隧道對應到本機,常用於連回 Lab 進行開發 ``` ssh -L <local port>:<target ip>:<target port> user@domain ``` * `<local port>`: 本機提供的埠口 * `<target ip>:<target port>`: 要連線到的遠端主機 IP 與對應埠口 * 可以將其作為跳板連接 * 例:無線路由器 Web UI (192.168.0.1:80) ---- Remote Tunnel 將本機的流量透過隧道傳輸到遠端主機,常用於需要公開 Demo 時 ``` ssh -R <target port>:<local ip>:<local port> user@domain ``` * `<target port>`: 遠端主機服務的埠口 * `<local ip>:<local port>`: 要連線到的本機 IP 與對應埠口 ---- Dynamic Tunnel 動態意指不是從固定伺服器的流量,通常當 Proxy 使用 ``` ssh -D <port> user@domain ``` * `<port>`: 要對應到的本機埠口 接著就可以將 Client 設定 SOCKS 連線使用 Proxy --- 以上前提是必須**其中一端有 Public IP** ---- 沒有的話...... 需要 Relay Server(透過有公開 IP 的中間人) * A <---> B * A <---> Relay <---> B --- 相關服務與軟體 * [ngrok](https://ngrok.com) * [cloudflare tunnel](https://developers.cloudflare.com/pages/how-to/preview-with-cloudflare-tunnel/) --- 現場 Demo(?) --- 長期跨域內網? * VPN * Wireguard * SSL VPN: OpenVPN --- More * 軟體:Tor * L3: Wireguard * L2: ZeroTier To be continue......
{"metaMigratedAt":"2023-06-16T21:15:55.110Z","metaMigratedFrom":"Content","title":"穿牆術","breaks":true,"contributors":"[{\"id\":\"640dcc6d-b761-4cd0-95c7-20bb26add618\",\"add\":1511,\"del\":115}]"}
    179 views