openvpn에서 할당한 주소와 장치를 가져옵니다.

openvpn에서 할당한 주소와 장치를 가져옵니다.

tun0OpenVPN 클라이언트는 서버 연결을 위해 네트워크 인터페이스 장치(예: )를 동적으로 할당할 수 있으며 , 이는 클라이언트에 IP 주소를 동적으로 발급할 수 있습니다.

OpenVPN 클라이언트를 시작하고 서버에 대한 연결을 성공적으로 설정하는 쉘 스크립트가 있는 경우 스크립트에서 네트워크 인터페이스, 할당된 클라이언트 IP 주소 및 서버의 IP 주소를 어떻게 찾을 수 있습니까?

이상적인 대답은 가정과 추론 없이 OpenVPN 도구를 사용하여 이 데이터를 얻을 수 있는 방법을 제공하는 것입니다.

답변1

up스크립트를 사용하여 파일 시스템에 정보를 쓴 다음 스크립트에서 읽을 수 있습니다 .

증가시킴으로써

--script-security 2 --up "/path/to/up.sh /path/to/dir" 

호출되면 openvpnat에 대한 스크립트가 실행됩니다. /path/to/up.sh명령줄 인수를 받게 되며, 첫 번째 인수는 /path/to/dir호출하는 쉘 스크립트가 찾을 수 있도록 정보가 명시적으로 기록되는 위치가 됩니다. OpenVPN(man 페이지 참조)은 다음 매개변수를 다음과 같이 정의합니다.

tun_dev tun_mtu link_mtu ifconfig_local_ip ifconfig_remote_ip [ init | restart ]

따라서 다음 예제 스크립트는 지정된 디렉터리의 파일에 필요한 정보를 기록합니다.

#!/bin/sh
echo $2 > $1/interface
echo $5 > $1/ip

( 이 매개변수는 사용자 정의 스크립트를 --script-security허용하는 데 필요합니다 .)--up

클라이언트의 자체 IP 주소가 알려지면 다음과 같은 특정 가정을 기반으로 서버 주소를 추론할 수 있습니다.

  • 서브넷에서 사용 가능한 첫 번째 주소입니다(OpenVPN 설명서에 설명되어 있음).
  • 서버에서 사용하는 서브넷 마스크가 알려져 있습니다(CIDR 표기법).

그렇다면 이러한 가정을 해보면IP 계산도구를 사용하여 서버 주소를 반환할 수 있습니다.

ipcalc $(</path/to/dir/ip)/$netmask | grep HostMin | awk '{print $2}'

현재 넷마스크 사실은 내가 자동으로 발견할 수 있는 방법이 없는 한 사전에 합의되어야 합니다. 이 문제를 해결하는 답변을 보고 싶거나 스크립트 up나 패치워크 를 사용할 필요가 없는 질문에 답변하는 더 나은 방법이 있기를 바랍니다 ipcalc.

관련 정보