OpenVPN 설명서에는 현재 다음 내용만 나와 있습니다.

This is a partial list of options which can currently be pushed: --route, --route-gateway, --route-delay, --redirect-gateway, --ip-win32, --dhcp-option, --inactive, --ping, --ping-exit, --ping-restart, --setenv, --persist-key, --persist-tun, --echo, --comp-lzo, --socket-flags, --sndbuf, --rcvbuf

그러나 고객에게 푸시할 수 있는 전체 옵션 목록을 얻으려면 어떻게 해야 합니까?

answer

일반적인 방법은 코드를 살펴보는 것입니다.

이 방법 pull_permission_maskinit.c는 (현재 2.3 버전 여기를 인용) 유효 플래그의 목록을 포함합니다 :

unsigned int flags =
      OPT_P_UP
    | OPT_P_ROUTE_EXTRAS
    | OPT_P_SOCKBUF
    | OPT_P_SOCKFLAGS
    | OPT_P_SETENV
    | OPT_P_SHAPER
    | OPT_P_TIMER
    | OPT_P_COMP
    | OPT_P_PERSIST
    | OPT_P_MESSAGES
    | OPT_P_EXPLICIT_NOTIFY
    | OPT_P_ECHO
    | OPT_P_PULL_MODE
    | OPT_P_PEER_ID;

--route-nopull클라이언트 측에서 설정되지 않은 경우 현재 다음 플래그가 추가로 허용됩니다.

flags |= (OPT_P_ROUTE | OPT_P_IPWIN32);

이제 이것을 options.c 의 옵션과 일치시켜야 합니다 . 위의 플래그 중 하나가 있는 각 옵션 VERIFY_PERMISSION은 이론적으로 클라이언트에 푸시될 수 있습니다. 물론 comp-lzo 와 같은 문제가 있을 수 있습니다 .

예를 들어 options.c의 다음 스니펫을 참조하세요.

else if (streq (p[0], "topology") && p[1])
    {
      VERIFY_PERMISSION (OPT_P_UP);
      options->topology = parse_topology (p[1], msglevel);
    }

OPT_P_UP위의 플래그 목록에 있으므로 "토폴로지"가 클라이언트에 푸시될 수 있습니다.