OpenVPN이 성공적으로 연결되면 스크립트를 어떻게 실행합니까? 연결되었을 때 스크립트가

VPN이 성공적으로 연결되었을 때 스크립트가 실행되도록 스크립트를 OpenVPN에 연결하려면 어떻게해야합니까?



답변

network-manager-openvpn이러한 기능을 제공하지 않으면 openvpn직접 사용해야 합니다.

패스 --script-security 2 --up /path/to/your/script연결 때에. 에 위치한 구성 파일을 사용하는 경우 /etc/openvpn/다음 줄을 구성 파일에 추가하십시오.

script-security 2
# run /etc/openvpn/up.sh when the connection is set up
up /etc/openvpn/up.sh

로부터 OpenVPN을 맨 :

-스크립트 보안 수준 [방법]
              이 지침은 OpenVPN의 사용에 대한 정책 수준의 제어를 제공합니다
              외부 프로그램 및 스크립트 낮은 수준의 값은 더
              제한적이고 값이 클수록 더 관대합니다. 에 대한 설정
              수평:

              0-외부 프로그램을 호출하지 않습니다.
              1-(기본값) ifconfig와 같은 내장 실행 파일 만 호출
              ip, route 또는 netsh.
              2-내장 실행 파일 및 사용자 정의 호출 허용
              스크립트.
              3-환경을 통해 암호를 스크립트에 전달할 수 있습니다
              변수 (잠재적으로 안전하지 않은).
       --up cmd
              성공적인 TUN / TAP 장치를 연 후 실행되는 셸 명령 (pre
              -사용자 UID 변경). up 스크립트는 다음을 지정하는 데 유용합니다
              개인용 IP 트래픽을 라우팅하는 라우팅 명령
              VPN 연결의 다른 쪽 끝에있는 서브넷
              터널.
스크립트 실행 순서
       --up TCP / UDP 소켓 바인드 및 TUN / TAP을 연 후 실행됩니다.
       --down TCP / UDP 및 TUN / TAP 종료 후 실행됩니다.

스크립트 실행에 대한 더 많은 이벤트가 있으며, 매뉴얼 페이지 에서 찾을 수 있습니다 .

작성 /etc/openvpn/up.sh하고 권한 (예를 들어, 755 또는 700)을 실행 제공합니다. IPv6 주소 및 경로 추가를위한 컨텐츠 예 (교육 목적으로 표시, 직접 복사하지 마십시오) :

#!/bin/sh
# add an IPv6 address to device $dev (environment variable)
ip -6 addr add 2001:db8::1:2/112 dev $dev
# and the IPv6 route for this net using gateway 2001:db8::1
ip -6 route add 2001:db8::1:0/112 via 2001:db8::1 dev $dev

up스크립트는 루트로 실행됩니다. UserGroup설정을 지정하지 않으면 OpenVPN은 down루트 와 같은 스크립트도 실행 합니다.


답변

질문에 : “VPN이 성공적으로 연결되었을 때 스크립트가 실행되도록 스크립트를 OpenVPN에 연결하려면 어떻게해야합니까?” Lekensteyn 이 훌륭한 해답을 제공 했음을 지적하고 싶습니다 . 그러나 그의 답변이 작성되었을 때, 우분투 시스템에서 openvpn을 시작하기 위해 openvpn 명령 줄 인수를 제공 해야하는 방법에 대한 명확성이 부족했습니다. 특히 재부팅 후 동일하게 작동합니다.


우분투에서 OpenVPN 명령 줄 인수 :

당연히, 유효한 법적 옵션을 사용하여 명령 행에서 openvpn을 시작할 수 있습니다. 그러나 우분투 컴퓨터에서 재부팅 후 동일한 명령 줄 인수로 openvpn을 시작하려면 파일 편집을 고려해야합니다 /etc/default/openvpn. 다음 줄을 검사하십시오.

# Optional arguments to openvpn's command line
OPTARGS="" 

로부터 지역 사회 OpenVPN을 man 페이지--script-security

-스크립트 보안 수준
    이 지침은 OpenVPN의 외부 사용에 대한 정책 수준의 제어를 제공합니다
    프로그램 및 스크립트. 낮은 수준의 값이 더 제한적이며 높을수록
    값이 더 관대합니다. 레벨 설정 :
0-외부 프로그램을 호출하지 않습니다.
1-(기본값) ifconfig, ip, route,
또는 netsh.
2-내장 실행 파일 및 사용자 정의 스크립트 호출을 허용합니다.
3-환경 변수를 통해 비밀번호를 스크립트에 전달하도록 허용
(잠재적으로 안전하지 않은).

v2.3 이전의 OpenVPN 릴리스도 방법 플래그를 지원하는 메소드 플래그를 지원했습니다.
OpenVPN은 외부 명령 및 스크립트를 호출해야합니다. 이것은 execve 일 수 있습니다.
또는 시스템. OpenVPN v2.3부터이 플래그는 더 이상 허용되지 않습니다. 대부분의 * nix
환경 execve () 접근 방식은 문제없이 사용되었습니다.

--up과 같은 일부 지시문을 사용하면 옵션을 외부 스크립트로 전달할 수 있습니다.
이 경우 스크립트 이름에 공백이 없어야합니다.
구성 파서는 스크립트의 위치를 ​​결정할 수 없기 때문에 질식합니다.
이름이 끝나고 스크립트 옵션이 시작됩니다.

의 약식 섹션과 결합 --up

--up cmd
    TUN / TAP 장치가 성공적으로 열린 후 cmd 명령을 실행하십시오 (사전 --user UID 변경).
    cmd는 스크립트 (또는 실행 프로그램) 경로로 구성되며 선택적으로
    인수로. 경로 및 인수는 작은 따옴표 또는 큰 따옴표 및 / 또는
    백 슬래시를 사용하여 이스케이프되며 하나 이상의 공백으로 구분해야합니다.

예:

openpvn server.conf가있는 컴퓨터의 /etc/default/openvpn파일 에는 다음 줄이 있습니다.

OPTARGS="
    --script-security 2
    --up /etc/openvpn/nat.sh
" 

또한 nat.sh는 개인 네트워크 트래픽을 openvpn 클라이언트에서 공용 인터넷으로 라우팅하기위한 네트워크 주소 변환을 설정합니다. 공용 WIFI 액세스 포인트를 신뢰하지 않는 경우에 좋습니다.


재부팅 후 예상대로 다시 시작하는 것 외에도 파일이 올바르게 구성된 경우 다음 /etc/openvpn/[client or server].conf과 같이 /etc/default/openvpnopenvpn을 시작하거나 중지 할 수 있습니다.

sudo service openvpn start
sudo service openvpn stop

사용할 수있는 다른 유용한 옵션은 service openvpn다음과 같습니다 cond-restart,force-reload,reload, restart,soft-restart, start, status, stop.


답변

그것이 꽤 오래된 스레드이므로 여전히 관심이 있는지 확실하지 않습니다. 여전히 NetworkManager를 사용하여 VPN에 연결하려는 경우 다음과 같은 간단한 udev 규칙을 추가 할 수 있습니다.

KERNEL=="vpn0", RUN+="/PATH_TO_THE_SCRIPT/SCRIPT_NAME"

VPN을 만든 후에 스크립트를 실행해야합니다.


답변

나는이 문제를 해결하기 위해 내 연구에서 답을 찾았고 가장 좋은 해결책은 다음과 같습니다 (openvpn 서버 사용).

실행할 스크립트를 작성하십시오.

# nano /etc/openvpn/up.sh
<file:contents>
#!/bin/sh

# export >> /var/log/openvpn/openvpn-up.log
D=`date "+%Y-%m-%d %H:%M"`
echo "[$D] ($local_port_1:$proto_1) $X509_0_CN: $trusted_ip => $ifconfig_pool_remote_ip" >> /var/log/openvpn/openvpn-up.log
</file>

다음 줄을 openvpn 구성에 추가하십시오 (보통 /etc/openvpn/server.conf). 위의 대답에서 서버가 시작될 때 사용되는 위아래로 사용되었습니다 (레스타트). 지시문 client-connect (및 client-disconnect)는 클라이언트가 연결 (연결 해제) 될 때 사용됩니다.

# nano /etc/openvpn/server.conf
<file:add>
script-security 2
client-connect /etc/openvpn/up.sh
</file>