diff --git a/.gitignore b/.gitignore index 1b2fa0e..370b4de 100644 --- a/.gitignore +++ b/.gitignore @@ -17,6 +17,10 @@ # custom .idea .vscode + +dist +.goreleaser.yml + *.zip /*.conf /*.rule diff --git a/.travis.yml b/.travis.yml index 15fc6d5..49f08d3 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,5 +1,5 @@ language: go go: - - "1.12.x" + # - "1.12.x" - master diff --git a/dns/client.go b/dns/client.go index 7a97b4c..401b28c 100644 --- a/dns/client.go +++ b/dns/client.go @@ -277,7 +277,7 @@ func (c *Client) GenResponse(domain string, ip string) (*Message, error) { m := NewMessage(0, Response) m.SetQuestion(NewQuestion(qtype, domain)) rr := &RR{NAME: domain, TYPE: qtype, CLASS: ClassINET, - RDLENGTH: rdlen, RDATA: rdata} + TTL: uint32(c.config.MinTTL), RDLENGTH: rdlen, RDATA: rdata} m.AddAnswer(rr) return m, nil diff --git a/go.mod b/go.mod index 83b4318..4b35d62 100644 --- a/go.mod +++ b/go.mod @@ -3,22 +3,30 @@ module github.com/nadoo/glider go 1.12 require ( - github.com/Yawning/chacha20 v0.0.0-20170904085104-e3b1f968fc63 - github.com/aead/chacha20 v0.0.0-20180709150244-8b13a72661da - github.com/dgryski/go-camellia v0.0.0-20140412174459-3be6b3054dd1 - github.com/dgryski/go-idea v0.0.0-20170306091226-d2fb45a411fb - github.com/dgryski/go-rc2 v0.0.0-20150621095337-8a9021637152 - github.com/klauspost/cpuid v0.0.0-20181111194502-c640019ed4bd - github.com/klauspost/reedsolomon v1.7.0 - github.com/nadoo/conflag v0.0.0-20170825123151-42f66d5216f8 - github.com/nadoo/go-shadowsocks2 v0.0.0-20181124095303-ae1cb5e900ea - github.com/pkg/errors v0.0.0-20181023235946-059132a15dd0 + github.com/Yawning/chacha20 v0.0.0-20170904085104-e3b1f968fc63 // indirect + github.com/aead/chacha20 v0.0.0-20180709150244-8b13a72661da // indirect + github.com/dgryski/go-camellia v0.0.0-20140412174459-3be6b3054dd1 // indirect + github.com/dgryski/go-idea v0.0.0-20170306091226-d2fb45a411fb // indirect + github.com/dgryski/go-rc2 v0.0.0-20150621095337-8a9021637152 // indirect + github.com/ebfe/rc2 v0.0.0-20131011165748-24b9757f5521 // indirect + github.com/klauspost/cpuid v1.2.0 // indirect + github.com/klauspost/reedsolomon v1.8.0 // indirect + github.com/nadoo/conflag v0.1.0 + github.com/nadoo/go-shadowsocks2 v0.1.0 + github.com/pkg/errors v0.8.1 // indirect github.com/sun8911879/shadowsocksR v0.0.0-20180529042039-da20fda4804f - github.com/templexxx/cpufeat v0.0.0-20180724012125-cef66df7f161 - github.com/templexxx/xor v0.0.0-20181023030647-4e92f724b73b - github.com/tjfoc/gmsm v0.0.0-20180808033842-0b26aafa7604 - github.com/xtaci/kcp-go v4.3.2+incompatible - golang.org/x/crypto v0.0.0-20181127143415-eb0de9b17e85 - golang.org/x/net v0.0.0-20181129055619-fae4c4e3ad76 - golang.org/x/sys v0.0.0-20180831094639-fa5fdf94c789 + github.com/templexxx/cpufeat v0.0.0-20180724012125-cef66df7f161 // indirect + github.com/templexxx/xor v0.0.0-20181023030647-4e92f724b73b // indirect + github.com/tjfoc/gmsm v1.0.1 // indirect + github.com/xtaci/kcp-go v5.0.4+incompatible + golang.org/x/crypto v0.0.0-20190103213133-ff983b9c42bc + golang.org/x/net v0.0.0-20181220203305-927f97764cc3 // indirect + golang.org/x/sys v0.0.0-20190105165716-badf5585203e // indirect ) + +// Replace dependency modules with local developing copy +// use `go list -m all` to confirm the final module used +// replace ( +// github.com/nadoo/conflag => ../conflag +// github.com/nadoo/go-shadowsocks2 => ../go-shadowsocks2 +// ) diff --git a/go.sum b/go.sum index 60c49a2..55d999c 100644 --- a/go.sum +++ b/go.sum @@ -8,29 +8,47 @@ github.com/dgryski/go-idea v0.0.0-20170306091226-d2fb45a411fb h1:zXpN5126w/mhECT github.com/dgryski/go-idea v0.0.0-20170306091226-d2fb45a411fb/go.mod h1:F7WkpqJj9t98ePxB/WJGQTIDeOVPuSJ3qdn6JUjg170= github.com/dgryski/go-rc2 v0.0.0-20150621095337-8a9021637152 h1:ED31mPIxDJnrLt9W9dH5xgd/6KjzEACKHBVGQ33czc0= github.com/dgryski/go-rc2 v0.0.0-20150621095337-8a9021637152/go.mod h1:I9fhc/EvSg88cDxmfQ47v35Ssz9rlFunL/KY0A1JAYI= -github.com/klauspost/cpuid v0.0.0-20181111194502-c640019ed4bd h1:XiWcNooqIW6d6JFGhzdK+Ay8Rmh5YIN+a6JTKpZ6g40= -github.com/klauspost/cpuid v0.0.0-20181111194502-c640019ed4bd/go.mod h1:Pj4uuM528wm8OyEC2QMXAi2YiTZ96dNQPGgoMS4s3ek= -github.com/klauspost/reedsolomon v1.7.0 h1:pLFmRKGko2ZieiTGyo9DahLCIuljyxm+Zzhz/fYEonE= -github.com/klauspost/reedsolomon v1.7.0/go.mod h1:CwCi+NUr9pqSVktrkN+Ondf06rkhYZ/pcNv7fu+8Un4= -github.com/nadoo/conflag v0.0.0-20170825123151-42f66d5216f8 h1:mm9oZNuKp36fi2PNxWnBw/EgXoP46kVqGxo8nxgBfP8= -github.com/nadoo/conflag v0.0.0-20170825123151-42f66d5216f8/go.mod h1:C3xchp3tIA3J2haACChSHFrlih7w00f31DXfjVUQa+0= -github.com/nadoo/go-shadowsocks2 v0.0.0-20181124095303-ae1cb5e900ea h1:+9ALR2emLaoneTHPScsv0D/d2AwENm2mZSAKWHgsXYI= -github.com/nadoo/go-shadowsocks2 v0.0.0-20181124095303-ae1cb5e900ea/go.mod h1:J0B/QoRZtqUwE9BJqkP3F3M5+N8t+b5fXeNrkUarveM= -github.com/pkg/errors v0.0.0-20181023235946-059132a15dd0 h1:R+lX9nKwNd1n7UE5SQAyoorREvRn3aLF6ZndXBoIWqY= -github.com/pkg/errors v0.0.0-20181023235946-059132a15dd0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= +github.com/ebfe/rc2 v0.0.0-20131011165748-24b9757f5521 h1:fBHFH+Y/GPGFGo7LIrErQc3p2MeAhoIQNgaxPWYsSxk= +github.com/ebfe/rc2 v0.0.0-20131011165748-24b9757f5521/go.mod h1:ucvhdsUCE3TH0LoLRb6ShHiJl8e39dGlx6A4g/ujlow= +github.com/klauspost/cpuid v1.2.0 h1:NMpwD2G9JSFOE1/TJjGSo5zG7Yb2bTe7eq1jH+irmeE= +github.com/klauspost/cpuid v1.2.0/go.mod h1:Pj4uuM528wm8OyEC2QMXAi2YiTZ96dNQPGgoMS4s3ek= +github.com/klauspost/reedsolomon v1.8.0 h1:lvvOkvk64cE1EGbBIgFk7WSOOsI1GexpuLiT7zjab6g= +github.com/klauspost/reedsolomon v1.8.0/go.mod h1:CwCi+NUr9pqSVktrkN+Ondf06rkhYZ/pcNv7fu+8Un4= +github.com/nadoo/conflag v0.1.0 h1:m9xSrL0UILGXPCZW66mhW57V2D2IraVpWLNIr2Op8X8= +github.com/nadoo/conflag v0.1.0/go.mod h1:C3xchp3tIA3J2haACChSHFrlih7w00f31DXfjVUQa+0= +github.com/nadoo/go-shadowsocks2 v0.1.0 h1:NkdUrZrI8uYq8R0YDmHLttLqKt0Z9i7dUKtGvBqZQl8= +github.com/nadoo/go-shadowsocks2 v0.1.0/go.mod h1:J0B/QoRZtqUwE9BJqkP3F3M5+N8t+b5fXeNrkUarveM= +github.com/pkg/errors v0.8.0 h1:WdK/asTD0HN+q6hsWO3/vpuAkAr+tw6aNJNDFFf0+qw= +github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= +github.com/pkg/errors v0.8.1 h1:iURUrRGxPUNPdy5/HRSm+Yj6okJ6UtLINN0Q9M4+h3I= +github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/sun8911879/shadowsocksR v0.0.0-20180529042039-da20fda4804f h1:66c28UIO0JbJi5he9n+QN9Ya0OAW0eKb8Eu02kMSXHI= github.com/sun8911879/shadowsocksR v0.0.0-20180529042039-da20fda4804f/go.mod h1:uEm3LP/z9l1+zfo2FTzUvWnxua7rbrUoGAMiLaHdujk= github.com/templexxx/cpufeat v0.0.0-20180724012125-cef66df7f161 h1:89CEmDvlq/F7SJEOqkIdNDGJXrQIhuIx9D2DBXjavSU= github.com/templexxx/cpufeat v0.0.0-20180724012125-cef66df7f161/go.mod h1:wM7WEvslTq+iOEAMDLSzhVuOt5BRZ05WirO+b09GHQU= github.com/templexxx/xor v0.0.0-20181023030647-4e92f724b73b h1:mnG1fcsIB1d/3vbkBak2MM0u+vhGhlQwpeimUi7QncM= github.com/templexxx/xor v0.0.0-20181023030647-4e92f724b73b/go.mod h1:5XA7W9S6mni3h5uvOC75dA3m9CCCaS83lltmc0ukdi4= -github.com/tjfoc/gmsm v0.0.0-20180808033842-0b26aafa7604 h1:K9bfwsgZmSD1XbdiOqn4gVdq3I2ej4+rCLNJH2gc8aM= -github.com/tjfoc/gmsm v0.0.0-20180808033842-0b26aafa7604/go.mod h1:XxO4hdhhrzAd+G4CjDqaOkd0hUzmtPR/d3EiBBMn/wc= +github.com/tjfoc/gmsm v1.0.1 h1:R11HlqhXkDospckjZEihx9SW/2VW0RgdwrykyWMFOQU= +github.com/tjfoc/gmsm v1.0.1/go.mod h1:XxO4hdhhrzAd+G4CjDqaOkd0hUzmtPR/d3EiBBMn/wc= github.com/xtaci/kcp-go v4.3.2+incompatible h1:vM5gqHI8p5xa3eXQH279+16fG86gCz/IRamaQvWG+a8= github.com/xtaci/kcp-go v4.3.2+incompatible/go.mod h1:bN6vIwHQbfHaHtFpEssmWsN45a+AZwO7eyRCmEIbtvE= -golang.org/x/crypto v0.0.0-20181127143415-eb0de9b17e85 h1:et7+NAX3lLIk5qUCTA9QelBjGE/NkhzYw/mhnr0s7nI= -golang.org/x/crypto v0.0.0-20181127143415-eb0de9b17e85/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= -golang.org/x/net v0.0.0-20181129055619-fae4c4e3ad76 h1:xx5MUFyRQRbPk6VjWjIE1epE/K5AoDD8QUN116NCy8k= -golang.org/x/net v0.0.0-20181129055619-fae4c4e3ad76/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/sys v0.0.0-20180831094639-fa5fdf94c789 h1:T8D7l6WB3tLu+VpKvw06ieD/OhBi1XpJmG1U/FtttZg= -golang.org/x/sys v0.0.0-20180831094639-fa5fdf94c789/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +github.com/xtaci/kcp-go v5.0.2+incompatible h1:Nj5VlOVO2gQ+QWgItWA2yP8X+SGxdV3SD8wCDjlmVA4= +github.com/xtaci/kcp-go v5.0.2+incompatible/go.mod h1:bN6vIwHQbfHaHtFpEssmWsN45a+AZwO7eyRCmEIbtvE= +github.com/xtaci/kcp-go v5.0.4+incompatible h1:zCX9MJxfJcfynNsUdyZnq8mbJVBNvuaZaf47mqd45Mk= +github.com/xtaci/kcp-go v5.0.4+incompatible/go.mod h1:bN6vIwHQbfHaHtFpEssmWsN45a+AZwO7eyRCmEIbtvE= +golang.org/x/crypto v0.0.0-20181203042331-505ab145d0a9 h1:mKdxBk7AujPs8kU4m80U72y/zjbZ3UcXC7dClwKbUI0= +golang.org/x/crypto v0.0.0-20181203042331-505ab145d0a9/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= +golang.org/x/crypto v0.0.0-20190102171810-8d7daa0c54b3 h1:35ZwriXqdZtBGoFgUpW71Z7xz5o23fRpWHFAO2PlnIA= +golang.org/x/crypto v0.0.0-20190102171810-8d7daa0c54b3/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= +golang.org/x/crypto v0.0.0-20190103213133-ff983b9c42bc h1:F5tKCVGp+MUAHhKp5MZtGqAlGX3+oCsiL1Q629FL90M= +golang.org/x/crypto v0.0.0-20190103213133-ff983b9c42bc/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= +golang.org/x/net v0.0.0-20181217023233-e147a9138326 h1:iCzOf0xz39Tstp+Tu/WwyGjUXCk34QhQORRxBeXXTA4= +golang.org/x/net v0.0.0-20181217023233-e147a9138326/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20181220203305-927f97764cc3 h1:eH6Eip3UpmR+yM/qI9Ijluzb1bNv/cAU/n+6l8tRSis= +golang.org/x/net v0.0.0-20181220203305-927f97764cc3/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/sys v0.0.0-20181218192612-074acd46bca6 h1:MXtOG7w2ND9qNCUZSDBGll/SpVIq7ftozR9I8/JGBHY= +golang.org/x/sys v0.0.0-20181218192612-074acd46bca6/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20190102155601-82a175fd1598 h1:S8GOgffXV1X3fpVG442QRfWOt0iFl79eHJ7OPt725bo= +golang.org/x/sys v0.0.0-20190102155601-82a175fd1598/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20190105165716-badf5585203e h1:34JZ+d5RsKTBgJnMpK4m6gzXRZ6H99pKveztnOI3+JA= +golang.org/x/sys v0.0.0-20190105165716-badf5585203e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= diff --git a/main.go b/main.go index 5873099..cfee7c9 100644 --- a/main.go +++ b/main.go @@ -29,7 +29,7 @@ import ( ) // VERSION . -const VERSION = "0.6.11" +const VERSION = "0.7.0" func main() { // read configs diff --git a/proxy/vmess/client.go b/proxy/vmess/client.go index 5bad7d7..0901a9b 100644 --- a/proxy/vmess/client.go +++ b/proxy/vmess/client.go @@ -127,14 +127,20 @@ func (c *Client) NewConn(rc net.Conn, target string) (*Conn, error) { conn.respBodyKey = md5.Sum(conn.reqBodyKey[:]) // AuthInfo - rc.Write(conn.EncodeAuthInfo()) - + _, err = rc.Write(conn.EncodeAuthInfo()) + if err != nil { + return nil, err + } // Request req, err := conn.EncodeRequest() if err != nil { return nil, err } - rc.Write(req) + + _, err = rc.Write(req) + if err != nil { + return nil, err + } conn.Conn = rc @@ -172,9 +178,13 @@ func (c *Conn) EncodeRequest() ([]byte, error) { buf.WriteByte(CmdTCP) // cmd // target - binary.Write(buf, binary.BigEndian, uint16(c.port)) // port - buf.WriteByte(byte(c.atyp)) // atyp - buf.Write(c.addr) // addr + err := binary.Write(buf, binary.BigEndian, uint16(c.port)) // port + if err != nil { + return nil, err + } + + buf.WriteByte(byte(c.atyp)) // atyp + buf.Write(c.addr) // addr // padding if paddingLen > 0 { @@ -185,7 +195,10 @@ func (c *Conn) EncodeRequest() ([]byte, error) { // F fnv1a := fnv.New32a() - fnv1a.Write(buf.Bytes()) + _, err = fnv1a.Write(buf.Bytes()) + if err != nil { + return nil, err + } buf.Write(fnv1a.Sum(nil)) block, err := aes.NewCipher(c.user.CmdKey[:]) diff --git a/systemd/README.md b/systemd/README.md index cd5fd61..f1ee49e 100644 --- a/systemd/README.md +++ b/systemd/README.md @@ -32,41 +32,3 @@ systemctl start glider@server ``` See [glider@.service](glider%40.service) - -### Open file limit - -#### 1. setup system limit - -vim /etc/security/limits.d/unlimited.conf - -```bash -* soft nofile unlimited -* hard nofile unlimited -* soft nproc unlimited -* hard nproc unlimited -``` - -#### 2. change **systemd** limit - -```bash -echo DefaultLimitNOFILE=102400 >> /etc/systemd/system.conf -echo DefaultLimitNOFILE=102400 >> /etc/systemd/user.conf -``` - -#### 3. reexec **systemd** - -```bash -systemctl daemon-reexec -``` - -#### 4. restart glider service - -```bash -systemctl restart glider@server -``` - -#### 5. check the limits of PID - -```bash -cat /proc/PID/limits -``` diff --git a/systemd/glider@.service b/systemd/glider@.service index ea8f6a2..ae6ef46 100644 --- a/systemd/glider@.service +++ b/systemd/glider@.service @@ -6,6 +6,7 @@ After=network.target iptables.service ip6tables.service Type=simple User=nobody Restart=always +LimitNOFILE=102400 # NOTE: change to your glider path ExecStart=/usr/bin/glider -config /etc/glider/%i.conf