Add route.default_interface option

This commit is contained in:
世界
2022-07-15 11:51:51 +08:00
parent 5a3de62c50
commit 377f3f83a2
12 changed files with 45 additions and 23 deletions

View File

@@ -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
}

View File

@@ -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)

View File

@@ -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))