나는 server.conf에서 이것을 할 수 있다는 것을 알고 있습니다:
push "route 192.168.20.0 255.255.255.0"
그런데 경로를 동적으로 푸시하는 방법이 있나요? VPN 클라이언트에 필요한 모든 경로를 반환하는 API 호출이 있으므로 경로가 변경되면 클라이언트는 VPN 연결을 다시 시작하고 새 경로를 갖게 됩니다. 가능합니까? 어떻게? 서버측에서 관리하고 싶습니다.
답변1
사용자 정의 구성의 핵심은 다음을 사용하는 것입니다.클라이언트 연결옵션
vpn-endpoint.conf 발췌
script-security 2
client-connect /etc/openvpn/up-client
매우 기본적인 스크립트
#!/bin/sh
CONFIG_FILE=$1
( env ; echo CONFIG_FILE ${CONFIG_FILE} ) >> /var/log/openvpn-up-client.log
case "$username" in
(me)
echo 'push "route 192.168.168.168 255.255.255.255"' >>${CONFIG_FILE}
;;
(*)
echo 'push "route 192.168.169.169 255.255.255.255"' >>${CONFIG_FILE}
;;
esac
발췌남성용 OpenVPN
--클라이언트 연결 cmd
클라이언트 연결에서 cmd 명령을 실행합니다.
cmd는 스크립트(또는 실행 프로그램)에 대한 경로와 선택적으로 인수가 뒤따르는 경로로 구성됩니다.
경로와 인수는 작은따옴표나 큰따옴표로 묶거나 백슬래시로 이스케이프할 수 있으며 하나 이상의 공백으로 구분해야 합니다.
이 명령은 방금 인증된 클라이언트의 공개 이름과 IP 주소를 환경 변수로 전달합니다(아래 환경 변수 섹션 참조). 이 명령은 또한 새로 생성된 임시 파일의 경로 이름을 마지막 인수(cmd에 지정된 인수 뒤)로 전달하며, 이 명령은 동적으로 생성된 구성 파일 지침을 OpenVPN에 다시 전달하는 데 사용됩니다.
스크립트가 클라이언트 연결 시 서버에 적용할 동적 구성 파일을 생성하려는 경우 마지막 매개변수로 명명된 파일에 작성해야 합니다.
동적으로 생성된 구성 파일에 사용할 수 있는 옵션은 아래 --client-config-dir 옵션을 참조하세요.
스크립트의 반환 값이 중요합니다. 스크립트가 0이 아닌 오류 상태를 반환하면 클라이언트 연결이 끊어집니다.
답변2
나는 같은 문제에 직면했습니다. 경로를 반환하는 데이터베이스에서 저장 프로시저를 호출하는 스크립트를 작성했습니다. 귀하의 경우에는 API입니다. 그리고 이 경로를 file_list(sys.argv[1:])에 씁니다.
스크립트는 이를 serverConfig 의 옵션으로 전달합니다 /etc/openvpn/server.conf
. 다음 줄을 작성합니다.
스크립트 보안 2
클라이언트 연결 /path/to/your/script
Python 스크립트를 사용하고 append
스크립트에서 함수를 사용할 수 있습니다.
file_list.append("push \"route %s %s\"\n" % (your_vpn_route, "255.255.255.x"))