Meta Kennel
Meta Kernel

Another Clash Kernel.

## Features - Local HTTP/HTTPS/SOCKS server with authentication support - VMess, Shadowsocks, Trojan, Snell protocol support for remote connections - Built-in DNS server that aims to minimize DNS pollution attack impact, supports DoH/DoT upstream and fake IP. - Rules based off domains, GEOIP, IPCIDR or Process to forward packets to different nodes - Remote groups allow users to implement powerful rules. Supports automatic fallback, load balancing or auto select node based off latency - Remote providers, allowing users to get node lists remotely instead of hard-coding in config - Netfilter TCP redirecting. Deploy Clash on your Internet gateway with `iptables`. - Comprehensive HTTP RESTful API controller ## Dashboard We made an official web dashboard providing first class support for this project, check it out at [metacubexd](https://github.com/MetaCubeX/metacubexd) ## Wiki Configuration examples can be found at [/docs/config.yaml](https://github.com/MetaCubeX/Clash.Meta/blob/Alpha/docs/config.yaml), while documentation can be found [Clash.Meta Wiki](https://clash-meta.wiki). ## Build You should install [golang](https://go.dev) first. Then get the source code of Clash.Meta: ```shell git clone https://github.com/MetaCubeX/Clash.Meta.git cd Clash.Meta && go mod download ``` If you can't visit GitHub, you should set proxy first: ```shell go env -w GOPROXY=https://goproxy.io,direct ``` Now you can build it: ```shell go build ``` If you need gvisor for tun stack, build with: ```shell go build -tags with_gvisor ``` ### IPTABLES configuration Work on Linux OS which supported `iptables` ```yaml # Enable the TPROXY listener tproxy-port: 9898 iptables: enable: true # default is false inbound-interface: eth0 # detect the inbound interface, default is 'lo' ``` ### General installation guide for Linux - Create user given name `clash-meta` - Download and decompress pre-built binaries from [releases](https://github.com/MetaCubeX/Clash.Meta/releases) - Rename executable file to `Clash-Meta` and move to `/usr/local/bin/` - Create folder `/etc/Clash-Meta/` as working directory Run Meta Kernel by user `clash-meta` as a daemon. Create the systemd configuration file at `/etc/systemd/system/Clash-Meta.service`: ``` [Unit] Description=Clash-Meta Daemon, Another Clash Kernel. After=network.target NetworkManager.service systemd-networkd.service iwd.service [Service] Type=simple User=clash-meta Group=clash-meta LimitNPROC=500 LimitNOFILE=1000000 CapabilityBoundingSet=CAP_NET_ADMIN CAP_NET_RAW CAP_NET_BIND_SERVICE AmbientCapabilities=CAP_NET_ADMIN CAP_NET_RAW CAP_NET_BIND_SERVICE Restart=always ExecStartPre=/usr/bin/sleep 1s ExecStart=/usr/local/bin/Clash-Meta -d /etc/Clash-Meta ExecReload=/bin/kill -HUP $MAINPID [Install] WantedBy=multi-user.target ``` Launch clash-meta daemon on system startup with: ```shell $ systemctl enable Clash-Meta ``` Launch clash-meta daemon immediately with: ```shell $ systemctl start Clash-Meta ``` ## Development If you want to build an application that uses clash as a library, check out the [GitHub Wiki](https://github.com/Dreamacro/clash/wiki/use-clash-as-a-library) ## Debugging Check [wiki](https://github.com/MetaCubeX/Clash.Meta/wiki/How-to-use-debug-api) to get an instruction on using debug API. ## Credits - [Dreamacro/clash](https://github.com/Dreamacro/clash) - [SagerNet/sing-box](https://github.com/SagerNet/sing-box) - [riobard/go-shadowsocks2](https://github.com/riobard/go-shadowsocks2) - [v2ray/v2ray-core](https://github.com/v2ray/v2ray-core) - [WireGuard/wireguard-go](https://github.com/WireGuard/wireguard-go) - [yaling888/clash-plus-pro](https://github.com/yaling888/clash) ## License This software is released under the GPL-3.0 license. [![FOSSA Status](https://app.fossa.io/api/projects/git%2Bgithub.com%2FDreamacro%2Fclash.svg?type=large)](https://app.fossa.io/projects/git%2Bgithub.com%2FDreamacro%2Fclash?ref=badge_large)