syntax = "proto3"; package v2ray.core.app.dns; option csharp_namespace = "V2Ray.Core.App.Dns"; option go_package = "github.com/v2fly/v2ray-core/v4/app/dns"; option java_package = "com.v2ray.core.app.dns"; option java_multiple_files = true; import "common/net/address.proto"; import "common/net/destination.proto"; import "app/router/config.proto"; message NameServer { v2ray.core.common.net.Endpoint address = 1; bytes client_ip = 5; bool skipFallback = 6; message PriorityDomain { DomainMatchingType type = 1; string domain = 2; } message OriginalRule { string rule = 1; uint32 size = 2; } repeated PriorityDomain prioritized_domain = 2; repeated v2ray.core.app.router.GeoIP geoip = 3; repeated OriginalRule original_rules = 4; } enum DomainMatchingType { Full = 0; Subdomain = 1; Keyword = 2; Regex = 3; } enum QueryStrategy { USE_IP = 0; USE_IP4 = 1; USE_IP6 = 2; } message Config { // Nameservers used by this DNS. Only traditional UDP servers are support at // the moment. A special value 'localhost' as a domain address can be set to // use DNS on local system. repeated v2ray.core.common.net.Endpoint NameServers = 1 [deprecated = true]; // NameServer list used by this DNS client. repeated NameServer name_server = 5; // Static hosts. Domain to IP. // Deprecated. Use static_hosts. map Hosts = 2 [deprecated = true]; // Client IP for EDNS client subnet. Must be 4 bytes (IPv4) or 16 bytes // (IPv6). bytes client_ip = 3; message HostMapping { DomainMatchingType type = 1; string domain = 2; repeated bytes ip = 3; // ProxiedDomain indicates the mapped domain has the same IP address on this // domain. V2Ray will use this domain for IP queries. This field is only // effective if ip is empty. string proxied_domain = 4; } repeated HostMapping static_hosts = 4; // Tag is the inbound tag of DNS client. string tag = 6; reserved 7; // DisableCache disables DNS cache bool disableCache = 8; QueryStrategy query_strategy = 9; bool disableFallback = 10; }