mirror of
https://github.com/SagerNet/sing-tun.git
synced 2025-03-31 18:37:39 +03:00
Fix system stack for ios
This commit is contained in:
parent
499c0aed67
commit
d880656b52
5 changed files with 13 additions and 21 deletions
|
@ -2,7 +2,7 @@
|
|||
|
||||
Simple transparent proxy library.
|
||||
|
||||
For Linux, Windows and macOS.
|
||||
For Linux, Windows, macOS and iOS.
|
||||
|
||||
## License
|
||||
|
||||
|
|
2
stack.go
2
stack.go
|
@ -34,7 +34,7 @@ func NewStack(
|
|||
) (Stack, error) {
|
||||
switch stack {
|
||||
case "":
|
||||
return defaultStack(options)
|
||||
return NewSystem(options)
|
||||
case "gvisor":
|
||||
return NewGVisor(options)
|
||||
case "system":
|
||||
|
|
|
@ -1,7 +0,0 @@
|
|||
//go:build !darwin
|
||||
|
||||
package tun
|
||||
|
||||
func defaultStack(options StackOptions) (Stack, error) {
|
||||
return NewSystem(options)
|
||||
}
|
|
@ -1,10 +0,0 @@
|
|||
package tun
|
||||
|
||||
func defaultStack(options StackOptions) (Stack, error) {
|
||||
if options.UnderPlatform {
|
||||
// Apple Network Extension conflicts with system stack.
|
||||
return NewGVisor(options)
|
||||
} else {
|
||||
return NewSystem(options)
|
||||
}
|
||||
}
|
13
system.go
13
system.go
|
@ -10,6 +10,7 @@ import (
|
|||
"github.com/sagernet/sing-tun/internal/clashtcpip"
|
||||
"github.com/sagernet/sing/common"
|
||||
"github.com/sagernet/sing/common/buf"
|
||||
"github.com/sagernet/sing/common/control"
|
||||
E "github.com/sagernet/sing/common/exceptions"
|
||||
"github.com/sagernet/sing/common/logger"
|
||||
M "github.com/sagernet/sing/common/metadata"
|
||||
|
@ -20,6 +21,7 @@ import (
|
|||
type System struct {
|
||||
ctx context.Context
|
||||
tun Tun
|
||||
tunName string
|
||||
mtu uint32
|
||||
router Router
|
||||
handler Handler
|
||||
|
@ -38,6 +40,7 @@ type System struct {
|
|||
tcpNat *TCPNat
|
||||
udpNat *udpnat.Service[netip.AddrPort]
|
||||
routeMapping *RouteMapping
|
||||
underPlatform bool
|
||||
}
|
||||
|
||||
type Session struct {
|
||||
|
@ -51,6 +54,7 @@ func NewSystem(options StackOptions) (Stack, error) {
|
|||
stack := &System{
|
||||
ctx: options.Context,
|
||||
tun: options.Tun,
|
||||
tunName: options.Name,
|
||||
mtu: options.MTU,
|
||||
udpTimeout: options.UDPTimeout,
|
||||
router: options.Router,
|
||||
|
@ -58,6 +62,7 @@ func NewSystem(options StackOptions) (Stack, error) {
|
|||
logger: options.Logger,
|
||||
inet4Prefixes: options.Inet4Address,
|
||||
inet6Prefixes: options.Inet6Address,
|
||||
underPlatform: options.UnderPlatform,
|
||||
routeMapping: NewRouteMapping(options.UDPTimeout),
|
||||
}
|
||||
if len(options.Inet4Address) > 0 {
|
||||
|
@ -88,8 +93,12 @@ func (s *System) Close() error {
|
|||
}
|
||||
|
||||
func (s *System) Start() error {
|
||||
var listener net.ListenConfig
|
||||
if s.underPlatform {
|
||||
listener.Control = control.Append(listener.Control, control.BindToInterface(control.DefaultInterfaceFinder(), s.tunName, -1))
|
||||
}
|
||||
if s.inet4Address.IsValid() {
|
||||
tcpListener, err := net.Listen("tcp4", net.JoinHostPort(s.inet4ServerAddress.String(), "0"))
|
||||
tcpListener, err := listener.Listen(s.ctx, "tcp4", net.JoinHostPort(s.inet4ServerAddress.String(), "0"))
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
@ -98,7 +107,7 @@ func (s *System) Start() error {
|
|||
go s.acceptLoop(tcpListener)
|
||||
}
|
||||
if s.inet6Address.IsValid() {
|
||||
tcpListener, err := net.Listen("tcp6", net.JoinHostPort(s.inet6ServerAddress.String(), "0"))
|
||||
tcpListener, err := listener.Listen(s.ctx, "tcp6", net.JoinHostPort(s.inet6ServerAddress.String(), "0"))
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue