1
0
mirror of https://github.com/v2fly/v2ray-core.git synced 2024-09-28 06:46:14 -04:00

inbound tag for dns requests

This commit is contained in:
Darien Raymond 2019-01-16 20:32:41 +01:00
parent 1cf07c3379
commit 44d87ed642
No known key found for this signature in database
GPG Key ID: 7251FFA14BB18169
4 changed files with 65 additions and 40 deletions

View File

@ -153,11 +153,13 @@ type Config struct {
// Deprecated. Use static_hosts. // Deprecated. Use static_hosts.
Hosts map[string]*net.IPOrDomain `protobuf:"bytes,2,rep,name=Hosts,proto3" json:"Hosts,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` // Deprecated: Do not use. Hosts map[string]*net.IPOrDomain `protobuf:"bytes,2,rep,name=Hosts,proto3" json:"Hosts,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` // Deprecated: Do not use.
// Client IP for EDNS client subnet. Must be 4 bytes (IPv4) or 16 bytes (IPv6). // Client IP for EDNS client subnet. Must be 4 bytes (IPv4) or 16 bytes (IPv6).
ClientIp []byte `protobuf:"bytes,3,opt,name=client_ip,json=clientIp,proto3" json:"client_ip,omitempty"` ClientIp []byte `protobuf:"bytes,3,opt,name=client_ip,json=clientIp,proto3" json:"client_ip,omitempty"`
StaticHosts []*Config_HostMapping `protobuf:"bytes,4,rep,name=static_hosts,json=staticHosts,proto3" json:"static_hosts,omitempty"` StaticHosts []*Config_HostMapping `protobuf:"bytes,4,rep,name=static_hosts,json=staticHosts,proto3" json:"static_hosts,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"` // Tag is the inbound tag of DNS client.
XXX_unrecognized []byte `json:"-"` Tag string `protobuf:"bytes,6,opt,name=tag,proto3" json:"tag,omitempty"`
XXX_sizecache int32 `json:"-"` XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
} }
func (m *Config) Reset() { *m = Config{} } func (m *Config) Reset() { *m = Config{} }
@ -222,6 +224,13 @@ func (m *Config) GetStaticHosts() []*Config_HostMapping {
return nil return nil
} }
func (m *Config) GetTag() string {
if m != nil {
return m.Tag
}
return ""
}
type Config_HostMapping struct { type Config_HostMapping struct {
Type DomainMatchingType `protobuf:"varint,1,opt,name=type,proto3,enum=v2ray.core.app.dns.DomainMatchingType" json:"type,omitempty"` Type DomainMatchingType `protobuf:"varint,1,opt,name=type,proto3,enum=v2ray.core.app.dns.DomainMatchingType" json:"type,omitempty"`
Domain string `protobuf:"bytes,2,opt,name=domain,proto3" json:"domain,omitempty"` Domain string `protobuf:"bytes,2,opt,name=domain,proto3" json:"domain,omitempty"`
@ -291,38 +300,39 @@ func init() {
} }
var fileDescriptor_ed5695198e3def8f = []byte{ var fileDescriptor_ed5695198e3def8f = []byte{
// 523 bytes of a gzipped FileDescriptorProto // 530 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xb4, 0x93, 0xd1, 0x6e, 0xd3, 0x30, 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xb4, 0x53, 0xdb, 0x6e, 0xd3, 0x30,
0x18, 0x85, 0x49, 0xd2, 0x76, 0xeb, 0x9f, 0x52, 0x15, 0x5f, 0x4c, 0x55, 0x91, 0xa0, 0x0c, 0x31, 0x18, 0x26, 0x49, 0xdb, 0xad, 0x7f, 0xc6, 0x54, 0x7c, 0x31, 0x45, 0x45, 0x82, 0x32, 0xc4, 0xa8,
0x2a, 0x10, 0x8e, 0x14, 0x90, 0x80, 0xdd, 0x4c, 0x6c, 0x2b, 0xa2, 0x42, 0x83, 0xca, 0x43, 0x5c, 0x40, 0x38, 0x52, 0x40, 0x02, 0x76, 0x33, 0xb1, 0xad, 0x88, 0x0a, 0x0d, 0x2a, 0x0f, 0x71, 0x01,
0x00, 0x52, 0xe5, 0x25, 0xa6, 0xb3, 0x68, 0x6c, 0x63, 0xbb, 0x85, 0xf0, 0x06, 0x88, 0x37, 0xe1, 0x48, 0x95, 0x97, 0x98, 0xce, 0xa2, 0xb1, 0x8d, 0xed, 0x16, 0xc2, 0x2b, 0xf0, 0x08, 0xbc, 0x01,
0x29, 0x51, 0xed, 0x8e, 0x16, 0xd6, 0x01, 0x37, 0xdc, 0xd5, 0xee, 0xf9, 0xfe, 0x73, 0x72, 0xfe, 0x4f, 0x89, 0x6a, 0x77, 0xb4, 0xb0, 0x0e, 0xb8, 0xe1, 0xce, 0x87, 0xef, 0x94, 0xef, 0x77, 0xe0,
0x04, 0x6e, 0xce, 0x52, 0x4d, 0x4b, 0x9c, 0xc9, 0x22, 0xc9, 0xa4, 0x66, 0x09, 0x55, 0x2a, 0xc9, 0xe6, 0x34, 0xd3, 0xb4, 0xc2, 0xb9, 0x2c, 0xd3, 0x5c, 0x6a, 0x96, 0x52, 0xa5, 0xd2, 0x42, 0x98,
0x85, 0x49, 0x32, 0x29, 0xde, 0xf3, 0x31, 0x56, 0x5a, 0x5a, 0x89, 0xd0, 0x99, 0x48, 0x33, 0x4c, 0x34, 0x97, 0xe2, 0x3d, 0x1f, 0x61, 0xa5, 0xa5, 0x95, 0x08, 0x9d, 0x81, 0x34, 0xc3, 0x54, 0x29,
0x95, 0xc2, 0xb9, 0x30, 0x9d, 0xdb, 0xbf, 0x81, 0x99, 0x2c, 0x0a, 0x29, 0x12, 0xc1, 0x6c, 0x42, 0x5c, 0x08, 0xd3, 0xbe, 0xfd, 0x1b, 0x31, 0x97, 0x65, 0x29, 0x45, 0x2a, 0x98, 0x4d, 0x69, 0x51,
0xf3, 0x5c, 0x33, 0x63, 0x3c, 0xdc, 0xb9, 0x7b, 0xb1, 0x30, 0x67, 0xc6, 0x72, 0x41, 0x2d, 0x97, 0x68, 0x66, 0x8c, 0x27, 0xb7, 0xef, 0x5e, 0x0c, 0x2c, 0x98, 0xb1, 0x5c, 0x50, 0xcb, 0xa5, 0xf0,
0xc2, 0x8b, 0xb7, 0xbf, 0x85, 0x00, 0x2f, 0x68, 0xc1, 0x8e, 0x99, 0x9e, 0x31, 0x8d, 0x1e, 0xc3, 0xe0, 0xed, 0xaf, 0x21, 0xc0, 0x0b, 0x5a, 0xb2, 0x63, 0xa6, 0xa7, 0x4c, 0xa3, 0xc7, 0xb0, 0x36,
0xc6, 0x62, 0x58, 0x3b, 0xe8, 0x06, 0xbd, 0x38, 0xbd, 0x8e, 0x57, 0xa2, 0xf8, 0x49, 0x58, 0x30, 0x17, 0x4b, 0x82, 0x4e, 0xd0, 0x8d, 0xb3, 0xeb, 0x78, 0x29, 0x8a, 0x57, 0xc2, 0x82, 0x59, 0xdc,
0x8b, 0xfb, 0x22, 0x57, 0x92, 0x0b, 0x4b, 0xce, 0xf4, 0xe8, 0x1d, 0x20, 0xa5, 0xb9, 0xd4, 0xdc, 0x13, 0x85, 0x92, 0x5c, 0x58, 0x72, 0x86, 0x47, 0xef, 0x00, 0x29, 0xcd, 0xa5, 0xe6, 0x96, 0x7f,
0xf2, 0x2f, 0x2c, 0x1f, 0xe5, 0xb2, 0xa0, 0x5c, 0xb4, 0xc3, 0x6e, 0xd4, 0x8b, 0xd3, 0x7b, 0xf8, 0x61, 0xc5, 0xb0, 0x90, 0x25, 0xe5, 0x22, 0x09, 0x3b, 0x51, 0x37, 0xce, 0xee, 0xe1, 0xf3, 0x1f,
0xfc, 0x03, 0xe1, 0xa5, 0x2d, 0x1e, 0x7a, 0xb0, 0x3c, 0x74, 0x10, 0xb9, 0xb2, 0x32, 0xc8, 0x5f, 0x84, 0x17, 0xb6, 0x78, 0xe0, 0x89, 0xd5, 0xa1, 0x23, 0x91, 0x2b, 0x4b, 0x42, 0xfe, 0xa8, 0x5d,
0x75, 0x72, 0x68, 0xfe, 0x2a, 0x42, 0xbb, 0x50, 0xb1, 0xa5, 0x62, 0x2e, 0x67, 0x33, 0xdd, 0x59, 0xc0, 0xe6, 0xaf, 0x20, 0xb4, 0x0b, 0x35, 0x5b, 0x29, 0xe6, 0x72, 0x6e, 0x66, 0x3b, 0xab, 0x1c,
0xe7, 0xe0, 0x95, 0x47, 0xd4, 0x66, 0xa7, 0x5c, 0x8c, 0x5f, 0x95, 0x8a, 0x11, 0xc7, 0xa0, 0x2d, 0x3c, 0xf2, 0x88, 0xda, 0xfc, 0x94, 0x8b, 0xd1, 0xab, 0x4a, 0x31, 0xe2, 0x38, 0x68, 0x0b, 0x1a,
0xa8, 0xfd, 0xcc, 0x17, 0xf4, 0xea, 0x64, 0x71, 0xda, 0xfe, 0x5a, 0x81, 0xda, 0x81, 0x5b, 0x04, 0x3f, 0xf3, 0x05, 0xdd, 0x26, 0x99, 0xef, 0xb6, 0xbf, 0xd5, 0xa0, 0x71, 0xe0, 0x06, 0x81, 0x7a,
0xea, 0x43, 0xbc, 0x0c, 0x38, 0x6f, 0x23, 0xfa, 0x87, 0x36, 0xf6, 0xc3, 0x76, 0x40, 0x56, 0x39, 0x10, 0x2f, 0x02, 0xce, 0xda, 0x88, 0xfe, 0xa1, 0x8d, 0xfd, 0x30, 0x09, 0xc8, 0x32, 0x0f, 0xed,
0xb4, 0x07, 0xb1, 0xa0, 0x05, 0x1b, 0x19, 0x77, 0x6e, 0x57, 0xdd, 0x98, 0x6b, 0x7f, 0xae, 0x83, 0x41, 0x2c, 0x68, 0xc9, 0x86, 0xc6, 0xed, 0x93, 0xba, 0x93, 0xb9, 0xf6, 0xe7, 0x3a, 0x08, 0x88,
0x80, 0x58, 0x6e, 0x64, 0x0f, 0xaa, 0xcf, 0xa4, 0xb1, 0x66, 0xd1, 0xe4, 0xad, 0x75, 0xa8, 0x8f, 0xc5, 0x44, 0xf6, 0xa0, 0xfe, 0x4c, 0x1a, 0x6b, 0xe6, 0x4d, 0xde, 0x5a, 0x45, 0xf5, 0x91, 0xb1,
0x8c, 0x9d, 0xae, 0x2f, 0xac, 0x2e, 0x5d, 0x0e, 0xcf, 0xa1, 0xab, 0x50, 0xcf, 0x26, 0x9c, 0x09, 0xc3, 0xf5, 0x84, 0xd5, 0x95, 0xcb, 0xe1, 0x79, 0xe8, 0x2a, 0x34, 0xf3, 0x31, 0x67, 0xc2, 0x0e,
0x3b, 0xe2, 0xaa, 0x1d, 0x75, 0x83, 0x5e, 0x83, 0x6c, 0xfa, 0x8b, 0x81, 0x42, 0x03, 0x68, 0x18, 0xb9, 0x4a, 0xa2, 0x4e, 0xd0, 0xdd, 0x20, 0xeb, 0xfe, 0xa0, 0xaf, 0x50, 0x1f, 0x36, 0x8c, 0xa5,
0x4b, 0x2d, 0xcf, 0x46, 0xa7, 0xce, 0xa4, 0xe2, 0x4c, 0x76, 0xfe, 0x62, 0x72, 0x44, 0x95, 0xe2, 0x96, 0xe7, 0xc3, 0x53, 0x67, 0x52, 0x73, 0x26, 0x3b, 0x7f, 0x31, 0x39, 0xa2, 0x4a, 0x71, 0x31,
0x62, 0x4c, 0x62, 0xcf, 0x3a, 0x9f, 0xce, 0x5b, 0x80, 0x65, 0x00, 0xd4, 0x82, 0xe8, 0x03, 0x2b, 0x22, 0xb1, 0xe7, 0x7a, 0x9f, 0x16, 0x44, 0x96, 0x8e, 0x92, 0x86, 0x2b, 0x74, 0xb6, 0x6c, 0xbf,
0xdd, 0x72, 0xea, 0x64, 0xfe, 0x13, 0x3d, 0x84, 0xea, 0x8c, 0x4e, 0xa6, 0xcc, 0x55, 0x1e, 0xa7, 0x05, 0x58, 0x44, 0x9a, 0xdd, 0x7f, 0x60, 0x95, 0x1b, 0x57, 0x93, 0xcc, 0x96, 0xe8, 0x21, 0xd4,
0x37, 0x2e, 0xa8, 0x72, 0x30, 0x7c, 0xa9, 0x17, 0xaf, 0x81, 0xd7, 0xef, 0x86, 0x8f, 0x82, 0xce, 0xa7, 0x74, 0x3c, 0x61, 0x6e, 0x08, 0x71, 0x76, 0xe3, 0x82, 0x72, 0xfb, 0x83, 0x97, 0x7a, 0xfe,
0x47, 0x88, 0x57, 0x8c, 0xff, 0xc7, 0xee, 0x51, 0x13, 0x42, 0x57, 0x50, 0xd4, 0x6b, 0x90, 0x90, 0x30, 0x3c, 0x7e, 0x37, 0x7c, 0x14, 0xb4, 0x3f, 0x42, 0xbc, 0x14, 0xe5, 0x7f, 0xbc, 0x06, 0xb4,
0xab, 0x3b, 0x7d, 0x40, 0xe7, 0x67, 0xa0, 0x4d, 0xa8, 0x3c, 0x9d, 0x4e, 0x26, 0xad, 0x4b, 0xe8, 0x09, 0xa1, 0xab, 0x2c, 0xea, 0x6e, 0x90, 0x90, 0xab, 0x3b, 0x3d, 0x40, 0xe7, 0x35, 0xd0, 0x3a,
0x32, 0xd4, 0x8f, 0xa7, 0x27, 0x1e, 0x6e, 0x05, 0x28, 0x86, 0x8d, 0xe7, 0xac, 0xfc, 0x24, 0x75, 0xd4, 0x9e, 0x4e, 0xc6, 0xe3, 0xd6, 0x25, 0x74, 0x19, 0x9a, 0xc7, 0x93, 0x13, 0x4f, 0x6e, 0x05,
0xde, 0x0a, 0x51, 0x1d, 0xaa, 0x84, 0x8d, 0xd9, 0xe7, 0x56, 0xb4, 0xff, 0x00, 0xb6, 0x32, 0x59, 0x28, 0x86, 0xb5, 0xe7, 0xac, 0xfa, 0x24, 0x75, 0xd1, 0x0a, 0x51, 0x13, 0xea, 0x84, 0x8d, 0xd8,
0xac, 0x49, 0x38, 0x0c, 0xde, 0x44, 0xb9, 0x30, 0xdf, 0x43, 0xf4, 0x3a, 0x25, 0xb4, 0xc4, 0x07, 0xe7, 0x56, 0xb4, 0xff, 0x00, 0xb6, 0x72, 0x59, 0xae, 0x48, 0x38, 0x08, 0xde, 0x44, 0x85, 0x30,
0xf3, 0xff, 0x9e, 0x28, 0x85, 0x0f, 0x85, 0x39, 0xa9, 0xb9, 0xaf, 0xf3, 0xfe, 0x8f, 0x00, 0x00, 0xdf, 0x43, 0xf4, 0x3a, 0x23, 0xb4, 0xc2, 0x07, 0xb3, 0xbb, 0x27, 0x4a, 0xe1, 0x43, 0x61, 0x4e,
0x00, 0xff, 0xff, 0x32, 0xd5, 0xea, 0x6d, 0x2e, 0x04, 0x00, 0x00, 0x1a, 0xee, 0x7f, 0xbd, 0xff, 0x23, 0x00, 0x00, 0xff, 0xff, 0x83, 0x2b, 0x1c, 0x4c, 0x40, 0x04,
0x00, 0x00,
} }

View File

@ -49,4 +49,7 @@ message Config {
} }
repeated HostMapping static_hosts = 4; repeated HostMapping static_hosts = 4;
// Tag is the inbound tag of DNS client.
string tag = 6;
} }

View File

@ -10,6 +10,7 @@ import (
"v2ray.com/core" "v2ray.com/core"
"v2ray.com/core/common" "v2ray.com/core/common"
"v2ray.com/core/common/net" "v2ray.com/core/common/net"
"v2ray.com/core/common/session"
"v2ray.com/core/common/strmatcher" "v2ray.com/core/common/strmatcher"
"v2ray.com/core/features" "v2ray.com/core/features"
"v2ray.com/core/features/dns" "v2ray.com/core/features/dns"
@ -24,12 +25,14 @@ type Server struct {
clientIP net.IP clientIP net.IP
domainMatcher strmatcher.IndexMatcher domainMatcher strmatcher.IndexMatcher
domainIndexMap map[uint32]uint32 domainIndexMap map[uint32]uint32
tag string
} }
// New creates a new DNS server with given configuration. // New creates a new DNS server with given configuration.
func New(ctx context.Context, config *Config) (*Server, error) { func New(ctx context.Context, config *Config) (*Server, error) {
server := &Server{ server := &Server{
clients: make([]Client, 0, len(config.NameServers)+len(config.NameServer)), clients: make([]Client, 0, len(config.NameServers)+len(config.NameServer)),
tag: config.Tag,
} }
if len(config.ClientIp) > 0 { if len(config.ClientIp) > 0 {
if len(config.ClientIp) != 4 && len(config.ClientIp) != 16 { if len(config.ClientIp) != 4 && len(config.ClientIp) != 16 {
@ -118,6 +121,11 @@ func (s *Server) Close() error {
func (s *Server) queryIPTimeout(client Client, domain string, option IPOption) ([]net.IP, error) { func (s *Server) queryIPTimeout(client Client, domain string, option IPOption) ([]net.IP, error) {
ctx, cancel := context.WithTimeout(context.Background(), time.Second*4) ctx, cancel := context.WithTimeout(context.Background(), time.Second*4)
if len(s.tag) > 0 {
ctx = session.ContextWithInbound(ctx, &session.Inbound{
Tag: s.tag,
})
}
ips, err := client.QueryIP(ctx, domain, option) ips, err := client.QueryIP(ctx, domain, option)
cancel() cancel()
return ips, err return ips, err

View File

@ -303,7 +303,11 @@ func (s *ClassicNameServer) sendQuery(ctx context.Context, domain string, option
for _, msg := range msgs { for _, msg := range msgs {
b, err := dns.PackMessage(msg) b, err := dns.PackMessage(msg)
common.Must(err) common.Must(err)
s.udpServer.Dispatch(context.Background(), s.address, b) udpCtx := context.Background()
if inbound := session.InboundFromContext(ctx); inbound != nil {
udpCtx = session.ContextWithInbound(udpCtx, inbound)
}
s.udpServer.Dispatch(udpCtx, s.address, b)
} }
} }