easyss

package module
v1.5.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Dec 2, 2022 License: MIT Imports: 35 Imported by: 0

README

Easyss

Easyss是一款兼容socks5的安全上网工具,目标是使访问国外技术网站更流畅免受干扰。

有报道表明访问国外技术网站正变得越来越困难,即使用了一些常用代理技术也面临被干扰的可能性。 为了以防万一,提前准备,重新实现了一套协议以加快访问速度和对抗嗅探。

特性

  • 简单稳定易用, 没有复杂的配置项
  • 全平台支持(Linux, MacOS, Windows, Android等)
  • 支持SOCKS5(TCP/UDP), HTTP代理协议
  • 支持基于PAC的浏览器级别代理, 和基于Tun2socks的系统全局代理, 可选自动模式和全局模式(thanks tun2socks)
  • 支持TCP连接池 (默认启用,大幅降低请求延迟)
  • 支持系统托盘图标管理 (thanks systray)
  • 支持多配置文件切换
  • 基于TLS, 支持(AEAD类型)高强度加密通信, 如aes-256-gcm, chacha20-poly1305
  • http2帧格式交互 (更灵活通用, 更易扩展)
  • 内建DNS服务器,支持DNS Forward转发,可用于透明代理部署时使用 (默认关闭,可通过命令行启用)

下载安装

在release页面直接下载(各平台)编译好的二进制文件

去下载

或者 通过源码安装(go version 1.19+ is required)
// Ubuntu20.04 or Debian11 
apt-get install libgtk-3-dev libayatana-appindicator3-dev

// Ubuntu18.04 or Debian10
apt-get install libgtk-3-dev libappindicator3-dev -y

// build easyss client
make easyss

// build easyss server
make easyss-server

用法

客户端

生成配置文件示例:./easyss -show-config-example > config.json

  • server: 服务器域名(必填,必须是域名,不能是IP)
  • server_port: 服务器对应端口(必填)
  • local_port: 本地监听端口(默认2080)
  • password: 通信加密密钥(必填)
  • method: 通信加密方式(默认aes-256-gcm)
  • timeout: 超时时间,单位秒(默认60)
  • bind_all: 是否将监听端口绑定到所有本地IP上(默认false)

其他还有一些参数没有列出,如无必要,无需关心。除了必填的参数,其他都是可选的,甚至可以不要配置文件,全部通过命令行指定即可。

修改完成后, 双击二进制文件,程序会自动启动,托盘会出现easyss的图标,如下:

托盘图标 托盘图标

右键图标可选择代理浏览器和代理系统全局模式。

手机客户端

手机客户端apk文件可直接在release页面下载。

手机客户端是基于SagerNet扩展修改而来,源代码在Matsuri,感谢 bingooo

创建Easyss配置项:点击右上角+图标 -> 手动输入 -> 选择EasySS

服务器端

和客户端一样, 先把二进制和config.json文件放同一目录. 修改config.json文件, 其中server(必须是服务器的域名)、server_port和password必填, 执行:

# 需sudo权限
./easyss-server

注意:服务器的443端口必须对外可访问,用于TLS校验使用。

docker部署

docker run -d --name easyss --network host nange/docker-easyss:latest -p yourport -k yourpassword -s yourdomain.com

LICENSE

MIT License

Documentation

Index

Constants

View Source
const (
	ESTABLISHED state = iota
	FIN_WAIT1
	FIN_WAIT2
	LAST_ACK
	CLOSING
	CLOSE_WAIT
	TIME_WAIT
	CLOSED
)
View Source
const (
	MaxUDPDataSize   = 65507
	DefaultDNSServer = "8.8.8.8:53"
)
View Source
const (
	TunDevice       = "tun-easyss"
	TunDeviceDarwin = "utun9"
	TunIP           = "198.18.0.1"
	TunGW           = "198.18.0.1"
	TunMask         = "255.255.0.0"
	TunIPSub        = "198.18.0.1/16"
)
View Source
const DefaultDirectDNSServer = "119.29.29.29:53"
View Source
const DefaultUDPTimeout = 10 * time.Second
View Source
const DirectSuffix = "direct"

Variables

View Source
var T2SSStringToType = map[string]Tun2socksStatus{
	"off":  Tun2socksStatusOff,
	"auto": Tun2socksStatusAuto,
	"on":   Tun2socksStatusOn,
}
View Source
var T2SSTypeToString = map[Tun2socksStatus]string{
	Tun2socksStatusOff:  "off",
	Tun2socksStatusAuto: "auto",
	Tun2socksStatusOn:   "on",
}

Functions

func Daemon

func Daemon(godaemon bool)

func DecodeCipherMethod

func DecodeCipherMethod(b byte) string

func EncodeCipherMethod

func EncodeCipherMethod(m string) byte

func ExampleJSONConfig added in v1.4.0

func ExampleJSONConfig() string

func NewDNSForwardServer added in v1.5.0

func NewDNSForwardServer() *dns.Server

func PrintVersion

func PrintVersion()

func UpdateConfig

func UpdateConfig(old, ne *Config)

Types

type Config

type Config struct {
	Server           string `json:"server"`
	ServerPort       int    `json:"server_port"`
	LocalPort        int    `json:"local_port"`
	Password         string `json:"password"`
	Method           string `json:"method"` // encryption method
	Timeout          int    `json:"timeout"`
	BindALL          bool   `json:"bind_all"`
	DisableUTLS      bool   `json:"disable_utls"`
	EnableForwardDNS bool   `json:"enable_forward_dns"`
	Tun2socksModel   string `json:"tun2socks_model"`
	ConfigFile       string `json:"-"`
}

func ParseConfig

func ParseConfig(path string) (config *Config, err error)

type ConnState

type ConnState struct {
	// contains filtered or unexported fields
}

func NewConnState

func NewConnState(s state, buf []byte) *ConnState

func (*ConnState) CloseWait

func (cs *ConnState) CloseWait(conn io.ReadWriteCloser) *ConnState

func (*ConnState) Closed

func (cs *ConnState) Closed(conn io.ReadWriteCloser) *ConnState

func (*ConnState) Closing

func (cs *ConnState) Closing(conn io.ReadWriteCloser) *ConnState

func (*ConnState) FINWait1

func (cs *ConnState) FINWait1(conn io.ReadWriteCloser) *ConnState

func (*ConnState) FINWait2

func (cs *ConnState) FINWait2(conn io.ReadWriteCloser) *ConnState

func (*ConnState) LastACK

func (cs *ConnState) LastACK(conn io.ReadWriteCloser) *ConnState

func (*ConnState) TimeWait

func (cs *ConnState) TimeWait(conn io.ReadWriteCloser) *ConnState

type ConnStateFn

type ConnStateFn func(conn io.ReadWriteCloser) *ConnState

type DirectUDPExchange added in v1.5.0

type DirectUDPExchange struct {
	ClientAddr *net.UDPAddr
	RemoteConn net.PacketConn
}

DirectUDPExchange used to store client address and remote connection

type Easyss

type Easyss struct {
	// contains filtered or unexported fields
}

func New

func New(config *Config) (*Easyss, error)

func (*Easyss) BindAll added in v1.3.0

func (ss *Easyss) BindAll() bool

func (*Easyss) Close

func (ss *Easyss) Close()

func (*Easyss) CloseTun2socks added in v1.5.0

func (ss *Easyss) CloseTun2socks() error

func (*Easyss) ConfigFilename added in v1.4.0

func (ss *Easyss) ConfigFilename() string

func (*Easyss) CreateTun2socks added in v1.5.0

func (ss *Easyss) CreateTun2socks(status Tun2socksStatus) error

func (*Easyss) DNSCache added in v1.5.0

func (ss *Easyss) DNSCache(name, qtype string, isDirect bool) *dns.Msg

func (*Easyss) DisableUTLS added in v1.5.0

func (ss *Easyss) DisableUTLS() bool

func (*Easyss) EnableForwardDNS added in v1.5.0

func (ss *Easyss) EnableForwardDNS() bool

func (*Easyss) HostAtCNOrPrivate added in v1.5.0

func (ss *Easyss) HostAtCNOrPrivate(host string) bool

func (*Easyss) IPAtCNOrPrivate added in v1.5.0

func (ss *Easyss) IPAtCNOrPrivate(ip string) bool

func (*Easyss) InitTcpPool

func (ss *Easyss) InitTcpPool() error

func (*Easyss) LocalAddr added in v1.1.0

func (ss *Easyss) LocalAddr() string

func (*Easyss) LocalDNSForward added in v1.5.0

func (ss *Easyss) LocalDNSForward() error

func (*Easyss) LocalDevice added in v1.5.0

func (ss *Easyss) LocalDevice() string

func (*Easyss) LocalDeviceIndex added in v1.5.0

func (ss *Easyss) LocalDeviceIndex() int

func (*Easyss) LocalGateway added in v1.5.0

func (ss *Easyss) LocalGateway() string

func (*Easyss) LocalHttp added in v1.4.0

func (ss *Easyss) LocalHttp() error

func (*Easyss) LocalHttpProxyPort added in v1.4.0

func (ss *Easyss) LocalHttpProxyPort() int

func (*Easyss) LocalPacPort added in v1.4.0

func (ss *Easyss) LocalPacPort() int

func (*Easyss) LocalPort

func (ss *Easyss) LocalPort() int

func (*Easyss) LocalSocks5 added in v1.4.0

func (ss *Easyss) LocalSocks5() error

func (*Easyss) Method added in v1.4.0

func (ss *Easyss) Method() string

func (*Easyss) Password added in v1.4.0

func (ss *Easyss) Password() string

func (*Easyss) Pool added in v1.4.0

func (ss *Easyss) Pool() easypool.Pool

func (*Easyss) Remote

func (ss *Easyss) Remote()

func (*Easyss) RenewDNSCache added in v1.5.0

func (ss *Easyss) RenewDNSCache(name, qtype string, isDirect bool)

func (*Easyss) Server added in v1.4.0

func (ss *Easyss) Server() string

func (*Easyss) ServerAddr added in v1.5.0

func (ss *Easyss) ServerAddr() string

func (*Easyss) ServerDNSMsg added in v1.5.0

func (ss *Easyss) ServerDNSMsg() (*dns.Msg, error)

func (*Easyss) ServerIP added in v1.5.0

func (ss *Easyss) ServerIP() string

func (*Easyss) ServerPort

func (ss *Easyss) ServerPort() int

func (*Easyss) SetDNSCache added in v1.5.0

func (ss *Easyss) SetDNSCache(msg *dns.Msg, noExpire, isDirect bool) error

func (*Easyss) SetDNSCacheIfNeeded added in v1.5.0

func (ss *Easyss) SetDNSCacheIfNeeded(udpResp []byte, isDirect bool)

func (*Easyss) SetForwardDNSServer added in v1.5.0

func (ss *Easyss) SetForwardDNSServer(server *dns.Server)

func (*Easyss) SetHttpProxyServer added in v1.4.0

func (ss *Easyss) SetHttpProxyServer(server *http.Server)

func (*Easyss) SetPool added in v1.4.0

func (ss *Easyss) SetPool(pool easypool.Pool)

func (*Easyss) SetSocksServer added in v1.4.0

func (ss *Easyss) SetSocksServer(server *socks5.Server)

func (*Easyss) SetTun2socksStatus added in v1.5.0

func (ss *Easyss) SetTun2socksStatus(status Tun2socksStatus)

func (*Easyss) Socks5ProxyAddr added in v1.5.0

func (ss *Easyss) Socks5ProxyAddr() string

func (*Easyss) TCPHandle added in v1.1.0

func (ss *Easyss) TCPHandle(s *socks5.Server, conn *net.TCPConn, r *socks5.Request) error

func (*Easyss) Timeout added in v1.4.0

func (ss *Easyss) Timeout() time.Duration

func (*Easyss) Tun2socksModelFromConfig added in v1.5.0

func (ss *Easyss) Tun2socksModelFromConfig() string

func (*Easyss) Tun2socksStatus added in v1.5.0

func (ss *Easyss) Tun2socksStatus() Tun2socksStatus

func (*Easyss) Tun2socksStatusAuto added in v1.5.0

func (ss *Easyss) Tun2socksStatusAuto() bool

func (*Easyss) Tun2socksStatusOff added in v1.5.0

func (ss *Easyss) Tun2socksStatusOff() bool

func (*Easyss) Tun2socksStatusOn added in v1.5.0

func (ss *Easyss) Tun2socksStatusOn() bool

func (*Easyss) UDPHandle added in v1.1.0

func (ss *Easyss) UDPHandle(s *socks5.Server, addr *net.UDPAddr, d *socks5.Datagram) error

type GeoSite added in v1.5.0

type GeoSite struct {
	// contains filtered or unexported fields
}

func NewGeoSite added in v1.5.0

func NewGeoSite(data []byte) *GeoSite

func (*GeoSite) SiteAtCN added in v1.5.0

func (gs *GeoSite) SiteAtCN(domain string) bool

type Statistics added in v1.1.0

type Statistics struct {
	BytesSend    atomic.Int64
	BytesReceive atomic.Int64
}

type Tun2socksStatus added in v1.5.0

type Tun2socksStatus int
const (
	Tun2socksStatusOff Tun2socksStatus = iota
	Tun2socksStatusAuto
	Tun2socksStatusOn
)

func (Tun2socksStatus) String added in v1.5.0

func (t2ss Tun2socksStatus) String() string

type UDPExchange added in v1.5.0

type UDPExchange struct {
	ClientAddr *net.UDPAddr
	RemoteConn net.Conn
}

UDPExchange used to store client address and remote connection

Directories

Path Synopsis
cmd

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL