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


50

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


클라이언트의 경우에 나는 추측한다? 어떤 소프트웨어를 사용하고 있습니까? OpenVPN 또는 래퍼 (예 : NetworkManager)?
Lekensteyn

@Lekensteyn, 래퍼 network-manger-openvpn.
Oxwivi

답변:


62

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루트 와 같은 스크립트도 실행 합니다.


openvpn을 직접 사용하는 방법을 모르는 경우 연결 유형 (예 : X509 인증서), 게이트웨이 포트, LZO 압축, TCP 강제, 탭 장치 사용, 암호, HMAC 및 TLS와 같은 현재 구성 세부 정보를 추가하십시오. IP 설정이 자동이 아닌 경우에도 언급하십시오. 개인 정보 보호를 위해 실제 주소를 남겨 두십시오.
Lekensteyn

좋아, OpenVPN을 직접 사용하기로 결정했지만 .conf 파일이 있지만 연결이 끊어지면 자동으로 다시 연결됩니까? 인터넷에 연결될 때마다 자동으로 연결하려면 어떻게해야합니까? 마지막으로 답변에서 언급 한 줄을 어디에 추가 해야하는지 이해하지 못했습니다.
Oxwivi

openvpn직접 사용하도록 답변을 확장했습니다 . 서버를 설정할 때 서버가 다운되었을 때 OpenVPN이 다시 연결을 시도한다는 것을 알았습니다. 네트워크 인터페이스가 다운 될 때 OpenVPN이 계속 시도되는지 확실하지 않습니다.
Lekensteyn

내 문제는 네트워크 인터페이스가 다운 될 때가 아닙니다. 인터넷 연결이 끊어지고 다시 회복되면 다시 연결하려고 시도합니다. 인터넷에 연결될 때마다 VPN에 연결하고 싶습니다.
Oxwivi

아, 그리고 스크립트가 모든 VPN 연결에 적용됩니까? 그리고 제발 회신 @Oxwivi 태그, 나는 그렇지 않으면 통보되지 않습니다.
Oxwivi

5

질문에 : "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.


3

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

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

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


1

나는이 문제를 해결하기 위해 내 연구에서 답을 찾았고 가장 좋은 해결책은 다음과 같습니다 (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>

로그 파일에 클라이언트 구성 이름을 어떻게 포함 하시겠습니까?
callisto
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.