{"id":13393886,"url":"https://github.com/nadoo/glider","last_synced_at":"2025-04-09T00:29:11.737Z","repository":{"id":22717539,"uuid":"97128069","full_name":"nadoo/glider","owner":"nadoo","description":"glider is a forward proxy with multiple protocols support, and also a dns/dhcp server with ipset management features(like dnsmasq).","archived":false,"fork":false,"pushed_at":"2024-08-16T14:14:16.000Z","size":1534,"stargazers_count":3111,"open_issues_count":24,"forks_count":424,"subscribers_count":73,"default_branch":"main","last_synced_at":"2024-10-29T15:10:49.584Z","etag":null,"topics":["dhcp","dns","dnsmasq","go","golang","http-proxy","ipset","proxy","socks5","ssh-tunnel","transparent-proxy","tunnel","udp-proxy","websocket"],"latest_commit_sha":null,"homepage":"","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/nadoo.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2017-07-13T13:53:15.000Z","updated_at":"2024-10-29T03:06:17.000Z","dependencies_parsed_at":"2022-07-13T12:10:49.622Z","dependency_job_id":"e2eb0118-d45e-4d58-960b-be23566e1813","html_url":"https://github.com/nadoo/glider","commit_stats":{"total_commits":617,"total_committers":18,"mean_commits":34.27777777777778,"dds":0.05672609400324147,"last_synced_commit":"4f12a4f3082940d8a4c56ba4f06f02a72d90d5d6"},"previous_names":[],"tags_count":53,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nadoo%2Fglider","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nadoo%2Fglider/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nadoo%2Fglider/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nadoo%2Fglider/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/nadoo","download_url":"https://codeload.github.com/nadoo/glider/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247949057,"owners_count":21023267,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["dhcp","dns","dnsmasq","go","golang","http-proxy","ipset","proxy","socks5","ssh-tunnel","transparent-proxy","tunnel","udp-proxy","websocket"],"created_at":"2024-07-30T17:01:01.880Z","updated_at":"2025-04-09T00:29:11.710Z","avatar_url":"https://github.com/nadoo.png","language":"Go","readme":"# [glider](https://github.com/nadoo/glider)\n\n[![Go Version](https://img.shields.io/github/go-mod/go-version/nadoo/glider?style=flat-square)](https://go.dev/dl/)\n[![Go Report Card](https://goreportcard.com/badge/github.com/nadoo/glider?style=flat-square)](https://goreportcard.com/report/github.com/nadoo/glider)\n[![GitHub release](https://img.shields.io/github/v/release/nadoo/glider.svg?style=flat-square\u0026include_prereleases)](https://github.com/nadoo/glider/releases)\n[![Actions Status](https://img.shields.io/github/actions/workflow/status/nadoo/glider/build.yml?branch=dev\u0026style=flat-square)](https://github.com/nadoo/glider/actions)\n[![DockerHub](https://img.shields.io/docker/image-size/nadoo/glider?color=blue\u0026label=docker\u0026style=flat-square)](https://hub.docker.com/r/nadoo/glider)\n\nglider is a forward proxy with multiple protocols support, and also a dns/dhcp server with ipset management features(like dnsmasq).\n\nwe can set up local listeners as proxy servers, and forward requests to internet via forwarders.\n\n```bash\n                |Forwarder -----------------\u003e|\n   Listener --\u003e |                            | Internet\n                |Forwarder --\u003e Forwarder-\u003e...|\n```\n\n## Features\n- Act as both proxy client and proxy server(protocol converter)\n- Flexible proxy \u0026 protocol chains\n- Load balancing with the following scheduling algorithm:\n  - rr: round robin\n  - ha: high availability \n  - lha: latency based high availability\n  - dh: destination hashing\n- Rule \u0026 priority based forwarder choosing: [Config Examples](config/examples)\n- DNS forwarding server:\n  - dns over proxy\n  - force upstream querying by tcp\n  - association rules between dns and forwarder choosing\n  - association rules between dns and ipset\n  - dns cache support\n  - custom dns record\n- IPSet management (linux kernel version \u003e= 2.6.32):\n  - add ip/cidrs from rule files on startup\n  - add resolved ips for domains from rule files by dns forwarding server\n- Serve http and socks5 on the same port\n- Periodical availability checking for forwarders\n- Send requests from specific local ip/interface\n- Services: \n  - dhcpd: a simple dhcp server that can run in failover mode\n\n## Protocols\n\n\u003cdetails\u003e\n\u003csummary\u003eclick to see details\u003c/summary\u003e\n\n|Protocol       | Listen/TCP |  Listen/UDP | Forward/TCP | Forward/UDP | Description\n|:-:            |:-:|:-:|:-:|:-:|:-\n|Mixed          |√|√| | |http+socks5 server\n|HTTP           |√| |√| |client \u0026 server\n|SOCKS5         |√|√|√|√|client \u0026 server\n|SS             |√|√|√|√|client \u0026 server\n|Trojan         |√|√|√|√|client \u0026 server\n|Trojanc        |√|√|√|√|trojan cleartext(without tls)\n|VLESS          |√|√|√|√|client \u0026 server\n|VMess          | | |√|√|client only\n|SSR            | | |√| |client only\n|SSH            | | |√| |client only\n|SOCKS4         | | |√| |client only\n|SOCKS4A        | | |√| |client only\n|TCP            |√| |√| |tcp tunnel client \u0026 server\n|UDP            | |√| |√|udp tunnel client \u0026 server\n|TLS            |√| |√| |transport client \u0026 server\n|KCP            | |√|√| |transport client \u0026 server\n|Unix           |√|√|√|√|transport client \u0026 server\n|VSOCK          |√| |√| |transport client \u0026 server\n|Smux           |√| |√| |transport client \u0026 server\n|Websocket(WS)  |√| |√| |transport client \u0026 server\n|WS Secure      |√| |√| |websocket secure (wss)\n|Proxy Protocol |√| | | |version 1 server only\n|Simple-Obfs    | | |√| |transport client only\n|Redir          |√| | | |linux redirect proxy\n|Redir6         |√| | | |linux redirect proxy(ipv6)\n|TProxy         | |√| | |linux tproxy(udp only)\n|Reject         | | |√|√|reject all requests\n\n\u003c/details\u003e\n\n## Install\n\n- Binary: [https://github.com/nadoo/glider/releases](https://github.com/nadoo/glider/releases)\n- Docker: `docker pull nadoo/glider`\n- Manjaro: `pamac install glider`\n- ArchLinux: `sudo pacman -S glider`\n- Homebrew: `brew install glider`\n- MacPorts: `sudo port install glider`\n- Source: `go install github.com/nadoo/glider@latest`\n\n## Usage\n\n#### Run\n\n```bash\nglider -verbose -listen :8443\n# docker run --rm -it nadoo/glider -verbose -listen :8443\n```\n\n#### Help\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003ccode\u003eglider -help\u003c/code\u003e\u003c/summary\u003e\n\n```bash\nUsage: glider [-listen URL]... [-forward URL]... [OPTION]...\n\n  e.g. glider -config /etc/glider/glider.conf\n       glider -listen :8443 -forward socks5://serverA:1080 -forward socks5://serverB:1080 -verbose\n\nOPTION:\n  -check string\n        check=tcp[://HOST:PORT]: tcp port connect check\n        check=http://HOST[:PORT][/URI][#expect=REGEX_MATCH_IN_RESP_LINE]\n        check=https://HOST[:PORT][/URI][#expect=REGEX_MATCH_IN_RESP_LINE]\n        check=file://SCRIPT_PATH: run a check script, healthy when exitcode=0, env vars: FORWARDER_ADDR,FORWARDER_URL\n        check=disable: disable health check (default \"http://www.msftconnecttest.com/connecttest.txt#expect=200\")\n  -checkdisabledonly\n        check disabled fowarders only\n  -checkinterval int\n        fowarder check interval(seconds) (default 30)\n  -checklatencysamples int\n        use the average latency of the latest N checks (default 10)\n  -checktimeout int\n        fowarder check timeout(seconds) (default 10)\n  -checktolerance int\n        fowarder check tolerance(ms), switch only when new_latency \u003c old_latency - tolerance, only used in lha mode\n  -config string\n        config file path\n  -dialtimeout int\n        dial timeout(seconds) (default 3)\n  -dns string\n        local dns server listen address\n  -dnsalwaystcp\n        always use tcp to query upstream dns servers no matter there is a forwarder or not\n  -dnscachelog\n        show query log of dns cache\n  -dnscachesize int\n        max number of dns response in CACHE (default 4096)\n  -dnsmaxttl int\n        maximum TTL value for entries in the CACHE(seconds) (default 1800)\n  -dnsminttl int\n        minimum TTL value for entries in the CACHE(seconds)\n  -dnsnoaaaa\n        disable AAAA query\n  -dnsrecord value\n        custom dns record, format: domain/ip\n  -dnsserver value\n        remote dns server address\n  -dnstimeout int\n        timeout value used in multiple dnsservers switch(seconds) (default 3)\n  -example\n        show usage examples\n  -forward value\n        forward url, see the URL section below\n  -include value\n        include file\n  -interface string\n        source ip or source interface\n  -listen value\n        listen url, see the URL section below\n  -logflags int\n        do not change it if you do not know what it is, ref: https://pkg.go.dev/log#pkg-constants (default 19)\n  -maxfailures int\n        max failures to change forwarder status to disabled (default 3)\n  -relaytimeout int\n        relay timeout(seconds)\n  -rulefile value\n        rule file path\n  -rules-dir string\n        rule file folder\n  -scheme string\n        show help message of proxy scheme, use 'all' to see all schemes\n  -service value\n        run specified services, format: SERVICE_NAME[,SERVICE_CONFIG]\n  -strategy string\n        rr: Round Robin mode\n        ha: High Availability mode\n        lha: Latency based High Availability mode\n        dh: Destination Hashing mode (default \"rr\")\n  -tcpbufsize int\n        tcp buffer size in Bytes (default 32768)\n  -udpbufsize int\n        udp buffer size in Bytes (default 2048)\n  -verbose\n        verbose mode\n\nURL:\n   proxy: SCHEME://[USER:PASS@][HOST]:PORT\n   chain: proxy,proxy[,proxy]...\n\n    e.g. -listen socks5://:1080\n         -listen tls://:443?cert=crtFilePath\u0026key=keyFilePath,http://    (protocol chain)\n\n    e.g. -forward socks5://server:1080\n         -forward tls://server.com:443,http://                          (protocol chain)\n         -forward socks5://serverA:1080,socks5://serverB:1080           (proxy chain)\n\nSCHEME:\n   listen : http kcp mixed pxyproto redir redir6 smux sni socks5 ss tcp tls tproxy trojan trojanc udp unix vless vsock ws wss\n   forward: direct http kcp reject simple-obfs smux socks4 socks4a socks5 ss ssh ssr tcp tls trojan trojanc udp unix vless vmess vsock ws wss\n\n   Note: use 'glider -scheme all' or 'glider -scheme SCHEME' to see help info for the scheme.\n\n--\nForwarder Options: FORWARD_URL#OPTIONS\n   priority : the priority of that forwarder, the larger the higher, default: 0\n   interface: the local interface or ip address used to connect remote server.\n\n   e.g. -forward socks5://server:1080#priority=100\n        -forward socks5://server:1080#interface=eth0\n        -forward socks5://server:1080#priority=100\u0026interface=192.168.1.99\n\nServices:\n   dhcpd: service=dhcpd,INTERFACE,START_IP,END_IP,LEASE_MINUTES[,MAC=IP,MAC=IP...]\n          service=dhcpd-failover,INTERFACE,START_IP,END_IP,LEASE_MINUTES[,MAC=IP,MAC=IP...]\n     e.g. service=dhcpd,eth1,192.168.1.100,192.168.1.199,720\n\n--\nHelp:\n   glider -help\n   glider -scheme all\n   glider -example\n\nsee README.md and glider.conf.example for more details.\n--\nglider 0.16.4, https://github.com/nadoo/glider (glider.proxy@gmail.com)\n```\n\n\u003c/details\u003e\n\n#### Schemes\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003ccode\u003eglider -scheme all\u003c/code\u003e\u003c/summary\u003e\n\n```bash\nDirect scheme:\n  direct://\n\nOnly needed when you want to specify the outgoing interface:\n  glider -verbose -listen :8443 -forward direct://#interface=eth0\n\nOr load balance multiple interfaces directly:\n  glider -verbose -listen :8443 -forward direct://#interface=eth0 -forward direct://#interface=eth1 -strategy rr\n\nOr you can use the high availability mode:\n  glider -verbose -listen :8443 -forward direct://#interface=eth0\u0026priority=100 -forward direct://#interface=eth1\u0026priority=200 -strategy ha\n\n--\nHttp scheme:\n  http://[user:pass@]host:port\n\n--\nKCP scheme:\n  kcp://CRYPT:KEY@host:port[?dataShards=NUM\u0026parityShards=NUM\u0026mode=MODE]\n  \nAvailable crypt types for KCP:\n  none, sm4, tea, xor, aes, aes-128, aes-192, blowfish, twofish, cast5, 3des, xtea, salsa20\n  \nAvailable modes for KCP:\n  fast, fast2, fast3, normal, default: fast\n\n--\nSimple-Obfs scheme:\n  simple-obfs://host:port[?type=TYPE\u0026host=HOST\u0026uri=URI\u0026ua=UA]\n  \nAvailable types for simple-obfs:\n  http, tls\n\n--\nReject scheme:\n  reject://\n\n--\nSmux scheme:\n  smux://host:port\n\n--\nSocks4 scheme:\n  socks4://host:port\n\n--\nSocks5 scheme:\n  socks5://[user:pass@]host:port\n\n--\nSS scheme:\n  ss://method:pass@host:port\n  \n  Available methods for ss:\n    AEAD Ciphers:\n      AEAD_AES_128_GCM AEAD_AES_192_GCM AEAD_AES_256_GCM AEAD_CHACHA20_POLY1305 AEAD_XCHACHA20_POLY1305\n    Stream Ciphers:\n      AES-128-CFB AES-128-CTR AES-192-CFB AES-192-CTR AES-256-CFB AES-256-CTR CHACHA20-IETF XCHACHA20 CHACHA20 RC4-MD5\n    Alias:\n          chacha20-ietf-poly1305 = AEAD_CHACHA20_POLY1305, xchacha20-ietf-poly1305 = AEAD_XCHACHA20_POLY1305\n    Plain: NONE\n\n--\nSSH scheme:\n  ssh://user[:pass]@host:port[?key=keypath\u0026timeout=SECONDS]\n    timeout: timeout of ssh handshake and channel operation, default: 5\n\n--\nSSR scheme:\n  ssr://method:pass@host:port?protocol=xxx\u0026protocol_param=yyy\u0026obfs=zzz\u0026obfs_param=xyz\n\n--\nTLS client scheme:\n  tls://host:port[?serverName=SERVERNAME][\u0026skipVerify=true][\u0026cert=PATH][\u0026alpn=proto1][\u0026alpn=proto2]\n  \nProxy over tls client:\n  tls://host:port[?skipVerify=true][\u0026serverName=SERVERNAME],scheme://\n  tls://host:port[?skipVerify=true],http://[user:pass@]\n  tls://host:port[?skipVerify=true],socks5://[user:pass@]\n  tls://host:port[?skipVerify=true],vmess://[security:]uuid@?alterID=num\n  \nTLS server scheme:\n  tls://host:port?cert=PATH\u0026key=PATH[\u0026alpn=proto1][\u0026alpn=proto2]\n  \nProxy over tls server:\n  tls://host:port?cert=PATH\u0026key=PATH,scheme://\n  tls://host:port?cert=PATH\u0026key=PATH,http://\n  tls://host:port?cert=PATH\u0026key=PATH,socks5://\n  tls://host:port?cert=PATH\u0026key=PATH,ss://method:pass@\n\n--\nTrojan client scheme:\n  trojan://pass@host:port[?serverName=SERVERNAME][\u0026skipVerify=true][\u0026cert=PATH]\n  trojanc://pass@host:port     (cleartext, without TLS)\n  \nTrojan server scheme:\n  trojan://pass@host:port?cert=PATH\u0026key=PATH[\u0026fallback=127.0.0.1]\n  trojanc://pass@host:port[?fallback=127.0.0.1]     (cleartext, without TLS)\n\n--\nUnix domain socket scheme:\n  unix://path\n\n--\nVLESS scheme:\n  vless://uuid@host:port[?fallback=127.0.0.1:80]\n\n--\nVMess scheme:\n  vmess://[security:]uuid@host:port[?alterID=num]\n    if alterID=0 or not set, VMessAEAD will be enabled\n  \n  Available security for vmess:\n    zero, none, aes-128-gcm, chacha20-poly1305\n\n--\nWebsocket client scheme:\n  ws://host:port[/path][?host=HOST][\u0026origin=ORIGIN]\n  wss://host:port[/path][?serverName=SERVERNAME][\u0026skipVerify=true][\u0026cert=PATH][\u0026host=HOST][\u0026origin=ORIGIN]\n  \nWebsocket server scheme:\n  ws://:port[/path][?host=HOST]\n  wss://:port[/path]?cert=PATH\u0026key=PATH[?host=HOST]\n  \nWebsocket with a specified proxy protocol:\n  ws://host:port[/path][?host=HOST],scheme://\n  ws://host:port[/path][?host=HOST],http://[user:pass@]\n  ws://host:port[/path][?host=HOST],socks5://[user:pass@]\n  \nTLS and Websocket with a specified proxy protocol:\n  tls://host:port[?skipVerify=true][\u0026serverName=SERVERNAME],ws://[@/path[?host=HOST]],scheme://\n  tls://host:port[?skipVerify=true],ws://[@/path[?host=HOST]],http://[user:pass@]\n  tls://host:port[?skipVerify=true],ws://[@/path[?host=HOST]],socks5://[user:pass@]\n  tls://host:port[?skipVerify=true],ws://[@/path[?host=HOST]],vmess://[security:]uuid@?alterID=num\n\n--\nVM socket scheme(linux only):\n  vsock://[CID]:port\n\n  if you want to listen on any address, just set CID to 4294967295.\n```\n\n\u003c/details\u003e\n\n#### Examples\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003ccode\u003eglider -example\u003c/code\u003e\u003c/summary\u003e\n\n```bash\nExamples:\n  glider -config glider.conf\n    -run glider with specified config file.\n  \n  glider -listen :8443 -verbose\n    -listen on :8443, serve as http/socks5 proxy on the same port, in verbose mode.\n\n  glider -listen socks5://:1080 -listen http://:8080 -verbose\n    -multiple listeners: listen on :1080 as socks5 proxy server, and on :8080 as http proxy server.\n  \n  glider -listen :8443 -forward direct://#interface=eth0 -forward direct://#interface=eth1\n    -multiple forwarders: listen on 8443 and forward requests via interface eth0 and eth1 in round robin mode.\n  \n  glider -listen tls://:443?cert=crtFilePath\u0026key=keyFilePath,http:// -verbose\n    -protocol chain: listen on :443 as a https(http over tls) proxy server.\n  \n  glider -listen http://:8080 -forward socks5://serverA:1080,socks5://serverB:1080\n    -proxy chain: listen on :8080 as a http proxy server, forward all requests via forward chain.\n  \n  glider -listen :8443 -forward socks5://serverA:1080 -forward socks5://serverB:1080#priority=10 -forward socks5://serverC:1080#priority=10\n    -forwarder priority: serverA will only be used when serverB and serverC are not available.\n  \n  glider -listen tcp://:80 -forward tcp://serverA:80\n    -tcp tunnel: listen on :80 and forward all requests to serverA:80.\n  \n  glider -listen udp://:53 -forward socks5://serverA:1080,udp://8.8.8.8:53\n    -udp tunnel: listen on :53 and forward all udp requests to 8.8.8.8:53 via remote socks5 server.\n  \n  glider -verbose -dns=:53 -dnsserver=8.8.8.8:53 -forward socks5://serverA:1080 -dnsrecord=abc.com/1.2.3.4\n    -dns over proxy: listen on :53 as dns server, forward to 8.8.8.8:53 via socks5 server.\n```\n\n\u003c/details\u003e\n\n\n## Config\n\n```bash\nglider -config CONFIG_PATH\n```\n\n- [ConfigFile](config)\n  - [glider.conf.example](config/glider.conf.example)\n  - [office.rule.example](config/rules.d/office.rule.example)\n- [Examples](config/examples)\n  - [transparent proxy with dnsmasq](config/examples/8.transparent_proxy_with_dnsmasq)\n  - [transparent proxy without dnsmasq](config/examples/9.transparent_proxy_without_dnsmasq)\n\n## Service\n\n- dhcpd / dhcpd-failover:\n  - service=dhcpd,INTERFACE,START_IP,END_IP,LEASE_MINUTES[,MAC=IP,MAC=IP...]\n    - service=dhcpd,eth1,192.168.1.100,192.168.1.199,720,fc:23:34:9e:25:01=192.168.1.101\n    - service=dhcpd-failover,eth2,192.168.2.100,192.168.2.199,720\n  - note: `dhcpd-failover` only serves requests when there's no other dhcp server exists in lan\n    - detect interval: 1min\n\n## Linux Daemon\n\n- systemd: [https://github.com/nadoo/glider/tree/main/systemd](https://github.com/nadoo/glider/tree/main/systemd)\n\n- \u003cdetails\u003e \u003csummary\u003edocker: click to see details\u003c/summary\u003e\n\n  - run glider (config file path: /etc/glider/glider.conf)\n    ```\n    docker run -d --name glider --net host --restart=always \\\n      -v /etc/glider:/etc/glider \\\n      -v /etc/localtime:/etc/localtime:ro \\\n      nadoo/glider -config=/etc/glider/glider.conf\n    ```\n  - run watchtower if you need auto update\n    ```\n    docker run -d --name watchtower --restart=always \\\n      -v /var/run/docker.sock:/var/run/docker.sock \\\n      containrrr/watchtower --interval 21600 --cleanup \\\n      glider\n    ```\n  - open udp ports if you need udp nat fullcone\n    ```\n    iptables -I INPUT -p udp -m udp --dport 1024:65535 -j ACCEPT\n    ```\n  \n  \u003c/details\u003e\n\n\n## Customize Build\n\n\u003cdetails\u003e\u003csummary\u003eYou can customize and build glider if you want a smaller binary (click to see details)\u003c/summary\u003e\n\n\n1. Clone the source code:\n  ```bash\n  git clone https://github.com/nadoo/glider \u0026\u0026 cd glider\n  ```\n2. Customize features:\n\n  ```bash\n  open `feature.go` \u0026 `feature_linux.go`, comment out the packages you don't need\n  // _ \"github.com/nadoo/glider/proxy/kcp\"\n  ```\n\n3. Build it:\n  ```bash\n  go build -v -ldflags \"-s -w\"\n  ```\n\n\u003c/details\u003e\n\n## Proxy \u0026 Protocol Chains\n\u003cdetails\u003e\u003csummary\u003eIn glider, you can easily chain several proxy servers or protocols together (click to see details)\u003c/summary\u003e\n\n- Chain proxy servers:\n\n  ```bash\n  forward=http://1.1.1.1:80,socks5://2.2.2.2:1080,ss://method:pass@3.3.3.3:8443@\n  ```\n\n- Chain protocols: https proxy (http over tls)\n\n  ```bash\n  forward=tls://server.com:443,http://\n  ```\n\n- Chain protocols: vmess over ws over tls\n\n  ```bash\n  forward=tls://server.com:443,ws://,vmess://5a146038-0b56-4e95-b1dc-5c6f5a32cd98@?alterID=2\n  ```\n\n- Chain protocols and servers:\n\n  ``` bash\n  forward=socks5://1.1.1.1:1080,tls://server.com:443,vmess://5a146038-0b56-4e95-b1dc-5c6f5a32cd98@?alterID=2\n  ```\n\n- Chain protocols in listener: https proxy server\n\n  ``` bash\n  listen=tls://:443?cert=crtFilePath\u0026key=keyFilePath,http://\n  ```\n\n- Chain protocols in listener: http over smux over websocket proxy server\n\n  ``` bash\n  listen=ws://:10000,smux://,http://\n  ```\n\n\u003c/details\u003e\n\n## Links\n\n- [ipset](https://github.com/nadoo/ipset): netlink ipset package for Go.\n- [conflag](https://github.com/nadoo/conflag): a drop-in replacement for Go's standard flag package with config file support.\n- [ArchLinux](https://archlinux.org/packages/extra/x86_64/glider): a great linux distribution with glider pre-built package.\n- [urlencode](https://www.w3schools.com/tags/ref_urlencode.asp): you should encode special characters in scheme url. e.g., `@`-\u003e`%40`\n","funding_links":[],"categories":["Go","\u003ca id=\"a76463feb91d09b3d024fae798b92be6\"\u003e\u003c/a\u003e侦察\u0026\u0026信息收集\u0026\u0026子域名发现与枚举\u0026\u0026OSINT","Repositories","Go (531)","\u003ca id=\"170048b7d8668c50681c0ab1e92c679a\"\u003e\u003c/a\u003e工具","websocket"],"sub_categories":["\u003ca id=\"a695111d8e30d645354c414cb27b7843\"\u003e\u003c/a\u003eDNS"],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnadoo%2Fglider","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fnadoo%2Fglider","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnadoo%2Fglider/lists"}