1
0
mirror of https://github.com/v2fly/v2ray-core.git synced 2024-06-26 09:25:23 +00:00

simplify client ip design

This commit is contained in:
Darien Raymond 2018-06-26 23:23:59 +02:00
parent d5f7728acd
commit 4477e7436b
No known key found for this signature in database
GPG Key ID: 7251FFA14BB18169
4 changed files with 56 additions and 118 deletions

View File

@ -36,7 +36,7 @@ func (x Config_HostMapping_Type) String() string {
return proto.EnumName(Config_HostMapping_Type_name, int32(x))
}
func (Config_HostMapping_Type) EnumDescriptor() ([]byte, []int) {
return fileDescriptor_config_299ae69458dda3a0, []int{0, 2, 0}
return fileDescriptor_config_2b74f789a4ce2a14, []int{0, 1, 0}
}
type Config struct {
@ -46,8 +46,8 @@ type Config struct {
// Static hosts. Domain to IP.
// 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.
// Client IP for EDNS client subnet.
ClientIp *Config_ClientIP `protobuf:"bytes,3,opt,name=client_ip,json=clientIp,proto3" json:"client_ip,omitempty"`
// 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"`
StaticHosts []*Config_HostMapping `protobuf:"bytes,4,rep,name=static_hosts,json=staticHosts,proto3" json:"static_hosts,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
@ -58,7 +58,7 @@ func (m *Config) Reset() { *m = Config{} }
func (m *Config) String() string { return proto.CompactTextString(m) }
func (*Config) ProtoMessage() {}
func (*Config) Descriptor() ([]byte, []int) {
return fileDescriptor_config_299ae69458dda3a0, []int{0}
return fileDescriptor_config_2b74f789a4ce2a14, []int{0}
}
func (m *Config) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_Config.Unmarshal(m, b)
@ -93,7 +93,7 @@ func (m *Config) GetHosts() map[string]*net.IPOrDomain {
return nil
}
func (m *Config) GetClientIp() *Config_ClientIP {
func (m *Config) GetClientIp() []byte {
if m != nil {
return m.ClientIp
}
@ -107,54 +107,6 @@ func (m *Config) GetStaticHosts() []*Config_HostMapping {
return nil
}
type Config_ClientIP struct {
// IPv4 address of the client. Must be 4 bytes.
V4 []byte `protobuf:"bytes,1,opt,name=v4,proto3" json:"v4,omitempty"`
// IPv6 address of the client. Must be 4 bytes.
V6 []byte `protobuf:"bytes,2,opt,name=v6,proto3" json:"v6,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
}
func (m *Config_ClientIP) Reset() { *m = Config_ClientIP{} }
func (m *Config_ClientIP) String() string { return proto.CompactTextString(m) }
func (*Config_ClientIP) ProtoMessage() {}
func (*Config_ClientIP) Descriptor() ([]byte, []int) {
return fileDescriptor_config_299ae69458dda3a0, []int{0, 1}
}
func (m *Config_ClientIP) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_Config_ClientIP.Unmarshal(m, b)
}
func (m *Config_ClientIP) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
return xxx_messageInfo_Config_ClientIP.Marshal(b, m, deterministic)
}
func (dst *Config_ClientIP) XXX_Merge(src proto.Message) {
xxx_messageInfo_Config_ClientIP.Merge(dst, src)
}
func (m *Config_ClientIP) XXX_Size() int {
return xxx_messageInfo_Config_ClientIP.Size(m)
}
func (m *Config_ClientIP) XXX_DiscardUnknown() {
xxx_messageInfo_Config_ClientIP.DiscardUnknown(m)
}
var xxx_messageInfo_Config_ClientIP proto.InternalMessageInfo
func (m *Config_ClientIP) GetV4() []byte {
if m != nil {
return m.V4
}
return nil
}
func (m *Config_ClientIP) GetV6() []byte {
if m != nil {
return m.V6
}
return nil
}
type Config_HostMapping struct {
Type Config_HostMapping_Type `protobuf:"varint,1,opt,name=type,proto3,enum=v2ray.core.app.dns.Config_HostMapping_Type" json:"type,omitempty"`
Domain string `protobuf:"bytes,2,opt,name=domain,proto3" json:"domain,omitempty"`
@ -168,7 +120,7 @@ func (m *Config_HostMapping) Reset() { *m = Config_HostMapping{} }
func (m *Config_HostMapping) String() string { return proto.CompactTextString(m) }
func (*Config_HostMapping) ProtoMessage() {}
func (*Config_HostMapping) Descriptor() ([]byte, []int) {
return fileDescriptor_config_299ae69458dda3a0, []int{0, 2}
return fileDescriptor_config_2b74f789a4ce2a14, []int{0, 1}
}
func (m *Config_HostMapping) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_Config_HostMapping.Unmarshal(m, b)
@ -212,43 +164,40 @@ func (m *Config_HostMapping) GetIp() [][]byte {
func init() {
proto.RegisterType((*Config)(nil), "v2ray.core.app.dns.Config")
proto.RegisterMapType((map[string]*net.IPOrDomain)(nil), "v2ray.core.app.dns.Config.HostsEntry")
proto.RegisterType((*Config_ClientIP)(nil), "v2ray.core.app.dns.Config.ClientIP")
proto.RegisterType((*Config_HostMapping)(nil), "v2ray.core.app.dns.Config.HostMapping")
proto.RegisterEnum("v2ray.core.app.dns.Config_HostMapping_Type", Config_HostMapping_Type_name, Config_HostMapping_Type_value)
}
func init() {
proto.RegisterFile("v2ray.com/core/app/dns/config.proto", fileDescriptor_config_299ae69458dda3a0)
proto.RegisterFile("v2ray.com/core/app/dns/config.proto", fileDescriptor_config_2b74f789a4ce2a14)
}
var fileDescriptor_config_299ae69458dda3a0 = []byte{
// 444 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x92, 0xd1, 0x6e, 0xd3, 0x30,
0x14, 0x86, 0x71, 0x92, 0x55, 0xed, 0xc9, 0x98, 0x2a, 0x5f, 0x4c, 0x51, 0x6e, 0x56, 0x36, 0x01,
0x15, 0x93, 0x1c, 0x29, 0x54, 0x03, 0x71, 0x33, 0xb6, 0x6e, 0x88, 0x5e, 0x00, 0x95, 0x87, 0xb8,
0x80, 0x8b, 0xc9, 0x4b, 0xcc, 0xb0, 0x68, 0x6c, 0xcb, 0x76, 0x23, 0xe5, 0x49, 0x78, 0x07, 0x9e,
0x81, 0x87, 0x43, 0xb1, 0x99, 0xa8, 0x80, 0x01, 0x77, 0x3d, 0xea, 0xff, 0x9d, 0xff, 0x3b, 0x56,
0xe0, 0xa0, 0x2d, 0x0d, 0xeb, 0x48, 0xa5, 0x9a, 0xa2, 0x52, 0x86, 0x17, 0x4c, 0xeb, 0xa2, 0x96,
0xb6, 0xa8, 0x94, 0xfc, 0x28, 0xae, 0x89, 0x36, 0xca, 0x29, 0x8c, 0x6f, 0x42, 0x86, 0x13, 0xa6,
0x35, 0xa9, 0xa5, 0xcd, 0x1f, 0xfe, 0x02, 0x56, 0xaa, 0x69, 0x94, 0x2c, 0x24, 0x77, 0x05, 0xab,
0x6b, 0xc3, 0xad, 0x0d, 0x70, 0x7e, 0x78, 0x7b, 0xb0, 0xe6, 0xd6, 0x09, 0xc9, 0x9c, 0x50, 0x32,
0x84, 0xf7, 0xbf, 0x25, 0x30, 0x98, 0xfb, 0x6a, 0x7c, 0x02, 0xe9, 0x6b, 0xd6, 0xf0, 0x0b, 0x6e,
0x5a, 0x6e, 0x6c, 0x86, 0x26, 0xf1, 0x34, 0x2d, 0xf7, 0xc8, 0x86, 0x4a, 0xd8, 0x44, 0x24, 0x77,
0xe4, 0x5c, 0xd6, 0x5a, 0x09, 0xe9, 0xe8, 0x26, 0x83, 0x8f, 0x61, 0xeb, 0xa5, 0xb2, 0xce, 0x66,
0x91, 0x87, 0xef, 0x93, 0xdf, 0xef, 0x20, 0xa1, 0x8d, 0xf8, 0xdc, 0xb9, 0x74, 0xa6, 0x3b, 0x8d,
0x32, 0x44, 0x03, 0x87, 0x9f, 0xc3, 0xa8, 0x5a, 0x09, 0x2e, 0xdd, 0xa5, 0xd0, 0x59, 0x3c, 0x41,
0xd3, 0xb4, 0x3c, 0xf8, 0xcb, 0x92, 0xb9, 0xcf, 0x2e, 0x96, 0x74, 0x18, 0xa8, 0x85, 0xc6, 0x0b,
0xd8, 0xb6, 0x8e, 0x39, 0x51, 0x5d, 0x7e, 0xf2, 0x26, 0x89, 0x37, 0x79, 0xf0, 0x0f, 0x93, 0x57,
0x4c, 0x6b, 0x21, 0xaf, 0x69, 0x1a, 0x58, 0x2f, 0x93, 0x7f, 0x00, 0xf8, 0x69, 0x89, 0xc7, 0x10,
0x7f, 0xe6, 0x5d, 0x86, 0x26, 0x68, 0x3a, 0xa2, 0xfd, 0x4f, 0xfc, 0x04, 0xb6, 0x5a, 0xb6, 0x5a,
0xf3, 0x2c, 0xf2, 0xa2, 0xf7, 0x6e, 0x79, 0xaa, 0xc5, 0xf2, 0x8d, 0x39, 0x53, 0x0d, 0x13, 0x92,
0x86, 0xfc, 0xb3, 0xe8, 0x29, 0xca, 0x1f, 0xc1, 0xf0, 0xc6, 0x1e, 0xef, 0x40, 0xd4, 0xce, 0xfc,
0xe6, 0x6d, 0x1a, 0xb5, 0x33, 0x3f, 0x1f, 0xf9, 0xad, 0xfd, 0x7c, 0x94, 0x7f, 0x41, 0x90, 0x6e,
0x58, 0xe2, 0x63, 0x48, 0x5c, 0xa7, 0xb9, 0x27, 0x76, 0xca, 0xc3, 0xff, 0xbb, 0x8d, 0xbc, 0xed,
0x34, 0xa7, 0x1e, 0xc4, 0xbb, 0x30, 0xa8, 0xbd, 0x91, 0x2f, 0x19, 0xd1, 0x1f, 0x53, 0x5f, 0xec,
0xdf, 0x3d, 0xee, 0x8b, 0x85, 0xde, 0xdf, 0x83, 0xa4, 0xa7, 0xf0, 0x10, 0x92, 0x17, 0xeb, 0xd5,
0x6a, 0x7c, 0x07, 0xdf, 0x85, 0xd1, 0xc5, 0xfa, 0x2a, 0x9c, 0x33, 0x46, 0xa7, 0x33, 0xd8, 0xad,
0x54, 0xf3, 0x07, 0x81, 0x25, 0x7a, 0x1f, 0xd7, 0xd2, 0x7e, 0x8d, 0xf0, 0xbb, 0x92, 0xb2, 0x8e,
0xcc, 0xfb, 0xff, 0x4e, 0xb4, 0x26, 0x67, 0xd2, 0x5e, 0x0d, 0xfc, 0xb7, 0xf7, 0xf8, 0x7b, 0x00,
0x00, 0x00, 0xff, 0xff, 0xee, 0x90, 0x3f, 0xc9, 0x0c, 0x03, 0x00, 0x00,
var fileDescriptor_config_2b74f789a4ce2a14 = []byte{
// 416 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x92, 0xdd, 0x6a, 0x14, 0x31,
0x14, 0xc7, 0xcd, 0xcc, 0x76, 0xe9, 0x9e, 0x59, 0xcb, 0x92, 0x8b, 0x32, 0xac, 0x17, 0x5d, 0x2b,
0xea, 0x40, 0x21, 0x03, 0xa3, 0xa0, 0x78, 0x53, 0xfa, 0x25, 0xee, 0x85, 0x5a, 0x52, 0xf1, 0x42,
0x2f, 0x4a, 0x3a, 0x89, 0x35, 0xb8, 0x73, 0x12, 0x92, 0xec, 0xc2, 0x3c, 0x89, 0xef, 0xe0, 0xab,
0xf9, 0x12, 0xb2, 0x89, 0xe2, 0xa2, 0x16, 0x7b, 0x37, 0x1f, 0xff, 0xdf, 0xf9, 0xfd, 0x73, 0x08,
0x3c, 0x58, 0x35, 0x4e, 0xf4, 0xac, 0x35, 0x5d, 0xdd, 0x1a, 0xa7, 0x6a, 0x61, 0x6d, 0x2d, 0xd1,
0xd7, 0xad, 0xc1, 0x4f, 0xfa, 0x9a, 0x59, 0x67, 0x82, 0xa1, 0xf4, 0x57, 0xc8, 0x29, 0x26, 0xac,
0x65, 0x12, 0xfd, 0xf4, 0xf1, 0x1f, 0x60, 0x6b, 0xba, 0xce, 0x60, 0x8d, 0x2a, 0xd4, 0x42, 0x4a,
0xa7, 0xbc, 0x4f, 0xf0, 0xf4, 0xe0, 0xe6, 0xa0, 0x54, 0x3e, 0x68, 0x14, 0x41, 0x1b, 0x4c, 0xe1,
0xfd, 0xef, 0x39, 0x0c, 0x4f, 0xa2, 0x9a, 0x1e, 0x41, 0xf1, 0x46, 0x74, 0xea, 0x42, 0xb9, 0x95,
0x72, 0xbe, 0x24, 0xb3, 0xbc, 0x2a, 0x9a, 0x3d, 0xb6, 0x51, 0x25, 0x4d, 0x62, 0xa8, 0x02, 0x3b,
0x43, 0x69, 0x8d, 0xc6, 0xc0, 0x37, 0x19, 0x7a, 0x08, 0x5b, 0xaf, 0x8c, 0x0f, 0xbe, 0xcc, 0x22,
0xfc, 0x90, 0xfd, 0x7d, 0x0e, 0x96, 0x6c, 0x2c, 0xe6, 0xce, 0x30, 0xb8, 0xfe, 0x38, 0x2b, 0x09,
0x4f, 0x1c, 0xbd, 0x07, 0xa3, 0x76, 0xa1, 0x15, 0x86, 0x4b, 0x6d, 0xcb, 0x7c, 0x46, 0xaa, 0x31,
0xdf, 0x4e, 0x1f, 0xe6, 0x96, 0xce, 0x61, 0xec, 0x83, 0x08, 0xba, 0xbd, 0xfc, 0x1c, 0x25, 0x83,
0x28, 0x79, 0xf4, 0x1f, 0xc9, 0x6b, 0x61, 0xad, 0xc6, 0x6b, 0x5e, 0x24, 0x36, 0x7a, 0xa6, 0x1f,
0x01, 0x7e, 0x17, 0xa0, 0x13, 0xc8, 0xbf, 0xa8, 0xbe, 0x24, 0x33, 0x52, 0x8d, 0xf8, 0xfa, 0x91,
0x3e, 0x83, 0xad, 0x95, 0x58, 0x2c, 0x55, 0x99, 0xcd, 0x48, 0x55, 0x34, 0xf7, 0x6f, 0xd8, 0xc2,
0xfc, 0xfc, 0xad, 0x3b, 0x35, 0x9d, 0xd0, 0xc8, 0x53, 0xfe, 0x45, 0xf6, 0x9c, 0x4c, 0xbf, 0x12,
0x28, 0x36, 0xcc, 0xf4, 0x10, 0x06, 0xa1, 0xb7, 0x2a, 0xce, 0xdf, 0x69, 0x0e, 0x6e, 0xd7, 0x97,
0xbd, 0xeb, 0xad, 0xe2, 0x11, 0xa4, 0xbb, 0x30, 0x94, 0xd1, 0x12, 0xeb, 0x8c, 0xf8, 0xcf, 0x37,
0xba, 0x03, 0x59, 0x5c, 0x53, 0x5e, 0x8d, 0x79, 0xa6, 0xed, 0xfe, 0x1e, 0x0c, 0xd6, 0x14, 0xdd,
0x86, 0xc1, 0xcb, 0xe5, 0x62, 0x31, 0xb9, 0x43, 0xef, 0xc2, 0xe8, 0x62, 0x79, 0x95, 0x2a, 0x4e,
0xc8, 0xf1, 0x53, 0xd8, 0x6d, 0x4d, 0xf7, 0x8f, 0x02, 0xe7, 0xe4, 0x43, 0x2e, 0xd1, 0x7f, 0xcb,
0xe8, 0xfb, 0x86, 0x8b, 0x9e, 0x9d, 0xac, 0xff, 0x1d, 0x59, 0xcb, 0x4e, 0xd1, 0x5f, 0x0d, 0xe3,
0x55, 0x79, 0xf2, 0x23, 0x00, 0x00, 0xff, 0xff, 0x3f, 0x30, 0x09, 0xcd, 0xbb, 0x02, 0x00, 0x00,
}

View File

@ -18,15 +18,8 @@ message Config {
// Deprecated. Use static_hosts.
map<string, v2ray.core.common.net.IPOrDomain> Hosts = 2 [deprecated = true];
message ClientIP {
// IPv4 address of the client. Must be 4 bytes.
bytes v4 = 1;
// IPv6 address of the client. Must be 4 bytes.
bytes v6 = 2;
}
// Client IP for EDNS client subnet.
ClientIP client_ip = 3;
// Client IP for EDNS client subnet. Must be 4 bytes (IPv4) or 16 bytes (IPv6).
bytes client_ip = 3;
message HostMapping {
enum Type {

View File

@ -16,15 +16,18 @@ type Server struct {
sync.Mutex
hosts *StaticHosts
servers []NameServer
clientIP *Config_ClientIP
clientIP net.IP
}
func New(ctx context.Context, config *Config) (*Server, error) {
server := &Server{
servers: make([]NameServer, len(config.NameServers)),
}
if config.ClientIp != nil {
server.clientIP = config.ClientIp
if len(config.ClientIp) > 0 {
if len(config.ClientIp) != 4 && len(config.ClientIp) != 16 {
return nil, newError("unexpected IP length", len(config.ClientIp))
}
server.clientIP = net.IP(config.ClientIp)
}
hosts, err := NewStaticHosts(config.StaticHosts, config.Hosts)

View File

@ -37,10 +37,10 @@ type ClassicNameServer struct {
udpServer *udp.Dispatcher
cleanup *task.Periodic
reqID uint32
clientIP *Config_ClientIP
clientIP net.IP
}
func NewClassicNameServer(address net.Destination, dispatcher core.Dispatcher, clientIP *Config_ClientIP) *ClassicNameServer {
func NewClassicNameServer(address net.Destination, dispatcher core.Dispatcher, clientIP net.IP) *ClassicNameServer {
s := &ClassicNameServer{
address: address,
ips: make(map[string][]IPRecord),
@ -137,7 +137,7 @@ func (s *ClassicNameServer) updateIP(domain string, ips []IPRecord) {
}
func (s *ClassicNameServer) getMsgOptions() *dns.OPT {
if s.clientIP == nil {
if len(s.clientIP) == 0 {
return nil
}
@ -146,25 +146,18 @@ func (s *ClassicNameServer) getMsgOptions() *dns.OPT {
o.Hdr.Rrtype = dns.TypeOPT
o.SetUDPSize(1280)
if len(s.clientIP.V4) == 4 {
e := new(dns.EDNS0_SUBNET)
e.Code = dns.EDNS0SUBNET
e.Family = 1 // 1 for IPv4 source address, 2 for IPv6
e.SourceNetmask = 24 // 32 for IPV4, 128 for IPv6
e.SourceScope = 0
e.Address = net.IP(s.clientIP.V4)
o.Option = append(o.Option, e)
e := new(dns.EDNS0_SUBNET)
e.Code = dns.EDNS0SUBNET
if len(s.clientIP) == 4 {
e.Family = 1 // 1 for IPv4 source address, 2 for IPv6
} else {
e.Family = 2
}
if len(s.clientIP.V6) == 16 {
e := new(dns.EDNS0_SUBNET)
e.Code = dns.EDNS0SUBNET
e.Family = 2 // 1 for IPv4 source address, 2 for IPv6
e.SourceNetmask = 24 // 32 for IPV4, 128 for IPv6
e.SourceScope = 0
e.Address = net.IP(s.clientIP.V6)
o.Option = append(o.Option, e)
}
e.SourceNetmask = 24 // 32 for IPV4, 128 for IPv6
e.SourceScope = 0
e.Address = s.clientIP
o.Option = append(o.Option, e)
return o