Allow customizing TUN DNS mode and hijack interface DNS by default
This commit is contained in:
@@ -7,13 +7,19 @@ import (
|
||||
"github.com/sagernet/sing-box/option"
|
||||
tun "github.com/sagernet/sing-tun"
|
||||
"github.com/sagernet/sing/common"
|
||||
E "github.com/sagernet/sing/common/exceptions"
|
||||
)
|
||||
|
||||
const (
|
||||
DNSModeDisabled = tun.DNSModeDisabled
|
||||
DNSModeNative = tun.DNSModeNative
|
||||
DNSModeHijack = tun.DNSModeHijack
|
||||
)
|
||||
|
||||
type TunOptions interface {
|
||||
GetInet4Address() RoutePrefixIterator
|
||||
GetInet6Address() RoutePrefixIterator
|
||||
GetDNSServerAddress() (*StringBox, error)
|
||||
GetDNSMode() *StringBox
|
||||
GetDNSServerAddress() (StringIterator, error)
|
||||
GetMTU() int32
|
||||
GetAutoRoute() bool
|
||||
GetStrictRoute() bool
|
||||
@@ -89,11 +95,16 @@ func (o *tunOptions) GetInet6Address() RoutePrefixIterator {
|
||||
return mapRoutePrefix(o.Inet6Address)
|
||||
}
|
||||
|
||||
func (o *tunOptions) GetDNSServerAddress() (*StringBox, error) {
|
||||
if len(o.Inet4Address) == 0 || o.Inet4Address[0].Bits() == 32 {
|
||||
return nil, E.New("need one more IPv4 address for DNS hijacking")
|
||||
func (o *tunOptions) GetDNSMode() *StringBox {
|
||||
return wrapString(o.Options.DNSMode)
|
||||
}
|
||||
|
||||
func (o *tunOptions) GetDNSServerAddress() (StringIterator, error) {
|
||||
dnsServers, err := o.Options.DNSServerAddress()
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return wrapString(o.Inet4Address[0].Addr().Next().String()), nil
|
||||
return newIterator(common.Map(dnsServers, netip.Addr.String)), nil
|
||||
}
|
||||
|
||||
func (o *tunOptions) GetMTU() int32 {
|
||||
|
||||
Reference in New Issue
Block a user