dns_conf: add short option for server options

This commit is contained in:
Nick Peng
2023-09-24 22:55:10 +08:00
parent 1dd01ff4bd
commit 51c81513ab
2 changed files with 58 additions and 57 deletions

View File

@@ -193,9 +193,9 @@ log-level info
# -blacklist-ip: filter result with blacklist ip # -blacklist-ip: filter result with blacklist ip
# -whitelist-ip: filter result with whitelist ip, result in whitelist-ip will be accepted. # -whitelist-ip: filter result with whitelist ip, result in whitelist-ip will be accepted.
# -check-edns: result must exist edns RR, or discard result. # -check-edns: result must exist edns RR, or discard result.
# -group [group]: set server to group, use with nameserver /domain/group. # g|-group [group]: set server to group, use with nameserver /domain/group.
# -exclude-default-group: exclude this server from default group. # e|-exclude-default-group: exclude this server from default group.
# -proxy [proxy-name]: use proxy to connect to server. # p|-proxy [proxy-name]: use proxy to connect to server.
# -bootstrap-dns: set as bootstrap dns server. # -bootstrap-dns: set as bootstrap dns server.
# -set-mark: set mark on packets. # -set-mark: set mark on packets.
# -subnet [ip/subnet]: set edns client subnet. # -subnet [ip/subnet]: set edns client subnet.
@@ -214,8 +214,8 @@ log-level info
# -spki-pin: TLS spki pin to verify. # -spki-pin: TLS spki pin to verify.
# -tls-host-verify: cert hostname to verify. # -tls-host-verify: cert hostname to verify.
# -host-name: TLS sni hostname. # -host-name: TLS sni hostname.
# -no-check-certificate: no check certificate. # k|-no-check-certificate: no check certificate.
# -proxy [proxy-name]: use proxy to connect to server. # p|-proxy [proxy-name]: use proxy to connect to server.
# -bootstrap-dns: set as bootstrap dns server. # -bootstrap-dns: set as bootstrap dns server.
# Get SPKI with this command: # Get SPKI with this command:
# echo | openssl s_client -connect '[ip]:853' | openssl x509 -pubkey -noout | openssl pkey -pubin -outform der | openssl dgst -sha256 -binary | openssl enc -base64 # echo | openssl s_client -connect '[ip]:853' | openssl x509 -pubkey -noout | openssl pkey -pubin -outform der | openssl dgst -sha256 -binary | openssl enc -base64
@@ -229,8 +229,8 @@ log-level info
# -tls-host-verify: cert hostname to verify. # -tls-host-verify: cert hostname to verify.
# -host-name: TLS sni hostname. # -host-name: TLS sni hostname.
# -http-host: http host. # -http-host: http host.
# -no-check-certificate: no check certificate. # k|-no-check-certificate: no check certificate.
# -proxy [proxy-name]: use proxy to connect to server. # p|-proxy [proxy-name]: use proxy to connect to server.
# -bootstrap-dns: set as bootstrap dns server. # -bootstrap-dns: set as bootstrap dns server.
# default port is 443 # default port is 443
# server-https https://cloudflare-dns.com/dns-query # server-https https://cloudflare-dns.com/dns-query

View File

@@ -509,26 +509,26 @@ static int _config_server(int argc, char *argv[], dns_server_type_t type, int de
int ttl = 0; int ttl = 0;
/* clang-format off */ /* clang-format off */
static struct option long_options[] = { static struct option long_options[] = {
{"blacklist-ip", no_argument, NULL, 'b'}, /* filtering with blacklist-ip */ {"drop-packet-latency", required_argument, NULL, 'D'},
{"whitelist-ip", no_argument, NULL, 'w'}, /* filtering with whitelist-ip */ {"exclude-default-group", no_argument, NULL, 'e'}, /* exclude this from default group */
{"group", required_argument, NULL, 'g'}, /* add to group */
{"proxy", required_argument, NULL, 'p'}, /* proxy server */
{"no-check-certificate", no_argument, NULL, 'k'}, /* do not check certificate */
{"bootstrap-dns", no_argument, NULL, 'b'}, /* set as bootstrap dns */
#ifdef FEATURE_CHECK_EDNS #ifdef FEATURE_CHECK_EDNS
/* experimental feature */ /* experimental feature */
{"check-edns", no_argument, NULL, 'e'}, /* check edns */ {"check-edns", no_argument, NULL, 251}, /* check edns */
#endif #endif
{"drop-packet-latency", required_argument, NULL, 'D'}, {"whitelist-ip", no_argument, NULL, 252}, /* filtering with whitelist-ip */
{"spki-pin", required_argument, NULL, 'p'}, /* check SPKI pin */ {"blacklist-ip", no_argument, NULL, 253}, /* filtering with blacklist-ip */
{"host-name", required_argument, NULL, 'h'}, /* host name */
{"http-host", required_argument, NULL, 'H'}, /* http host */
{"no-check-certificate", no_argument, NULL, 'N'}, /* do not check certificate */
{"tls-host-verify", required_argument, NULL, 'V' }, /* verify tls hostname */
{"group", required_argument, NULL, 'g'}, /* add to group */
{"proxy", required_argument, NULL, 'P'}, /* proxy server */
{"exclude-default-group", no_argument, NULL, 'E'}, /* exclude this from default group */
{"set-mark", required_argument, NULL, 254}, /* set mark */ {"set-mark", required_argument, NULL, 254}, /* set mark */
{"bootstrap-dns", no_argument, NULL, 255}, /* set as bootstrap dns */
{"subnet", required_argument, NULL, 256}, /* set subnet */ {"subnet", required_argument, NULL, 256}, /* set subnet */
{"hitchhiking", no_argument, NULL, 257}, /* hitchhiking */ {"hitchhiking", no_argument, NULL, 257}, /* hitchhiking */
{"host-ip", required_argument, NULL, 258}, /* host ip */ {"host-ip", required_argument, NULL, 258}, /* host ip */
{"spki-pin", required_argument, NULL, 259}, /* check SPKI pin */
{"host-name", required_argument, NULL, 260}, /* host name */
{"http-host", required_argument, NULL, 261}, /* http host */
{"tls-host-verify", required_argument, NULL, 262 }, /* verify tls hostname */
{NULL, no_argument, NULL, 0} {NULL, no_argument, NULL, 0}
}; };
/* clang-format on */ /* clang-format on */
@@ -592,40 +592,17 @@ static int _config_server(int argc, char *argv[], dns_server_type_t type, int de
/* process extra options */ /* process extra options */
optind = 1; optind = 1;
while (1) { while (1) {
opt = getopt_long_only(argc, argv, "", long_options, NULL); opt = getopt_long_only(argc, argv, "D:kg:p:eb", long_options, NULL);
if (opt == -1) { if (opt == -1) {
break; break;
} }
switch (opt) { switch (opt) {
case 'b': {
result_flag |= DNSSERVER_FLAG_BLACKLIST_IP;
break;
}
case 'w': {
result_flag |= DNSSERVER_FLAG_WHITELIST_IP;
break;
}
case 'e': {
result_flag |= DNSSERVER_FLAG_CHECK_EDNS;
break;
}
case 'h': {
safe_strncpy(server->hostname, optarg, DNS_MAX_CNAME_LEN);
if (strncmp(server->hostname, "-", 2) == 0) {
server->hostname[0] = '\0';
}
break;
}
case 'H': {
safe_strncpy(server->httphost, optarg, DNS_MAX_CNAME_LEN);
break;
}
case 'D': { case 'D': {
drop_packet_latency_ms = atoi(optarg); drop_packet_latency_ms = atoi(optarg);
break; break;
} }
case 'E': { case 'e': {
server_flag |= SERVER_FLAG_EXCLUDE_DEFAULT; server_flag |= SERVER_FLAG_EXCLUDE_DEFAULT;
break; break;
} }
@@ -637,10 +614,6 @@ static int _config_server(int argc, char *argv[], dns_server_type_t type, int de
break; break;
} }
case 'p': { case 'p': {
safe_strncpy(server->spki, optarg, DNS_MAX_SPKI_LEN);
break;
}
case 'P': {
if (_dns_conf_get_proxy_name(optarg) == NULL) { if (_dns_conf_get_proxy_name(optarg) == NULL) {
tlog(TLOG_ERROR, "add proxy server failed."); tlog(TLOG_ERROR, "add proxy server failed.");
goto errout; goto errout;
@@ -648,22 +621,31 @@ static int _config_server(int argc, char *argv[], dns_server_type_t type, int de
safe_strncpy(server->proxyname, optarg, PROXY_NAME_LEN); safe_strncpy(server->proxyname, optarg, PROXY_NAME_LEN);
break; break;
} }
case 'V': {
safe_strncpy(server->tls_host_verify, optarg, DNS_MAX_CNAME_LEN); case 'k': {
server->skip_check_cert = 1;
break; break;
} }
case 'N': { case 'b': {
server->skip_check_cert = 1; is_bootstrap_dns = 1;
break;
}
case 251: {
result_flag |= DNSSERVER_FLAG_CHECK_EDNS;
break;
}
case 252: {
result_flag |= DNSSERVER_FLAG_WHITELIST_IP;
break;
}
case 253: {
result_flag |= DNSSERVER_FLAG_BLACKLIST_IP;
break; break;
} }
case 254: { case 254: {
server->set_mark = atoll(optarg); server->set_mark = atoll(optarg);
break; break;
} }
case 255: {
is_bootstrap_dns = 1;
break;
}
case 256: { case 256: {
_conf_client_subnet(optarg, &server->ipv4_ecs, &server->ipv6_ecs); _conf_client_subnet(optarg, &server->ipv4_ecs, &server->ipv6_ecs);
break; break;
@@ -679,6 +661,25 @@ static int _config_server(int argc, char *argv[], dns_server_type_t type, int de
} }
break; break;
} }
case 259: {
safe_strncpy(server->spki, optarg, DNS_MAX_SPKI_LEN);
break;
}
case 260: {
safe_strncpy(server->hostname, optarg, DNS_MAX_CNAME_LEN);
if (strncmp(server->hostname, "-", 2) == 0) {
server->hostname[0] = '\0';
}
break;
}
case 261: {
safe_strncpy(server->httphost, optarg, DNS_MAX_CNAME_LEN);
break;
}
case 262: {
safe_strncpy(server->tls_host_verify, optarg, DNS_MAX_CNAME_LEN);
break;
}
default: default:
break; break;
} }