Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Sign in / Register
Toggle navigation
G
gost
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Locked Files
Issues
0
Issues
0
List
Boards
Labels
Service Desk
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Security & Compliance
Security & Compliance
Dependency List
License Compliance
Packages
Packages
List
Container Registry
Analytics
Analytics
CI / CD
Code Review
Insights
Issues
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
nanahira
gost
Commits
b9e61dca
Commit
b9e61dca
authored
Aug 18, 2022
by
ginuerzh
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
go1.19
parent
3322613d
Changes
9
Show whitespace changes
Inline
Side-by-side
Showing
9 changed files
with
146 additions
and
176 deletions
+146
-176
Dockerfile
Dockerfile
+1
-1
Makefile
Makefile
+9
-1
cmd/gost/route.go
cmd/gost/route.go
+12
-0
go.mod
go.mod
+15
-13
go.sum
go.sum
+27
-33
gost.go
gost.go
+1
-1
quic.go
quic.go
+45
-75
snap/snapcraft.yaml
snap/snapcraft.yaml
+1
-1
tuntap_linux.go
tuntap_linux.go
+35
-51
No files found.
Dockerfile
View file @
b9e61dca
FROM
--platform=$BUILDPLATFORM golang:1.1
8
-alpine as builder
FROM
--platform=$BUILDPLATFORM golang:1.1
9
-alpine as builder
# Convert TARGETPLATFORM to GOARCH format
# https://github.com/tonistiigi/xx
...
...
Makefile
View file @
b9e61dca
...
...
@@ -20,12 +20,14 @@ PLATFORM_LIST = \
linux-mips64
\
linux-mips64le
\
linux-s390x
\
linux-riscv64
\
freebsd-386
\
freebsd-amd64
WINDOWS_ARCH_LIST
=
\
windows-386
\
windows-amd64
windows-amd64
\
windows-arm64
all
:
linux-amd64 darwin-amd64 windows-amd64
#
Most used
...
...
@@ -74,6 +76,9 @@ linux-mips64le:
linux-s390x
:
GOARCH
=
s390x
GOOS
=
linux
$(GOBUILD)
-o
$(BINDIR)
/
$(NAME)
-
$@
$(GOFILES)
linux-riscv64
:
GOARCH
=
riscv64
GOOS
=
linux
$(GOBUILD)
-o
$(BINDIR)
/
$(NAME)
-
$@
$(GOFILES)
freebsd-386
:
GOARCH
=
386
GOOS
=
freebsd
$(GOBUILD)
-o
$(BINDIR)
/
$(NAME)
-
$@
$(GOFILES)
...
...
@@ -86,6 +91,9 @@ windows-386:
windows-amd64
:
GOARCH
=
amd64
GOOS
=
windows
$(GOBUILD)
-o
$(BINDIR)
/
$(NAME)
-
$@
.exe
$(GOFILES)
windows-arm64
:
GOARCH
=
arm64
GOOS
=
windows
$(GOBUILD)
-o
$(BINDIR)
/
$(NAME)
-
$@
.exe
$(GOFILES)
gz_releases
=
$(
addsuffix
.gz,
$(PLATFORM_LIST)
)
zip_releases
=
$(
addsuffix
.zip,
$(WINDOWS_ARCH_LIST)
)
...
...
cmd/gost/route.go
View file @
b9e61dca
...
...
@@ -212,6 +212,12 @@ func parseChainNode(ns string) (nodes []gost.Node, err error) {
Timeout
:
timeout
,
IdleTimeout
:
node
.
GetDuration
(
"idle"
),
}
if
config
.
KeepAlive
{
config
.
KeepAlivePeriod
=
node
.
GetDuration
(
"ttl"
)
if
config
.
KeepAlivePeriod
==
0
{
config
.
KeepAlivePeriod
=
10
*
time
.
Second
}
}
if
cipher
:=
node
.
Get
(
"cipher"
);
cipher
!=
""
{
sum
:=
sha256
.
Sum256
([]
byte
(
cipher
))
...
...
@@ -458,6 +464,12 @@ func (r *route) GenRouters() ([]router, error) {
Timeout
:
timeout
,
IdleTimeout
:
node
.
GetDuration
(
"idle"
),
}
if
config
.
KeepAlive
{
config
.
KeepAlivePeriod
=
node
.
GetDuration
(
"ttl"
)
if
config
.
KeepAlivePeriod
==
0
{
config
.
KeepAlivePeriod
=
10
*
time
.
Second
}
}
if
cipher
:=
node
.
Get
(
"cipher"
);
cipher
!=
""
{
sum
:=
sha256
.
Sum256
([]
byte
(
cipher
))
config
.
Key
=
sum
[
:
]
...
...
go.mod
View file @
b9e61dca
module github.com/ginuerzh/gost
go 1.17
go 1.18
replace github.com/templexxx/cpu v0.0.7 => github.com/templexxx/cpu v0.0.10-0.20211111114238-98168dcec14a
require (
git.torproject.org/pluggable-transports/goptlib.git v1.2.0
github.com/LiamHaworth/go-tproxy v0.0.0-20190726054950-ef7efd7f24ed
github.com/asaskevich/govalidator v0.0.0-20210307081110-f21760c49a8d
github.com/docker/libcontainer v2.2.1+incompatible
github.com/go-gost/gosocks4 v0.0.1
github.com/go-gost/gosocks5 v0.3.0
github.com/go-gost/relay v0.1.1-0.20211123134818-8ef7fd81ffd7
...
...
@@ -15,9 +16,8 @@ require (
github.com/gobwas/glob v0.2.3
github.com/gorilla/websocket v1.4.2
github.com/klauspost/compress v1.13.6
github.com/lucas-clemente/quic-go v0.2
6.0
github.com/lucas-clemente/quic-go v0.2
8.1
github.com/miekg/dns v1.1.47
github.com/milosgajdos/tenus v0.0.3
github.com/ryanuber/go-glob v1.0.0
github.com/shadowsocks/go-shadowsocks2 v0.1.5
github.com/shadowsocks/shadowsocks-go v0.0.0-20200409064450-3e585ff90601
...
...
@@ -26,23 +26,25 @@ require (
github.com/xtaci/smux v1.5.16
github.com/xtaci/tcpraw v1.2.25
gitlab.com/yawning/obfs4.git v0.0.0-20220204003609-77af0cba934d
golang.org/x/crypto v0.0.0-20220
321153916-2c7772ba3064
golang.org/x/net v0.0.0-20220
325170049-de3da57026de
golang.org/x/crypto v0.0.0-20220
817201139-bc19a97f63c8
golang.org/x/net v0.0.0-20220
812174116-3211cb980234
)
require (
filippo.io/edwards25519 v1.0.0-rc.1.0.20210721174708-390f27c3be20 // indirect
github.com/aead/chacha20 v0.0.0-20180709150244-8b13a72661da // indirect
github.com/cheekybits/genny v1.0.0 // indirect
github.com/coreos/go-iptables v0.6.0 // indirect
github.com/dchest/siphash v1.2.2 // indirect
github.com/fsnotify/fsnotify v1.5.
1
// indirect
github.com/fsnotify/fsnotify v1.5.
4
// indirect
github.com/go-task/slim-sprig v0.0.0-20210107165309-348f09dbbbc0 // indirect
github.com/google/gopacket v1.1.19 // indirect
github.com/klauspost/cpuid/v2 v2.0.9 // indirect
github.com/klauspost/reedsolomon v1.9.15 // indirect
github.com/marten-seemann/qtls-go1-16 v0.1.5 // indirect
github.com/marten-seemann/qtls-go1-17 v0.1.1 // indirect
github.com/marten-seemann/qtls-go1-18 v0.1.1 // indirect
github.com/marten-seemann/qtls-go1-17 v0.1.2 // indirect
github.com/marten-seemann/qtls-go1-18 v0.1.2 // indirect
github.com/marten-seemann/qtls-go1-19 v0.1.0 // indirect
github.com/nxadm/tail v1.4.8 // indirect
github.com/onsi/ginkgo v1.16.5 // indirect
github.com/pkg/errors v0.9.1 // indirect
...
...
@@ -51,10 +53,10 @@ require (
github.com/templexxx/xorsimd v0.4.1 // indirect
github.com/tjfoc/gmsm v1.4.1 // indirect
github.com/xtaci/lossyconn v0.0.0-20200209145036-adba10fffc37 // indirect
golang.org/x/mod v0.6.0-dev.0.20220106191415-9b9b3d81d5e3 // indirect
golang.org/x/sys v0.0.0-20220325203850-36772127a21f // indirect
gitlab.com/yawning/edwards25519-extra.git v0.0.0-20211229043746-2f91fcc9fbdb // indirect
golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4 // indirect
golang.org/x/sys v0.0.0-20220817070843-5a390386f1f2 // indirect
golang.org/x/text v0.3.7 // indirect
golang.org/x/tools v0.1.10 // indirect
golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1 // indirect
golang.org/x/tools v0.1.12 // indirect
gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 // indirect
)
go.sum
View file @
b9e61dca
...
...
@@ -37,8 +37,6 @@ github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSs
github.com/dchest/siphash v1.2.1/go.mod h1:q+IRvb2gOSrUnYoPqHiyHXS0FOBBOdl6tONBlVnOnt4=
github.com/dchest/siphash v1.2.2 h1:9DFz8tQwl9pTVt5iok/9zKyzA1Q6bRGiF3HPiEEVr9I=
github.com/dchest/siphash v1.2.2/go.mod h1:q+IRvb2gOSrUnYoPqHiyHXS0FOBBOdl6tONBlVnOnt4=
github.com/docker/libcontainer v2.2.1+incompatible h1:++SbbkCw+X8vAd4j2gOCzZ2Nn7s2xFALTf7LZKmM1/0=
github.com/docker/libcontainer v2.2.1+incompatible/go.mod h1:osvj61pYsqhNCMLGX31xr7klUBhHb/ZBuXS0o1Fvwbw=
github.com/dustin/go-humanize v1.0.0/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk=
github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4=
github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98=
...
...
@@ -47,8 +45,8 @@ github.com/flynn/go-shlex v0.0.0-20150515145356-3f9db97f8568/go.mod h1:xEzjJPgXI
github.com/francoispqt/gojay v1.2.13/go.mod h1:ehT5mTG4ua4581f1++1WLG0vPdaA9HaiDsoyrBGkyDY=
github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo=
github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ=
github.com/fsnotify/fsnotify v1.5.
1 h1:mZcQUHVQUQWoPXXtuf9yuEXKudkV2sx1E06UadKWpg
I=
github.com/fsnotify/fsnotify v1.5.
1/go.mod h1:T3375wBYaZdLLcVNkcVbzGHY7f1l/uK5T5Ai1i3InK
U=
github.com/fsnotify/fsnotify v1.5.
4 h1:jRbGcIw6P2Meqdwuo0H1p6JVLbL5DHKAKlYndzMwVZ
I=
github.com/fsnotify/fsnotify v1.5.
4/go.mod h1:OVB6XrOHzAwXMpEM7uPOzcehqUV2UqJxmVXmkdnm1b
U=
github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04=
github.com/gliderlabs/ssh v0.1.1/go.mod h1:U7qILu1NlMHj9FlMhZLlkCdDnU1DBEAqr0aevW3Awn0=
github.com/go-errors/errors v1.0.1/go.mod h1:f4zRHt4oKfwPJE5k8C9vpYG+aDHdBFUsgrm6/TyX73Q=
...
...
@@ -114,7 +112,6 @@ github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+o
github.com/klauspost/compress v1.13.6 h1:P76CopJELS0TiO2mebmnzgWaajssP/EszplttgQxcgc=
github.com/klauspost/compress v1.13.6/go.mod h1:/3/Vjq9QcHkK5uEr5lBEmyoZ1iFhe47etQ6QUkpK6sk=
github.com/klauspost/cpuid v1.2.4/go.mod h1:Pj4uuM528wm8OyEC2QMXAi2YiTZ96dNQPGgoMS4s3ek=
github.com/klauspost/cpuid v1.3.1 h1:5JNjFYYQrZeKRJ0734q51WCEEn2huer72Dc7K+R/b6s=
github.com/klauspost/cpuid v1.3.1/go.mod h1:bYW4mA6ZgKPob1/Dlai2LviZJO7KGI3uoWLd42rAQw4=
github.com/klauspost/cpuid/v2 v2.0.6/go.mod h1:FInQzS24/EEf25PyTYn52gqo7WaD8xa0213Md/qVLRg=
github.com/klauspost/cpuid/v2 v2.0.9 h1:lgaqFMSdTdQYdZ04uHyN2d/eKdOMyi2YLSvlQIBFYa4=
...
...
@@ -126,23 +123,24 @@ github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORN
github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ=
github.com/kr/pty v1.1.3/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ=
github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI=
github.com/lucas-clemente/quic-go v0.2
6.0 h1:ALBQXr9UJ8A1LyzvceX4jd9QFsHvlI0RR6BkV16o00A
=
github.com/lucas-clemente/quic-go v0.2
6.0/go.mod h1:AzgQoPda7N+3IqMMMkywBKggIFo2KT6pfnlrQ2QieeI
=
github.com/lucas-clemente/quic-go v0.2
8.1 h1:Uo0lvVxWg5la9gflIF9lwa39ONq85Xq2D91YNEIslzU
=
github.com/lucas-clemente/quic-go v0.2
8.1/go.mod h1:oGz5DKK41cJt5+773+BSO9BXDsREY4HLf7+0odGAPO0
=
github.com/lunixbochs/vtclean v1.0.0/go.mod h1:pHhQNgMf3btfWnGBVipUOjRYhoOsdGqdm/+2c2E2WMI=
github.com/mailru/easyjson v0.0.0-20190312143242-1de009706dbe/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc=
github.com/marten-seemann/qpack v0.2.1/go.mod h1:F7Gl5L1jIgN1D11ucXefiuJS9UMVP2opoCp2jDKb7wc=
github.com/marten-seemann/qtls-go1-16 v0.1.5 h1:o9JrYPPco/Nukd/HpOHMHZoBDXQqoNtUCmny98/1uqQ=
github.com/marten-seemann/qtls-go1-16 v0.1.5/go.mod h1:gNpI2Ol+lRS3WwSOtIUUtRwZEQMXjYK+dQSBFbethAk=
github.com/marten-seemann/qtls-go1-17 v0.1.1 h1:DQjHPq+aOzUeh9/lixAGunn6rIOQyWChPSI4+hgW7jc=
github.com/marten-seemann/qtls-go1-17 v0.1.1/go.mod h1:C2ekUKcDdz9SDWxec1N/MvcXBpaX9l3Nx67XaR84L5s=
github.com/marten-seemann/qtls-go1-18 v0.1.1 h1:qp7p7XXUFL7fpBvSS1sWD+uSqPvzNQK43DH+/qEkj0Y=
github.com/marten-seemann/qtls-go1-18 v0.1.1/go.mod h1:mJttiymBAByA49mhlNZZGrH5u1uXYZJ+RW28Py7f4m4=
github.com/marten-seemann/qtls-go1-17 v0.1.2 h1:JADBlm0LYiVbuSySCHeY863dNkcpMmDR7s0bLKJeYlQ=
github.com/marten-seemann/qtls-go1-17 v0.1.2/go.mod h1:C2ekUKcDdz9SDWxec1N/MvcXBpaX9l3Nx67XaR84L5s=
github.com/marten-seemann/qtls-go1-18 v0.1.2 h1:JH6jmzbduz0ITVQ7ShevK10Av5+jBEKAHMntXmIV7kM=
github.com/marten-seemann/qtls-go1-18 v0.1.2/go.mod h1:mJttiymBAByA49mhlNZZGrH5u1uXYZJ+RW28Py7f4m4=
github.com/marten-seemann/qtls-go1-19 v0.1.0-beta.1/go.mod h1:5HTDWtVudo/WFsHKRNuOhWlbdjrfs5JHrYb0wIJqGpI=
github.com/marten-seemann/qtls-go1-19 v0.1.0 h1:rLFKD/9mp/uq1SYGYuVZhm83wkmU95pK5df3GufyYYU=
github.com/marten-seemann/qtls-go1-19 v0.1.0/go.mod h1:5HTDWtVudo/WFsHKRNuOhWlbdjrfs5JHrYb0wIJqGpI=
github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0=
github.com/microcosm-cc/bluemonday v1.0.1/go.mod h1:hsXNsILzKxV+sX77C5b8FSuKF00vh2OMYv+xgHpAMF4=
github.com/miekg/dns v1.1.47 h1:J9bWiXbqMbnZPcY8Qi2E3EWIBsIm6MZzzJB9VRg5gL8=
github.com/miekg/dns v1.1.47/go.mod h1:e3IlAVfNqAllflbibAZEWOXOQ+Ynzk/dDozDxY7XnME=
github.com/milosgajdos/tenus v0.0.3 h1:jmaJzwaY1DUyYVD0lM4U+uvP2kkEg1VahDqRFxIkVBE=
github.com/milosgajdos/tenus v0.0.3/go.mod h1:eIjx29vNeDOYWJuCnaHY2r4fq5egetV26ry3on7p8qY=
github.com/mmcloughlin/avo v0.0.0-20200803215136-443f81d77104/go.mod h1:wqKykBG2QzQDJEzvRkcS8x6MiSJkF52hXZsXcjaB3ls=
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0=
...
...
@@ -216,8 +214,8 @@ github.com/stretchr/testify v1.6.1 h1:hDPOHmpOpP40lSULcqw7IrRb/u7w6RpDC9399XyoNd
github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
github.com/tarm/serial v0.0.0-20180830185346-98f6abe2eb07/go.mod h1:kDXzergiv9cbyO7IOYJZWg1U88JhDg3PB6klq9Hg2pA=
github.com/templexxx/cpu v0.0.1/go.mod h1:w7Tb+7qgcAlIyX4NhLuDKt78AHA5SzPmq0Wj6HiEnnk=
github.com/templexxx/cpu v0.0.
7 h1:pUEZn8JBy/w5yzdYWgx+0m0xL9uk6j4K91C5kOViAzo
=
github.com/templexxx/cpu v0.0.
7
/go.mod h1:w7Tb+7qgcAlIyX4NhLuDKt78AHA5SzPmq0Wj6HiEnnk=
github.com/templexxx/cpu v0.0.
10-0.20211111114238-98168dcec14a h1:f0GQM8LuKYnXdNLcAg+di6PULSlR5iQtZT3bDwDRiA0
=
github.com/templexxx/cpu v0.0.
10-0.20211111114238-98168dcec14a
/go.mod h1:w7Tb+7qgcAlIyX4NhLuDKt78AHA5SzPmq0Wj6HiEnnk=
github.com/templexxx/xorsimd v0.4.1 h1:iUZcywbOYDRAZUasAs2eSCUW8eobuZDy0I9FJiORkVg=
github.com/templexxx/xorsimd v0.4.1/go.mod h1:W+ffZz8jJMH2SXwuKu9WhygqBMbFnp14G2fqEr8qaNo=
github.com/tjfoc/gmsm v1.3.2/go.mod h1:HaUcFuY0auTiaHB9MHFGCPx5IaLhTUd2atbCFBQXn9w=
...
...
@@ -238,7 +236,6 @@ github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9de
github.com/yuin/goldmark v1.1.32/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
github.com/yuin/goldmark v1.3.5/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k=
github.com/yuin/goldmark v1.4.1/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k=
gitlab.com/yawning/edwards25519-extra.git v0.0.0-20211229043746-2f91fcc9fbdb h1:qRSZHsODmAP5qDvb3YsO7Qnf3TRiVbGxNG/WYnlM4/o=
gitlab.com/yawning/edwards25519-extra.git v0.0.0-20211229043746-2f91fcc9fbdb/go.mod h1:gvdJuZuO/tPZyhEV8K3Hmoxv/DWud5L4qEQxfYjEUTo=
gitlab.com/yawning/obfs4.git v0.0.0-20220204003609-77af0cba934d h1:tJ8F7ABaQ3p3wjxwXiWSktVDgjZEXkvaRawd2rIq5ws=
...
...
@@ -258,9 +255,8 @@ golang.org/x/crypto v0.0.0-20200728195943-123391ffb6de/go.mod h1:LzIPMQfyMNhhGPh
golang.org/x/crypto v0.0.0-20201012173705-84dcc777aaee/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
golang.org/x/crypto v0.0.0-20210220033148-5ea612d1eb83/go.mod h1:jdWPYTVW3xRLrWPugEBEK3UY2ZEsg3UU495nc5E+M+I=
golang.org/x/crypto v0.0.0-20210711020723-a769d52b0f97/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc=
golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc=
golang.org/x/crypto v0.0.0-20220321153916-2c7772ba3064 h1:S25/rfnfsMVgORT4/J61MJ7rdyseOZOyvLIrZEZ7s6s=
golang.org/x/crypto v0.0.0-20220321153916-2c7772ba3064/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4=
golang.org/x/crypto v0.0.0-20220817201139-bc19a97f63c8 h1:GIAS/yBem/gq2MUqgNIzUHW7cJMmx3TGZOrnyYaNQ6c=
golang.org/x/crypto v0.0.0-20220817201139-bc19a97f63c8/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4=
golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
golang.org/x/lint v0.0.0-20180702182130-06c8688daad7/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE=
golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE=
...
...
@@ -271,8 +267,8 @@ golang.org/x/mod v0.1.1-0.20191105210325-c90efee705ee/go.mod h1:QqPTAvyqsEbceGzB
golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
golang.org/x/mod v0.6.0-dev.0.20220
106191415-9b9b3d81d5e3 h1:kQgndtyPBW/JIYERgdxfwMYh3AVStj88WQTlNDi2a+o
=
golang.org/x/mod v0.6.0-dev.0.20220
106191415-9b9b3d81d5e3/go.mod h1:3p9vT2HGsQu2K1YbXdKPJLVgG5VJdoTa1poYQBtP1AY
=
golang.org/x/mod v0.6.0-dev.0.20220
419223038-86c51ed26bb4 h1:6zppjxzCulZykYSLyVDYbneBfbaBIQPYMevg0bEwv2s
=
golang.org/x/mod v0.6.0-dev.0.20220
419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4
=
golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
...
...
@@ -294,10 +290,9 @@ golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v
golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM=
golang.org/x/net v0.0.0-20210428140749-89ef3d95e781/go.mod h1:OJAsFXCWl8Ukc7SiCT/9KSuxbyM7479/AVlXFRxuMCk=
golang.org/x/net v0.0.0-20210726213435-c6fcb2dbf985/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
golang.org/x/net v0.0.0-20211015210444-4f30a5c0130f/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
golang.org/x/net v0.0.0-20220325170049-de3da57026de h1:pZB1TWnKi+o4bENlbzAgLrEbY4RMYmUIRobMcSmfeYc=
golang.org/x/net v0.0.0-20220325170049-de3da57026de/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk=
golang.org/x/net v0.0.0-20220624214902-1bab6f366d9e/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c=
golang.org/x/net v0.0.0-20220812174116-3211cb980234 h1:RDqmgfe7SvlMWoqC3xwQ2blLO3fcWcxMa3eBLRdRW7E=
golang.org/x/net v0.0.0-20220812174116-3211cb980234/go.mod h1:YDH+HFinaLZZlnHAfSS6ZXJJ9M9t4Dl22yv3iI2vPwk=
golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
golang.org/x/oauth2 v0.0.0-20181017192945-9dcd33a902f4/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
golang.org/x/oauth2 v0.0.0-20181203162652-d668ce993890/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
...
...
@@ -311,8 +306,8 @@ golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJ
golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20200625203802-6e8e738ad208/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20210220032951-036812b2e83c h1:5KslGYwFpkhGh+Q16bwMP3cOontH8FOep7tGV86Y7SQ=
golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4 h1:uVc8UZUe6tr40fFVnUP5Oj+veunVezqYl9z7DYw9xzw=
golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20181029174526-d69651ed3497/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
...
...
@@ -335,10 +330,10 @@ golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7w
golang.org/x/sys v0.0.0-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-202
11019181941-9d821ace8654
/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-202
11216021012-1d35b9e2eb4e
/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20220
325203850-36772127a21f h1:TrmogKRsSOxRMJbLYGrB4SBbW+LJcEllYBLME5Zk5pU
=
golang.org/x/sys v0.0.0-20220
325203850-36772127a21f
/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-202
20412211240-33da011f77ad
/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-202
20520151302-bc2c85ada10a
/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20220
817070843-5a390386f1f2 h1:fqTvyMIIj+HRzMmnzr9NtpHP6uVpvB5fkHcgPDC4nu8
=
golang.org/x/sys v0.0.0-20220
817070843-5a390386f1f2
/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/term v0.0.0-20201117132131-f5c789dd3221/go.mod h1:Nr5EML6q2oocZ2LXRh80K7BxOlk5/8JxuGnuhpl+muw=
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
golang.org/x/term v0.0.0-20210927222741-03fcf44c2211 h1:JGgROgKl9N8DuW20oFS5gxc+lE67/N3FcwmBPMe7ArY=
...
...
@@ -367,12 +362,11 @@ golang.org/x/tools v0.0.0-20200808161706-5bf02b21f123/go.mod h1:njjCfa9FT2d7l9Bc
golang.org/x/tools v0.0.0-20201224043029-2b0845dc783e/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
golang.org/x/tools v0.1.1/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk=
golang.org/x/tools v0.1.6-0.20210726203631-07bc1bf47fb2/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk=
golang.org/x/tools v0.1.1
0 h1:QjFRCZxdOhBJ/UNgnBZLbNV13DlbnK0quyivTnXJM20
=
golang.org/x/tools v0.1.1
0/go.mod h1:Uh6Zz+xoGYZom868N8YTex3t7RhtHDBrE8Gzo9bV56E
=
golang.org/x/tools v0.1.1
2 h1:VveCTK38A2rkS8ZqFY25HIDFscX5X9OoEhJd3quQmXU
=
golang.org/x/tools v0.1.1
2/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc
=
golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1 h1:go1bK/D/BFZV2I8cIQd1NKEZ+0owSTG1fDTci4IqFcE=
golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
google.golang.org/api v0.0.0-20180910000450-7ca32eb868bf/go.mod h1:4mhQ8q/RsB7i+udVvVy5NUi08OU8ZlA0gRVgrF7VFY0=
google.golang.org/api v0.0.0-20181030000543-1d582fd0359e/go.mod h1:4mhQ8q/RsB7i+udVvVy5NUi08OU8ZlA0gRVgrF7VFY0=
...
...
gost.go
View file @
b9e61dca
...
...
@@ -20,7 +20,7 @@ import (
)
// Version is the gost version.
const
Version
=
"2.11.
2
"
const
Version
=
"2.11.
3
"
// Debug is a flag that enables the debug log.
var
Debug
bool
...
...
quic.go
View file @
b9e61dca
...
...
@@ -17,8 +17,7 @@ import (
)
type
quicSession
struct
{
conn
net
.
Conn
session
quic
.
Session
session
quic
.
EarlyConnection
}
func
(
session
*
quicSession
)
GetConn
()
(
*
quicConn
,
error
)
{
...
...
@@ -60,100 +59,71 @@ func (tr *quicTransporter) Dial(addr string, options ...DialOption) (conn net.Co
option
(
opts
)
}
udpAddr
,
err
:=
net
.
ResolveUDPAddr
(
"udp"
,
addr
)
if
err
!=
nil
{
return
nil
,
err
}
tr
.
sessionMutex
.
Lock
()
defer
tr
.
sessionMutex
.
Unlock
()
session
,
ok
:=
tr
.
sessions
[
addr
]
if
!
ok
{
var
cc
*
net
.
UDP
Conn
c
c
,
err
=
net
.
ListenUDP
(
"udp"
,
&
net
.
UDPAddr
{
IP
:
net
.
IPv4zero
,
Port
:
0
})
var
pc
net
.
Packet
Conn
p
c
,
err
=
net
.
ListenUDP
(
"udp"
,
&
net
.
UDPAddr
{
IP
:
net
.
IPv4zero
,
Port
:
0
})
if
err
!=
nil
{
return
}
conn
=
cc
if
tr
.
config
!=
nil
&&
tr
.
config
.
Key
!=
nil
{
conn
=
&
quicCipherConn
{
UDPConn
:
c
c
,
key
:
tr
.
config
.
Key
}
pc
=
&
quicCipherConn
{
PacketConn
:
p
c
,
key
:
tr
.
config
.
Key
}
}
session
=
&
quicSession
{
conn
:
conn
}
tr
.
sessions
[
addr
]
=
session
}
return
session
.
conn
,
nil
}
func
(
tr
*
quicTransporter
)
Handshake
(
conn
net
.
Conn
,
options
...
HandshakeOption
)
(
net
.
Conn
,
error
)
{
opts
:=
&
HandshakeOptions
{}
for
_
,
option
:=
range
options
{
option
(
opts
)
}
config
:=
tr
.
config
if
opts
.
QUICConfig
!=
nil
{
config
=
opts
.
QUICConfig
}
if
config
.
TLSConfig
==
nil
{
config
.
TLSConfig
=
&
tls
.
Config
{
InsecureSkipVerify
:
true
}
}
tr
.
sessionMutex
.
Lock
()
defer
tr
.
sessionMutex
.
Unlock
()
timeout
:=
opts
.
Timeout
if
timeout
<=
0
{
timeout
=
HandshakeTimeout
}
conn
.
SetDeadline
(
time
.
Now
()
.
Add
(
timeout
))
defer
conn
.
SetDeadline
(
time
.
Time
{})
session
,
ok
:=
tr
.
sessions
[
opts
.
Addr
]
if
session
!=
nil
&&
session
.
conn
!=
conn
{
conn
.
Close
()
return
nil
,
errors
.
New
(
"quic: unrecognized connection"
)
}
if
!
ok
||
session
.
session
==
nil
{
s
,
err
:=
tr
.
initSession
(
opts
.
Addr
,
conn
,
config
)
session
,
err
=
tr
.
initSession
(
udpAddr
,
pc
)
if
err
!=
nil
{
conn
.
Close
()
delete
(
tr
.
sessions
,
opts
.
Addr
)
pc
.
Close
()
return
nil
,
err
}
session
=
s
tr
.
sessions
[
opts
.
Addr
]
=
session
tr
.
sessions
[
addr
]
=
session
}
cc
,
err
:=
session
.
GetConn
()
conn
,
err
=
session
.
GetConn
()
if
err
!=
nil
{
session
.
Close
()
delete
(
tr
.
sessions
,
opts
.
A
ddr
)
delete
(
tr
.
sessions
,
a
ddr
)
return
nil
,
err
}
return
conn
,
nil
}
return
cc
,
nil
func
(
tr
*
quicTransporter
)
Handshake
(
conn
net
.
Conn
,
options
...
HandshakeOption
)
(
net
.
Conn
,
error
)
{
return
conn
,
nil
}
func
(
tr
*
quicTransporter
)
initSession
(
addr
string
,
conn
net
.
Conn
,
config
*
QUICConfig
)
(
*
quicSession
,
error
)
{
udpConn
,
ok
:=
conn
.
(
net
.
PacketConn
)
if
!
ok
{
return
nil
,
errors
.
New
(
"quic: wrong connection type"
)
func
(
tr
*
quicTransporter
)
initSession
(
addr
net
.
Addr
,
conn
net
.
PacketConn
)
(
*
quicSession
,
error
)
{
config
:=
tr
.
config
if
config
==
nil
{
config
=
&
QUICConfig
{}
}
udpAddr
,
err
:=
net
.
ResolveUDPAddr
(
"udp"
,
addr
)
if
err
!=
nil
{
return
nil
,
err
if
config
.
TLSConfig
==
nil
{
config
.
TLSConfig
=
&
tls
.
Config
{
InsecureSkipVerify
:
true
}
}
quicConfig
:=
&
quic
.
Config
{
HandshakeIdleTimeout
:
config
.
Timeout
,
KeepAlive
:
config
.
KeepAlive
,
MaxIdleTimeout
:
config
.
IdleTimeout
,
KeepAlivePeriod
:
config
.
KeepAlivePeriod
,
Versions
:
[]
quic
.
VersionNumber
{
quic
.
Version1
,
quic
.
VersionDraft29
,
},
MaxIdleTimeout
:
config
.
IdleTimeout
,
}
session
,
err
:=
quic
.
Dial
(
udpConn
,
udpAddr
,
addr
,
tlsConfigQUICALPN
(
config
.
TLSConfig
),
quicConfig
)
session
,
err
:=
quic
.
Dial
Early
(
conn
,
addr
,
addr
.
String
()
,
tlsConfigQUICALPN
(
config
.
TLSConfig
),
quicConfig
)
if
err
!=
nil
{
log
.
Logf
(
"quic dial %s: %v"
,
addr
,
err
)
return
nil
,
err
}
return
&
quicSession
{
conn
:
conn
,
session
:
session
},
nil
return
&
quicSession
{
session
:
session
},
nil
}
func
(
tr
*
quicTransporter
)
Multiplex
()
bool
{
...
...
@@ -165,12 +135,13 @@ type QUICConfig struct {
TLSConfig
*
tls
.
Config
Timeout
time
.
Duration
KeepAlive
bool
KeepAlivePeriod
time
.
Duration
IdleTimeout
time
.
Duration
Key
[]
byte
}
type
quicListener
struct
{
ln
quic
.
Listener
ln
quic
.
Early
Listener
connChan
chan
net
.
Conn
errChan
chan
error
}
...
...
@@ -182,7 +153,7 @@ func QUICListener(addr string, config *QUICConfig) (Listener, error) {
}
quicConfig
:=
&
quic
.
Config
{
HandshakeIdleTimeout
:
config
.
Timeout
,
KeepAlive
:
config
.
KeepAlive
,
KeepAlive
Period
:
config
.
KeepAlivePeriod
,
MaxIdleTimeout
:
config
.
IdleTimeout
,
Versions
:
[]
quic
.
VersionNumber
{
quic
.
Version1
,
...
...
@@ -200,17 +171,16 @@ func QUICListener(addr string, config *QUICConfig) (Listener, error) {
if
err
!=
nil
{
return
nil
,
err
}
lconn
,
err
:
=
net
.
ListenUDP
(
"udp"
,
udpAddr
)
conn
,
err
=
net
.
ListenUDP
(
"udp"
,
udpAddr
)
if
err
!=
nil
{
return
nil
,
err
}
conn
=
lconn
if
config
.
Key
!=
nil
{
conn
=
&
quicCipherConn
{
UDPConn
:
l
conn
,
key
:
config
.
Key
}
conn
=
&
quicCipherConn
{
PacketConn
:
conn
,
key
:
config
.
Key
}
}
ln
,
err
:=
quic
.
Listen
(
conn
,
tlsConfigQUICALPN
(
tlsConfig
),
quicConfig
)
ln
,
err
:=
quic
.
Listen
Early
(
conn
,
tlsConfigQUICALPN
(
tlsConfig
),
quicConfig
)
if
err
!=
nil
{
return
nil
,
err
}
...
...
@@ -238,7 +208,7 @@ func (l *quicListener) listenLoop() {
}
}
func
(
l
*
quicListener
)
sessionLoop
(
session
quic
.
Sess
ion
)
{
func
(
l
*
quicListener
)
sessionLoop
(
session
quic
.
Connect
ion
)
{
log
.
Logf
(
"[quic] %s <-> %s"
,
session
.
RemoteAddr
(),
session
.
LocalAddr
())
defer
log
.
Logf
(
"[quic] %s >-< %s"
,
session
.
RemoteAddr
(),
session
.
LocalAddr
())
...
...
@@ -295,12 +265,12 @@ func (c *quicConn) RemoteAddr() net.Addr {
}
type
quicCipherConn
struct
{
*
net
.
UDP
Conn
net
.
Packet
Conn
key
[]
byte
}
func
(
conn
*
quicCipherConn
)
ReadFrom
(
data
[]
byte
)
(
n
int
,
addr
net
.
Addr
,
err
error
)
{
n
,
addr
,
err
=
conn
.
UDP
Conn
.
ReadFrom
(
data
)
n
,
addr
,
err
=
conn
.
Packet
Conn
.
ReadFrom
(
data
)
if
err
!=
nil
{
return
}
...
...
@@ -320,7 +290,7 @@ func (conn *quicCipherConn) WriteTo(data []byte, addr net.Addr) (n int, err erro
return
}
_
,
err
=
conn
.
UDP
Conn
.
WriteTo
(
b
,
addr
)
_
,
err
=
conn
.
Packet
Conn
.
WriteTo
(
b
,
addr
)
if
err
!=
nil
{
return
}
...
...
snap/snapcraft.yaml
View file @
b9e61dca
name
:
gost
base
:
core20
version
:
'
2.11.
2
'
version
:
'
2.11.
3
'
summary
:
A simple security tunnel written in golang
description
:
|
Project: https://github.com/ginuerzh/gost
...
...
tuntap_linux.go
View file @
b9e61dca
package
gost
import
(
"errors"
"fmt"
"net"
"syscall"
"os/exec"
"strings"
"github.com/docker/libcontainer/netlink"
"github.com/go-log/log"
"github.com/milosgajdos/tenus"
"github.com/songgao/water"
)
func
createTun
(
cfg
TunConfig
)
(
conn
net
.
Conn
,
itf
*
net
.
Interface
,
err
error
)
{
ip
,
ipNet
,
err
:=
net
.
ParseCIDR
(
cfg
.
Addr
)
ip
,
_
,
err
:=
net
.
ParseCIDR
(
cfg
.
Addr
)
if
err
!=
nil
{
return
}
...
...
@@ -28,35 +26,21 @@ func createTun(cfg TunConfig) (conn net.Conn, itf *net.Interface, err error) {
return
}
link
,
err
:=
tenus
.
NewLinkFrom
(
ifce
.
Name
())
if
err
!=
nil
{
return
}
mtu
:=
cfg
.
MTU
if
mtu
<=
0
{
mtu
=
DefaultMTU
}
cmd
:=
fmt
.
Sprintf
(
"ip link set dev %s mtu %d"
,
ifce
.
Name
(),
mtu
)
log
.
Log
(
"[tun]"
,
cmd
)
if
er
:=
link
.
SetLinkMTU
(
mtu
);
er
!=
nil
{
err
=
fmt
.
Errorf
(
"%s: %v"
,
cmd
,
er
)
return
if
err
=
exeCmd
(
fmt
.
Sprintf
(
"ip link set dev %s mtu %d"
,
ifce
.
Name
(),
mtu
));
err
!=
nil
{
log
.
Log
(
err
)
}
cmd
=
fmt
.
Sprintf
(
"ip address add %s dev %s"
,
cfg
.
Addr
,
ifce
.
Name
())
log
.
Log
(
"[tun]"
,
cmd
)
if
er
:=
link
.
SetLinkIp
(
ip
,
ipNet
);
er
!=
nil
{
err
=
fmt
.
Errorf
(
"%s: %v"
,
cmd
,
er
)
return
if
err
=
exeCmd
(
fmt
.
Sprintf
(
"ip address add %s dev %s"
,
cfg
.
Addr
,
ifce
.
Name
()));
err
!=
nil
{
log
.
Log
(
err
)
}
cmd
=
fmt
.
Sprintf
(
"ip link set dev %s up"
,
ifce
.
Name
())
log
.
Log
(
"[tun]"
,
cmd
)
if
er
:=
link
.
SetLinkUp
();
er
!=
nil
{
err
=
fmt
.
Errorf
(
"%s: %v"
,
cmd
,
er
)
return
if
err
=
exeCmd
(
fmt
.
Sprintf
(
"ip link set dev %s up"
,
ifce
.
Name
()));
err
!=
nil
{
log
.
Log
(
err
)
}
if
err
=
addTunRoutes
(
ifce
.
Name
(),
cfg
.
Routes
...
);
err
!=
nil
{
...
...
@@ -77,9 +61,8 @@ func createTun(cfg TunConfig) (conn net.Conn, itf *net.Interface, err error) {
func
createTap
(
cfg
TapConfig
)
(
conn
net
.
Conn
,
itf
*
net
.
Interface
,
err
error
)
{
var
ip
net
.
IP
var
ipNet
*
net
.
IPNet
if
cfg
.
Addr
!=
""
{
ip
,
ipNet
,
err
=
net
.
ParseCIDR
(
cfg
.
Addr
)
ip
,
_
,
err
=
net
.
ParseCIDR
(
cfg
.
Addr
)
if
err
!=
nil
{
return
}
...
...
@@ -95,37 +78,23 @@ func createTap(cfg TapConfig) (conn net.Conn, itf *net.Interface, err error) {
return
}
link
,
err
:=
tenus
.
NewLinkFrom
(
ifce
.
Name
())
if
err
!=
nil
{
return
}
mtu
:=
cfg
.
MTU
if
mtu
<=
0
{
mtu
=
DefaultMTU
}
cmd
:=
fmt
.
Sprintf
(
"ip link set dev %s mtu %d"
,
ifce
.
Name
(),
mtu
)
log
.
Log
(
"[tap]"
,
cmd
)
if
er
:=
link
.
SetLinkMTU
(
mtu
);
er
!=
nil
{
err
=
fmt
.
Errorf
(
"%s: %v"
,
cmd
,
er
)
return
if
err
=
exeCmd
(
fmt
.
Sprintf
(
"ip link set dev %s mtu %d"
,
ifce
.
Name
(),
mtu
));
err
!=
nil
{
log
.
Log
(
err
)
}
if
cfg
.
Addr
!=
""
{
cmd
=
fmt
.
Sprintf
(
"ip address add %s dev %s"
,
cfg
.
Addr
,
ifce
.
Name
())
log
.
Log
(
"[tap]"
,
cmd
)
if
er
:=
link
.
SetLinkIp
(
ip
,
ipNet
);
er
!=
nil
{
err
=
fmt
.
Errorf
(
"%s: %v"
,
cmd
,
er
)
return
if
err
=
exeCmd
(
fmt
.
Sprintf
(
"ip address add %s dev %s"
,
cfg
.
Addr
,
ifce
.
Name
()));
err
!=
nil
{
log
.
Log
(
err
)
}
}
cmd
=
fmt
.
Sprintf
(
"ip link set dev %s up"
,
ifce
.
Name
())
log
.
Log
(
"[tap]"
,
cmd
)
if
er
:=
link
.
SetLinkUp
();
er
!=
nil
{
err
=
fmt
.
Errorf
(
"%s: %v"
,
cmd
,
er
)
return
if
err
=
exeCmd
(
fmt
.
Sprintf
(
"ip link set dev %s up"
,
ifce
.
Name
()));
err
!=
nil
{
log
.
Log
(
err
)
}
if
err
=
addTapRoutes
(
ifce
.
Name
(),
cfg
.
Gateway
,
cfg
.
Routes
...
);
err
!=
nil
{
...
...
@@ -151,8 +120,10 @@ func addTunRoutes(ifName string, routes ...IPRoute) error {
}
cmd
:=
fmt
.
Sprintf
(
"ip route add %s dev %s"
,
route
.
Dest
.
String
(),
ifName
)
log
.
Logf
(
"[tun] %s"
,
cmd
)
if
err
:=
netlink
.
AddRoute
(
route
.
Dest
.
String
(),
""
,
""
,
ifName
);
err
!=
nil
&&
!
errors
.
Is
(
err
,
syscall
.
EEXIST
)
{
return
fmt
.
Errorf
(
"%s: %v"
,
cmd
,
err
)
args
:=
strings
.
Split
(
cmd
,
" "
)
if
er
:=
exec
.
Command
(
args
[
0
],
args
[
1
:
]
...
)
.
Run
();
er
!=
nil
{
log
.
Logf
(
"[tun] %s: %v"
,
cmd
,
er
)
}
}
return
nil
...
...
@@ -165,9 +136,22 @@ func addTapRoutes(ifName string, gw string, routes ...string) error {
}
cmd
:=
fmt
.
Sprintf
(
"ip route add %s via %s dev %s"
,
route
,
gw
,
ifName
)
log
.
Logf
(
"[tap] %s"
,
cmd
)
if
err
:=
netlink
.
AddRoute
(
route
,
""
,
gw
,
ifName
);
err
!=
nil
{
return
fmt
.
Errorf
(
"%s: %v"
,
cmd
,
err
)
args
:=
strings
.
Split
(
cmd
,
" "
)
if
er
:=
exec
.
Command
(
args
[
0
],
args
[
1
:
]
...
)
.
Run
();
er
!=
nil
{
log
.
Logf
(
"[tap] %s: %v"
,
cmd
,
er
)
}
}
return
nil
}
func
exeCmd
(
cmd
string
)
error
{
log
.
Log
(
cmd
)
args
:=
strings
.
Split
(
cmd
,
" "
)
if
err
:=
exec
.
Command
(
args
[
0
],
args
[
1
:
]
...
)
.
Run
();
err
!=
nil
{
return
fmt
.
Errorf
(
"%s: %v"
,
cmd
,
err
)
}
return
nil
}
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment