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
13a60628
Commit
13a60628
authored
Dec 30, 2019
by
ginuerzh
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
multiqueue tun
parent
d32c89d3
Changes
5
Hide whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
62 additions
and
28 deletions
+62
-28
cmd/gost/route.go
cmd/gost/route.go
+1
-1
go.mod
go.mod
+1
-2
go.sum
go.sum
+8
-0
tun.go
tun.go
+48
-22
tun_linux.go
tun_linux.go
+4
-3
No files found.
cmd/gost/route.go
View file @
13a60628
...
...
@@ -374,7 +374,7 @@ func (r *route) GenRouters() ([]router, error) {
case
"ohttp"
:
ln
,
err
=
gost
.
ObfsHTTPListener
(
node
.
Addr
)
case
"tun"
:
ln
,
err
=
gost
.
TunListener
(
node
.
Addr
)
ln
,
err
=
gost
.
TunListener
(
node
.
Addr
,
node
.
GetInt
(
"threads"
)
)
default
:
ln
,
err
=
gost
.
TCPListener
(
node
.
Addr
)
}
...
...
go.mod
View file @
13a60628
...
...
@@ -22,6 +22,7 @@ require (
github.com/klauspost/compress v1.4.1
github.com/klauspost/cpuid v1.2.0 // indirect
github.com/klauspost/reedsolomon v1.7.0 // indirect
github.com/libp2p/go-reuseport v0.0.1
github.com/lucas-clemente/aes12 v0.0.0-20171027163421-cd47fb39b79f // indirect
github.com/lucas-clemente/quic-go v0.10.0
github.com/lucas-clemente/quic-go-certificates v0.0.0-20160823095156-d2f86524cced // indirect
...
...
@@ -29,7 +30,6 @@ require (
github.com/milosgajdos83/tenus v0.0.0-20190415114537-1f3ed00ae7d8
github.com/onsi/ginkgo v1.7.0 // indirect
github.com/onsi/gomega v1.4.3 // indirect
github.com/pkg/errors v0.8.1 // indirect
github.com/ryanuber/go-glob v0.0.0-20170128012129-256dc444b735
github.com/shadowsocks/go-shadowsocks2 v0.0.11
github.com/shadowsocks/shadowsocks-go v0.0.0-20170121203516-97a5c71f80ba
...
...
@@ -40,7 +40,6 @@ require (
golang.org/x/crypto v0.0.0-20190130090550-b01c7a725664
golang.org/x/net v0.0.0-20190125091013-d26f9f9a57f3
golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4 // indirect
golang.org/x/sys v0.0.0-20190129075346-302c3dd5f1cc // indirect
gopkg.in/gorilla/websocket.v1 v1.4.0
gopkg.in/xtaci/kcp-go.v4 v4.3.2
gopkg.in/xtaci/smux.v1 v1.0.7
...
...
go.sum
View file @
13a60628
...
...
@@ -12,6 +12,7 @@ github.com/bifurcation/mint v0.0.0-20181105071958-a14404e9a861 h1:x17NvoJaphEzay
github.com/bifurcation/mint v0.0.0-20181105071958-a14404e9a861/go.mod h1:zVt7zX3K/aDCk9Tj+VM7YymsX66ERvzCJzw8rFCX2JU=
github.com/cheekybits/genny v1.0.0 h1:uGGa4nei+j20rOSeDeP5Of12XVm7TGUd4dJA9RDitfE=
github.com/cheekybits/genny v1.0.0/go.mod h1:+tQajlRqAUrPI7DOSpB0XAqZYtQakVtB7wXkRAgjxjQ=
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/dchest/siphash v1.2.0 h1:YWOShuhvg0GqbQpMa60QlCGtEyf7O7HC1Jf0VjdQ60M=
github.com/dchest/siphash v1.2.0/go.mod h1:q+IRvb2gOSrUnYoPqHiyHXS0FOBBOdl6tONBlVnOnt4=
github.com/dchest/siphash v1.2.1 h1:4cLinnzVJDKxTCl9B01807Yiy+W7ZzVHj/KIroQRvT4=
...
...
@@ -46,6 +47,8 @@ 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.7.0 h1:pLFmRKGko2ZieiTGyo9DahLCIuljyxm+Zzhz/fYEonE=
github.com/klauspost/reedsolomon v1.7.0/go.mod h1:CwCi+NUr9pqSVktrkN+Ondf06rkhYZ/pcNv7fu+8Un4=
github.com/libp2p/go-reuseport v0.0.1 h1:7PhkfH73VXfPJYKQ6JwS5I/eVcoyYi9IMNGc6FWpFLw=
github.com/libp2p/go-reuseport v0.0.1/go.mod h1:jn6RmB1ufnQwl0Q1f+YxAj8isJgDCQzaaxIFYDhcYEA=
github.com/lucas-clemente/aes12 v0.0.0-20171027163421-cd47fb39b79f h1:sSeNEkJrs+0F9TUau0CgWTTNEwF23HST3Eq0A+QIx+A=
github.com/lucas-clemente/aes12 v0.0.0-20171027163421-cd47fb39b79f/go.mod h1:JpH9J1c9oX6otFSgdUHwUBUizmKlrMjxWnIAjff4m04=
github.com/lucas-clemente/quic-go v0.10.0 h1:xEF+pSHYAOcu+U10Meunf+DTtc8vhQDRqlA0BJ6hufc=
...
...
@@ -63,6 +66,7 @@ github.com/onsi/gomega v1.4.3 h1:RE1xgDvH7imwFD45h+u2SgIfERHlS2yNG4DObb5BSKU=
github.com/onsi/gomega v1.4.3/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY=
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/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
github.com/ryanuber/go-glob v0.0.0-20170128012129-256dc444b735 h1:7YvPJVmEeFHR1Tj9sZEYsmarJEQfMVYpd/Vyy/A8dqE=
github.com/ryanuber/go-glob v0.0.0-20170128012129-256dc444b735/go.mod h1:807d1WSdnB0XRJzKNil9Om6lcp/3a0v4qIHxIXzX/Yc=
github.com/shadowsocks/go-shadowsocks2 v0.0.11 h1:dXloqEhYnZV40jblWTK8kWeC0Eb+dgql4S0tj99e8j0=
...
...
@@ -71,6 +75,8 @@ github.com/shadowsocks/shadowsocks-go v0.0.0-20170121203516-97a5c71f80ba h1:tJgN
github.com/shadowsocks/shadowsocks-go v0.0.0-20170121203516-97a5c71f80ba/go.mod h1:mttDPaeLm87u74HMrP+n2tugXvIKWcwff/cqSX0lehY=
github.com/songgao/water v0.0.0-20190725173103-fd331bda3f4b h1:+y4hCMc/WKsDbAPsOQZgBSaSZ26uh2afyaWeVg/3s/c=
github.com/songgao/water v0.0.0-20190725173103-fd331bda3f4b/go.mod h1:P5HUIBuIWKbyjl083/loAegFkfbFNx5i2qEP4CNbm7E=
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
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=
...
...
@@ -90,6 +96,8 @@ golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJ
golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20190129075346-302c3dd5f1cc h1:WiYx1rIFmx8c0mXAFtv5D/mHyKe1+jmuP7PViuwqwuQ=
golang.org/x/sys v0.0.0-20190129075346-302c3dd5f1cc/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20190228124157-a34e9553db1e h1:ZytStCyV048ZqDsWHiYDdoI2Vd4msMcrDECFxS+tL9c=
golang.org/x/sys v0.0.0-20190228124157-a34e9553db1e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/text v0.3.0 h1:g61tztE5qeGQ89tm6NTjjM9VPIm088od1l6aSorWRWg=
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM=
...
...
tun.go
View file @
13a60628
...
...
@@ -9,6 +9,7 @@ import (
"time"
"github.com/go-log/log"
"github.com/libp2p/go-reuseport"
"github.com/shadowsocks/go-shadowsocks2/core"
"github.com/songgao/water"
"golang.org/x/net/ipv4"
...
...
@@ -197,11 +198,12 @@ func (h *tunHandler) transportTun(tun net.Conn, conn net.PacketConn, raddr net.A
if
h
.
ipNet
!=
nil
&&
h
.
ipNet
.
IP
.
Equal
(
header
.
Src
.
Mask
(
h
.
ipNet
.
Mask
))
{
if
actual
,
loaded
:=
routes
.
LoadOrStore
(
header
.
Src
.
String
(),
addr
);
loaded
{
if
actual
.
(
net
.
Addr
)
.
String
()
!=
addr
.
String
()
{
log
.
Logf
(
"[tun] %s <- %s: unexpected address mapping %s -> %s(actual %s)"
,
tun
.
LocalAddr
(),
addr
,
header
.
Dst
,
addr
,
actual
.
(
net
.
Addr
))
log
.
Logf
(
"[tun] %s <- %s: update route: %s -> %s (old %s)"
,
tun
.
LocalAddr
(),
addr
,
header
.
Src
,
addr
,
actual
.
(
net
.
Addr
))
routes
.
Store
(
header
.
Src
.
String
(),
addr
)
}
}
else
{
log
.
Logf
(
"[tun] %s:
record
route: %s -> %s"
,
tun
.
LocalAddr
(),
header
.
Src
,
addr
)
log
.
Logf
(
"[tun] %s:
new
route: %s -> %s"
,
tun
.
LocalAddr
(),
header
.
Src
,
addr
)
}
}
...
...
@@ -264,37 +266,44 @@ func (c *tunConn) SetWriteDeadline(t time.Time) error {
}
type
tunListener
struct
{
conn
*
net
.
UDPConn
accepted
,
closed
chan
struct
{}
addr
net
.
Addr
conns
chan
net
.
Conn
closed
chan
struct
{}
}
// TunListener creates a listener for tun tunnel.
func
TunListener
(
addr
string
)
(
Listener
,
error
)
{
func
TunListener
(
addr
string
,
threads
int
)
(
Listener
,
error
)
{
laddr
,
err
:=
net
.
ResolveUDPAddr
(
"udp"
,
addr
)
if
err
!=
nil
{
return
nil
,
err
}
conn
,
err
:=
net
.
ListenUDP
(
"udp"
,
laddr
)
if
err
!=
nil
{
return
nil
,
err
if
threads
<
1
{
threads
=
1
}
return
&
tunListener
{
conn
:
conn
,
accepted
:
make
(
chan
struct
{}),
closed
:
make
(
chan
struct
{}),
},
nil
}
ln
:=
&
tunListener
{
addr
:
laddr
,
conns
:
make
(
chan
net
.
Conn
,
threads
),
closed
:
make
(
chan
struct
{}),
}
func
(
l
*
tunListener
)
Accept
()
(
net
.
Conn
,
error
)
{
select
{
case
<-
l
.
accepted
:
default
:
close
(
l
.
accepted
)
return
l
.
conn
,
nil
for
i
:=
0
;
i
<
threads
;
i
++
{
conn
,
err
:=
reuseport
.
ListenPacket
(
"udp"
,
addr
)
// conn, err := net.ListenUDP("udp", laddr)
if
err
!=
nil
{
return
nil
,
err
}
ln
.
conns
<-
&
tunTunnelConn
{
conn
}
}
return
ln
,
nil
}
func
(
l
*
tunListener
)
Accept
()
(
net
.
Conn
,
error
)
{
select
{
case
conn
:=
<-
l
.
conns
:
return
conn
,
nil
case
<-
l
.
closed
:
}
...
...
@@ -302,7 +311,7 @@ func (l *tunListener) Accept() (net.Conn, error) {
}
func
(
l
*
tunListener
)
Addr
()
net
.
Addr
{
return
l
.
conn
.
LocalAddr
()
return
l
.
addr
}
func
(
l
*
tunListener
)
Close
()
error
{
...
...
@@ -314,3 +323,20 @@ func (l *tunListener) Close() error {
}
return
nil
}
type
tunTunnelConn
struct
{
net
.
PacketConn
}
func
(
c
*
tunTunnelConn
)
Read
(
b
[]
byte
)
(
n
int
,
err
error
)
{
n
,
_
,
err
=
c
.
ReadFrom
(
b
)
return
}
func
(
c
*
tunTunnelConn
)
Write
(
b
[]
byte
)
(
n
int
,
err
error
)
{
return
c
.
WriteTo
(
b
,
nil
)
}
func
(
c
*
tunTunnelConn
)
RemoteAddr
()
net
.
Addr
{
return
nil
}
tun_linux.go
View file @
13a60628
...
...
@@ -19,7 +19,8 @@ func createTun(cfg TunConfig) (conn net.Conn, ipNet *net.IPNet, err error) {
ifce
,
err
:=
water
.
New
(
water
.
Config
{
DeviceType
:
water
.
TUN
,
PlatformSpecificParams
:
water
.
PlatformSpecificParams
{
Name
:
cfg
.
Name
,
Name
:
cfg
.
Name
,
MultiQueue
:
true
,
},
})
if
err
!=
nil
{
...
...
@@ -46,8 +47,8 @@ func createTun(cfg TunConfig) (conn net.Conn, ipNet *net.IPNet, err error) {
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
//
err = fmt.Errorf("%s: %v", cmd, er)
//
return
}
cmd
=
fmt
.
Sprintf
(
"ip link set dev %s up"
,
ifce
.
Name
())
...
...
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