mirror of
https://github.com/shtorm-7/sing-box-extended.git
synced 2026-05-14 00:51:12 +03:00
Add route.default_interface option
This commit is contained in:
@@ -10,7 +10,7 @@ import (
|
||||
|
||||
func BindToInterface(router adapter.Router) control.Func {
|
||||
return func(network, address string, conn syscall.RawConn) error {
|
||||
interfaceName := router.DefaultInterfaceName()
|
||||
interfaceName := router.AutoDetectInterfaceName()
|
||||
if interfaceName == "" {
|
||||
return nil
|
||||
}
|
||||
|
||||
@@ -32,7 +32,7 @@ func bind6(handle windows.Handle, ifaceIdx int) error {
|
||||
|
||||
func BindToInterface(router adapter.Router) control.Func {
|
||||
return func(network, address string, conn syscall.RawConn) error {
|
||||
interfaceName := router.DefaultInterfaceName()
|
||||
interfaceName := router.AutoDetectInterfaceName()
|
||||
if interfaceName == "" {
|
||||
return nil
|
||||
}
|
||||
@@ -47,20 +47,20 @@ func BindToInterface(router adapter.Router) control.Func {
|
||||
handle := windows.Handle(fd)
|
||||
// handle ip empty, e.g. net.Listen("udp", ":0")
|
||||
if ipStr == "" {
|
||||
innerErr = bind4(handle, router.DefaultInterfaceIndex())
|
||||
innerErr = bind4(handle, router.AutoDetectInterfaceIndex())
|
||||
if innerErr != nil {
|
||||
return
|
||||
}
|
||||
// try bind ipv6, if failed, ignore. it's a workaround for windows disable interface ipv6
|
||||
bind6(handle, router.DefaultInterfaceIndex())
|
||||
bind6(handle, router.AutoDetectInterfaceIndex())
|
||||
return
|
||||
}
|
||||
|
||||
switch network {
|
||||
case "tcp4", "udp4", "ip4":
|
||||
innerErr = bind4(handle, router.DefaultInterfaceIndex())
|
||||
innerErr = bind4(handle, router.AutoDetectInterfaceIndex())
|
||||
case "tcp6", "udp6":
|
||||
innerErr = bind6(handle, router.DefaultInterfaceIndex())
|
||||
innerErr = bind6(handle, router.AutoDetectInterfaceIndex())
|
||||
}
|
||||
})
|
||||
return E.Errors(innerErr, err)
|
||||
|
||||
@@ -29,19 +29,22 @@ func NewDefault(router adapter.Router, options option.DialerOptions) *DefaultDia
|
||||
} else if router.AutoDetectInterface() {
|
||||
if runtime.GOOS == "windows" {
|
||||
dialer.Control = control.Append(dialer.Control, control.BindToInterfaceIndexFunc(func() int {
|
||||
return router.DefaultInterfaceIndex()
|
||||
return router.AutoDetectInterfaceIndex()
|
||||
}))
|
||||
listener.Control = control.Append(listener.Control, control.BindToInterfaceIndexFunc(func() int {
|
||||
return router.DefaultInterfaceIndex()
|
||||
return router.AutoDetectInterfaceIndex()
|
||||
}))
|
||||
} else {
|
||||
dialer.Control = control.Append(dialer.Control, control.BindToInterfaceFunc(router.InterfaceBindManager(), func() string {
|
||||
return router.DefaultInterfaceName()
|
||||
return router.AutoDetectInterfaceName()
|
||||
}))
|
||||
listener.Control = control.Append(listener.Control, control.BindToInterfaceFunc(router.InterfaceBindManager(), func() string {
|
||||
return router.DefaultInterfaceName()
|
||||
return router.AutoDetectInterfaceName()
|
||||
}))
|
||||
}
|
||||
} else if router.DefaultInterface() != "" {
|
||||
dialer.Control = control.Append(dialer.Control, control.BindToInterface(router.InterfaceBindManager(), router.DefaultInterface()))
|
||||
listener.Control = control.Append(listener.Control, control.BindToInterface(router.InterfaceBindManager(), router.DefaultInterface()))
|
||||
}
|
||||
if options.RoutingMark != 0 {
|
||||
dialer.Control = control.Append(dialer.Control, control.RoutingMark(options.RoutingMark))
|
||||
|
||||
Reference in New Issue
Block a user